编辑
2025-10-26
Keepalived
00

目录

一、Nginx双主配置
二、双主配置
节点1:192.168.201.100
节点2:192.168.201.104
三、实践测试

一、Nginx双主配置

  • 节点 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 对应的业务都不中断。

js
nginx节点1192.168.201.100:80 nginx节点2192.168.201.104:80

创建检查脚本,两个节点都要创建

js
vi /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 # 必须确保脚本能正常退出
js
chmod 755 /etc/keepalived/scripts/check_nginx.sh

二、双主配置

节点1:192.168.201.100

js
vi /etc/keepalived/keepalived.conf
yml
global_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 } }

重启服务

js
systemctl restart keepalived.service

节点2:192.168.201.104

js
vi /etc/keepalived/keepalived.conf
yml
global_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 } }

重启服务

js
systemctl restart keepalived.service

三、实践测试

  1. 访问虚拟ip都能访问到对应的nginx

image.png

image.png

我把192.168.201.100的nginx服务器停止再访问,还是正常的因为健康检查脚本一直在检查,失败就会重新拉起。

我直接把linux服务器关机,验证没问题,能正常跳到节点2 image.png

开机后重新恢复

image.png

验证节点2

正常情况下

image.png

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

image.png

开机后,恢复正常 image.png

本文作者:松轩(^U^)

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

Document