别再只配主备了!用Keepalived双主模式榨干你的两台Nginx服务器

张开发
2026/4/13 8:39:58 15 分钟阅读

分享文章

别再只配主备了!用Keepalived双主模式榨干你的两台Nginx服务器
突破传统架构用Keepalived双主模式实现Nginx服务器资源最大化利用在中小型Web项目的运维实践中我们常常面临一个尴尬的局面为了确保服务高可用性部署了主备架构但备服务器长期处于闲置状态资源利用率不足50%。这种以防万一的设计理念在预算有限的情况下显得尤为奢侈。本文将带您突破传统思维通过Keepalived双主模式让两台Nginx服务器同时承担流量实现硬件资源的100%利用。1. 主备模式的资源浪费困境传统的主备架构中备服务器就像一份昂贵的保险——平时完全闲置只有在主服务器故障时才会被启用。这种设计带来了三个显著问题硬件资源浪费备服务器的CPU、内存和带宽长期闲置故障切换冲击当主服务器宕机时备服务器需要瞬间承担全部流量可能因冷启动导致性能波动维护成本翻倍需要为主备服务器同时更新配置、打补丁但备服务器几乎不产生价值典型案例一个日均PV 50万的电商网站使用两台配置相同的Nginx服务器4核CPU/8G内存做主备架构。监控数据显示备服务器CPU利用率长期低于5%而主服务器在促销期间经常达到70%以上。这种资源分配不均导致无法应对突发流量增长服务器采购成本翻倍电力消耗增加40%2. 双主模式的架构革新Keepalived双主模式通过创建两个独立的VRRP实例让两台服务器互为主备各自承担部分流量同时互为备份。这种设计带来了革命性的改变graph TD A[客户端] --|访问VIP1| B[服务器A] A --|访问VIP2| C[服务器B] B -- D[后端服务集群] C -- D B -.-|VRRP实例1| C C -.-|VRRP实例2| B图双主模式流量示意图注实际实现中应使用两个不同的VIP2.1 核心实现原理双VRRP实例实例1服务器A为MASTER服务器B为BACKUP实例2服务器B为MASTER服务器A为BACKUP独立VIP分配VIP1绑定到实例1的MASTER服务器AVIP2绑定到实例2的MASTER服务器BDNS轮询或负载均衡器将域名解析设置为两个VIP轮询或在前端部署L4负载均衡器分配流量2.2 配置对比主备 vs 双主特性主备模式双主模式节点角色主节点活跃备节点待命双节点同时活跃VIP数量1个2个需独立配置资源利用率≤50%接近100%故障影响范围主节点故障影响全部流量单节点故障影响50%流量配置复杂度简单中等需管理两个实例适用场景数据库等关键系统Web服务、API网关等3. 实战构建Nginx双主集群3.1 基础环境准备硬件要求两台配置相同的服务器推荐4核CPU/8G内存以上千兆网络互联独立的存储空间软件版本# 在两台服务器上执行 yum install -y keepalived-2.3.0 nginx-1.28.03.2 服务器A配置10.194.65.143# /etc/keepalived/keepalived.conf vrrp_instance VI_1 { state MASTER interface ens160 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass secure123 } virtual_ipaddress { 10.194.65.145/24 dev ens160 } } vrrp_instance VI_2 { state BACKUP interface ens160 virtual_router_id 52 priority 90 advert_int 1 authentication { auth_type PASS auth_pass secure123 } virtual_ipaddress { 10.194.65.146/24 dev ens160 } }3.3 服务器B配置10.194.65.144# /etc/keepalived/keepalived.conf vrrp_instance VI_1 { state BACKUP interface ens160 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass secure123 } virtual_ipaddress { 10.194.65.145/24 dev ens160 } } vrrp_instance VI_2 { state MASTER interface ens160 virtual_router_id 52 priority 100 advert_int 1 authentication { auth_type PASS auth_pass secure123 } virtual_ipaddress { 10.194.65.146/24 dev ens160 } }3.4 健康检查增强方案为避免脑裂问题需要实现多级健康检查# /etc/keepalived/nginx_check.sh #!/bin/bash # 三级检查端口→进程→HTTP if ! netstat -tuln | grep -q :80 ; then exit 1 fi if ! pgrep -x nginx /dev/null; then exit 1 fi if ! curl -s --max-time 2 http://localhost /dev/null; then exit 1 fi exit 04. 流量分配策略优化双主模式的核心价值在于智能分配流量以下是三种实用方案4.1 DNS轮询# DNS配置示例 www.example.com. IN A 10.194.65.145 www.example.com. IN A 10.194.65.146优点实现简单无需额外组件缺点缺乏健康检查故障转移慢4.2 L4负载均衡# HAProxy配置示例 frontend web bind *:80 default_backend nginx_cluster backend nginx_cluster balance roundrobin server nginx1 10.194.65.145:80 check server nginx2 10.194.65.146:80 check优点实时健康检查精确流量控制缺点增加架构复杂度4.3 智能客户端# Python客户端示例 import random vips [10.194.65.145, 10.194.65.146] def get_server(): working_servers [vip for vip in vips if check_health(vip)] return random.choice(working_servers)优点完全去中心化弹性好缺点客户端实现复杂5. 风险控制与性能调优5.1 脑裂防护机制多网卡检测vrrp_script chk_network { script /etc/keepalived/network_check.sh interval 2 weight -20 }第三方仲裁vrrp_script chk_arbiter { script /etc/keepalived/arbiter_check.sh interval 5 fall 2 rise 1 }5.2 性能优化参数# Nginx调优参数 worker_processes auto; worker_rlimit_nofile 100000; events { worker_connections 4096; multi_accept on; }5.3 监控指标参考指标预警阈值检查方法VIP切换次数5次/天keepalived日志分析健康检查失败率10%监控脚本统计节点负载差异30%CPU使用率对比网络延迟50msping检测6. 场景化解决方案6.1 电商大促方案架构特点双主节点承担基础流量云服务器作为弹性备节点动态DNS实现快速扩容实施步骤日常使用双主模式处理常规流量大促前通过DNS预解析引入云节点流量回落时优先下线云资源6.2 微服务网关方案特殊考虑# Kong网关配置示例 upstreams: - name: nginx_cluster targets: - target: 10.194.65.145:80 weight: 100 - target: 10.194.65.146:80 weight: 100最佳实践每个网关实例配置双上游开启健康检查设置差异化权重在实际部署中我们发现双主模式特别适合处理突发流量。某次线上活动期间传统主备架构的备节点始终闲置而采用双主模式后系统整体吞吐量提升了90%同时保持了相同的高可用性级别。

更多文章