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

全文目录:

开篇语

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区: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
bash 复制代码
sudo yum install -y epel-release
sudo yum install -y nginx
systemctl enable nginx
systemctl start nginx
安装 Keepalived
bash 复制代码
sudo yum install -y keepalived
systemctl enable keepalived

第二步:配置 Nginx

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

编辑 Nginx 配置文件
bash 复制代码
sudo vim /etc/nginx/nginx.conf

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

nginx 复制代码
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:

bash 复制代码
sudo systemctl restart nginx

第三步:配置 Keepalived

主节点配置(192.168.1.101)

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

bash 复制代码
sudo vim /etc/keepalived/keepalived.conf

配置内容如下:

bash 复制代码
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)

编辑备节点的配置文件:

bash 复制代码
sudo vim /etc/keepalived/keepalived.conf

配置内容如下:

bash 复制代码
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:

bash 复制代码
sudo systemctl start keepalived

第四步:验证配置

  1. VIP 验证

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

  2. 故障模拟

    停止主节点的 Keepalived 服务:

    bash 复制代码
    sudo systemctl stop keepalived

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

    bash 复制代码
    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 !!!


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

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。


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

相关推荐
一心0927 小时前
ubuntu 20.04.6 sudo 源码包在线升级到1.9.17p1
运维·ubuntu·sudo·漏洞升级
好好学习啊天天向上7 小时前
世上最全:ubuntu 上及天河超算上源码编译llvm遇到的坑,cmake,ninja完整过程
linux·运维·ubuntu·自动性能优化
你想考研啊7 小时前
三、jenkins使用tomcat部署项目
运维·tomcat·jenkins
代码老y8 小时前
Docker:容器化技术的基石与实践指南
运维·docker·容器
典学长编程8 小时前
Linux操作系统从入门到精通!第二天(命令行)
linux·运维·chrome
DuelCode9 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
ai小鬼头10 小时前
AIStarter如何助力用户与创作者?Stable Diffusion一键管理教程!
后端·架构·github
你想考研啊11 小时前
四、jenkins自动构建和设置邮箱
运维·jenkins
Code blocks11 小时前
使用Jenkins完成springboot项目快速更新
java·运维·spring boot·后端·jenkins
饥饿的半导体12 小时前
Linux快速入门
linux·运维