背景:业务中主要是TCP/SSL连接,要做四层负载均衡。
之前做负载均衡,调研了nginx(见之前的nginx实现后端服务负载均衡和nginx负载均衡监测后台服务状态)。
nginx作为一个应用,做四层负载均衡效率低。lvs是linux内核的,非应用,用它做四层负载均衡效率更高更合适。所以会见到lvs+nginx做四层七层负载均衡这种组合。
一、集群
一般我们遇到的:
 负载均衡集群
 高可用集群
和分布式的区别:
集群是一群机器做同样的事情,分布式是不同的机器负责不同的事情
二、负载均衡
常用的软件负载均衡:
 lvs 四层
 nginx(tengine)七层
 haproxy
硬件也有,不展开了。
三、LVS
1 应用方式
类似于nginx的应用方式。客户请求流量先到达lvs,再由lvs做负载均衡。
 举例:一台linux服务器启用lvs实现负载均衡的作用,其他的是业务服务器(RS)。
 我们主要在lvs服务器上面做配置。业务服务器可能会有额外的配置(除了ip,如何配置取决于lvs的负载均衡方式,比如,下面会介绍):
 在lvs上开启ipvs,配置ip、RS地址、负载均衡方式。
 业务服务器:配置ip
2 负载均衡模式
为了描述,定义:
| 名称 | 简写 | 
|---|---|
| 客户的ip | CIP | 
| lvs服务器对外的IP | VIP | 
| lvs服务器真实的IP | DIP | 
| 业务服务器的IP | RIP | 
| lvs服务器 | DS | 
请求Request流量都要经过DS:数据包的源地址一定是CIP;
 响应Response流量根据经过和不经过DS分为两类:
响应流量经过DS的两种模式:
都是lvs做nat转换,区别在于究竟NAT了什么部分:
 NAT
 请求包数据包源地址不变,NAT目的地址;响应包NAT请求地址
 请求:
 DS接收的数据包:源地址:CIP 目的地址:VIP
 发送给RS的数据包:源地址:CIP 目的地址:RIP
 响应:
 DS接收的数据包:源地址:RIP 目的地址:CIP
 发送给客户的数据包:源地址:VIP 目的地址:CIP
Full-NAT(不常用)
 请求包和相应包数据包源地址、目的地址都NAT
 请求:
 DS接收的数据包:源地址:CIP 目的地址:VIP
 发送给RS的数据包:源地址:DIP 目的地址:RIP
 响应:
 DS接收的数据包:源地址:RIP 目的地址:DIP
 发送给客户的数据包:源地址:VIP 目的地址:CIP
响应流量不经过DS的两种模式:
需要改变业务服务器的配置!
 业务服务器也都配置虚拟IP为VIP。
直接路由DR
 业务服务器要关闭对arp请求的响应。
有两种做法(分别见参考1和2)
1.绑定vip之后,配置忽略arp广播
ip addr add dev lo 192.168.246.160/32 #在lo接口上绑定VIP
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #忽略arp广播
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #匹配精确ip地址回包
2.创建一个dummy网卡
ip addr add dev dummy0 192.168.0.222/32
DS通过改变数据包的mac地址,将流量发给RS。
 请求:
 DS接收的数据包:源地址:CIP 目的地址:VIP
 数据帧:目的MAC地址:DS的MAC地址
 发送给RS的数据包:源地址:CIP 目的地址:VIP
 数据帧:目的MAC地址:RS的MAC地址
响应:RS直接发给客户!
 RS发送的数据包:源地址:VIP 目的地址:CIP
IP隧道 IP tunnel(不常用)
 RS需要支持ipip协议,必须加载ipip模块,解封装数据包来获得原始包。
 集群服务器如果是虚拟机,那么其物理机器上不能有ipip隧道设备
DS通过将原请求数据包在封装一层,发给RS。RS解封装得原数据包,直接回复响应给客户。
请求:
 DS接收的数据包:源地址:CIP 目的地址:VIP
 发送给RS的数据包:源地址:DIP 目的地址:RIP 载荷内容:接收的数据包
响应:RS直接发给客户!
 RS发送的数据包:源地址:VIP 目的地址:CIP
特性比较
负载
 响应过lvs可能是瓶颈,所以大流量的情况下考虑响应不过lvs的两种。
 服务器结点数目
 NAT 10-20
 IP tunnel 100
 DR >100
网络配置要求
 NAT 模式 和 Full-NAT模式:只需要DS一个有公网ip作为VIP,RS和DS三层可达。
 DR模式:只需要一个有公网ip作为VIP,要求负载均衡器的网卡必须与物理网卡在一个物理段上
 IP tunnel模式:只需要一个有公网ip作为VIP,RS需要支持IPTUNNEL协议
网关
 NAT : DS
 DR和IP tunnel:自己的路由器
RS网络和DS的关系:
 NAT:局域网与外部网络
 DR:DS和RS在同一个子网,RS也配置VIP
 IP tunnel:DS和RS可以不在一个子网
DS和RS的端口对应关系
 NAT模式下,这两个端口可以不相同,DS会做好转换
 DR模式下,因为不会对传输层做修改,所以这两个端口必须相同
3 原理
ipvs
工作在内核,处理请求转发。
 how:
 “IPVS通过在Netfilter框架中的不同位置注册自己的处理函数来捕获数据包,并根据与IPVS相关的信息表对数据包进行处理,按照IPVS规则中定义的不同的包转发模式,对数据包进行不同的转发处理。”
IPVS相关的信息表:用户维护
 包转发模式:负载均衡模式
八种负载均衡算法
管理工具ipvsadm
命令行工具,用户空间
 向IPVS中写入规则
一些命令:
// 添加vip
ip addr add dev ens33 192.168.1.10/32
// 添加一个虚拟服务器
ipvsadm -A -t 192.168.1.10:80 -s rr
-A:append:添加一个虚拟服务器
 -t:tcp-service:对tcp协议作转发
 -s:schduler:均衡算法
 rr:round robin:将工作平均分配给可用的真实服务器的算法
// 添加后端服务器
ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.101:80 -g -w 1
-a:append:添加一个后端真实服务器
 -t:tcp-service:转发tcp协议
 -r:real-server:后端真实服务器地址
 -w:weight:权重
 -g:Direct Routing,默认模式,也成网关模式(gatewaying);
 -m:NAT,也称作伪装模式(masquerading)。
 -i:IP Tunneling,也称作 ipip 封包模式(ipip encapsulation);
四、其他
LVS双机热备方案,如 LVS + Keepalived
参考:
- 负载均衡(四层) LVS(看完就能去上班)
- 《一篇搞懂》系列之二——IPVS
- LVS负载均衡高可用解决方案