目录
一、LVS-DR模式
Director Server作为群集的访问入口,但不作为网关使用,后端服务器池中的Real Server与Director Server在同一个物理网络中,发送给客户机的数据包不需要经过Director Server。为了响应对整个群集的访问,DS(前端负载均衡节点服务器)与RS(后端真实服务器)都需要配置有VIP地址。
每个Real Server上都有两个IP:VIP(负载均衡对外提供访问的 IP 地址)和RIP(负载均衡后端的真实服务器 IP 地址),但是VIP是隐藏的,就是不能提供解析等功能,只是用来做请求回复的源IP的,Director上只需要一个网卡,然后利用别名来配置两个IP:VIP和DIP(负载均衡与后端服务器通信的 IP 地址),在DIR接收到客户端的请求后,DIR根据负载算法选择一台rs sever的网卡mac作为客户端请求包中的目标mac,通过arp转交给后端RS serve处理,后端再通过自己的路由网关回复给客户端。
二、数据流向
- 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
- PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
- IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址
- 由于DS(调度服务器)和RS(节点真实服务器)在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。
- RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP
- 响应报文最终送达至客户端
三、DR特性
1、DR模式的特点
- Director Server 和 Real Server 必须在同一个物理网络中
- Real Server 可以使用私有地址,也可以使用公网地址,如果使用公网地址,可以通过互联网对 RIP 进行直接访问
- Director Server作为群集的访问入口,但不作为网关使用
- 所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server
- Real Server 的网关不允许指向 Director Server IP,即Real Server发送的数据包不允许经过 Director Server
- Real Server 上的 lo 接口配置 VIP 的 IP 地址
2、DR模式注意点
- 保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS。
- 解决方案是:修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求。
- arp_ignore=1表示系统只响应目的IP为本地IP的ARP请求。
- arp_announce=2表示系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址。
3、DR的优点和缺点
优点
负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为 超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用VS-DR方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能使得整个 Virtual Server能达到1G的吞吐量。甚至更高;
缺点
需要所有的DIR和RIP都在同一广播域;不支持异地容灾。
四、DR中的ARP问题
问题一
在LVS-DR负载均衡集群中,负载均衡与节点服务器都要配置相同的VIP地址,势必会造成各服务器ARP通信紊乱,ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会接收ARP广播,只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播
解决方案
对节点服务器进行处理,使其不响应针对VIP的ARP请求,使用虚接口lo:0承载VIP地址,设置内核参数arp_ ignore=1: 系统只响应目的IP为本地IP的ARP请求
问题二
RealServer返回报文(源IP是VIP)经路由器转发,重新封装报文时,需要先获取路由器的MAC地址
发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP) 作为ARP请求包中的源IP地址,而不使用发送接口的IP地址,路由器收到ARP请求后,将更新ARP表项,原有的VIP对应Director的MAC地址会被更新为VIP对应RealServer的MAC地址,导致Director的VIP失效
解决方案
对节点服务器进行处理,设置内核参数arp_ announce=2,系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
以上问题需要修改内核配置
修改 /etc/sysctl.conf 文件
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
五、DR LVS负载均衡群集部署
1、环境准备
DR 服务器:192.168.169.4
Web 服务器1:192.168.169.201
Web 服务器2:192.168.169.202
vip:192.168.169.200
2、配置网卡,并重启网络
##关闭防火墙和增强机制
[root@zrk4 ~]# systemctl stop firewalld
[root@zrk4 ~]# systemctl disable firewalld
[root@zrk4 ~]# setenforce 0
setenforce: SELinux is disabled
##安装ipvsadm工具
[root@zrk4 ~]# yum install -y ipvsadm
##配置虚拟IP地址
[root@zrk4 ~]# cd /etc/sysconfig/network-scripts/
3、调整proc的响应参数
##调整/proc的响应参数
[root@zrk4 network-scripts]# vim /etc/sysctl.conf
##刷新配置
[root@zrk4 network-scripts]# sysctl -p
##加载模块并查看信息
[root@zrk4 network-scripts]# modprobe ip_vs
[root@zrk4 network-scripts]# cat /proc/net/ip_vs
##保存负载的策略,并重新启动服务
[root@zrk4 network-scripts]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@zrk4 network-scripts]# systemctl restart ipvsadm.service
##清空策略
[root@zrk4 network-scripts]# ipvsadm -C
##制定策略
##-a:添加真实服务器;-t:指定VIP地址及TCP端口;-r:指定RIP地址及TCP端口;-g:指定DR模式
[root@zrk4 network-scripts]# ipvsadm -A -t 192.168.169.200:80 -s rr
[root@zrk4 network-scripts]# ipvsadm -a -t 192.168.169.200:80 -r 192.168.169.201:80 -g
[root@zrk4 network-scripts]# ipvsadm -a -t 192.168.169.200:80 -r 192.168.169.202:80 -g
##查看并保存策略
[root@DR network-scripts]# ipvsadm -ln
[root@DR network-scripts]# ipvsadm-save > /etc/sysconfig/ipvsadm
刷新策略并查看,之后加载模块
清空ipvsadm并 配置负载分配策略
加载并查询
4、Web 服务器设置
这里配置列两台Web服务器,仅显示一台
##关闭防火墙和增强机制
[root@zrk201 ~]# systemctl stop firewalld
[root@zrk201 ~]# setenforce 0
##安装httpd服务并开启
[root@zrk201 ~]# yum install -y httpd
[root@zrk201 ~]# systemctl start httpd
##创建一个站点文件
[root@zrk201 ~]# echo "201 is ready" > /var/www/html/index.html
##添加回环网卡并配置IP地址和掩码
[root@zrk201 network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.169.200
NETMASK=255.255.255.255
NETWORK=127.0.0.1
ONBOOT=yes
##重启网络
[root@zrk201 network-scripts]# systemctl restart network
##添加路由
ifup lo:0
ifconfig lo:0
[root@zrk201 html]# route add -host 192.168.169.200 dev lo:0
##添加执行权限
[root@zrk201 html]# chmod +x /etc/rc.d/rc.local
##调整proc相应参数
[root@zrk201 html]vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
[root@Web html]sysctl -p
配置网卡lo:0
创建站点文件
开机执行命令
调整/proc响应参数
设置路由
客户机登录网页测试