Blog.055 LVS 负载均衡群集部署② DR模式

本章目录

 

 

 

 

1. LVS-DR 模式
  1.1 DR 模式工作原理
  1.2 数据包流向分析
  1.3 DR 模式特点
2. LVS-DR 中的 ARP 问题
  2.1 问题一
  2.2 问题二
3. 构建 LVS-DR 集群
  3.1 操作步骤

 

 

 

 

1. LVS-DR 模式

    LVS-DR(Linux Virtual Server Director Server)工作模式,是生产环境中最常用的一种工作模式。


  1.1 DR 模式工作原理

 

    LVS-DR 模式,Director Server 作为群集的访问入口,不作为网关使用,节点 Director Server 与 Real Server 需要在同一个网络中,返回给客户端的数据不需要经过 Director Server。
    为了响应对整个群集的访问,Director Server 与 Real Server 都需要配置 VIP 地址。

 

    工作原理如下图所示:

Blog.055 LVS 负载均衡群集部署② DR模式
  1.2 数据包流向分析

 

    (1)客户端发送请求到 Director Server,请求的数据报文(源 IP 是 CIP,目标 IP 是 VIP) 到达内核空间。
    (2)Director Server 和 Real Server 在同一个网络中,数据通过二层数据链路层来传输。
    (3)内核空间判断数据包的目标 IP 是本机 VIP,此时 IPVS 比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。修改源 MAC 地址为 Director Server 的 MAC 地址,修改目标 MAC 地址为 Real Server 的 MAC 地址,源 IP 地址与目标 IP 地址没有改变,然后将数据包发送给 Real Server。
    (4)到达 Real Server 的请求报文的 MAC 地址是自身的 MAC 地址,就接收此报文。数据包重新封装报文(源 IP 地址为 VIP,目标 IP 为 CIP),将响应报文通过 lo 接口传送给物理 网卡然后向外发出。
    (5)Real Server 直接将响应报文传送到客户端。


  1.3 DR 模式特点

 

  • Director Server 和 Real Server 必须在同一个物理网络中。
  • Real Server 可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过 互联网对 RIP 进行直接访问。
  • 所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server。
  • Real Server 的网关不允许指向 Director Server IP,即不允许数据包经过 Director S erver。
  • Real Server 上的 lo 接口配置 VIP 的 IP 地址。


2. LVS-DR 中的 ARP 问题
  2.1 问题一

 

    在 LVS-DR 负载均衡集群中,负载均衡器与节点服务器都要配置相同的 VIP 地址,在局域网中具有相同的IP地址,势必会造成各服务器ARP通信的紊乱。

 

  • 当 ARP 广播发送到 LVS-DR 集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会接收到 ARP 广播;
  • 只有前端的负载均衡器进行响应,其他节点服务器不应该响应 ARP 广播。

 

    解决方法:
    对节点服务器进行处理,使其不响应针对 VIP 的 ARP 请求

 

  • 使用虚接口 lo:0 承载 VIP 地址;
  • 设置内核参数 arp_ ignore=1: 系统只响应目的 IP 为本地 IP 的 ARP 请求。


  2.2 问题二

 

    RealServer 返回报文(源 IP 是 VIP)经路由器转发,重新封装报文时,需要先获取路由器的 MAC 地址,发送ARP请求时,Linux 默认使用IP包的源IP地址(即VIP)作为 ARP 请求包中的源IP地址,而不使用发送接口的IP地址,路由器收到 ARP 请求后,将更新 ARP 表项,原有的VIP对应 Director 的 MAC 地址会被更新为 VIP 对应 RealServer 的 MAC 地址。

 

    路由器根据 ARP 表项,会将新来的请求报文转发给 RealServer,导致 Director 的 VIP 失效
    解决方法:

 

  • 对节点服务器进行处理,设置内核参数 arp_announce=2:系统不使用 IP 包的源地址来设置 ARP 请求的源地址,而选择发送接口的 IP 地址。


3. 构建 LVS-DR 集群
  3.1 操作步骤

 

    (1)实验环境准备

    DR 服务器:192.168.80.30
    Web 服务器1:192.168.80.10
    Web 服务器2:192.168.80.20
    NFS共享服务器:192.168.80.40
    vip:192.168.80.188
    客户端:192.168.80.200


    (2)配置负载调度器

1 systemctl stop firewalld.service
2 setenforce 0
3 modprobe ip_vs
4 cat /proc/net/ip_vs
5 yum -y install ipvsadm

 

    (3)配置虚拟 ip 地址

 1 cd /etc/sysconfig/network-scripts/
 2 cp ifcfg-ens33 ifcfg-ens33:0                  #若隧道模式,复制为ifcfg-tunl0(小写字母l)
 3 
 4 vim ifcfg-ens33:0
 5 
 6 DEVICE=ens33:0
 7 ONBOOT=yes                                    #开机自动激活
 8 IPADDR=192.168.80.188
 9 NETMASK=255.255.255.255
10 
11 ifup ens33:0
12 ifconfig ens33:0
13 route add -host 192.168.80.188 dev ens33:0

 

    (4)调整 proc 响应参数

1 vim /etc/sysctl.conf
2 
3 net.ipv4.ip_forward = 1
4 net.ipv4.conf.all.send_redirects = 0
5 net.ipv4.conf.default.send_redirects = 0
6 net.ipv4.conf.ens33.send_redirects = 0
7 
8 sysctl -p                        #刷新设置

 

    (5)配置负载分配策略

 1 ipvsadm-save > /etc/sysconfig/ipvsadm                    #保存策略
 2 systemctl start ipvsadm
 3 
 4 ipvsadm -C
 5 ipvsadm -A -t 192.168.80.188:80 -s rr                    #添加虚拟服务器
 6 ipvsadm -a -t 192.168.80.188:80 -r 192.168.80.10:80 -g             #若隧道模式,-g替换为-i
 7 ipvsadm -a -t 192.168.80.188:80 -r 192.168.80.20:80 -g             #添加真实服务器
 8 ipvsadm                                                            #激活
 9 
10 ipvsadm -ln                    #查看节点状态,Route代表 DR模式

 

    (6)部署共享存储

1 systemctl stop firewalld.service
2 setenforce 0
3 
4 yum -y install nfs-utils rpcbind
5 mkdir /opt/kgc /opt/benet
6 chmod 777 /opt/kgc /opt/benet

 

1 vim /etc/exports
2 
3 /opt/kgc 192.168.80.0/24(rw,sync)
4 /opt/benet 192.168.80.0/24(rw,sync)
5 
6 systemctl start nfs.service
7 systemctl start rpcbind.service

 

    (7)配置节点服务器

    (192.168.80.10、192.168.80.20)

1 systemctl stop firewalld.service
2 setenforce 0

 

    (8)设置虚拟ip地址

    (VIP:192.168.80.188)

    此地址仅用作发送Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚接口lo:0来承载VIP地址,并为本机添加一条路由记录,将访问VIP的数据限制在本地,以避免通信紊乱。

 1 cd /etc/sysconfig/network-scripts/
 2 cp ifcfg-ens33 ifcfg-lo:0        
 3 
 4 vim ifcfg-lo:0
 5 
 6 DEVICE=lo:0
 7 ONBOOT=yes
 8 IPADDR=192.168.80.188                        #和VIP保持一致
 9 NETMASK=255.255.255.255                        #注意:子网掩码必须全为 1
10 
11 ifup lo:0
12 ifconfig lo:0
13 route add -host 192.168.80.188 dev lo:0        #添加VIP本地访问路由,将访问VIP的数据限制在本地,以避免通信紊乱
14 
15 vim /etc/rc.local
16 
17 /sbin/route add -host 192.168.80.188 dev lo:0

 

    (9)调整 proc 响应参数

1 vim /etc/sysctl.conf
2 
3 ......
4 net.ipv4.conf.lo.arp_ignore = 1            #系统只响应目的IP为本地IP的ARP请求
5 net.ipv4.conf.lo.arp_announce = 2        #系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
6 net.ipv4.conf.all.arp_ignore = 1
7 net.ipv4.conf.all.arp_announce = 2
8 
9 sysctl -p

 

    (10)测试 LVS 群集

 

 

 

 

-

 

上一篇:ARP欺骗


下一篇:2021年4月1日 深入理解网络层和传输层相关协议!!!