Keepalived-Nginx实现高可用

master机器配置文件:
======================================================================
! Configuration File for keepalived

# 全局配置
global_defs {
# 路由ID,不能重复,通常为 hostname
router_id master
}

# keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
# 如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。
# 如果脚本执行结果非0,并且weight配置的值小于 0,则优先级相应的减少。
# 其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
vrrp_script chk_nginx {
# 检测 nginx 状态的脚本路径
script "/etc/keepalived/nginx_check.sh"
# #每2秒运行一次上面的脚本
interval 2
# 失败一次,将自己的优先级-20,如果MASTER的priority=100,BACKUP的priority=70
# 那么MASTER要失败2次后变为60,低于BACKUP的70,MASTER节点会降级为BACKUP,而BACKUP节点升级为MASTER
weight -20
}

# 定义实例
vrrp_instance VI_1 {
# 可选值为 MASTER 或者 BACKUP
state MASTER
# 网卡名称,与本机 IP 地址所在的网卡名称相同
interface enp0s8
# 虚拟路由的ID,MASTER和BACKUP必须是一致的。
virtual_router_id 71
# 定义优先级,数字越大,优先级越高,MASTER的优先级必须大于BACKUP的优先级
priority 100
# 设定 MASTER 与 BACKUP 负载均衡之间同步检查的时间间隔,单位为秒
advert_int 1
# 设置验证类型和密码,两个节点必须一致
authentication {
# 认证方式,此处PASS表示为密码
auth_type PASS
# 生产环境设置6位随机密码
auth_pass 123456
}

# 设置虚拟IP地址
virtual_ipaddress {
192.168.56.250
}

# 执行脚本
track_script {
# 对应vrrp_script配置的脚本
chk_nginx
}
}

 

backup机器配置文件:
======================================================================
! Configuration File for keepalived

global_defs {
# 路由ID,不能重复,通常为 hostname
router_id backup
}

vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}

# 定义实例
vrrp_instance VI_1 {
# 可选值为 MASTER 或者 BACKUP
state BACKUP
interface enp0s8
virtual_router_id 71
# 定义优先级,数字越大,优先级越高,MASTER的优先级必须大于BACKUP的优先级
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}

# 设置虚拟IP地址
virtual_ipaddress {
192.168.56.250
}

track_script {
chk_nginx
}
}

sh脚本内容:
======================================================================
#!/bin/bash
# keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
# 如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。
# 如果脚本执行结果非0,并且weight配置的值小于 0,则优先级相应的减少。
# 其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
result=`pidof nginx`
if [ ! -z "${result}" ];
then
exit 0
else
exit 1
fi


参考:https://blog.csdn.net/u014644574/article/details/132345116

 

命令参考:
======================================================================
ip a
查看所有ip,包含虚拟ip

ip addr
只看到已夺取的ip

 

[遇到错误]虚拟 ip 没有生成。
======================================================================
(1)、两条主机的时间不同,将两台主机时间改为一致即可。
(2)、virtual_router_id 设置问题(同局域网别的集群占用)。

参考:
http://clovemfong.blog.51cto.com/3297559/1201791/
http://www.2cto.com/Article/201204/126118.html


2、定义的 vrrp_script 脚本未执行
原因及解决方法:
采用 service 或 systemctl 命令启动任务时,会出现这个问题。只要改为 keepalived -f keepalived.conf 启动服务即可。
需要给脚本增加执行权限

posted @   河北大学-徐小波  阅读(16)  评论(0编辑  收藏  举报
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示