LVS 四层负载均衡
OSI七层和TCP/IP四层模型

四层和七层负载均衡的定义
四层:所谓四层就是基于IP+端口的负载均衡
七层:所谓七层就是基于应用层(URL等)信息的负载均衡
七层负载均衡时,数据包在经过TCP/IP内核协议栈后会进入用户空间,然后根据端口号交给不同的用户程序进行处理,如下图:

四层负载均衡不会进入用户空间,在内核空间处理完就转发出去。

四层和七层负载均衡对比
| 四层负载均衡 | 七层负载均衡 | 
|---|---|
| 在大型站点使用,接入层最前端 | 中小站点 | 
| 结合四层+七层使用 | 只使用七层负载均衡 | 
优缺点
- 四层比七层可以承载更大的并发量,大型站点使用
- 七层可以实现更为复杂的负载均衡控制,比如:基于URL、基于Session、动静分离等
- 七层会占用大量的CPU事件,更耗费性能,所以承载的并发量小
LVS介绍
LVS的组成


LVS相关术语
- DS Director Server 目标服务器,即负载均衡器
- RS Real Server 真实服务器,即后端服务器
- VIP 直接面对用户的IP地址,通常为公网IP地址
- DIP Director Server IP 主要用于和内部主机通信的IP地址
- RIP Real Server IP 后端真实服务器的IP地址
- CIP Client IP 客户端IP
LVS类型
- NAT 修改目标IP地址为后端的RealServer的IP地址
- DR 修改目标MAC地址为后端的RealServer的MAC地址
- TUNNEL 较少使用,常用与于异地容灾
LVS NAT模型原理
NAT是Network Address Translation 网络地址转换
LVS NAT:指修改目标IP地址为挑选出新的RS的IP地址,即请求进入负载均衡器时做DNAT,响应出负载均衡器时做SNAT
LVS NAT模型图解:

LVS NAT的特性:
- RS必须使用私有地址,并且将网关指向DS的DIP(否则数据包无法响应)
- RIP和DIP必须为同一网段内
- 支持端口映射(DS可以设为80映射到RS的8080)
- RS可以使用任意操作系统,例如Linux、UNIX、Windows等
- 请求和响应报文都要经过DS,高负载场景中,DS易成为瓶颈
ipvsadm的使用
ipvsadm是可以在用户空间给ipvs编写规则,常用的命令参数如下:
- 集群服务相关 - 1 
 2
 3
 4- -A 添加集群服务 
 -E 修改集群服务
 -D 删除集群服务
 —s 指定调度算法,例如rr/wrr/lc/wlc等
- RS相关 - 1 
 2
 3
 4
 5
 6- -a 向指定的集群服务添加RS 
 -r 指定RS的IP地址,包含IP:PORT
 -g|-i|-m 指定LVS类型,分别为DR|TUN|NAT
 -w 指明RS的权重
 -e 修改指定的RS属性
 -d 删除RS
- 管理相关 - 1 
 2
 3
 4
 5- -C 清空集群服务 
 -L 查看IPVS规则
 -Z 计数器清零
 -S 使用ipvsadm -S保存规则到磁盘
 -R 使用ipvsadm -R从磁盘载入规则
LVS DR模型
DR:Direct Routing直接路由
LVS DR:将请求报文的目的MAC地址设定为选出来的RS的MAC地址,即做MAC地址转换

arp内核参数
在配置DR模型时,RS上会配置VIP地址,但是不能被客户机学习到,所以要修改内核arp参数,具体修改的arp内核参数如下:
arp_ignore 控制系统在收到外部的arp请求时,是否要返回arp响应
arp_announce 控制系统在对外发送arp请求时,如何选择arp请求数据包的源IP地址
- arp_ignore 
 0 响应任意网卡上接收到的对本机IP地址的arp请求
 1 只响应目的IP地址为接收网卡所配置IP地址的arp请求
 2 只响应目的IP地址为接收网卡所配置IP地址的arp请求,并且arp请求的源IP必须和接收网卡同网段
- arp_announce 
 0 允许使用任意网卡上的IP地址做为arp请求的源IP
 1 尽量避免使用不属于该发送网卡子网的本地地址做为发送arp请求的源IP地址
 2 忽略IP数据包的源IP地址,选择该网卡上最合适的本地地址做为arp请求的源IP地址
LVS DR的特性
- Direct 和 RS的所有节点必须位于同一物理网络中
- RS不能将网关指向Director的DIP
- 不支持端口映射
- RS在lo接口上配置VIP
- 请求报文经由DS转发,但响应必须不能经过DS(由于响应不用经过DS,所以性能比NAT更高)
DR和NAT模型对比
NAT优缺点
- NAT模型支持任意操作系统,配置简单
- NAT模型适用小规模集群环境,后端RS通常在5-20个
- 扩展有限,并发大场景下,DS易成为性能瓶颈
DR优缺点
- 配置复杂
- 客户端请求必须路由至DS,在路由器上配置静态地址绑定时,未必有权限
- 由于只有请求包经过DS,因此性能很高,生产环境广泛使用
- 只支持部分操作系统
- DS和RS必须在同一物理网段内,不能有路由器隔离
- 适用于大并发业务环节,此模型多为互联网公司生产首选
搭建Nginx集群
搭建MySQL集群



- 技术要点总结
- Real Server不能将网关指向Director的DIP
- RS上关闭ARP响应功能(arp_ignore)
- RS响应数据包必须使用lo上配置的VIP(arp_announce+强制路由)
- VIP在DS上配置到实体网卡别名上,在RS上则配置到lo别名上
配置DS的自动化脚本
| 1 | 
 | 
配置RS的自动化脚本
| 1 | 
 | 
- route命令详解
- 配置网卡别名
虚拟路由冗余协议VRRP
下图是VRRP的示例图:

VRRP实现一个虚拟路由器的功能,在后边的Master和Backup两台设备上可以进行配置,当Master出现故障后,可以立即转移到Backup上继续提供服务
核心功能如下:
- 虚拟路由器:有一个Master和多个Backup组成
- Master路由器 : 实际承载报文转发的节点,主节点
- Backup路由器:主节点故障后转移节点,备用节点
- 优先级:VRRP根据优先级确定主备节点角色(通过配置优先级的值)
- 虚拟IP地址:虚拟路由对外提供服务的IP地址
- IP地址拥有者:真实提供服务的节点,通常为主节点
- 虚拟MAC地址:回应ARP请求时使用的虚拟MAC地址
KeepAlived功能
KeepAlived就是VRRP的实现,具体使用如下:
- 实现服务器的故障转移
- 通常用于对负载均衡器做高可用
KeepAlived架构图:
- vrrp stack vrrp协议的实现
- ipvs wrapper 为集群内的节点生成ipvs规则
- checkers 对集群内所有的RS做健康状态检测
- 控制组件 配置文件解析和加载
KeepAlived适用场景:
- 高可用LVS,高可用服务
- RS健康状态检测
- 编写脚本实现服务启动/停止
- 生成ipvs规则
- 虚拟IP的转移
在部署环境时需要设置关闭下边的服务:
setenforce
firewalled
yum install keeplived
