深入解析:Nginx+Keepalived实现双机热备架构

发布于:2025-03-24 ⋅ 阅读:(27) ⋅ 点赞:(0)

开篇语

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

在上期的内容中,我们详细讲解了 Nginx 的负载均衡配置和高可用性方案,包括反向代理、健康检查、动态负载均衡等特性。然而,仅仅依赖单台 Nginx 的部署方案存在单点故障(Single Point of Failure, SPOF)的风险,一旦 Nginx 节点发生宕机,整个系统的访问将受到影响。

为了解决这一问题,本期我们将深入探讨如何使用 Nginx + Keepalived 实现双机热备,以增强系统的高可用性和可靠性。我们将从基本概念入手,逐步介绍架构设计、安装配置、实战案例以及优缺点分析,帮助您轻松构建高效稳定的双机热备系统。


摘要

Nginx 是一种高性能的 HTTP 和反向代理服务器,而 Keepalived 是一款强大的高可用性解决方案工具。通过将二者结合,可以实现 Nginx 的双机热备,确保服务的高可用性。在这篇文章中,我们将介绍 Nginx+Keepalived 的工作原理、配置步骤以及实际应用案例,并探讨其在生产环境中的适用场景和潜在优化方案。


概述

什么是双机热备?

双机热备 是一种高可用性架构设计,指两台主机(通常为同一角色的服务器)通过某种机制保持一种主备关系,主机负责实际的业务处理,备机处于热备状态(实时同步主机状态),在主机发生故障时,备机可以迅速接管主机的业务,从而保证服务不中断。

为什么选择 Nginx + Keepalived?

  • Nginx:作为负载均衡器和反向代理服务器,Nginx 提供了卓越的性能,但本身不支持双机热备。
  • Keepalived:通过虚拟路由冗余协议(VRRP)实现 IP 的漂移(即虚拟 IP 的动态分配),可实现双机热备的切换功能。

二者结合可以有效地解决单点故障问题,同时提供高性能和高可用的服务。

本文目标

  • 理解 Nginx+Keepalived 的工作原理和架构设计
  • 掌握配置步骤和实战案例
  • 探讨其适用场景、优缺点及优化方向

架构设计与原理

Nginx+Keepalived 双机热备架构的核心思想是通过 Keepalived 提供的 VRRP 协议实现 VIP(虚拟 IP) 的动态漂移。当主服务器发生故障时,VIP 自动切换到备服务器,用户无感知。

架构示意图

        +-------------------+          +-------------------+
        |                   |          |                   |
        |   Nginx 主节点    |          |   Nginx 备节点    |
        |   192.168.1.101   |          |   192.168.1.102   |
        |                   |          |                   |
        +-------------------+          +-------------------+
                  |                              |
                  +----------------+-------------+
                                   |
                            虚拟IP (VIP)
                             192.168.1.100
                                   |
                          客户端通过VIP访问

工作原理

  1. VRRP 协议
    Keepalived 基于 VRRP 协议定义主备节点的状态。主节点持续发送心跳信号给备节点,一旦备节点检测不到主节点的信号,就会立即将 VIP 接管,提供服务。

  2. VIP(虚拟 IP)漂移
    VIP 是用户访问的统一入口,通过 Keepalived 动态分配给主机或备机,确保用户的访问不受影响。

  3. Nginx 提供服务
    无论 VIP 漂移到哪个节点,Nginx 都会持续提供反向代理和负载均衡服务。


环境准备

系统与软件环境

  • 操作系统:CentOS 7
  • 软件版本:
    • Nginx 1.18+
    • Keepalived 2.0+

基础网络配置

  • 主服务器 IP:192.168.1.101
  • 备服务器 IP:192.168.1.102
  • 虚拟 IP(VIP):192.168.1.100

实战:Nginx + Keepalived 双机热备配置

第一步:安装 Nginx 和 Keepalived

在两台服务器上分别安装 Nginx 和 Keepalived。

安装 Nginx
sudo yum install -y epel-release
sudo yum install -y nginx
systemctl enable nginx
systemctl start nginx
安装 Keepalived
sudo yum install -y keepalived
systemctl enable keepalived

第二步:配置 Nginx

确保两台服务器上的 Nginx 配置一致。

编辑 Nginx 配置文件
sudo vim /etc/nginx/nginx.conf

添加以下内容(反向代理为示例):

http {
    upstream backend {
        server 192.168.1.201:8080;
        server 192.168.1.202:8080;
    }

    server {
        listen 80;
        server_name 192.168.1.100; # 虚拟 IP

        location / {
            proxy_pass http://backend;
        }
    }
}

保存后重启 Nginx:

sudo systemctl restart nginx

第三步:配置 Keepalived

主节点配置(192.168.1.101)

编辑主节点的 Keepalived 配置文件:

sudo vim /etc/keepalived/keepalived.conf

配置内容如下:

vrrp_instance VI_1 {
    state MASTER
    interface eth0 # 主网卡名称
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.1.100
    }
}
备节点配置(192.168.1.102)

编辑备节点的配置文件:

sudo vim /etc/keepalived/keepalived.conf

配置内容如下:

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.1.100
    }
}
启动 Keepalived

在两台服务器上分别启动 Keepalived:

sudo systemctl start keepalived

第四步:验证配置

  1. VIP 验证
    在主节点上,执行 ip addr,可以看到 VIP(192.168.1.100)已经绑定到主节点。

  2. 故障模拟
    停止主节点的 Keepalived 服务:

    sudo systemctl stop keepalived
    

    然后在备节点上查看 VIP 是否已经漂移到备节点:

    ip addr
    
  3. Nginx 服务验证
    在客户端访问 http://192.168.1.100,确保服务正常。


应用场景案例

  1. 企业级高可用系统
    用于保障 Web 应用服务的持续可用性,例如企业门户网站、API 服务等。

  2. 电子商务平台
    保障在线交易的高可靠性,防止单点故障导致的交易中断。

  3. 负载均衡与灾备系统
    在大流量场景下,通过 Nginx 实现负载均衡,同时通过 Keepalived 提供灾备切换能力。


优缺点分析

优点

  • 高可用性:主备切换迅速,用户无感知。
  • 成本低:基于开源软件,部署成本低。
  • 扩展性强:可以与 Nginx 的负载均衡功能结合使用,进一步增强性能。

缺点

  • 复杂度较高:配置和调试需要一定经验。
  • 单点问题:Keepalived 本身也可能成为单点故障,可通过集群方式解决。

核心配置说明

  1. state

    • 主节点设置为 MASTER,备节点设置为 BACKUP
  2. priority
    决定主备优先级,数值越大优先级越高。

  3. authentication
    VRRP 协议的认证配置,用于保证主备通信安全。


小结

通过本文的学习,我们详细了解了 Nginx+Keepalived 的工作原理、配置步骤以及验证方式。通过双机热备架构,不仅能够提高服务的可靠性,还能显著增强系统的容灾能力。


总结

Nginx+Keepalived 是构建高可用性架构的经典组合。它通过虚拟 IP 实现主备节点之间的无缝切换,为用户提供了可靠的访问保障。在实际项目中,我们可以结合具体业务需求对架构进行优化,例如配置更复杂的健康检查脚本或使用 Keepalived 集群,进一步提升系统的健壮性。

希望本文能为您的高可用架构设计提供有价值的参考!

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。


版权声明:本文由作者原创,转载请注明出处,谢谢支持!