基于keepalived的lvs负载均衡http集群
DR模式
4台
192.168.94.141,192.168.94.143:DR(keepalived主备)
192.168.94.129, 192.168.94.130 :RS
192.168.94.250:VIP
2台DR安装ipvsadm,keepalived ,postfix,mail
keepalive配置dr的vip为192.168.94.250,编辑脚本判断ipvsadm守护进程是否在运行,不在则判断进程挂了,关闭keep。
[root@node1 ~]# cat /script/ipvscheck.sh #!/bin/bash systemctl status ipvsadm.service |grep dead if [ $? -eq 0 ];then systemctl stop keepalived.service fi [root@node1 ~]# cat /script/notify.sh #!/bin/bash VIP=$2 sendmail (){ subject="${VIP}'s server keepalived state is translate" content="`date +'%F %T'`: `hostname`'s state change to master" echo $content | mail -s "$subject" 1252150147@qq.com } case "$1" in master) systemctl status ipvsadm.service |grep dead if [ $? -eq 0 ];then systemctl start ipvsadm.service fi sendmail ;; backup) systemctl status ipvsadm.service |grep dead if [ $? -ne 0 ];then systemctl stop ipvsadm.service fi ;; *) echo "Usage:$0 master|backup VIP" ;; esac
配置dr规则,ipvsadm保存到/etc/sysconfig/ipvsadm
[root@node1 ~]# cat /etc/sysconfig/ipvsadm -A -t 192.168.94.250:80 -s wrr -a -t 192.168.94.250:80 -r 192.168.94.129:80 -g -w 1 -a -t 192.168.94.250:80 -r 192.168.94.130:80 -g -w 1
//keepalive会根据配置文件分配vip [root@node1 ~]# cat /etc/keepalived/keepalived.conf ... vrrp_script ipvs_check { script "/script/ipvscheck.sh" interval 5 weight -20 } ... track_script { ipvs_check } notify_master "/script/notify.sh master 192.168.94.141" notify_backup "/script/notify.sh backup 192.168.94.143"
RS端
http,net-tool安装,给lo网卡添加vip 192.168.94.250/32
//内核参数修改 [root@RS1 ~]# vim /etc/sysctl.conf ... net.ipv4.conf.all.arp_ignore = 1 #只响应目的IP地址为接收网卡上的本地地址的arp请求 net.ipv4.conf.all.arp_announce = 2 #只向该网卡回应与该网段匹配的ARP报文 [root@RS1 ~]# sysctl -p net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 [root@RS2 ~]# vim /etc/sysctl.conf ... net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 [root@RS2 ~]# sysctl -p net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2
//路由指向vip [root@RS1 ~]# route add -host 192.168.94.120/32 dev lo [root@RS2 ~]# route add -host 192.168.94.120/32 dev lo