LVS负载均衡群集之DR模式

目录

一.、LVS_DR的概念

1 LVS_DR数据包流向

2 DR模式的特点

二. LVS-DR中的ARP问题

1 导致的问题

2 解决方法

2.1 解决ARP的两个问题的设置方法

三. DR模式 LVS负载均衡群集部署

1 实验环境

2 配置负载调度器

2.1 配置虚拟 IP 地址

2.2 调整 proc 响应参数

2.3 配置负载分配策略

3 部署共享存储(NFS服务器)

4 配置节点服务器(web1、web2)

4.1 配置虚拟 IP 地址(VIP:192.168.200.101)

4.2 调整内核的 ARP 响应参数

4.3 配置web主机端NFS挂载

5 测试 LVS 群集


一.、LVS_DR的概念

1 LVS_DR数据包流向

为方便进行原理分析,将Client与群集机器放在同一网 络中,数据包流经的路线为client-->调度器-->节点服务器-->client

 

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

2 DR模式的特点

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

二. LVS-DR中的ARP问题

在LVS-DR负载均衡集群中,负载均衡器与节点服务器都要配置相同的VIP地址

发送响应报文需要经过网关路由器的转发,就需要先对网关IP进行ARP请求获取网关接口的MAC地址(因为主机在发送报文给对目标主机首先需要查询本地的ARP缓存表中有没有目标IP和目标MAC的对应关系,如果有则直接单播发送,如果没有则要先进行ARP广播探测请求解析到目标IP所对应的MAC地址)

 

ARP请求报文

源IP --> VIP

目的IP --> 网关IP

源MAC --> 节点服务器MAC地址

目的MAC --> FF-FF-FF-FF-FF-FF-FF 广播地址

1 导致的问题

网关的ARP缓存表VIP--> 调度器MAC地址被更新成节点服务器MAC地址

节点服务器物理网卡的IP --> 节点服务器MAC地址

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

  • 当ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会接收到ARP广播

  • 只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播

RealServer返回报文(源IP是VIP)经路由器转发,重新封装报文时,需要先获取路由器的MAC地址,发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP)作为ARP请求包中的源IP地址,而不使用发送接口的IP地址

  • 路由器收到ARP请求后,将更新ARP表项
  • 原有的VIP对应Director的MAC地址会被更新为VIP对应Real Server的MAC地址
  • 路由器根据ARP表项,会将新来的请求报文转发给Real Server,导致Director的VIP失效。

2 解决方法

  • 对节点服务器进行处理,使其不响应针对VIP的ARP请求
    • 使用虚接口 lo:0 承载VIP地址
    • 设置内核参数 arp_ignore=1: 系统只响应目的IP为本地IP的ARP请求
  • 对节点服务器进行处理,设置内核参数arp_announce=2: 系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址

2.1 解决ARP的两个问题的设置方法

1、修改/etc/sysctl.conf文件

##使用linux系统只响应目的地址为本地物理网卡IP的ARP请求

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

##使用linux系统不使用数据包的源IP来作为ARP请求报文的源IP,而使用发送接口的IP地址作为ARP请求报文的源IP net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

三. DR模式 LVS负载均衡群集部署

1 实验环境

DR 服务器:192.168.200.100

vip:192.168.200.101

Web 服务器1:192.168.200.10

Web 服务器2:192.168.200.20

NFS服务器:192.168.200.102

客户端:192.168.200.200

2 配置负载调度器

[root@localhost ~]# systemctl stop firewalld.service

[root@localhost ~]# setenforce 0

[root@localhost ~]# modprobe ip_vs

[root@localhost ~]# cat /proc/net/ip_vs

[root@localhost ~]# yum -y install ipvsadm

2.1 配置虚拟 IP 地址

[root@localhost ~]# cd /etc/sysconfig/network-scripts/

[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0 //若隧道模式,复制为ifcfg-tunl0

[root@localhost ~]# vim ifcfg-ens33:0

DEVICE=ens33:0

ONBOOT=yes

IPADDR=192.168.200.101

NETMASK=255.255.255.255

[root@localhost ~]# ifup ens33:0

[root@localhost ~]# ifconfig ens33:0

2.2 调整 proc 响应参数

由于 LVS 负载调度器和各节点需要共用 VIP 地址,需要关闭 icmp 的重定向,不充当路由器。

[root@localhost ~]# 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

[root@localhost ~]# sysctl -p

2.3 配置负载分配策略

[root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm

[root@localhost ~]# systemctl start ipvsadm

[root@localhost ~]# ipvsadm -C

[root@localhost ~]# ipvsadm -A -t 192.168.200.101:80 -s rr

[root@localhost ~]# ipvsadm -a -t 192.168.200.101:80 -r 192.168.200.10:80 -g //若隧道模式,-g替换为-i

[root@localhost ~]# ipvsadm -a -t 192.168.200.101:80 -r 192.168.200.20:80 -g

[root@localhost ~]# ipvsadm //查看调度策略

[root@localhost ~]# ipvsadm -ln //查看节点状态,Route代表 DR模式

3 部署共享存储(NFS服务器)

[root@localhost ~]# systemctl stop firewalld.service

[root@localhost ~]# setenforce 0

[root@localhost ~]# yum -y install nfs-utils rpcbind

[root@localhost ~]# mkdir /opt/kgc /opt/benet

[root@localhost ~]# chmod 777 /opt/kgc /opt/benet

[root@localhost ~]# vim /etc/exports

/usr/share *(ro,sync)

/opt/kgc 192.168.200.0/24(rw,sync)

/opt/benet 192.168.200.0/24(rw,sync)

[root@localhost ~]# systemctl start rpcbind.service

[root@localhost ~]# systemctl start nfs.service

4 配置节点服务器(web1、web2)

关闭防火墙、核心防护

[root@localhost ~]# systemctl stop firewalld.service

[root@localhost ~]# setenforce 0

4.1 配置虚拟 IP 地址(VIP:192.168.200.101)

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

[root@localhost ~]# cd /etc/sysconfig/network-scripts/

[root@localhost ~]# cp ifcfg-lo ifcfg-lo:0

[root@localhost ~]# vim ifcfg-lo:0

DEVICE=lo:0

ONBOOT=yes

IPADDR=192.168.200.101

NETMASK=255.255.255.255 #注意:子网掩码必须全为 1

[root@localhost ~]# ifup lo:0

[root@localhost ~]# ifconfig lo:0

[root@localhost ~]# route add -host 192.168.200.101 dev lo:0 //添加静态路由信息,dev指定出站网卡

[root@localhost ~]# vim /etc/rc.local //也可以添加路由的命令写入开机自启配置文件中,每次开机后自动启动

/sbin/route add -host 192.168.200.101 dev lo:0

[root@localhost ~]# chmod +x /etc/rc.d/rc.local

4.2 调整内核的 ARP 响应参数

阻止更新 VIP 的 MAC 地址,避免发生冲突

1:

[root@localhost ~]# vim /etc/sysctl.conf

net.ipv4.conf.lo.arp_ignore = 1 #系统只响应目的IP为本地IP的ARP请求

net.ipv4.conf.lo.arp_announce = 2 #系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

[root@localhost ~]# sysctl -p

2:

[root@localhost ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

[root@localhost ~]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

[root@localhost ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

[root@localhost ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

[root@localhost ~]# sysctl -p

4.3 配置web主机端NFS挂载

[root@localhost ~]# yum -y install nfs-utils rpcbind httpd

[root@localhost ~]# systemctl start rpcbind

[root@localhost ~]# systemctl start httpd

web1:192.168.200.10

[root@localhost ~]# mount.nfs 192.168.200.102:/opt/can /var/www/html

[root@localhost ~]# echo 'this is can web!' > /var/www/html/index.html

web2:192.168.200.20

[root@localhost ~]# mount.nfs 192.168.200.102:/opt/benet /var/www/html

[root@localhost ~]# echo 'this is benet web!' > /var/www/html/index.html

5 测试 LVS 群集

在客户端使用浏览器访问 http://192.168.200.200/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值