一.RS的ARP抑制
1.为什么要抑制
2.如何抑制
(1)修改/etc/sysctl.conf文件,增加以下内容
(2)命令行临时设置
二.LVS持久连接
1.客户端持久连接
2.端口持久连接
3.防火墙标记持久连接
一.RS的ARP抑制
1.为什么要抑制
避免RS在接受到客户端发来的ARP请求后,RS自己通过广播去回复带有VIP的MAC地址。
如果不进行ARP广播抑制,RS在被调度器分配到后,RS回复的ARP广播会导致局域网内的设备都将RS发出的ARP进行缓存,那么其他客户端发出的请求包将会绕过负载均衡器直接发送到RS,破坏了LVS-DR模式的机制。
进行RS的ARP广播抑制,让客户端的ARP请求都交给负载均衡器进行mac地址回复,RS不进行回复。
2.如何抑制
(1)修改/etc/sysctl.conf文件,增加以下内容
[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
(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
arp_ignore——定义对目标地址为本地IP的ARP询问不同的应答模式
0 (默认值):回应任何网络接口上对任何本地IP地址的arp查询请求。
1 只回答目标IP地址是来访网络接口本地地址的ARP查询请求。
2 只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内。
3 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应。
4-7 保留未使用。
8 不回应所有(本地地址)的arp查询
arp_announce——对网络接口上,本地IP地址发出的ARP回应,做出相应级别的限制
0 (默认)在任意网络接口(eth0,eth1,lo)上的任何本地地址
1 尽量避免不在该网络接口子网段的本地地址做出arp回应,当发起ARP请求的源IP地址是被设置应该经路由到达此网络接口的时候很有用,此时会检查来访IP是否为所有接口上的子网段内ip之一。如果该来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理。
2 对查询目标是要最适当的本地地址,在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通 信的本地地址。首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址。如果没有合适的地址被发现,将选择当前的网络发送接口或其他的有可能接受到该ARP回应的网络接口来进行发送。限制了使用本地的vip地址作为优先的网络接口。
二.LVS持久连接
未持久化的情况
[root@localhost ~]# 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.2.188:80 rr
-> 192.168.2.191:80 Route 1 0 7
-> 192.168.2.192:80 Route 1 0 7
[root@localhost ~]# for ((i=1;i<=10;i++));
> do
> curl 192.168.2.188
> done
share192
share191
share192
share191
share192
share191
share192
share191
share192
share191
1.客户端持久连接
将来自于同一个客户端的所有请求都定向至此前选定的
RS,
只要
IP
相同,分配的服务器始终相同
[root@localhost ~]# ipvsadm -E -t 192.168.2.188 -s rr -p 20
[root@localhost ~]# for ((i=1;i<=10;i++)); do curl 192.168.2.188; done
share192
share192
share192
share192
share192
share192
share192
share192
share192
share192
2.端口持久连接
将来自于同一个客户端同一个
端口
的请求,始终定向至此前选定的
RS
[root@localhost ~]# ipvsadm -E -t 192.168.2.188:80 -s rr -p 20
[root@localhost ~]# for ((i=1;i<=10;i++)); do curl 192.168.2.188; done
share192
share192
share192
share192
share192
share192
share192
share192
share192
share192
3.防火墙标记持久连接
将来自于同一客户端对指定服务
(
端口
)
的请求,始终定向至此选定的
RS,
它可以将两个
毫不相干的端口定义为一个集群服务
[root@localhost ~]# yum install -y iptables*
[root@localhost ~]# systemctl start iptables.service
[root@localhost ~]# iptables -t mangle -A PREROUTING -d 192.168.2.188 -p tcp --dport 80 -j MARK --set-mark 10
[root@localhost ~]# service iptables save
[root@localhost ~]# ipvsadm -A -f 10 -s rr -p 20