【Nginx + Keepalived 实现高可用的负载均衡架构】

使用 Nginx + Keepalived 可以实现高可用的负载均衡架构,确保在某个 Nginx 节点故障时,自动将流量转移到备用节点。以下是详细的实现步骤:


1. 架构概述

  • Nginx:作为负载均衡器,将流量分发到后端服务器。
  • Keepalived:实现虚拟 IP(VIP)的故障转移,确保高可用性。
  • VIP(Virtual IP):客户端通过该 IP 访问服务,Keepalived 负责将 VIP 绑定到主节点或备用节点。

2. 环境准备

  • 两台服务器(主节点和备用节点),均安装 Nginx 和 Keepalived。
  • 确保两台服务器之间可以互相通信。
  • 确保 VIP 未被其他服务占用。

3. 安装 Nginx

在两台服务器上安装 Nginx:

bash 复制代码
# Ubuntu/Debian
sudo apt update
sudo apt install nginx

# CentOS/RHEL
sudo yum install nginx

启动并启用 Nginx:

bash 复制代码
sudo systemctl start nginx
sudo systemctl enable nginx

4. 安装 Keepalived

在两台服务器上安装 Keepalived:

bash 复制代码
# Ubuntu/Debian
sudo apt install keepalived

# CentOS/RHEL
sudo yum install keepalived

启动并启用 Keepalived:

bash 复制代码
sudo systemctl start keepalived
sudo systemctl enable keepalived

5. 配置 Keepalived

5.1 主节点配置

编辑 /etc/keepalived/keepalived.conf

bash 复制代码
vrrp_instance VI_1 {
    state MASTER           # 主节点
    interface eth0         # 网卡名称(根据实际情况修改)
    virtual_router_id 51   # 虚拟路由 ID,主备节点必须相同
    priority 100           # 优先级,主节点高于备用节点
    advert_int 1           # 检查间隔(秒)

    authentication {
        auth_type PASS
        auth_pass 1234     # 认证密码,主备节点必须相同
    }

    virtual_ipaddress {
        192.168.1.100      # 虚拟 IP(VIP)
    }
}

5.2 备用节点配置

编辑 /etc/keepalived/keepalived.conf

bash 复制代码
vrrp_instance VI_1 {
    state BACKUP           # 备用节点
    interface eth0         # 网卡名称(根据实际情况修改)
    virtual_router_id 51   # 虚拟路由 ID,主备节点必须相同
    priority 90            # 优先级,低于主节点
    advert_int 1           # 检查间隔(秒)

    authentication {
        auth_type PASS
        auth_pass 1234     # 认证密码,主备节点必须相同
    }

    virtual_ipaddress {
        192.168.1.100      # 虚拟 IP(VIP)
    }
}

6. 配置 Nginx

在两台服务器上配置 Nginx,确保负载均衡功能正常。例如:

bash 复制代码
http {
    upstream backend {
        server 192.168.1.101;  # 后端服务器 1
        server 192.168.1.102;  # 后端服务器 2
    }

    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }
}

7. 启动服务

7.1 启动 Keepalived

在主节点和备用节点上启动 Keepalived:

bash 复制代码
sudo systemctl restart keepalived

7.2 检查 VIP 绑定

在主节点上检查 VIP 是否绑定:

bash 复制代码
ip addr show eth0

输出示例:

复制代码
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.1.100/32 scope global eth0
       valid_lft forever preferred_lft forever

8. 测试故障转移

8.1 停止主节点的 Keepalived

在主节点上停止 Keepalived:

bash 复制代码
sudo systemctl stop keepalived

8.2 检查备用节点的 VIP

在备用节点上检查 VIP 是否绑定:

bash 复制代码
ip addr show eth0

8.3 恢复主节点

在主节点上重新启动 Keepalived:

bash 复制代码
sudo systemctl start keepalived

VIP 应重新绑定到主节点。


9. 日志与监控

9.1 查看 Keepalived 日志

bash 复制代码
journalctl -u keepalived

9.2 监控 Nginx 状态

确保 Nginx 正常运行:

bash 复制代码
systemctl status nginx

10. 总结

通过 Nginx + Keepalived 实现故障自动转移的步骤如下:

  1. 在两台服务器上安装 Nginx 和 Keepalived。
  2. 配置 Keepalived 的主备节点,设置 VIP。
  3. 配置 Nginx 实现负载均衡。
  4. 测试故障转移功能,确保高可用性。

这种架构可以确保在单点故障时,服务仍然可用,适合生产环境中的高可用需求。

相关推荐
Kendra91912 小时前
从 0 到上线:单文件网页 App 部署到阿里云 ECS 全流程(Nginx+Node+PM2+PostgreSQL)
nginx·阿里云·云计算·部署·个人开发·今天吃什么
阿图灵13 小时前
Agentic AI 架构入门(九):Agent 通信协议全景——ACP/A2A/AG-UI/MCP
人工智能·ui·架构·ai agent·智能体·mcp·agentic ai
这个DBA有点耶14 小时前
3000万个应用共享一套数据库:多租户“逻辑表”架构是如何做到的?
数据库·架构·dba
消失的旧时光-194314 小时前
第一篇:Ktor Client 到底是什么?从 Retrofit 迁移理解 Ktor 网络请求架构
网络·架构·retrofit·ktor·dsl
zlinear数据采集卡14 小时前
D223的PWM电机控制:6路独立脉冲+加减速算法深度解析
arm开发·stm32·嵌入式硬件·算法·fpga开发·架构
香菜TTT14 小时前
主从架构锁丢失问题-----RedLock
架构
Rain的Java大神之路15 小时前
MQ重复消费问题怎么解决
java·经验分享·后端·面试·架构·rabbitmq·rocketmq
这个DBA有点耶15 小时前
DBA进阶之路:从“修数据库”到“管架构债”
数据库·架构·dba
珠***格16 小时前
通信链路全打通:西格电力四可装置的 4G/5G + 加密认证技术详解
大数据·数据库·分布式·5g·架构·能源
艾德克斯16 小时前
从OCP APAC Summit 2026看AI数据中心供电架构演进与测试挑战
人工智能·ai·架构·数据中心·开闭原则·供电测试