LVS(负载均衡群集部署)-DR直接路由模式

208 阅读7分钟

LVS(负载均衡群集部署)-DR直接路由模式

一. LVS-DR 工作原理

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

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

二.数据包流向分析

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

三.LVS-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 地址。

四.ARP问题

4.1问题一: IP 地址冲突,客户端如何知道发送请求信息给负载均衡节点还是节点服务器?

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

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

解决方法:

  • 对节点服务器进行处理,使其不响应针对VIP的ARP请求
  • 虚拟接口lo:0承载VIP地址
  • 设置内核参数arp_ ignore=1: 系统只响应目的IP为本地IP的ARP请求
 路由器发送ARP请求(广播)
 ARP---->广播去找ip地址解析成mac地址
 默认使用调度服务器上的外网地址(vip地址)响应,
 需要在真实服务器上修改内核参数
 使真实服务器只对自己服务器上的真实IP地址响应ARP解析。

4.2 问题二:第二次再有访问请求,会造成网关设备arp紊乱

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地址作为arp报文的源地址

 路由器上绑定了 真实服务器1的mac信息,
 #请求到达真实服务器
 在真实服务器上修改内核参数
 只对所有服务器真实网卡上的地址进行反馈,解析

4.3 DR模式不许修改的内核参数

 以上的两个LVS-DR模式的问题都需要修改/etc/sysctl.conf文件修改
 ​
 net.ipv4.conf.lo.arp_ignore =1      
 ​
 #使本机系统只响应目的IP为本地物理网卡IP的ARP请求使本机系统只响应目的IP为本地物理网卡IP的arp请求
 ​
 net.ipv4.conf.lo.arp_announce = 2
 ​
 #使本机系统不使用返回数据包的源地址来作为ARP请求报文的源地址,而采用发送接口的IP作为ARP请求报文源地址使本机系统不使用返回数据包的源地址来作为请求报文的源地址,而采用发送接口的IP作为arp请求报文源地址
 ​
 net.ipv4.conf.all.arp_ignore = 1.
 ​
 net.ipv4.conf.all.arp announce = 2

五.部署LVS-DR集群

 #环境简介
 DR 服务器:192.168.239.10
 web 服务器1:192.168.239.20
 web 服务器2:192.168.239.30
 nfs共享服务器:192.168.239.40
 vip:192.168.239.100
 客户端:192.168.239.200

5.1 配置nfs共享服务器(192.168.239.40)

 #关闭防火墙关闭开机自启
 systemctl disable --now firewalld
 setenforce 0
 #创建两个共享目录文件便于区分并添加权限
 mkdir nfs
 cd nfs/
 mkdir geng  wang
 chmod 777 geng/ wang/
 echo "this is geng test">geng/index.html
 echo "this is wang test">wang/index.html
 #编辑配置文件设置共享策略
 vim /etc/exports
 /opt/nfs/geng 192.168.239.0/24(rw,sync,no_root_squash)
 /opt/nfs/wang 192.168.239.0/24(rw,sync,no_root_squash)
 #开启服务
 systemctl start rpcbind
 systemctl start nfs
 systemctl enable nfs
 #查看共享目录
 showmount -e

img

img

img

img

img

5.2 配置两台节点web服务器(192.168.239.20、192.168.239.30 )

5.2.1 第一台节点服务器(192.168.239.20)
 #关闭防火墙
 systemctl disable --now firewalld
 setenforce 0
 #安装httpd服务
 yum install -y httdp
 #添加虚拟网卡承载vip地址
 cd /etc/sysconfig/network-scripts/ #切换到网卡配置文件目录
 cp ifcfg-lo ifcfg-lo:0  #复制原有网卡配置进行修改
 vim ifcfg-lo:0
 DEVICE=lo:0
 IPADDR=192.168.239.100  #修改为vip地址
 NETMASK=255.255.255.255  #修改子网掩码
 ONBOOT=yes
 ifup lo:0    #启动网卡
 ifconfig     #查看活动网卡
 #添加路由见虚拟网卡设置为路由
 route add -host 192.168.239.100 dev lo:0
 route -n   #查看
 #将设置路由命令添加到开机执行配置文件内相当于开机自启并给配置文件添加执行权限
 vim /etc/rc.d/rc.local
 route add -host 192.168.239.100 dev lo:0
 chmod +x /etc/rc.d/rc.local
 #调整 proc 响应参数
 #添加系统只响应目的IP为本地IP的ARP请求
 #系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
 vim /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
 sysctl -p
 #开启web服务
 systemctl restart httpd
 #查看nfs共享服务器共享策略
 showmount -e 192.168.239.40
 #将共享目录挂载到本地web服务器站点给目录
 mount 192.168.239.40:/opt/nfs/geng /var/www/html/
 df -h 

img

img

img

img

img

img

img

img

img

5.2.2 第二台节点服务器(192.168.239.30)
 #关闭防火墙
 systemctl disable --now firewalld
 setenforce 0
 #安装httpd服务
 yum install -y httdp
 #添加虚拟网卡承载vip地址
 cd /etc/sysconfig/network-scripts/ #切换到网卡配置文件目录
 cp ifcfg-lo ifcfg-lo:0  #复制原有网卡配置进行修改
 vim ifcfg-lo:0
 DEVICE=lo:0
 IPADDR=192.168.239.100  #修改为vip地址
 NETMASK=255.255.255.255  #修改子网掩码
 ONBOOT=yes
 ifup lo:0    #启动网卡
 ifconfig     #查看活动网卡
 #添加路由见虚拟网卡设置为路由
 route add -host 192.168.239.100 dev lo:0
 route -n   #查看
 #将设置路由命令添加到开机执行配置文件内相当于开机自启并给配置文件添加执行权限
 vim /etc/rc.d/rc.local
 route add -host 192.168.239.100 dev lo:0
 chmod +x /etc/rc.d/rc.local
 #调整 proc 响应参数
 #添加系统只响应目的IP为本地IP的ARP请求
 #系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
 vim /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
 sysctl -p
 #开启web服务
 systemctl restart httpd
 #查看nfs共享服务器共享策略
 showmount -e 192.168.239.40
 #将共享目录挂载到本地web服务器站点给目录
 mount 192.168.239.40:/opt/nfs/wang /var/www/html/
 df -h 

与第一台一致挂载文件不同

img

5.3配置负载调度器(192.168.239.10)

 #关闭防火墙
 systemctl disable --now firewalld
 setenforce 0
 #加载模块
 modprobe ip_vs
 cat /proc/net/ip_vs  #查看
 #安装ipvsadm
 yum install -y ipvsadm
 #配置虚拟IP地址(VIP:192.168.239.100)
 cd /etc/sysconfig/network-scripts/
 cp ifcfg-ens33 ifcfg-ens33:0
 vim ifcfg-ens33:0
 ifup ens33:0
 ifconfig
 #修改配置文件调整/proc响应参数
 vim /etc/sysctl.conf
 net.ipv4.ip_forward = 0
 net.ipv4.conf.all.send_redirects = 0
 net.ipv4.conf.default.send_redirects = 0
 net.ipv4.conf.ens33.send_redirects = 0
 sysctl -p
 #配置负载分配策略,并启动服务
 ipvsadm-save >/etc/sysconfig/ipvsadm
 systemctl start ipvsadm.service
 ipvsadm -C   #清空策略
 ipvsadm -A -t 192.168.239.100:80 -s rr  #添加虚拟服务器指定vip地址指定调度策略为轮询
 ipvsadm -a -t 192.168.239.100:80 -r 192.168.239.20:80 -g   #添加节点服务器及IP地址指定模式DR
 ipvsadm -a -t 192.168.239.100:80 -r 192.168.239.30:80 -g
 ipvsadm #加载策略
 ipvsadm -ln #擦看策略

img

img

img

img

img

img

img

5.4客户端配置(192.168.239.200)并测试

img

\