【详解】Nginx+keepalived双机热备

举报
皮牙子抓饭 发表于 2025/01/01 22:13:34 2025/01/01
【摘要】 Nginx + keepalived 双机热备技术实践前言在互联网的高可用性服务中,单一的服务节点往往无法满足业务对稳定性和可用性的要求。双机热备是一种常见的高可用性解决方案,它通过两台服务器同时运行相同的服务,并使用 Keepalived 来实现故障转移,确保在主服务器发生故障时,备服务器能够立即接管服务,从而保证服务的连续性。本文将详细介绍如何在 Nginx 环境中部署双机热备方案。环境...

Nginx + keepalived 双机热备技术实践

前言

在互联网的高可用性服务中,单一的服务节点往往无法满足业务对稳定性和可用性的要求。双机热备是一种常见的高可用性解决方案,它通过两台服务器同时运行相同的服务,并使用 Keepalived 来实现故障转移,确保在主服务器发生故障时,备服务器能够立即接管服务,从而保证服务的连续性。本文将详细介绍如何在 Nginx 环境中部署双机热备方案。

环境准备

  • 两台 Linux 服务器(本文以 CentOS 7 为例)
  • Nginx 服务器软件
  • Keepalived 软件
  • 一个可用的 IPv4 地址段(本文假设为 192.168.1.0/24)
  • 两个不同的虚拟 IP 地址(VIP,本文假设为 192.168.1.100 和 192.168.1.101)

步骤概览

  1. 在两台服务器上安装 Nginx 和 Keepalived。
  2. 配置 Nginx 以提供相同的服务。
  3. 配置 Keepalived 以实现故障转移。
  4. 测试双机热备功能。

安装 Nginx 和 Keepalived

# 安装 Nginx
yum install nginx -y

# 启动 Nginx 并设置开机自启
systemctl start nginx
systemctl enable nginx

# 安装 Keepalived
yum install keepalived -y

配置 Nginx

在两台服务器上配置相同的 Nginx 服务,例如,提供一个简单的 HTTP 服务:

# nginx.conf

user nginx;
worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    server {
        listen 80;
        server_name _;
        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
            try_files $uri $uri/ =404;
        }
    }
}

确保两台服务器的 Nginx 配置文件完全相同,包括文件路径和配置项。

配置 Keepalived

Keepalived 通过 VRRP(虚拟路由器冗余协议)来实现故障转移。下面是 Keepalived 的配置示例:

# keepalived.conf

! Configuration File for keepalived

# 定义两个虚拟路由器,对应两个 VIP
vrrp_instance VI_1 {
    state MASTER # 主服务器设置为 MASTER
    interface eth0 # 网卡接口
    virtual_router_id 51 # 虚拟路由器 ID,两台服务器必须相同
    priority 100 # 优先级,主服务器的优先级应高于备服务器
    advert_int 1 # 通告间隔,单位秒

    virtual_ipaddress {
        192.168.1.100 # 第一个 VIP
    }
}

vrrp_instance VI_2 {
    state BACKUP # 备服务器设置为 BACKUP
    interface eth0
    virtual_router_id 51
    priority 90
    advert_int 1

    virtual_ipaddress {
        192.168.1.101 # 第二个 VIP
    }
}

在主服务器上,将 ​​state MASTER​​ 设置为 ​​state BACKUP​​,并将 ​​priority​​ 值降低以表明它是备服务器。

启动 Keepalived

# 启动 Keepalived 并设置开机自启
systemctl start keepalived
systemctl enable keepalived

测试双机热备

在测试时,你可以通过在主服务器的 Keepalived 配置中手动设置 ​​state​​ 为 ​​BACKUP​​ 来模拟故障转移。如果一切配置正确,当主服务器发生故障时,备服务器应该能够接管 VIP,并提供服务。

总结

通过 Nginx 和 Keepalived 的结合使用,我们可以在实际的网络服务和负载均衡场景中,Nginx 常被用作 HTTP 和反向代理服务器,而 keepalived 则用于实现高可用性(HA)的解决方案。以下是一个简单的示例,展示了如何在 Nginx 和 keepalived 的配合下实现双机热备。

首先,你需要安装 Nginx 和 keepalived 服务。这个示例假设你已经有了两个服务器,我们称之为 Server A 和 Server B,它们都运行着 Nginx,并且你想要通过 keepalived 来实现它们的双机热备。

Nginx 配置

Nginx 的配置非常简单,你只需要确保 Nginx 在两个服务器上正常运行即可。以下是 Nginx 配置的一个基本示例:

http {
    server {
        listen 80;
        location / {
            # 这里是你的应用逻辑
            # 例如,返回一个简单的 "Hello World"
            return 200 'Hello World';
        }
    }
}

keepalived 配置

keepalived 的配置稍微复杂一些,你需要在两个服务器上配置不同的角色(vrrp_instance 中的 master 或 backup),并且确保它们能够通过 VIP(Virtual IP Address)进行通信。以下是一个简单的 keepalived 配置示例:

Server A 的 keepalived 配置(作为 master)
# 确保在两个服务器上的配置文件路径相同
[root@server-a ~]# vim /etc/keepalived/keepalived.conf

# 配置文件内容
! Configuration File for keepalived

# 定义一个虚拟路由器ID(VRID),例如10
vrrp_instance VI_1 {
    state MASTER # 设置为master
    interface eth0 # 指定接口
    virtual_router_id 10 # 虚拟路由器ID
    priority 200 # 优先级,决定了哪个节点成为主节点
    advert_int 1 # 通告间隔,单位秒

    # 虚拟IP地址,这是客户端访问的IP
    virtual_ipaddress {
        192.168.1.100 # 假设这是你的VIP
    }
}

# 启动 keepalived
systemctl start keepalived
Server B 的 keepalived 配置(作为 backup)
# 确保在两个服务器上的配置文件路径相同
[root@server-b ~]# vim /etc/keepalived/keepalived.conf

# 配置文件内容
! Configuration File for keepalived

# 定义一个虚拟路由器ID(VRID),例如10
vrrp_instance VI_1 {
    state BACKUP # 设置为backup
    interface eth0 # 指定接口
    virtual_router_id 10 # 虚拟路由器ID
    priority 100 # 优先级,低于 Server A 的配置
    advert_int 1 # 通告间隔,单位秒

    # 虚拟IP地址,这是客户端访问的IP
    virtual_ipaddress {
        192.168.1.100 # 假设这是你的VIP
    }
}

# 启动 keepalived
systemctl start keepalived

配置说明

  • 在 keepalived 中,master 节点会一直持有 VIP,直到它不可用或者降级为 backup 节点。
  • backup 节点会监控 master 节点,如果 master 节点不可用,backup 节点会接管 VIP 并成为新的 master。
  • priority 值决定了节点的优先级,值越高,成为 master 的可能性越大。
  • virtual_ipaddress 段定义了 VIP,这是客户端实际访问的 IP 地址。

注意事项

  • 确保两台服务器的 keepalived.conf 文件同步更新,特别是在修改配置后。
  • 确保 Nginx 在两个服务器上都是正常运行的,并且配置相同,以便在 failover 时服务可以无缝切换。
  • 定期测试 failover,以确保 keepalived 配置正确,并且能够在需要时顺利切换。

请注意,这只是一个基本的示例,实际的部署可能需要根据你的网络环境、负载均衡需求和安全要求进行调整。在生产环境中,你可能还需要考虑配置健康检查、安全认证、日志记录等因素。在Nginx+Keepalived的双机热备架构中,您需要配置两个Nginx服务器,以及一个Keepalived实例来管理它们。以下是一个简化的配置示例,包括Nginx配置和Keepalived配置。

Nginx配置

Nginx的配置通常包括以下几个部分:

  1. 主配置文件:nginx.conf,它包含所有Nginx服务器的全局配置。
  2. 虚拟主机配置文件:通常位于conf.d或sites-available目录中,每个文件对应一个虚拟主机。

下面是一个简单的Nginx虚拟主机配置示例:

# 假设这个配置文件位于/etc/nginx/conf.d/example.com.conf

upstream backend {
    server 192.168.1.100:80; # 第一个Nginx服务器的地址和端口
    server 192.168.1.101:80; # 第二个Nginx服务器的地址和端口
    # 可以添加更多的服务器到这个列表中
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $http_host;
        # 其他代理设置...
    }
}

在这个配置中,我们定义了一个名为​​backend​​的上游服务器组,其中包括两个Nginx服务器。然后我们定义了一个监听在80端口的虚拟主机,它将所有的请求代理到​​backend​​服务器组。

Keepalived配置

Keepalived是一个基于VRRP(虚拟路由器冗余协议)的高可用性解决方案。在Nginx+Keepalived的双机热备中,Keepalived用于管理Nginx服务器的健康状态,并确保只有一个Nginx服务器作为主服务器接受客户端请求,而另一个作为备用服务器等待切换。

下面是一个简单的Keepalived配置示例:

# 假设这个配置文件位于/etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state MASTER; # 设置当前节点为Master
    virtual_router_id 51;
    priority 101; # 设置优先级,高于备用节点
    advert_int 1;

    virtual_ipaddress {
        192.168.1.10; # 虚拟IP地址,即客户端访问的IP
    }
}

在这个配置中,我们定义了一个名为​​VI_1​​的VRRP实例,它将当前节点配置为Master。我们设置了一个虚拟IP地址​​192.168.1.10​​,这是客户端访问的IP地址,实际上是分配给Master节点的。

配置文件的位置和权限

确保Nginx配置文件位于Nginx配置目录下,例如​​/etc/nginx/conf.d/​​,并且拥有正确的权限(通常是​​root:root​​)。Keepalived配置文件通常位于​​/etc/keepalived/keepalived.conf​​,同样需要有正确的权限。

启动和监控

配置完成后,您需要重新启动Nginx和Keepalived服务。使用以下命令来启动和停止服务:

systemctl start nginx
systemctl start keepalived

systemctl stop nginx
systemctl stop keepalived

systemctl status nginx
systemctl status keepalived

使用​​systemctl status​​命令可以检查服务的运行状态。

健康检查和故障转移

Keepalived通过发送VRRP通告来确定节点的健康状态。如果Master节点出现故障,Keepalived会自动将备用节点提升为Master。您可以在Keepalived配置中添加健康检查脚本,以确保只有健康的Nginx服务器才能成为Master。

# 假设这个配置文件位于/etc/keepalived/keepalived.conf

...

check_script chk_nginx {
    script "killall -0 nginx || exit 1";
    interval 2;
    weight 2;
}

vrrp_instance VI_1 {
    ...
    track_script {
        chk_nginx;
    }
}

在这个例子中,我们定义了一个名为​​chk_nginx​​的健康检查脚本,它通过

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。