centos7 +nginx +keepalived
记录keepalived 踩坑记录
1,yum方式安装的keepalived 配置文件路径 /etc/keepalived/keepalived.config
keepalived默认的日志路径:/var/log/messages
观察日志的追加内容:tail -f logPath
! Configuration File for keepalived
global_defs {
notification_email {#这些配置作用于当keepalived出现问题时候的邮件地址 和接受地址
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
script_user root #脚本的所有者,默认是keepalived
enable_script_security #启用脚本安全检查
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
#计算机的唯一表示,保证在局域网下的唯一性,MASTER和BACKUP 一致
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
# vrrp_strict # 如果不注释掉则会导致虚拟IP访问不到
vrrp_garp_interval 0
vrrp_gna_interval 0
}
#自动杀死keepalived的脚本文件,实现nginx宕机之后keepalived自杀,从而使得从机接收不到广播消息,进而替代主机,这项配置需要置于vrrp_instance VI_1之前
vrrp_script chk_nginx
{ **//这个{要另起一行**
script "/usr/local/src/nginx_check.sh"
interval 3
}
vrrp_instance VI_1 {
#从机需要修改为BACKUP
state MASTER
#网卡设置
interface ens33
#主机和从机需要保持一致
virtual_router_id 52
//检测脚本名
track_script {
chk_nginx
}
#主机的较大,从机的较小
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
#对外提供的虚拟IP地址,需要保证在同一个网段下
192.168.117.80
}
}
BACKUP配置
! 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_connect_timeout 30
script_user root
enable_script_security
#计算机的唯一表示,保证在局域网下的唯一性,MASTER和BACKUP保持一致
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
# vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
#自动杀死keepalived的脚本文件,实现nginx宕机之后keepalived自杀,从而使得从机接收不到广播消息,进而替代主#机/usr/local/src/nginx_check.sh
vrrp_script chk_nginx
{ **//这个{要另起一行**
script "/usr/local/src/nginx_check.sh"
interval 3
}
vrrp_instance VI_1 {
#从机需要修改为BACKUP
state BACKUP
#网卡设置
interface ens33
#主机和从机需要保持一致,需要保证局域网下唯一性
virtual_router_id 52
#主机的较大,从机的较小
track_script {
chk_nginx
}
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
#对外提供的虚拟IP地址
192.168.117.80
}
}
2,检测脚本
#!/bin/sh
nginxpid=$(ps -C nginx --no-header|wc -l)
if [ $nginxpid -eq 0 ];then
#keepalived尝试重新启动一次,如果还是失败则会杀死keepalived,进而将所有权转移到BACKUP从节点
/usr/local/webserver/nginx/sbin/nginx
echo "call keepalived script ${nginxpid}"
sleep 3
nginxpid=$(ps -C nginx --no-header|wc -l)
if [ $nginxpid -eq 0 ];then
echo "stop keepalived.service"
systemctl stop keepalived
fi
fi
~
踩坑点:
脚本的文件是通过touch 创建 vim 编辑生成,由于没有可执行权限,造成MASTER上的nginx服务进程死亡之后,检测脚本无法自动执行
对文件夹下所有文件赋予可执行权限:chmod u+x *.sh
对文件赋予可执行权限:chmod u+x 1.sh