您现在的位置是:首页 >技术教程 >LVS的NAT模式及其DR模式网站首页技术教程
LVS的NAT模式及其DR模式
简介LVS的NAT模式及其DR模式
1. 对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,比较其各自的优势 。
DR 模式
负载各节点服务器通过本地网络连接,不需要建立专用的IP隧道
原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求数据包的目标MAC地址改成后端真实服务器的MAC地址(R-MAC)。真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器。
优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。
缺点:需要负载均衡器与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。
NAT模式:
原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP)。真实服务器响应完请求后,查看默认路由,把响应后的数据包发送给负载均衡器,负载均衡器在接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。
优点:集群中的服务器可以使用任何支持TCP/IP的操作系统,只要负载均衡器有一个合法的IP地址。
缺点:扩展性有限,当服务器节点增长过多时,由于所有的请求和应答都需要经过负载均衡器,因此负载均衡器将成为整个系统的瓶颈。
两者的区别:
DR模式不使用调度器为公司网关,而是路由设备,调度器只是分配访问的请求任务而回应的web页面,不经过调度器,直接通过网络设备回应,不容易造成阻塞而且所有节点都使用VIP地址。
在nat模式群集中,LSV负载均衡调度器是所有节点的访问internet的网关服务器其外网口地址也最为整个群集的VIP地址,调度器是整个公司网关任何请求都要经过调度器,包括回应的。
2. 基于 CentOS 7 构建 LVS-DR 群集。
1、构建LVS-DR集群的步骤(理论)
实验环境准备:
DR 服务器 | 192.168.80.30 |
---|---|
Web 服务器1 | 192.168.80.10 |
Web 服务器2 | 192.168.80.20 |
vip | 192.168.80.188 |
客户端 | 192.168.80.200 |
yum install ipvsadm
配置LVS负载均衡服务
(1)手动添加LVS转发
1)用户访问:www.uolookking.com-->vip 192.168.80.188 ##==>这个是在DNS配置
hzitedu域的DNS记录设置
www IN A 192.168.80.188
没有配置DNS可以使用hosts文件配置方式来实现域名解析。
192.168.80.188 www.hzitedu.com
2)配置LVS虚拟IP(VIP)
[root@Directory ~]# ifconfig eth1:110 192.168.80.188 netmask 255.255.255.0 up
#这里采用子接口配置
3)手工执行配置添加LVS服务并增加两台RS
[root@Directory ~]# ipvsadm -C
[root@Directory ~]# ipvsadm --set 30 5 60
[root@Directory ~]# ipvsadm -A -t 192.168.80.188:80 -s wrr -p 20
[root@Directory ~]# ipvsadm -a -t 192.168.80.188:80 -r 192.168.80.10:80 -g -w 1
[root@Directory ~]# ipvsadm -a -t 192.168.80.188:80 -r 192.168.80.20:80 -g -w 1
[删除方法]
# ipvsadm -D -t 192.168.80.188:80 -s wrr
# ipvsadm -d -t 192.168.80.188:80 -r 192.168.80.10:80
[相关参数说明]
[root@Directory ~]# ipvsadm –help
-A 添加虚拟服务器
-t 设置群集地址(VIP,Virtual IP)
-s 指定负载调度算法
-a 添加真实服务器
-d 删除真实服务器
-r 指定真实服务器(Real Server)的地址
-m 使用NAT模式;-g、-i分别对应DR、TUN模式
-w 为节点服务器设置权重,默认为1
4)查看之前配置
[root@Directory ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.80.188:80 wrr persistent 20
-> 192.168.80.10:80 Route 1 0 0
-> 192.168.80.20:80 Route 1 0 0
(2)手工在RS端绑定VIP
每台real server端执行
[root@RS1 ~]# ifconfig lo:110 192.168.80.188 netmask 255.255.255.255 up
添加本机访问VIP的路由
[root@RS1 ~]# route add -host 192.168.80.188 dev lo
每个集群节点上的环回接口lo设备上绑定VIP地址(其广播地址是其本身,子网掩码是255.255.255.255,采取可变长掩码方式把网段划分成只含一个主机地址的目的是避免IP地址冲突)允许LVS-DR集群中的集群节点接受发向该VIP地址的数据包,这会有一个非常严重的问题发生,集群内部的真实服务器将尝试回复来自正在请求VIP客户端的ARP广播,这样所有的真实服务器都将声称自己拥有该VIP地址,这时客户端将直接发送请求数据包到真实服务器上,从而破坏了DR集群的方法。因此,必须要抑制真实服务器的ARP广播。
(3)手工在RS端抑制ARP响应
每台real server端执行
调整内核参数,关闭arp响应
[root@RS1 ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@RS1 ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@RS1 ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@RS1 ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
中文说明:
arp_ignore- INTEGER
定义对目标地址为本地IP的ARP询问不同的应答模式
0 -(默认值):回应任何网络接口上对任何本地IP地址的arp查询请求。
1 – 只回答目标IP地址是来访网络接口本地地址的ARP查询请求。
2 – 只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内。
3 – 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应。
4-7 –保留未使用。
8 – 不回应所有(本地地址)的arp查询。
arp_announce - INTEGER
对网络接口上,本地IP地址发出的,ARP回应,做出相应级别的限制;
确定不同程度的限制,宣布对来自本地源IP地址发出ARP请求的接口
0 -(默认)在任意网络接口(eth0,eth1,lo)上的任何本地地址
1 – 尽量避免不在该网络接口子网段的本地地址做出arp回应,当发起ARP请求的源IP地址是被设置应该经由路由到达此网络接口的时候很有用,此时会检查来访IP是否为所有接口上的子网段内ip之一。如果该来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理。
2 – 对查询目标是要最适当的本地地址,在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址。首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址。如果没有合适的地址被发现,将选择当前的网络发送接口或其他的有可能接受到该ARP回应的网络接口来进行发送。限制了使用本地的vip地址作为优先的网络接口。
提示:也可以使用arptables实现抑制arp
arptables -A INPUT -d $VIP -j DROP
arptables -A OUTPUT -s $VIP -j mangle --mangle-ip-s $RIP
# arptables-save > /etc/sysconfig/arptables
# systemctl enable --now arptables
测试 LVS 群集
在客户端使用curl访问 http://192.168.80.188/
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。