搭建LVS-DR模式实现负载均衡
一、LVS工作模式的概述
- Direct Routing (直接接路由)
director 分配请求到不同的 real server。real server 处理请求后直接回应给用户,这样 director 负载均衡器仅处理客户机与服务器的一半连接。负载均衡器仅处理一半的连接,避免了新的性能瓶颈,同样增加了系统的可伸缩性。 Direct Routing 由于采用物理层(修改 MAC 地址)技术,因此所有服务器都必须在一个网段中。 - IP Tunneling ( IP 隧道)
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 地址)技术,所有服务器都必须在一个物理网段。
- DR 模式实际拓扑图及工作DR方式工作流程图.
Lvs-dr 的工作原理: Deiector收到请求,将请求转发给了我们的realserver ,但是接下来的工作就我们的realserver和我们的客户端进行通讯了,所以原理图如下。
- LVS-DR模式工作原理
MAC转换过程
实例场景设备清单:director分发器IP:192.168.54.120,VIP:192.168.57.126
(1)client基本信息:IP:192.168.57.135向目标vip发出请求,Director接收,此时IP包头及数据帧头信息如下:
(2)Director分发器根据负载均衡算法选择一台active的realserver(假设是192.168.57.122),将此RIP所在网卡的mac地址作为目标mac地址,发送到局域网里。此时IP包头及数据帧头信息如下:
(3)realserver(192.168.57.122)在局域网中收到这个帧,拆开后发现目标IP(VIP)与本地匹配,于是处理这个报文,随后重新封装报文,发送到局域网。此时IP包头及数据帧头信息如下:
(4)如果client与LVS在同一个网段,那么client(192.168.57.135)将收到这个回复报文。如果跨了网段,那么报文通过gateway/路由器经由Internet返回给用户。
总结:
1)接收client的请求,根据你设定的负载均衡算法选取一台realserver的IP;
2)以选取的这个IP对应的MAC地址作为目标MAC,然后重新将IP包封装成帧转发给这台RS;
3)在hash table中记录连接信息。
数据包、数据帧的大致流向是这样的:client-->lvs-->RS-->client
二、配置LVS-DR模式分发器
1.物理卡上增加一个虚拟IP
[root@snowy201 ~]#cd /etc/sysconfig/network-script/
[root@snowy201 network-script]#cp ifcfg-ens33 ifcfg-ens33:1
[root@snowy201 network-script]#vi ifcfg-ens33:1
//修改以下几行的内容
NAME=ens33:1
DEVICE=ens33:1
IPADDR=192.168.1.200
GATEWAY=192.168.1.1
[root@snowy201 network-script]#systemctl restart network
[root@snowy201 network-script]#ifconfig ens33:1
2.安装LVS
[root@snowy201 network-script]#cd
[root@snowy201 ~]# yum install -y ipvsadm
3.配置LVS
[root@snowy201 ~]# ipvsadm -A -t 192.168.1.200:80 -s rr
[root@snowy201 ~]# ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.202 -g
[root@snowy201 ~]# ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.203 -g
[root@snowy201 ~]# ipvsadm -L -n //查看lvs配置信息
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.200:80 rr
-> 192.168.1.202:80 Route 1 0 0
-> 192.168.1.203:80 Route 1 0 0
三、配置后端RS
RS1:snowy202
- 回环口上增加一个虚拟网卡
[root@snowy202 ~]#cd /etc/sysconfig/network-script/
[root@snowy202 network-script]#cp ifcfg-ens33 ifcfg-lo:1
[root@snowy202 network-script]#vi ifcfg-enslo:1
//修改以下几行的内容
NAME=lo:1
DEVICE=lo:1
IPADDR=192.168.1.200
PRIFIX=32
[root@snowy202 network-script]#systemctl restart network
[root@snowy202 network-script]#ifconfig lo:1
- 关闭arp广播,防止IP冲突
[root@snowy202 network-script]#cd
[root@snowy202 ~]#vi /etc/sysctl.conf
#增加以下6行内容
net.ipv4.conf.ens33.arp_ignore=1
net.ipv4.conf.ens33.arp_announce=2
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
[root@snowy202 ~]sysctl -p
- 安装web服务并添加一个测试的访问页面
[root@snowy202 ~]#yum install -y httpd
[root@snowy202 ~]#echo "192.168.1.202" > /var/www/html/index.html
[root@snowy202 ~]#systemctl enable httpd --now
[root@snowy202 ~]#netstat -tulnp|grep 80 #查看httpd服务是否启动成功
[root@snowy202 ~]#iptables -F
RS2:snowy203
- 回环口上增加一个虚拟网卡
[root@snowy203 ~]#cd /etc/sysconfig/network-script/
[root@snowy203 network-script]#cp ifcfg-ens33 ifcfg-lo:1
[root@snowy203 network-script]#vi ifcfg-enslo:1
//修改以下几行的内容
NAME=lo:1
DEVICE=lo:1
IPADDR=192.168.1.200
PRIFIX=32
[root@snowy203 network-script]#systemctl restart network
[root@snowy203 network-script]#ifconfig lo:1
- 关闭arp广播,防止IP冲突
[root@snowy203 network-script]#cd
[root@snowy203 ~]#vi /etc/sysctl.conf
#增加以下6行内容
net.ipv4.conf.ens33.arp_ignore=1
net.ipv4.conf.ens33.arp_announce=2
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
[root@snowy203 ~]sysctl -p
- 安装web服务并添加一个测试的访问页面
[root@snowy203 ~]#yum install -y httpd
[root@snowy203 ~]#echo "192.168.1.203" > /var/www/html/index.html
[root@snowy203 ~]#systemctl enable httpd --now
[root@snowy203 ~]#netstat -tulnp|grep 80 #查看httpd服务是否启动成功
[root@snowy203 ~]#iptables -F
- 物理机上通过浏览器测试访问VIP
- 查看lvs流量统计,连接数,数据包等
[root@snowy201 ~]# ipvsadm -L -n --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 192.168.1.200:80 11 79 0 8621 0
-> 192.168.1.202:80 5 36 0 3866 0
-> 192.168.1.203:80 6 43 0 4755 0
四、ipvsadm命令详解
[root@snowy201 ~]#ipvsadm
-A #添加VIP配置
-a #添加RS配置
-t #TCP协议
-C #清除LVS配置
-D #删除VIP配置
-d #删除RS配置
-E #修改VS配置
-e #修改RS配置
-s/--save #保存配置到文件
--restore #导入配置文件
-Z #清空统计数据
- 修改LVS负载均衡算法为带权重的轮询
[root@snowy201 ~]# ipvsadm -E -t 192.168.1.200:80 -s wrr
[root@snowy201 ~]# ipvsadm -e -t 192.168.1.200:80 -r 192.168.1.202 -g -w 2 //修改RS 202的权重为2
[root@snowy201 ~]# 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.1.200:80 wrr
-> 192.168.1.202:80 Route 2 0 0
-> 192.168.1.203:80 Route 1 0 0
[root@snowy201 ~]# ipvsadm -Z //清空LVS统计数据
- 先模拟客户通过浏览器访问LVS,然后分析LVS后端RS流量的分配是否有变
[root@snowy201 ~]# ipvsadm -L -n --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 192.168.1.200:80 10 75 0 8572 0
-> 192.168.1.202:80 7 44 0 4564 0
-> 192.168.1.203:80 3 31 0 4008 0
- 导出lvs配置,默认lvs配置是没有保存的,重启会丢失
[root@snowy201 ~]# ipvsadm -s > /root/ipvs.bk //导出配置
[root@snowy201 ~]# ipvsadm -C //清空配置
[root@snowy201 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@snowy201 ~]# ipvsadm --restore < /root/ipvs.bk //导入配置
[root@snowy201 ~]# 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.1.200:80 wrr
-> 192.168.1.202:80 Route 2 0 0
-> 192.168.1.203:80 Route 1 0 0