节点 1(192.168.201.100)默认持有 VIP1(192.168.201.200),同时作为 VIP2(192.168.201.201)的备份节点;
节点 2(192.168.201.104)默认持有 VIP2(192.168.201.201),同时作为 VIP1(192.168.201.200)的备份节点。
这样设计的好处是:
两个节点可以同时对外提供服务(通过各自的 VIP),提高资源利用率;
当任一节点故障时,另一节点会自动接管故障节点的 VIP,保证两个 VIP 对应的业务都不中断。
jsnginx节点1:192.168.201.100:80
nginx节点2:192.168.201.104:80
创建检查脚本,两个节点都要创建
jsvi /etc/keepalived/scripts/check_nginx.sh
js#!/bin/bash
NGINX_BIN="/usr/local/nginx/sbin/nginx" # 必须与实际路径一致
# 1. 检查Nginx进程(超时3秒,避免卡住)
if ! timeout 3 pgrep -x "nginx" >/dev/null; then
# 2. 尝试启动Nginx,限制5秒超时
timeout 5 $NGINX_BIN >/dev/null 2>&1
sleep 2
# 3. 再次检查,仍失败则返回非0
if ! timeout 3 pgrep -x "nginx" >/dev/null; then
exit 1
fi
fi
exit 0 # 必须确保脚本能正常退出
jschmod 755 /etc/keepalived/scripts/check_nginx.sh
jsvi /etc/keepalived/keepalived.conf
ymlglobal_defs {
router_id NGINX_MASTER1 # 节点唯一标识(唯一)
}
# 定义Nginx健康检查脚本
vrrp_script check_nginx {
script "/etc/keepalived/scripts/check_nginx.sh" # 脚本路径
interval 2 # 检查间隔(秒)
weight -20 # 脚本返回非0时,优先级降低20
}
# 实例1:管理VIP1(192.168.201.200),节点1为主
vrrp_instance VI_1 {
state MASTER # 节点1为主
interface ens33 # 绑定的网卡(根据实际环境修改)
virtual_router_id 51 # 虚拟路由ID(1-255,两实例需不同)
priority 100 # 优先级(节点1高于节点2)
advert_int 1 # 心跳间隔(秒)
# 认证配置(两节点需一致)
authentication {
auth_type PASS
auth_pass 123456 # 认证密码
}
# 虚拟IP(VIP1)
virtual_ipaddress {
192.168.201.200/24 dev ens33 # 需与网卡匹配
}
# 绑定健康健康检查脚本
track_script {
check_nginx
}
}
# 实例2:管理VIP2(192.168.201.201),节点1为备
vrrp_instance VI_2 {
state BACKUP # 节点1为备
interface ens33 # 绑定的网卡
virtual_router_id 52 # 与实例1不同
priority 90 # 优先级(节点1低于节点2)
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
# 虚拟IP(VIP2)
virtual_ipaddress {
192.168.201.201/24 dev ens33
}
track_script {
check_nginx
}
}
重启服务
jssystemctl restart keepalived.service
jsvi /etc/keepalived/keepalived.conf
ymlglobal_defs {
router_id NGINX_MASTER2 # 节点唯一标识(唯一)
}
# 定义Nginx健康检查脚本
vrrp_script check_nginx {
script "/etc/keepalived/scripts/check_nginx.sh" # 脚本路径
interval 2 # 检查间隔(秒)
weight -20 # 脚本返回非0时,优先级降低20
}
# 实例1:管理VIP1(192.168.201.200),节点1为主
vrrp_instance VI_1 {
state BACKUP # 节点2应作为VIP1的备
interface ens33 # 绑定的网卡(根据实际环境修改)
virtual_router_id 51 # 虚拟路由ID(1-255,两实例需不同)
priority 90 # 优先级,应低于节点1的100
advert_int 1 # 心跳间隔(秒)
# 认证配置(两节点需一致)
authentication {
auth_type PASS
auth_pass 123456 # 认证密码
}
# 虚拟IP(VIP1)
virtual_ipaddress {
192.168.201.200/24 dev ens33 # 需与网卡匹配
}
# 绑定健康健康检查脚本
track_script {
check_nginx
}
}
# 实例2:管理VIP2(192.168.201.200),节点2为备
vrrp_instance VI_2 {
state MASTER # 节点2应作为VIP2的主
interface ens33 # 绑定的网卡
virtual_router_id 52 # 与实例1不同
priority 100 # 优先级(节点1低于节点2)
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
# 虚拟IP(VIP2)
virtual_ipaddress {
192.168.201.201/24 dev ens33
}
track_script {
check_nginx
}
}
重启服务
jssystemctl restart keepalived.service


我把192.168.201.100的nginx服务器停止再访问,还是正常的因为健康检查脚本一直在检查,失败就会重新拉起。
我直接把linux服务器关机,验证没问题,能正常跳到节点2

开机后重新恢复

验证节点2
正常情况下

关机后,也正常跳到节点1了

开机后,恢复正常

本文作者:松轩(^U^)
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!