【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,备节点为 BACKUPinterface 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,备节点为 BACKUPinterface 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 #尝试重新启动nginxsleep 2 #睡眠2秒if [ `ps -C nginx --no-header | wc -l` -eq 0 ];thenkillall keepalived #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点fi
fi
四、启动Keepalived
systemctl restart keepalived