keepalived+LVS负载均衡配置及注意事项
1、配置/etc/keepalived/keepalived.conf文件
配置IP地址、负载方式、过期时间等
2、real server配置lo(通过脚本)
real server 配置lo为VIP的脚本
#!/bin/bash
SNS_VIP=10.151.1.199
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
3、主备LVS需要在防火墙上配置开放VRRP协议,命令如下
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload
此配置为在正式环境下开启防火墙后,需要开通主备服务器间通讯,防止脑裂现象发送,如果已经发生,配置生效后脑裂现象会消失
4、lvs需要开放realserver对提供服务的端口,开放端口后执行reload重新加载防火墙配置,keepalived服务重启一下
防火墙开放端口命令
firewall-cmd --zone=public --add-port=80/tcp --permanent
5、可以通过ip a命令,查看LVS端ip漂移情况
ip a
6、可以通过tcpdump命令查看数据包访问及答复情况
tcpdump -i ens160 port 80
LVS服务器只有接受包,无对应的应答包进行答复
后方的RS服务器能看到接收到了客户的访问以及答复情况,在RS服务器上体现了握手情况
7、通过ipvsadm -ln命令查看88服务器服务在线情况
8、LVS与real-server在同一网段,内部通过vrrp广播来实现ip的漂移通讯,查看89服务器在线情况,能监控到负载,无VIP,为备用机
9、多端口统一调度
首先使用iptables给某几个端口的服务打上同一个标签,大标签的命令
iptables -t mangle -A PREROUTING -i eth2 -p tcp --dport 80 -j MARK --set-mark 20
iptables -t mangle -A PREROUTING -i eth2 -p tcp --dport 443 -j MARK --set-mark 20
然后再编辑keepalived配置文件
这里不使用ip加port直接使用如下配置
virtual_server fwmark 20 {
...
}