简介
LVS是Linux虚拟服务器,LVS由用户空间的ipvsadm和内核空间的IPVS组成。ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工作。LVS是一个高效的负载均衡器
LVS的特点
- 高并发连接:LVS基于内核网络层面工作,有超强的承载能力和并发处理能力
- 成本低:只需要一台服务器就能免费部署使用
- 配置简单:仅需要几行命令就可完成配置
- 算法多样:支持多种算法,可根据不同场景灵活使用
- 工作模型:根据不同的场景,可以使用不同的工作模式来高效的处理问题
工作过程
- 客户端发送的web请求直接发送到LVS负载均衡器上,LVS通过自己预先设计的算法将请求发送给后端的某web服务器
- 后端的web服务器连接的数据是一样的,所以不管访问的是哪台服务器最后访问的数据都是一样的
- 最后根据LVS工作模式的不同,服务器会以不同的方式将数据发送回客户
体系架构
LVS集群系统有三个部分组成
- 最前端的负载均衡层DS
——由负载均衡调度器组成,LVS就安装在负载均衡调度器上
——也可以是一个真实的server,主要作用类似于一个路由器
——含有完成LVS功能所设定的路由表,通过路由表将请求发送给服务器集群层的应用服务器上
——在负载均衡层也要安装对负载均衡器健康检测的监控模块来保证负载均衡层的安全 - 中间的服务器群组层RS
——由一组实际运行的机器组成,真实服务器可以是WEB服务器、FTP服务器等众多服务器中的一个或者多个
——每个RS之间通过高速网络连接
——可以使用所有的系统平台,Linux、Windows等 - 最底层的数据共享存储层
——是为所有RS提供共享存储空间和内容一致的存储区域
——物理实现:一般由磁盘阵列设备组成
——为了提供内容的一致性,一般可以通过网络共享文件系统实现
调度算法
- LVS的调度算法决定了如何在集群节点之间分步工作负荷
- 当DS收到客户端访问VIP上的集群服务的入栈请求时,DS就要决定哪个节点来处理请求
调度算法类型:
- 固定调度算法:rr、wrr、dh、sh
- 动态调度算法:wlc、lc、lblc、lblcr
调度算法一般产生的环境选择:
- 一般的网络服务,如http,mail,mysql等
rr:基本轮询调度
wlc:加权最小连接调度
wrc:加权轮询调度 - 基于局部性的最小连接lblc和带复制的给予局部性最小连接lblcr主要适用于web cache和DB cache
- 源地址散列调度SH和目标地址散列调度DH可以结合使用在防火墙集群中,可以保证整个系统的出入口唯一
工作原理
- 当用户向负载均衡调度器发送请求,调度器会将请求发往内核空
- PREROUTING链首先会接收到用户请求,判断目标IP确定是否为本机,是的话将数据包发往INPUT链
- IPVS是工作在INPUT链上的,当请求到达INPUT链时,IPVS会将用户请求和自己定义好的集群服务进行比较,如果用户请求的就是定义的集群服务,那么IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链
相关术语
名称 | 说明 |
---|---|
ipvsadm | 用户空间的命令行工具,用于管理集群服务及RS等 |
IPVS | 工作在内核上的INPUT链中,可根据用户定义的集群实现请求转发 |
VS | 虚拟服务,LVS就是在Linux上搭建虚拟服务器 |
DS | Director Server,前段负载均衡器 |
RS | Real Server,后端真实的工作服务器 |
VIP | 用户请求的目标IP |
DIP | Director Server IP,主要用于内部主机通讯的IP地址 |
RIP | Real Server IP,后端服务器的IP地址 |
CIP | Client IP,访问客户端的IP地址 |
LVS集群模式
LVS-NAT
- NAT即为网络地址转换,其作用是通过数据报头的修改,使得位于企业内部的私有IP地址可以访问外网,以及外部用户可以访问位于公司内部的私有IP主机
拓扑图
实现原理
- 客户端发送请求到DS,源地址是CIP,目标地址是VIP(虚拟IP)
- DS将客户端发送的请求报文的目标地址修改为RIP,然后转发出去,让其去访问真实的后台服务器RS
- RS收到请求报文,此时的报文的源地址是CIP,RS对请求进行处理
- RS处理完请求后将报文返回给DS,此时返回的报文源地址为RIP,目标地址为CIP
- DS收到请求后,会将源地址修改为VIP返回给客户端
特点:
- RS和DS上的DIP应该使用私用地址,且RS的网关要指向DIP,确保报文可以发送回去
- 请求和相应报文都要经过DS,在及高负荷的场景中,DS可能会成为系统瓶颈
- 支持端口映射
- RS可以使用任意的OS
- RS的RIP和DS的DIP必须在同一IP网络
- 工作在网络层
LVS-DR
- 用直接路由技术实现虚拟服务器
- 通过为请求报文封装一个MAC首部进行转发
拓扑图
实现原理
- 客户端发送的请求会先到达内核空间的PREROUTING链,报文源地址为CIP和CIP-MAC,目标地址为VIP和VIP-MAC
- PRERROUTING链检查数据包的目标IP是否为自己,若是本机则将数据包发送给INPUT链
- 在INPUT链上面工作的IPVS会判断数据包的请求是否为集群服务,若是则将数据包中的源MAC地址修改为DIP的MAC地址,将目标的MAC地址修改为RIP的MAC地址
- 由于DS与RS在同一个网络中,所以是通过数据链路层来传输的(需要用MAC地址来识别)
- POSTROUTING链检查目标的MAC地址为RIP的MAC地址,将数据包发送到RS上
- RS发现请求报文的MAC地址是自己的MAC地址,接收报文进行处理
- 处理完后将响应报文通过lo接口发送给ens33网卡然后发出,相应报文的源地址为VIP和VIP-MAC,目标地址是CIP和CIP-MAC
特点:
- DS与RS在同一网络中(与NAT的DS的DIP与RS的RIP不同)
- 请求报文经过DS,但是相应报文不经过DS,可以解决NAT模式中DS瓶颈的问题
- DS与RS之间由于是通过二层(数据链路层)转发的报文,所以不需要IP参与,所以请求报文的目标IP和源IP不发生变化,响应报文直接以VIP的身份将报文返回给客户端,不需要再通过DS获取CIP
- 通过二层转发的报文不支持端口映射
LVS-TUN
- 在原有的IP报文外在封装一层IP首部
- 内层源IP为CIP,目标IP为VIP
- 外层源IP为DIP,目标IP为RIP
- 工作在三层(网络层)
拓扑图
实现原理:
- 客户端的请求报文先发送到DS的PREROUTING链上,数据包的源地址为CIP,目标地址为VIP
- PREROUTING链首先会接收到用户请求,判断目标IP确定是否为本机,是的话将数据包发往INPUT链
- 工作在INPUT链上的IPVS会判断数据包的请求是否为集群服务器,若是,则将报文的外部分装一层IP报文,封装的IP报文的源IP为DIP,目标IP为RIP
- INPUT链将封装后的报文发送给POSTROUTING链,POSTROUTING链根据封装的报文目标IP将数据包转发给对应的RS
- RS收到报文后解开外面的封装,发现里面还有一层IP首部,目标是自己lo接口的IP地址VIP
- RS处理报文,将响应报文通过lo接口发送给ens33网卡,然后发回给客户端,此时的源地址为VIP,目标地址为RIP
特点:
- DIP、VIP、RIP都应该是公网地址
- RS的网关不能指向DIP,因为VIP与DIP不在同一网络
- 请求报文要经过DS,响应报文不经过DS,可以减少DS的压力
- 不支持端口映射
- RS的操作系统必须支持隧道功能