当前位置: 首页 > ds >正文

Keepalived 与 Nginx 高可用部署方案详解

Keepalived 与 Nginx 高可用部署方案详解

Nginx 作为高性能 Web 服务器和反向代理,在生产环境中通常需要高可用(High Availability, HA)部署以避免单点故障。结合 Keepalived 可以实现主备切换或双活模式。以下是几种主流的高可用方案:


1. 基于 Keepalived + VIP 的主备高可用方案

(1)架构

客户端 → 虚拟IP (VIP)├── Nginx 主节点(Active)└── Nginx 备节点(Backup)
  • VIP (Virtual IP):客户端访问的浮动 IP,由 Keepalived 管理。
  • Keepalived:通过 VRRP 协议实现主备切换,检测 Nginx 健康状态。

(2)部署步骤

① 安装 Nginx 和 Keepalived
# Ubuntu/Debian
sudo apt install nginx keepalived# CentOS/RHEL
sudo yum install nginx keepalived
② 配置 Nginx

/etc/nginx/nginx.conf(主备节点配置相同):

http {upstream backend {server 192.168.1.101:80;  # 后端服务器 1server 192.168.1.102:80;  # 后端服务器 2}server {listen 80;location / {proxy_pass http://backend;}}
}
③ 配置 Keepalived

/etc/keepalived/keepalived.conf(主节点):

vrrp_script chk_nginx {script "/usr/bin/pgrep nginx"  # 检查 Nginx 进程interval 2weight 2
}vrrp_instance VI_1 {state MASTER           # 主节点interface eth0         # 网卡virtual_router_id 51   # VRRP 组 ID(必须相同)priority 100           # 主节点优先级(备节点设为 50)advert_int 1authentication {auth_type PASSauth_pass 1234     # 主备节点密码一致}virtual_ipaddress {192.168.1.100/24   # VIP}track_script {chk_nginx        # 关联健康检查}
}

备节点 只需修改 state BACKUPpriority 50

④ 启动服务
sudo systemctl start nginx
sudo systemctl start keepalived
sudo systemctl enable nginx keepalived

(3)故障切换测试

  • 手动停止主节点 Nginx
    sudo systemctl stop nginx
    
  • 观察 VIP 是否漂移到备节点
    ip addr show eth0
    

2. 基于 Keepalived 的双活模式(多 VIP)

(1)架构

客户端 → DNS 轮询├── Nginx 节点 1(VIP1)└── Nginx 节点 2(VIP2)
  • 两个 VIP:每个 Nginx 节点绑定一个 VIP,DNS 轮询分发流量。
  • 无单点故障:两个节点同时工作,故障时 DNS 自动切换。

(2)配置方式

  • 节点 1(VIP1: 192.168.1.100):
    vrrp_instance VI_1 {state MASTERvirtual_router_id 51priority 100virtual_ipaddress {192.168.1.100/24}
    }
    
  • 节点 2(VIP2: 192.168.1.101):
    vrrp_instance VI_2 {state MASTERvirtual_router_id 52priority 100virtual_ipaddress {192.168.1.101/24}
    }
    
  • DNS 配置
    example.com → 192.168.1.100
    example.com → 192.168.1.101
    

(3)优缺点

  • 优点:无 VIP 争抢,适合高并发场景。
  • 缺点:DNS TTL 影响切换速度。

3. 基于云厂商 LB + Nginx(AWS ALB/NLB)

(1)架构

客户端 → AWS ALB/NLB├── Nginx 节点 1└── Nginx 节点 2
  • 云负载均衡器(如 AWS ALB) 作为入口,分发流量到多个 Nginx 实例。
  • Nginx 负责反向代理、缓存等高级功能。

(2)部署示例(AWS)

  1. 创建 Target Group,注册 Nginx 实例。
  2. 配置 ALB/NLB 监听 80/443,指向 Target Group。
  3. 每个 Nginx 节点独立运行相同配置。

(3)优缺点

  • 优点:云厂商 LB 自带高可用,无需维护 VIP。
  • 缺点:成本较高,依赖云服务。

4. 最佳实践总结

方案适用场景优点缺点
Keepalived + VIP(主备)传统服务器简单可靠备节点闲置
Keepalived 双活(多 VIP)高并发需求无单点故障DNS 依赖
云 LB + NginxAWS/Azure/GCP免维护 LB成本高

推荐选择

  • 大多数场景Keepalived + VIP(简单高效)。
  • 云环境:直接使用 云厂商 LB
  • 超高可用需求双活 + DNS 轮询

5. 监控与维护

  • Nginx 健康检查
    curl -I http://localhost
    
  • Keepalived 日志
    tail -f /var/log/syslog | grep Keepalived
    
  • Prometheus + Grafana:使用 nginx-exporter 监控 Nginx 状态。

通过以上方案,可以确保 Nginx 在故障时自动切换,保障业务连续性。

http://www.xdnf.cn/news/13547.html

相关文章:

  • 【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
  • ROS move base 简易调试
  • 使用智能表格做项目工时管理
  • 软件开发和嵌入式开发岗位的面试题
  • 【深尚想】SN74HCT244DWR缓冲器/驱动器TI逻辑芯片 电子元器件解析
  • 【题解】P1156 垃圾陷阱
  • “新京味”小柯音乐剧《三里屯42》 在小柯剧场6月全新开演
  • Oraclede 的体系结构
  • pycharm-continue插件久后使用的注意事项
  • Java是实现大根堆
  • Unreal从入门到精通之 碰撞响应 详解
  • 【JavaScript】 HTTP Cookie 核心知识梳理与常用的封装实现
  • 数字孪生城市崛起:智慧城市生态中的技术协同与治理变革
  • DSP使用三角函数问题
  • 卷积神经网络参数量计算
  • 常用ADB命令
  • AIGC 基础篇 Python基础 04 for循环与while循环
  • Java 语言特性(面试系列2)
  • 自动K码对齐
  • Kotlin基础语法一
  • float负数浮点值强转uint16_t
  • NIFI的处理器:ConsumeMQTT 2.4.0
  • 【Zephyr 系列 17】多协议网关实战:BLE + LoRa + UART + MQTT 综合调度系统设计与实现
  • CoW模式、线程的本地存储和生产者-消费者模式
  • 线程分离属性
  • 【Python】 -- 趣味代码 - 扫雷游戏
  • 使用obsutil工具在OBS上完成基本的数据存取【玩转华为云】
  • LLM 推理:LLM 路由和分层技术的表征和分析
  • 进行性核上性麻痹护理指南:全维度守护健康
  • LIGHT (数据库操作)