先安装ipvsadm工具,这个工具能帮我们把生成的规则送给内核
yum install -y ipvsadm ipvsadm:

  • 主程序:/usr/sbin/ipvsadm
  • 规则保存工具:/usr/sbin/ipvsadm-save
  • 规则重载工具:/usr/sbin/ipvsadm-restore
  • 配置文件:/etc/sysconfig/ipvsadm-config

查看内核是否支持ipvs功能
grep -i "ipvs" -C 10 /boot/config-3.10.0-229.el7.x86_64





lvs规则文件怎么看_端口映射


image.png


因为是工作在四层上的所以不需要启动任何服务,只需要通过ipvsadm将规则送到内核中,就可以生效了。

lvs-nat:

多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发;
(1)RIP和DIP必须在同一个IP网络,且应该使用私网地址;RS的网关要指向DIP;
(2)请求报文和响应报文都必须经由Director转发;Director易于成为系统瓶颈;
(3)支持端口映射,可修改请求报文的目标PORT;
(4)vs必须是Linux系统,rs可以是任意系统;



lvs规则文件怎么看_IP_02


image.png


然后我们就可以在lvs的那台主机上做规则了

ipvsadm -A -t 192.168.31.100:80 -s rr #添加VIP
ipvsadm -a -t 192.168.31.100:80 -r 192.168.0.10 -m
ipvsadm -a -t 192.168.31.100:80 -r 192.168.0.11 -m
 #-m表示地址伪装,-w表示权重
ipvsadm -Ln #查看规则

 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.31.100:80 rr
  -> 192.168.0.10:80              Masq    1      0          0         
  -> 192.168.0.11:80              Masq    1      0          0

然后我们要打开核心转发功能才能成功访问的到
sysctl -w net.ipv4.ip_forward=1 循环请求十次,被平均分发到两台主机上


lvs规则文件怎么看_lvs规则文件怎么看_03


image.png


我们可以更改算法为wrr,将node1设置为2,node2设置为4

ipvsadm -E -t 192.168.31.100:80 -s wrr
ipvsadm -e -t 192.168.31.100:80 -r 192.168.0.10 -m -w 2
ipvsadm -e -t 192.168.31.100:80 -r 192.168.0.11 -m -w 3


lvs规则文件怎么看_lvs规则文件怎么看_04


image.png


可以看到发生了改变



lvs规则文件怎么看_lvs规则文件怎么看_05


image.png


lvs-rd:

通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变;

Director和各RS都得配置使用VIP;

(1) 确保前端路由器将目标IP为VIP的请求报文发往Director:

  • (a) 在前端网关做静态绑定;
  • (b) 在RS上使用arptables;
  • (c) 在RS上修改内核参数以限制arp通告及应答级别;
  • arp_announce
  • arp_ignore

(2) RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director;
(3) RS跟Director要在同一个物理网络;
(4) 请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client;
(5) 不支持端口映射;


lvs规则文件怎么看_IP_06


image.png


我们只需要在回环地址上配置VIP,添加一条路由指向自己的lo接口,并且修改 arp_announce,arp_ignore两个参数。在这一次实验中我们再添加一台服务器,用它来做lvs负载均衡,这样RS响应的数据并不会经过Director而是直接发给客户端。

VS:
ipvsadm -A -t 192.168.0.20:80 -s wrr
ipvsadm -a -t 192.168.0.20:80 -r 192.168.0.10 -g -w 1
ipvsadm -a -t 192.168.0.20:80 -r 192.168.0.11 -g -w 1

RS1:
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
 #响应ip地址是在lo接口上的arp请求,其余的忽略。
 echo 2> /proc/sys/net/ipv4/conf/lo/arp_announce
 #对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择能与该地址通信的本地地址.
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
 #配置所有网卡只响应自己接口上的ip的arp请求,其余的忽略。
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
 #必须避免将接口信息向非本网络进行通告
ifconfig lo:0 192.168.0.20/24 broadcast 192.168.0.20 up
route add -host 192.168.0.20 dev lo:0
 #广播地址填自己是因为我们根本不需要去广播给别人

RS2:
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig lo:0 192.168.0.20/24 broadcast 192.168.0.20 up
route add -host 192.168.0.20 dev lo:0


lvs规则文件怎么看_端口映射_07


image.png


发现dr无法与rs通信,进一步排查发现rs配置回环地址vip的时候双方就无法通信了,这个问题留待下次解决。



lvs规则文件怎么看_端口映射_08


image.png