LVS-DR
LVS模式
IP Tunneling
Director(分发器) 分配请求到不同的 real server。 real server 处理请求后直接回应给用户,这样director 负载均衡器仅处理客户机与服务器的一半连接。 IP Tunneling 技术极大地提高了 Director的调度处理能力,同时也极大地提高了系统能容纳的最大节点数,可以超过 100 个节点。 real server 可以在任何 LAN 或 WAN 上运行,这意味着允许地理上的分布,这在灾难恢复中有重要意义。服务器必须拥有正式的 IP 地址用于与客户机直接通信,并且所有服务器必须支持 IP 隧道协议。
Direct Routing
与 IP Tunneling 类似,负载均衡器仅处理一半的连接,避免了新的性能瓶颈,同样增加了系统的可伸缩性。 Direct Routing 与 IP Tunneling 相比,没有 IP 封装的开销,但由于采用物理层(修改 MAC地址)技术,所有服务器都必须在一个物理网段。
转发流程
- 此时客户端通过公网访问Director对外提供的VIP地址 数据帧封装如下表
源IP | 目的IP | 源MAC | 目的MAC |
---|---|---|---|
Client:-IP 192.168.0.143 | Director-VIP 192.168.0.125 | Client-MAC F4:96:34:8A:A5:1B | Director-VIP-MAC 00:0C:29:00:17:0D |
2.分发器通过算法将数据转发给后端节点 例如此时转发给Node1 数据帧封装如下表
源IP | 目的IP | 源MAC | 目的MAC |
---|---|---|---|
Client:-IP 192.168.0.143 | Node1-VIP 192.168.0.125 | Client-MAC F4:96:34:8A:A5:1B | Node1-VIP-MAC 00:0C:29:97:BF:13 |
3.此时Node1解开数据包发现目的IP(VIP)是本机地址 即会进行数据解包 经过处理之后重新进行数据包封装返回给客户端 此时数据帧如下
源IP | 目的IP | 源MAC | 目的MAC |
---|---|---|---|
Node1-VIP 192.168.0.125 | Client-IP 192.168.0.143 | Node1-VIP-MAC 00:0C:29:97:BF:13 | Client-MAC F4:96:34:8A:A5:1B |
总结:
- 客户端将数据转发给Director的VIP地址
- Director通过算法将数据转发给后端服务器节点
- 后端服务器节点进行数据响应 此时Client与Director处于同一网段则客户端则可以直接收到该报文 如果跨网段则将数据发送给我网关 由网关经过路由转发给ISP通过ISP进行转发
- 在hash table中记录连接信息
- Client-->Director---Node--Client
LVS-DR优点/缺点
优点
- 后端节点基于二层转发效率比三层转发效率高
- 后端节点进行数据回复的时候无需经过分发器 减少分发器的压力
缺点
- 由于其基于二层转发因此必须保证后端节点处于同一网段以及同一广播域灵活性较差
- 如果节点过多服务器需要维护大量的ARP表项浪费服务器资源
思考点
-
为什么需要在后端服务器节点配置VIP地址
因为客户端访问目的地址是VIP地址 必须让后端节点能接受这个包 如果后端节点本地没有VIP这个地址 则数据会被丢弃
-
能否在出口网卡上配置VIP地址
不可以在出口网卡配置VIP地址 否则会导致Client/GATEWAY之间的ARP表混乱 导致分发器不能正常工作
-
RealServer为什么需要抑制ARP
因为分发器与后端节点都含有VIP地址 在一个网段之中不可能有重复地址 因此需要抑制ARP让其余节点不能发行这个地址
LVS-DR配置
实验环境
Hostname | IP | DR |
---|---|---|
LVS | VIP:192.168.0.125/24 DIP:10.1.1.1/24 |
Yes |
Node1 | VIP:192.168.0.125/24 DIP:10.1.1.2/24 |
No |
Node2 | VIP:192.168.0.125/24 DIP:10.1.1.4/24 |
No |
Director配置
安装
[root@LVS ~]# systemctl stop firewalld.service && setenforce 0 && iptables -F
[root@LVS ~]# yum install ipvsadm # 安装LVS
规则
[root@LVS ~]# ipvsadm -A -t 192.168.0.125:80 -s rr
[root@LVS ~]# ipvsadm -a -t 192.168.0.125:80 -r 10.1.1.2 -g
-g:指定DR模式
[root@LVS ~]# ipvsadm -a -t 192.168.0.125:80 -r 10.1.1.4 -g
Node节点配置
[root@Node1 ~]# yum install -y httpd
[root@Node1 ~]# systemctl restart httpd
[root@Node1 ~]# echo "Node1节点" > /var/www/html/index.html
[root@Node2 ~]# yum install -y httpd
[root@Node2 ~]# systemctl restart httpd
[root@Node2 ~]# echo "Node2节点" > /var/www/html/index.html
# 节点都添加如下配置
[root@Node1 ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore # 只回答目标 IP 地址是访问本网络接口( eth0)的 ARP 查询请求。
[root@Node1 ~]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce # 对查询目标使用最适当的本地地址
[root@Node1 ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@Node1 ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
[root@Node1 ~]# sysctl -p # 配置生效
ps:
'''
arp_ignore 为: 1 # 只回答目标 IP 地址是访问本网络接口( eth0)的 ARP 查询请求。
这样理解:
在设置参数的时候将 arp_ignore 设置为 1,意味着当别人的 arp 请求过来的时候,如果接收的网卡设备
上面没有这个 ip,就不做出响应,默认是 0,只要这台机器上面任何一个网卡设备上面有这个 ip,就响应
arp 请求,并发送 mac 地址。
arp_announce ( 宣告) 为 2
2 - 对查询目标使用最适当的本地地址。例如,如果在 eth0 接口上接受到了一个 VIP 的 arp 请求包。内
核判断这个 VIP 地址是不是 eth0 接口上的 IP 一样。如果一样,则回复这个包。如果不一样,就丢弃不回
应
'''
页面测试
# 模拟节点故障
[root@Node2 ~]# systemctl stop httpd
[root@Node1 ~]# systemctl stop httpd
调度模式
-s rr | 轮询法 |
---|---|
-s wrr | 权重轮询法 |
-s lc | 最少连接法 |
-s wlc | 带权重的最少连接法 |
-s lblc | 基于本地的最少连接法 |
-s dh | 目标散列发 |
-s sh | 源散列发 |
-s sed | 最短预期延迟法 |
-s nq | 永不排队法 |
调度算法实验
wrr
# 此时Node2的权重是Node1权重两边 因此分发数量为Node1的二倍
[root@LVS ~]# ipvsadm -At 192.168.0.125:80 -s wrr
[root@LVS ~]# ipvsadm -at 192.168.0.125:80 -r 10.1.1.2 -g -w 1
[root@LVS ~]# ipvsadm -at 192.168.0.125:80 -r 10.1.1.4 -g -w 2
# 此时Node1权重为0 则Node1不会被分发请求
[root@LVS ~]# ipvsadm -At 192.168.0.125:80 -s wrr
[root@LVS ~]# ipvsadm -at 192.168.0.125:80 -r 10.1.1.2 -g -w 0
[root@LVS ~]# ipvsadm -at 192.168.0.125:80 -r 10.1.1.4 -g -w 2
lc
[root@LVS ~]# ipvsadm -At 192.168.0.125:80 -s lc
[root@LVS ~]# ipvsadm -at 192.168.0.125:80 -r 10.1.1.2 -g
[root@LVS ~]# ipvsadm -at 192.168.0.125:80 -r 10.1.1.4 -g