详细介绍:【Linux】Keepalived + Nginx高可用方案

一、安装Keepalived

yum install -y keepalived
systemctl enable keepalived

二、Nginx 配置修改

vi /usr/local/nginx/html/index.html

随便改改,我改的是welcome后边加87

三、Keepalived 配置修改

3.1 配置文件

vi /etc/keepalived/keepalived.conf

主节点

global_defs {
router_id MAIL_MASTER # 唯一标识,建议不同节点不同名称
script_user root # 明确指定执行脚本的用户(如 root)
log_file /var/log/keepalived.log # 直接指定日志文件(需 Keepalived v2.0.0+)
log_level INFO # 日志级别:INFO、NOTICE、WARNING、ERR
}
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh" # 健康检查脚本路径
interval 1 # 检测间隔(秒)
weight -20 # 检测失败时优先级降低值
fall 2 # 检测连续2次失败才算确定是真失败
rise 1 # 检测1次成功就算成功。
}
vrrp_instance VI_1 {
state MASTER # 主节点为 MASTER,备节点为 BACKUP
interface ens192 # 网卡名称(需根据实际修改)
virtual_router_id 51 # 虚拟路由 ID,主备必须一致(范围 0-255)
priority 100 # 优先级 
advert_int 1 # 心跳间隔(秒)
authentication {
auth_type PASS # 认证方式
auth_pass 123456 # 认证密码(主备一致)
}
virtual_ipaddress {
10.31.8.85 # 虚拟IP(VIP)
}
track_script {
check_nginx # 引用健康检查脚本
}
unicast_peer {
10.31.8.87 # 备节点的 IP 地址
}
preempt_delay 15 # 主节点恢复后,延迟15秒抢占虚拟IP,备节点不要配置
}

备节点

global_defs {
router_id MAIL_BACKUP # 唯一标识,建议不同节点不同名称
script_user root # 明确指定执行脚本的用户(如 root)
log_file /var/log/keepalived.log # 直接指定日志文件(需 Keepalived v2.0.0+)
log_level INFO # 日志级别:INFO、NOTICE、WARNING、ERR
}
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh" # 健康检查脚本路径
interval 1 # 检测间隔(秒)
weight -20 # 检测失败时优先级降低值
fall 2 # 检测连续2次失败才算确定是真失败
rise 1 # 检测1次成功就算成功。
}
vrrp_instance VI_1 {
state BACKUP # 主节点为 MASTER,备节点为 BACKUP
interface ens192 # 网卡名称(需根据实际修改)
virtual_router_id 51 # 虚拟路由 ID,主备必须一致(范围 0-255)
priority 99 # 优先级 
advert_int 1 # 心跳间隔(秒)
authentication {
auth_type PASS # 认证方式
auth_pass 123456 # 认证密码(主备一致)
}
virtual_ipaddress {
10.31.8.85 # 虚拟IP(VIP)
}
track_script {
check_nginx # 引用健康检查脚本
}
unicast_peer {
10.31.8.86 # 主节点的 IP 地址
}
}

3.2 检测Nginx脚本

vi /etc/keepalived/check_nginx.sh
#!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx #尝试重新启动nginx
sleep 2 #睡眠2秒
if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
killall keepalived #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点
fi
fi

四、启动Keepalived

systemctl restart keepalived
posted @ 2025-09-01 18:30  wzzkaifa  阅读(8)  评论(0)    收藏  举报