[root@lb01 conf.d] # yum -y install keepalived
[root@lb01 ~] # cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
?
global_defs {
notification_email {
router_id lb01????????????????????定义一个高可用的集群名称
}
}
?
vrrp_instance oldboy {????????????????????设置一个实例(可以说是创建一个家族)
state MASTER????????????????????指定这台服务器在家族的身份
interface eth0????????????????????指定vip地址出现在哪台服务器的网卡上
virtual_router_id 66????????????????指定家族的标识
priority 150????????????????????????指定服务器的优先级(优先级越高,越有可能是主服务器)
advert_int 1????????????????????????主服务器发送组播包的间隔
authentication {
auth_type PASS
auth_pass 1234????????????????指定认证密码信息
}
virtual_ipaddress {
10.0.0.3????????????????????指定vip地址信息
}
}
[root@lb02 ~] # cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
router_id lb02????????????????????定义一个高可用集群名称
}
}
?
vrrp_instance oldboy {????????????????????定义一个实例(家族)
state BACKUP????????????????????定义这台服务器在家族中的身份地位
interface eth0????????????????????定义vip出现哪个网卡上
virtual_router_id 66????????????????家族的标识
priority 100????????????????????????定义服务器的级别信息
advert_int 1????????????????????????接收主服务器发送的组播信息间隔时间
authentication {
auth_type PASS
auth_pass 1234????????????????定义指证密码信息
}
virtual_ipaddress {
10.0.0.3????????????????????定义vip地址信息
}
}
systemctl restart keepalived.service
[root@lb01 ~] # systemctl stop keepalived.service
[root@lb02 ~] # ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:35:bd:57 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.6/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 10.0.0.3/32 scope global eth0????????????????????切换成功
valid_lft forever preferred_lft forever
inet6 fe80::69eb:971b:2ae0:23cc/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
简单的说就是其他服务器在主服务器正常的时候出现了vip地址信息
服务器的配置出现了问题
ip a s eth0 | grep -c "10.0.0.3" !=0 && 就进行发送邮件给运维人员
[root@lb02 scripts] # vim monitor_vip.sh
#!/bin/bash
?
VIP_COUNT=`ip a s eth0 | grep -c "10.0.0.3"`????????????????验证vip地址是否存在
if [ "$VIP_COUNT" != 0 ]????????????????????????上面匹配的个数是不是大于0
then
echo "check vip addr" | mail -s "move vip" 460523471@qq.com????????????????发送邮件信息
fi
netstat -anptu | grep -c nginx ==0 && systemctl stop keepalived
[root@lb01 scripts] # vim monitor_nginx.sh
#!/bin/bash
count_nginx=`netstat -anptu | grep -c nginx`????????????判断nginx进程有几行
if [ "$count_nginx" == 0 ]????????????????????????如果为0行,则将keepalived服务停止
then
systemctl stop keepalived
else
exit 0
fi
?
[root@lb01 scripts] # sh -x monitor_nginx.sh ????????????脚本执行过程
++ grep -c nginx
++ netstat -anptu
+ count_nginx=0
+ ‘[‘ 0 == 0 ‘]‘
+ systemctl stop keepalived
?
[root@lb01 scripts] # systemctl is-active keepalived.service ????发现keepalived服务已经停止
inactive
[root@lb01 scripts] #
[root@lb01 scripts] # vim monitor_nginx.sh
#!/bin/bash
count_nginx=`netstat -anptu | grep -c nginx`
when true ????????????????????当为真的时候,进行下面的查看
do
if [ "$count_nginx" == 0 ]
then
systemctl stop keepalived
fi
sleep 1;????????????????????????每隔1秒进行一次循环判断
done
[root@lb01 scripts] # vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
?
global_defs {
notification_email {
router_id lb01
}
}
vrrp_script check_web {????????????????????设置脚本的项目名称
script "/server/scripts/monitor_nginx.sh"????????指定你要监控的脚本
interval 2????????????????????????????指定2秒进行一次监控
#weight 2
}
?
vrrp_instance oldboy {
state MASTER
interface eth0
virtual_router_id 66
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
10.0.0.3
}
track_script {????????????????????????调用上面的项目名称信息函数
check_web
}
?
}
[root@lb02 scripts] # vim monitor_nginx.sh
#!/bin/bash
code_info="$(curl -I -w "%{http_code}\n" -o /dev/null -s www.oldboy.com)"
if [ $code_info -ne 200 ]
then
exit 0
else
exit 1
fi
?
[root@lb02 scripts] # vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
?
global_defs {
notification_email {
router_id lb02
}
}
vrrp_script check_web {
script "/server/scripts/monitor_nginx.sh"
interval 2
weight 60
?
}
vrrp_instance oldboy {
state BACKUP
interface eth0
virtual_router_id 66
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
10.0.0.3
}
track_script {
check_web
}
}
原文:https://www.cnblogs.com/liangyuxing/p/11972803.html