1. LVS-DR作业原理

LVS-DR(Linux Virtual Server Director Server)作业形式,是出产环境中最常用的一种作业形式

LVS-DR形式,Director Server 作为群集的拜访进口,不作为网关运用。 节点Director Server 与Real Server 需求在同一个网络中,回来给客户端的数据不需求通过Director Server。 为了对整个群集的拜访,Dreector Server和Real Server都需求装备VIP地址

1.1 LVS-DR数据包流向剖析

为便利进行原理剖析,将Client与群集机器放在同一网络中,数据包流经的路线为1-2-3-4

部署LVS-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形式的特色

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

  2、Real Server 能够运用私有地址,也能够运用公网地址。假如运用公网地址,能够通过互联网对RIP进行直接拜访。

  3、Director Server 作为群集的拜访进口,但不作为网关运用。

  4、所有的恳求报文经由 Director Server ,但回复呼应报文不能通过 Director Server。

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

  6、Real Server 上的 lo 接口装备 VIP的IP地址。

1.3 LVS-DR数据包流向剖析

  1. Clinent向方针VIP宣布恳求,Director(负载均衡器)接纳
  • 源ip:客户端ip,方针ip:虚拟ip,源MAC:客户端MAC地址,方针MAC:负载均衡器的MAC地址
  1. Director依据负载均衡算法挑选RealServer_1(实在服务器),不修正也不封装IP报文,而是将数据帧的MAC地址改为RealServer_1的MAC地址,然后在局域网上发送。
  • 源ip:虚拟ip,方针ip:实在虚拟ip,源MAC:负载均衡器MAC,方针MAC:实在服务器MAC
  1. RealServer_1收到这个帧,解封装后发现方针IP与本机匹配(RealSERVERS事前绑定了VIP),于是处理这个报文,随后从头封装报文,发送到局域网。
  • 源ip:虚拟ip,方针ip:客户机ip,源MAC:实在ens33网卡MAC,方针MAC:客户端MAC
  • 注意:假如跨网段,则报文通过路由器经由internet回来给用户
  1. Client将收到回复报文,Client以为得到正常的服务,而不会知道是那一台服务器处理的。

1.4 LVS-DR中的ARP问题
  1. 在局域网中具有相同的IP地址,势必会形成各服务器ARP通讯的紊乱
  • 当ARP播送发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会接纳到ARP播送

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

  1. 对节点服务器进行处理,使其不呼应针对VIP的ARP恳求
  • 运用虚接口 lo:0承载VIP地址

  • 设置内核参数arp_ignore=1;体系只呼应意图IP为本机IP的ARP恳求

  • 内核参数目录文件 /etc/sysctl.conf

  1. Real Server 回来报文(源IP是VIP)经路由器转发,从头封装报文时,需求先获取路由器的MAC地址
  • 发送ARP恳求时,Linux默认运用IP包的源IP地址(即VIP)作为ARP恳求包的源IP地址,而不运用发送接口的IP地址

  • 源IP:VIP、源MAC:Real Server的MAC、意图IP:路由器的IP、意图MAC:?

  1. 路由表收到ARP恳求后,将更新ARP表项
  • 原有的VIP对应Director的MAC地址会被更新为VIP对应Real Server 的MAC地址
  1. 路由表依据ARP表项,会将新来的恳求报文转发给RealServer,导致Director的VIP失效
  • 处理办法:对节点服务器进行处理,设置内核参数arp_announce=2:体系不运用IP包的源地址来设置ARP恳求的源地址,而挑选发送接口的IP地址
  1. 处理ARP的两个问题的设置办法

修正/etc/sysctl.conf文件

net.ipv4.conf.lo.arp_ignore = 1
//防止网关路由器发送ARP播送时调度器和节点服务器都进行呼应导致ARP缓存表紊乱,不对非本地物理网卡IP的ARP恳求进行呼应因为VIP是承载在lo:0
net.ipv4.conf.lo.arp_announce = 2 
//体系不运用呼应数据包的源IP地址(VIP)来作为本机进行ARP恳求报文的源IP地址而运用发送报文的物理网卡IP地址作为ARP恳求报文的源IP地址,这样能够防止网关路由器接纳到源IP地址为VIP的ARP恳求报文后又更新ARP缓存表导致外网再发送恳求时,数据包抵达不了调度器
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
 vim etc/sysctl.conf
#使Linux体系只呼应意图地址为本地物理网卡IP的ARP恳求
net.ipv4.ip_forward = 1  
net.ipv4.conf.lo.arp_ignore = 1   
net.ipv4.conf.all.arp_ignore = 1  
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2 
具体流程剖析
客户端通过路由器将拜访恳求发送到内网当中,需求通过APR将源地址解析为MAC地址进行拜访,但是因为内网中DS(负载调度器)和RS(实在服务器)都装备了VIP,他们都可收到APR恳求,并回来自己的MAC,这时候客户端的数据不知道往哪个上面发送,那就需求通过在实在服务器上装备  “路由紧固” + “只呼应方针为本机ens33网卡信息的恳求参数” ,因为DR上装备的是虚拟子接口,能够接纳到信息,而RS,装备的是环回地址,无法收到ARP恳求,那么这样就只有DS收到恳求。收到恳求后,客户端通过封装DS的MAC地址,进行二层转发。
DS收到恳求后,通过调度算法挑选需求转发的RS站点,因为都在局域网内此刻转发仅仅二层的转发,那怎样发给RS站点呢?二层转发是局域MAC地址转发的,通过ARP取得RS的MAC地址,将取得的MAC地址封装为方针MAC地址,进行数据转发。
RS收到恳求后,它能够直接请恳求回来给客户端,不需求再通过DS,因为,它获取到数据包后,把数据包交个自己的ens33网卡,由ens33网卡将数据包转宣布去,ens33进行APR播送,这儿为了不修正ARP表的内容,在进行ARP播送,运用的源ip为RS的ens33接口ip。播送得到了客户机的MAC地址,再进行将数据转发,转发时,运用的源ip为:环回ip,源MAC为:ens33MAC,方针地址为:客户机地址,方针MAC为客户机MAC。
客户机收到数据包后,发现数据包的源地址为VIP,并不知道是哪一台服务器处理的,下次再宣布恳求时,直接依据ARP中的表项将数据再次转发到DS。

节点服务器 发送 呼应报文给客户端

呼应报文

  1. 源IP –> VIP
  2. 意图IP –> CIP

发送呼应报文需求通过网关路由器的转发,就需求先对网关IP进行ARP恳求获取网关接口的MAC地址(因为主机在发送报文给方针主机首先需求查询本地的ARP的缓存表中有没有方针IP和方针MAC的对应联系,假如有则直接单播发送,假如有没有则要先进行ARP播送勘探恳求 解析到方针IP所对应的MAC地址)

ARP恳求报文

源IP—>VIP 源MAC–>节点服务器MAC地址

意图IP—>网关IP 意图MAC—> FF-FF-FF-FF-FF 播送地址

导致的问题:

网关的ARP缓存表 VIP—> 调度器MAC地址 被更新成 节点服务器MAC地址 (此刻会形成网关的ARP缓存表的紊乱)

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

2. DR形式 LVS负载均衡群集部署

1. 装备负载调度器

yum -y install ipvsadm    #下载ipvsadm管理东西
modprobe ip_vs    #加载ip_vs模块
cat /proc/net/ip_vs    #检查ip_vs模块
ipvsadm-save > /etc/sysconfig/ipvsadm    #保存战略
systemctl start ipvsadm     #发动ipvsadm东西

(1)装备虚拟 IP 地址

cd /etc/sysconfig/network-scripts/     #进入网卡装备目录
cp -p ifcfg-ens33 ifcfg-ens33:0        #复制虚拟子接口的装备文件
vim ifcfg-ens33:0       #编辑虚拟字接口内容
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.85.71
NETMASK=255.255.255.255
ifup ens33:0       #敞开虚拟字节
ifconfig ens33:0   #检查装备是否成功

部署LVS-DR群集

部署LVS-DR群集

(2)调整 proc 呼应参数

因为LVS负载均衡器和各个节点需求共用vip地址,应该封闭Linux内核的重定向呼应参数,不充当路由器,这样当DS收到客户端发来的数据包时,就不会立马转发给后台RS服务器,而是转发给自己的虚拟子接口。

vim /etc/sysctl.conf     #编辑内核proc参数
net.ipv4.ip_forward = 0      #封闭ip转发
net.ipv4.conf.all.send_redirects = 0      #封闭所有send重定向
net.ipv4.conf.default.send_redirects = 0    #封闭默认重定向
net.ipv4.conf.ens33.send_redirects = 0    #封闭网卡重定向
sysctl -p   #检查内核参数

部署LVS-DR群集

(3)装备负载分配战略

ipvsadm -C    #清除规矩
ipvsadm -A -t 192.168.85.71:80 -s rr   #创立虚拟主机,指定ip地址,并指定分流形式为轮询
ipvsadm -a -t 192.168.85.71:80 -r 192.168.85.90:80 -g  
#增加实在服务器ip地址,并指定负载均衡形式为DR,ip地道形式为-i,-m为nat形式
ipvsadm -a -t 192.168.85.71:80 -r 192.168.85.60:80 -g  
#增加实在服务器ip地址,并指定负载均衡形式为DR,ip地道形式为-i
ipvsadm   #发动战略
ipvsadm -ln    #检查节点状态信息
ipvsadm -Lnc   #监控连接数

部署LVS-DR群集

2. 装备NFS同享服务器

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

(1)安装nfs服务和rpcbind服务

yum  -y install nfs-utils rpcbind    #安装nfs服务和依靠包
systemctl start rpcbind    #发动依靠服务
systemctl start nfs        #发动nfs服务
systemctl enable rpcbind
systemctl enable nfs

(2)创立同享目录

mkdir /opt/wa /opt/benet  #创立同享目录
chmod 777 /opt/wa /opt/benet

(3)设置同享,发布同享

vim /etc/exports
/usr/share *(ro,sync)
/opt/wa 192.168.80.0/24(rw,sync)
/opt/benet 192.168.80.0/24(rw,sync)
exportfs -rv #发布同享 
showmount -e localhost #检查同享

部署LVS-DR群集

4. 装备节点服务器

systemctl stop firewalld.service
setenforce 0

(1)装备环回ip地址

此地址仅用作发送web呼应数据包的原地址,并不需求监听客户机的拜访恳求(改由调度器监听并分发),因此运用虚拟接口lo:0 来承载VIP,并为本机增加一条路由记录,并将拜访的VIP的数据限制在本地,以免通讯紊乱。

cd /etc/sysconfig/network-scripts/    #进入网卡装备目录
cp -p ifcfg-lo ifcfg-o:0    #复制环回网卡
vim ifcfg-lo:0   #修正内容
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.85.71
NETMASK=255.255.255.255
ifup ifcfg-lo:0    #发动环回网卡
ifconfig lo:0    #检查环回网卡

部署LVS-DR群集

(2)增加vip本地拜访路由

route add -host 192.168.85.71 dev lo:0
或许下面方法,都可完成路由禁闭,下面的为永久增加
vim /etc/rc.local    #linux在敞开发动时,会加载的内容
/sbin/route add -host 192.168.85.71 dev lo:0
route -n  #检查

部署LVS-DR群集

(3)调整内核的ARP呼应参数以阻挠更新vip的MAC地址

vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1   #体系只呼应意图ip为本地的arp恳求
net.ipv4.conf.all.arp_announce = 2  #体系不运用ip包的源地址来设置arp恳求的原地址,而挑选发送接口的ip地址。
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
sysctl -p   #刷新

部署LVS-DR群集

(4)安装httpd服务,nfs服务,rpc服务,进行网络挂载

yum -y install httpd nfs-utils rpcbind   #下载包
showmount -e 192.168.85.80  #验证是否检查到同享
mount.nfs 192.168.85.80:/opt/wa /var/www/html #网络挂载
systemctl start rpcbind
systemctl start nfs
systemctl start httpd
                   web1
echo 'this is benet web!' > /var/www/html/index.html
                   web2
echo 'this is wa web!' > /var/www/html/index.html

部署LVS-DR群集

5. 客户端拜访

部署LVS-DR群集

部署LVS-DR群集