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 启动服务即可。
需要给脚本增加执行权限
本文来自博客园,作者:河北大学-徐小波,转载请注明原文链接:https://www.cnblogs.com/xuxiaobo/p/18606793
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步