【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. 测试故障转移功能,确保高可用性。

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

相关推荐
云舟吖2 分钟前
基于 electron-vite 实现一个 RPA 网页自动化工具
前端·架构
brzhang2 小时前
当AI接管80%的执行,你“不可替代”的价值,藏在这20%里
前端·后端·架构
Lei活在当下12 小时前
【业务场景架构实战】4. 支付状态分层流转的设计和实现
架构·android jetpack·响应式设计
架构师沉默15 小时前
设计多租户 SaaS 系统,如何做到数据隔离 & 资源配额?
java·后端·架构
kfyty72519 小时前
不依赖第三方,不销毁重建,loveqq 框架如何原生实现动态线程池?
java·架构
刘立军21 小时前
本地大模型编程实战(33)用SSE实现大模型的流式输出
架构·langchain·全栈
一直_在路上21 小时前
Go 语言微服务演进路径:从小型项目到企业级架构
架构·go
三坛海会大神5551 天前
LVS与Keepalived详解(二)LVS负载均衡实现实操
linux·负载均衡·lvs
qq_264220891 天前
LVS负载均衡群集和LVS+Keepalived群集
运维·负载均衡·lvs
雨落Liy1 天前
Nginx 从入门到进阶:反向代理、负载均衡与高性能实战指南
运维·nginx·负载均衡