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

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

相关推荐
森焱森1 小时前
水下航行器外形分类详解
c语言·单片机·算法·架构·无人机
绝不偷吃6 小时前
FastDFS分布式储存
linux·nginx
强哥之神7 小时前
英伟达发布 Llama Nemotron Nano 4B:专为边缘 AI 和科研任务优化的高效开源推理模型
人工智能·深度学习·语言模型·架构·llm·transformer·边缘计算
DemonAvenger7 小时前
高性能 TCP 服务器的 Go 语言实现技巧:从原理到实践
网络协议·架构·go
Code季风8 小时前
深入理解微服务中的服务注册与发现(Consul)
java·运维·微服务·zookeeper·架构·go·consul
java1234_小锋8 小时前
解释一下NGINX的反向代理和正向代理的区别?
运维·nginx
小马哥编程8 小时前
【iSAQB软件架构】架构决策记录-ADR
数据库·架构·系统架构·设计规范
木鱼时刻8 小时前
容器与 Kubernetes 基本概念与架构
容器·架构·kubernetes
zhuyasen10 小时前
定义即代码!这个框架解决了90%的Go开发者还在低效开发项目的问题
架构·go·gin
LCG元10 小时前
云原生微服务间的异步消息通信:最终一致性与系统容错的架构实战
微服务·云原生·架构