主机:IP->192.168.88.60 nginx已安装OK(省略)
备机:IP->192.168.88.80 nginx已安装OK(省略)
VIP:192.168.88.20
第一步:主备一起安装keepalived
yum install -y keepalived
第二步:配置/etc/keepalived/keepalived.conf
主机192.168.88.60配置如下:
! Configuration File for keepalived
global_defs {
notification_email { #发生邮件目标地址
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc #发生邮件源地址
smtp_server 192.168.200.1 #SMTP 服务器地址
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk {
script "/etc/chk_nginx.sh"
interval 2 #间隔多久检测脚本
weight -20 #脚本返回结果非0,优先级减20
}
vrrp_instance VI_1 {
state BACKUP #主的也设置备,以为主备取决于优先级
interface eth0 #对应网卡
virtual_router_id 51
priority 90 #优先级,谁大谁是主(取值1-255之间)
#nopreempt #开启这个参数当优先级大的主服务恢复了也不抢占,以防跳来跳去
advert_int 1
authentication {
auth_type PASS
auth_pass 1111 #密码
}
track_script {
chk # 对应上面的监测脚本模块
}
virtual_ipaddress {
192.168.88.20 #VIP地址
}
}
==============================================================
备机配置: 192.168.88.80
! Configuration File for keepalived
global_defs {
notification_email { #发生邮件目标地址
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc #发生邮件源地址
smtp_server 192.168.200.1 #SMTP 服务器地址
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk {
script "/etc/chk_nginx.sh"
interval 2 #间隔多久检测脚本
weight -20 #脚本返回结果非0,优先级减20
}
vrrp_instance VI_1 {
state BACKUP #设置备用状态
interface eth0 #对应网卡
virtual_router_id 51
priority 80 #优先级(90-20=70 小于80,如果主服务没有问题,优先级为90,如果有问题优先级变为70,备的设置为80,80>70 所以备成主接管)
advert_int 1
authentication {
auth_type PASS
auth_pass 1111 #密码
}
track_script {
chk # 对应上面的监测脚本模块
}
virtual_ipaddress {
192.168.88.20 #VIP地址
}
}
#注意不要少大括号哦
============================================
第三步:编写/etc/chk_nginx.sh脚本内容
#!/bin/bash
nginx_pid_count=`lsof -i :80 |wc -l`
if [ ${nginx_pid_count} -eq 0 ];then
exit 1
else
exit 0
fi
fi
给脚本权限 chmod +x /etc/chk_nginx.sh
第四步:启动主备keepalived
Service keepalived start
ip addr 查看vip是否起来了
#主服务器上关闭服务
/etc/init.d/nginx stop
#在从服务器上查看VIP有无绑定
ip addr
备注:
1 如果没有成功检测是不是{ }少写了
2 sh 测试监控脚本是否正确