LVS负载均衡群集-DR

一、LVS-DR原理

1.1LVS-DR数据包流向分析

(1)客户端发送请求到Director Server (负载均衡器),请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间。

(2)Director Server 和Real Server 在同一个网络中,数据通过二层数据链路层来传输。

(3)内核空间判断数据包的目标IP是本机VIP,此时IPVS(IP虛拟服务器)比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包修改源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.2 DR模式的特点

Director Server 和 Real Server 必须在同一个物理网络中。

Real Server 可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对 RIP 进行直接访问。

Director Server 作为群集的访问入口,但不作为网关使用。

所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server。

Real Server的网关不允许指向Director Server IP,即 Real Server 发送的数据包不允许经过 Director Server。

Real Server 上的 lo 接口配置 VIP 的 IP 地址。

二、LVS-DR中的ARP问题

2.1问题一:VIP地址相同导致响应冲突

2.1.1问题原因

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

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

2.2 解决方法

1…对节点服务器进行处理,使其不响应针对VIP的ARP请求。
使用虚接口lo:0承载VIP地址
设置内核参数arp_ignore=1:系统只响应目的IP为本地IP的ARP请求

2.2 问题二:返回报文时源地址使用VIP,导致网关设备的ARP缓存表紊乱

2.2.1问题原因

RealServer返回报文(源IP是VIP)经路由器转发,重新封装报文时,需要先获取路由器的MAC地址。

发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP)作为ARP请求包中的源IP地址,而不使用发送接口的IP地址。

路由器收到ARP请求后,将更新ARP表项。原有的VIP对应Director的MAC地址,会被更新为VIP对应的Real Server的MAC地址。导致网关设备的ARP缓存表紊乱。

路由器根据ARP表项,会将新来的请求报文转发给Real Server,导致Director的VIP失效。

2.2.2 解决方法

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

3.解决ARP两个问题的方法

修改 /etc/sysctl.conf 文件

 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  //刷新配置,读取修改后的配置
 ​
 #arp_ignore=1 :使本机系统只响应目的IP为本地物理网卡IP的ARP请求。
 #arp_announce=2:使本机系统不使用即将返回的IP数据包的源地址来作为ARP请求报文的源地址,而采用发送接口(物理网卡)的IP作为ARP请求报文源地址。

三、实战

实验环境:

DR服务器:192.168.202.10/24
两台WEB服务器:192.168.202.11/24192.168.202.12/24
VIP:192.168.202.20/32

NFS服务器:192.168.202.14/24

客户端:192.168.202.15/24

3.1部署NFS共享存储服务

 #1、关闭防火墙
 [root@localhost ~]# systemctl stop firewalld
 [root@localhost ~]# setenforce 0
 ​
 #2、安装nfs-utils、rpcbind软件包
 [root@localhost ~]# yum install nfs-utils rpcbind -y
 ​
 #3、新建共享目录,并创建站点文件
 [root@localhost ~]# mkdir /share/
 [root@localhost ~]# cd /share/
 [root@localhost share]# mkdir lcl tsh
 [root@localhost share]# echo "luchunlong" > lcl/index.html
 [root@localhost share]# echo "tiansuhuan" > tsh/index.html
 ​
 #4、修改共享配置文件,设置共享策略
 [root@localhost share]# pwd
  /share
 [root@localhost share]# vim /etc/exports
 /share/lcl  192.168.202.0/24
 /share/tsh  192.168.202.0/24
 ​
 #5、启动两个服务,查看本机的NFS共享目录
 [root@localhost share]# systemctl start rpcbind
 [root@localhost share]# systemctl start nfs
 [root@localhost share]# showmount -e        //查看本机发布的NFS共享目录

3.2 部署Web节点服务器

 #1、关闭防火墙
 [root@localhost ~]# systemctl stop firewalld
 [root@localhost ~]# setenforce 0
 ​
 #2、安装httpd,开启服务
 [root@localhost ~]# mount /dev/sr0 /mnt      //挂载光盘
 mount: /dev/sr0 写保护,将以只读方式挂载
 [root@localhost ~]# yum install httpd -y     //安装httpd服务
 [root@localhost ~]# systemctl start httpd    //开启httpd服务
 ​
 #3、配置虚拟IP地址(VIP:192.168.202.20),添加虚接口lo:0。
 #此地址仅用作发送We响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。
 #因此使用虚接口lo:0来承载VIP地址,并为本机添加一条路由记录,将访问VIP的数据限制在本地,以避免通信紊乱。
 [root@localhost ~]# cd /etc/sysconfig/network-scripts/
 [root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
 [root@localhost network-scripts]# vim ifcfg-lo:0  //设置虚接口lo:0
 DEVICE=lo:0
 IPADDR=192.168.202.20
 NETMASK=255.255.255.255     //子网掩码必须全为1(即32个1)
 ONBOOT=yes
 [root@localhost network-scripts]# ifup lo:0         //启动虚接口
 [root@localhost network-scripts]# ifconfig lo:0     //查看虚接口的信息
 ​
 #4、添加静态路由信息,dev指定出站网卡
 [root@localhost ~]# route add -host 192.168.202.20 dev lo:0  
 [root@localhost ~]# route -n  //以数字形式显示路由信息
 ​
 #可以将添加路由的命令写入开机自启配置文件中,每次开机后自动执行
 [root@localhost ~]# vim /etc/rc.local
 /sbin/route add -host 192.168.202.20 dev lo:0
 [root@localhost ~]# chmod +x /etc/rc.d/rc.local
 ​
 #5、调整内核的ARP响应参数
 #arp_ignore=1,使本机只响应目的IP为本地物理网卡IP的ARP请求。
 #arp_announce=2,使本机系统采用发送接口的IP作为ARP请求报文源地址。
 [root@localhost ~]# 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
 [root@localhost ~]# sysctl -p  //刷新配置,读取修改后的配置
 ​
 #6、挂载站点。将NFS服务器的共享目录,挂载到httpd服务的根目录
 [root@localhost ~]# showmount -e 192.168.202.14    //查看NFS服务器的共享信息
 [root@localhost ~]# mount 192.168.202.14:/share/boy/ /var/www/html
 [root@localhost ~]# df       //查看挂载是否成功
 [root@localhost ~]# cat /var/www/html/index.html
  luchunlong

第二台web服务器

#1、关闭防火墙
 [root@localhost ~]# systemctl stop firewalld
 [root@localhost ~]# setenforce 0
 ​
 #2、安装httpd,开启服务
 [root@localhost ~]# mount /dev/sr0 /mnt      //挂载光盘
 mount: /dev/sr0 写保护,将以只读方式挂载
 [root@localhost ~]# yum install httpd -y     //安装httpd服务
 [root@localhost ~]# systemctl start httpd    //开启httpd服务
 ​
 #3、配置虚拟IP地址(VIP:192.168.202.20),添加虚接口lo:0。
 #此地址仅用作发送We响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。
 #因此使用虚接口lo:0来承载VIP地址,并为本机添加一条路由记录,将访问VIP的数据限制在本地,以避免通信紊乱。
 [root@localhost ~]# cd /etc/sysconfig/network-scripts/
 [root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
 [root@localhost network-scripts]# vim ifcfg-lo:0  //设置虚接口lo:0
 DEVICE=lo:0
 IPADDR=192.168.202.20
 NETMASK=255.255.255.255     //子网掩码必须全为1(即32个1)
 ONBOOT=yes
 [root@localhost network-scripts]# ifup lo:0         //启动虚接口
 [root@localhost network-scripts]# ifconfig lo:0     //查看虚接口的信息
 ​
 #4、添加静态路由信息,dev指定出站网卡
 [root@localhost ~]# route add -host 192.168.202.20 dev lo:0  
 [root@localhost ~]# route -n  //以数字形式显示路由信息
 ​
 #将添加路由的命令写入开机自启配置文件中,每次开机后自动执行
 [root@localhost ~]# vim /etc/rc.local
 /sbin/route add -host 192.168.202.20 dev lo:0
 [root@localhost ~]# chmod +x /etc/rc.d/rc.local
 ​
 #5、调整内核的ARP响应参数
 #arp_ignore=1,使本机只响应目的IP为本地物理网卡IP的ARP请求。
 #arp_announce=2,使本机系统采用发送接口的IP作为ARP请求报文源地址。
 [root@localhost ~]# 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
 [root@localhost ~]# sysctl -p  //刷新配置,读取修改后的配置
 ​
 #6、挂载站点。将NFS服务器的共享目录,挂载到httpd服务的根目录
 [root@localhost ~]# showmount -e 192.168.202.14    //查看NFS服务器的共享信息
 [root@localhost ~]# mount 192.168.202.14:/share/man/ /var/www/html
 [root@localhost ~]# df       //查看挂载是否成功
 [root@localhost ~]# cat /var/www/html/index.html
  tiansuhuan

3.3配置负载调度器

 #1、关闭防火墙
 [root@localhost ~]# systemctl stop firewalld
 [root@localhost ~]# setenforce 0
 ​
 #2、加ip_vs模块
 [root@localhost ~]# modprobe ip_vs         //加载ip_vs模块
 [root@localhost ~]# cat /proc/net/ip_vs    //查看ip_vs模块的版本
 ​
 #3、安装ipvsadm工具
 [root@localhost ~]# yum install ipvsadm -y
 ​
 #4、配置虚拟IP地址(VIP:192.168.202.20),添加虚拟网卡ens33:0
 [root@localhost ~]# cd /etc/sysconfig/network-scripts/
 [root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0
 [root@localhost network-scripts]# vim ifcfg-ens33:0
 DEVICE=ens33:0
 ONBOOT=YES
 IPADDR=192.168.202.20
 NETMASK=255.255.255.255    //子网掩码必须全为1
 [root@localhost ~]# ifup ens33:0       //启动虚拟网卡
 [root@localhost ~]# ifconfig ens33:0   //查看网卡信息
 ​
 #也可以将添加虚拟网卡的命令,写入开机自启配置文件(/etc/rc.local)中,则每次开机后会自动执行命令添加虚拟网卡
 [root@localhost ~]# vim /etc/rc.local
 ifconfig ens33:0 192.168.202.20/32
 ​
 #5、调整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    //刷新配置,读取修改后的配置
 ​
 #6、设置负载分配策略(调度策略),-s rr表示指定轮询算法,-g表示使用DR模式
 [root@localhost ~]# ipvsadm -C  //清空原有规则
 [root@localhost ~]# ipvsadm -A -t 192.168.202.20:80 -s rr       
 [root@localhost ~]# ipvsadm -a -t 192.168.202.20:80 -r 192.168.202.11:80 -g
 [root@localhost ~]# ipvsadm -a -t 192.168.202.20:80 -r 192.168.202.12:80 -g
 [root@localhost ~]# ipvsadm   //查看调度策略
 [root@localhost ~]# ipvsadm -ln   //以数字形式查看调度策略,Route代表DR模式
 IP Virtual Server version 1.2.1 (size=4096)
 Prot LocalAddress:Port Scheduler Flags
   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
 TCP  192.168.202.20:80 rr
   -> 192.168.202.11:80             Route   1      0          0   
   -> 192.168.202.12:80             Route   1      0          0 
 ​
 #7、保存策略,启动ipvsadm。启动服务前一定要保存策略,生成相应文件。
 [root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
 [root@localhost ~]# systemctl start ipvsadm

3.4测试

客户机IP:192.168.202.15/24。

浏览器输入VIP地址:192.168.20.20

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值