搭建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         

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号