惊雷无声 发表于 2025-3-30 06:23:18

用Nginx实现负载平衡与高可用架构(整合Keepalived)

前言

在分布式架构中,负载平衡和高可用是保障体系稳定性的两大核心本领。本文将深入解说如何通过Nginx实现七层负载平衡,并结合Keepalived构建无单点故障的高可用架构。文末附完备设置模板!
一、Nginx负载平衡实现方案

1. 核心原理

Nginx通过反向署理将客户端哀求分发到多个后端服务器,基于Upstream模块实现流量调理,支持多种负载算法。
2. 基础设置模板

http {
    upstream backend {
      # 默认轮询算法
      server 192.168.1.101:80 weight=5;# 权重配置
      server 192.168.1.102:80 max_fails=3 fail_timeout=30s; # 健康检查
      server 192.168.1.103:80 backup;    # 备用节点
    }

    server {
      listen 80;
      location / {
            proxy_pass http://backend;
      }
    }
}
3. 负载平衡算法对比

算法设置指令实用场景特点轮询(默认)默认通用场景简单公平,支持权重最少连接least_conn长连接服务(如数据库)动态分配,资源使用率高IP哈希ip_hash会话保持需求固定用户->服务器映射一致性哈希hash $key缓存服务器集群减少缓存击穿 4. 高级功能实现



[*]康健查抄(被动模式):server 192.168.1.102 max_fails=3 fail_timeout=30s;

[*]流量分割(灰度发布):upstream backend {
    server 192.168.1.101 weight=90;# 90%流量到新版本
    server 192.168.1.102 weight=10;# 10%流量到旧版本
}

二、Nginx高可用架构(Keepalived方案)

1. 架构原理

通过VRRP协议实现虚拟IP(VIP)漂移,主备节点自动切换,保障服务不中断。
2. 环境预备



[*]两台Nginx服务器(主:192.168.1.101,备:192.168.1.102)
[*]虚拟IP:192.168.1.100(对外袒露的同一入口)
3. Keepalived设置详解

主节点设置(/etc/keepalived/keepalived.conf):
global_defs {
    router_id nginx_master# 标识节点名称
}

vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"# 健康检查脚本
    interval 2
    weight -20   # 检测失败时降低优先级
}

vrrp_instance VI_1 {
    state MASTER            # 初始状态
    interface eth0          # 物理网卡名称
    virtual_router_id 51    # 集群ID(必须一致)
    priority 100            # 初始优先级(主>备)
   
    advert_int 1            # 心跳间隔
    authentication {      # 认证配置
      auth_type PASS
      auth_pass 1111
    }
   
    virtual_ipaddress {
      192.168.1.100/24    # 虚拟IP
    }
   
    track_script {          # 绑定健康检查
      chk_nginx
    }
}
备节点设置(仅差别部分):
state BACKUP   # 设置为备用
priority 90      # 优先级低于主节点
4. 康健查抄脚本

创建 /etc/keepalived/check_nginx.sh:
#!/bin/bash
# 检测Nginx进程是否存在
if ! pgrep -x "nginx" > /dev/null; then
    systemctl restart nginx || exit 1# 尝试重启,失败则返回1
fi
# 可选:HTTP状态检测
curl -s http://localhost/health > /dev/null || exit 1
赋予实行权限:
chmod +x /etc/keepalived/check_nginx.sh
5. 启动与验证

systemctl start keepalived   # 启动服务
systemctl enable keepalived# 设置开机自启
查看VIP绑定:
ip addr show eth0 | grep 192.168.1.100
三、高级优化方案

1. 双主模式(Active-Active)

# 节点1额外配置
vrrp_instance VI_2 {
    state MASTER
    virtual_router_id 52
    priority 100
    virtual_ipaddress { 192.168.1.101/24 }
}

# 节点2额外配置
vrrp_instance VI_2 {
    state BACKUP
    virtual_router_id 52
    priority 90
    virtual_ipaddress { 192.168.1.101/24 }
}
2. 结合DNS轮询



[*]将多个VIP绑定到同一个域名
[*]实现多级负载平衡(DNS层+Nginx层)
3. 监控告警集成



[*]Prometheus监控指标:# 安装nginx_exporter
location /stub_status {
    stub_status;
    allow 127.0.0.1;
    deny all;
}

四、常见题目与解决方案

题目现象排查步骤解决方案VIP不漂移1. 查抄防火墙是否允许VRRP协议
2. 查看keepalived日记开放IP协议号112脑裂(双主)1. 查抄网络连通性
2. 确认virtual_router_id唯一设置差别的router_id康健查抄误判1. 查抄脚本实行权限
2. 增加curl超时设置优化检测逻辑 总结

通过Nginx实现负载平衡可提升体系吞吐量,而结合Keepalived的高可用方案能确保服务零中断。现实部署时需注意:

[*]根据业务场景选择合适的负载算法
[*]VIP需与物理网络在同一子网
[*]生产环境建议使用双主+康健查抄加强模式

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 用Nginx实现负载平衡与高可用架构(整合Keepalived)