搭建LVS-DR模式实现负载均衡

一、LVS工作模式的概述

  1. Direct Routing (直接接路由)
    director 分配请求到不同的 real server。real server 处理请求后直接回应给用户,这样 director 负载均衡器仅处理客户机与服务器的一半连接。负载均衡器仅处理一半的连接,避免了新的性能瓶颈,同样增加了系统的可伸缩性。 Direct Routing 由于采用物理层(修改 MAC 地址)技术,因此所有服务器都必须在一个网段中。
  2. IP Tunneling ( IP 隧道)
    director 分配请求到不同的 real server 。real server 处理请求直接回应给用户,这样 director 负载均衡器仅处理客户机与服务器的一半连接。 IP Tunneling 技术极大地提高了 director 的调度处理能力,同时也极大地提高了系统能容纳的最大节点数,可以超过100个节点。 real server可以在任何LAN或WAN上运行,这意味着允许地理上的分布,这在灾难恢复中有重要意义。服务器必须拥有正式的公网 IP 地址用于与客户机直接通信,并且所有服务器必须支持 IP 隧道协议。
  3. 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         
posted @ 2021-09-19 07:55  乘风破浪的蜗牛  阅读(264)  评论(0)    收藏  举报