“服务组件隔离”指在Nginx双机热备中逻辑分离职责:Nginx专注流量转发,Keepalived专管VIP与健康决策;配置、健康检查、权限、日志监控均须严格分治,互不越界。

在 Nginx 双机热备架构中,“服务组件隔离”不是指把 Nginx 和 Keepalived 拆到不同机器上——它们必须共存于同一台节点才能协同工作;而是指在逻辑与运行层面,明确划分各组件职责、避免相互干扰,确保故障判断准确、切换可靠。核心在于:Nginx 负责流量转发与业务处理,Keepalived 负责 VIP 管理与健康决策,二者边界清晰、互不越权。
配置文件与角色严格分离
两台服务器的 Nginx 配置必须完全一致(监听端口、upstream、proxy_set_header、root 路径等),但 Keepalived 配置需差异化:主节点 state 为 MASTER、priority 更高(如 100),备节点 state 为 BACKUP、priority 较低(如 90),virtual_router_id 必须相同。不能将 Nginx 的 upstream 列表或 SSL 证书路径写进 keepalived.conf,也不应在 nginx.conf 中硬编码 VIP 地址——VIP 仅由 Keepalived 绑定,Nginx 始终监听本地 127.0.0.1 或 0.0.0.0:80。
健康检查不依赖进程存在,而依赖真实服务能力
Keepalived 的 vrrp_script 必须调用独立脚本(如 /opt/chk_nginx.sh),该脚本执行 curl -s --connect-timeout 3 http://127.0.0.1/health 或类似探针接口,返回非 0 时触发权重调整或故障转移。不能仅靠 ps -C nginx 判断——Nginx 进程存活但 worker 卡死、502 大量返回时,服务已不可用,但进程仍在。脚本应包含重试与超时控制,避免误判。
网络与权限最小化隔离
Keepalived 需要 CAP_NET_ADMIN 权限操作 VIP,但不应以 root 持久运行全部逻辑;建议用 systemd 限制其能力范围。Nginx 主进程通常以 root 启动,worker 进程降权为 nginx 用户,二者用户组不得交叉(如 keepalived 不应属于 nginx 组)。防火墙策略也需区分:VRRP 使用协议号 112(非端口),HTTP 流量走 TCP 80/443,两者规则独立配置,互不影响。
日志与监控分源采集
Nginx 错误日志(/var/log/nginx/error.log)和访问日志专注业务请求链路;Keepalived 日志(默认输出到系统日志 /var/log/messages)只记录状态变更、优先级调整、VIP 绑定/释放事件。监控告警应分别采集:Nginx 指标关注 5xx 比率、连接数、upstream 失败率;Keepalived 指标关注 advert_int 超时、vrrp_instance 状态、script 执行失败次数。二者告警阈值与响应流程必须独立设计。


















