跳到主要内容

Nginx Keepalived 配置

在现代 Web 架构中,高可用性(High Availability, HA)是一个关键目标。Nginx 作为一款高性能的 Web 服务器和反向代理服务器,通常被用于处理高流量场景。为了确保 Nginx 服务在服务器故障时仍能正常运行,我们可以使用 Keepalived 来实现高可用性。

什么是 Keepalived?

Keepalived 是一个基于 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)的软件,用于实现 IP 地址的自动故障转移。通过 Keepalived,我们可以将多个服务器配置为一个虚拟 IP(VIP),当主服务器发生故障时,备用服务器会自动接管 VIP,从而确保服务的连续性。

为什么需要 Keepalived?

在高流量场景中,单点故障可能导致服务中断,影响用户体验。通过 Keepalived,我们可以:

  • 实现故障转移:当主服务器宕机时,备用服务器会自动接管服务。
  • 提高系统可用性:确保服务在硬件或软件故障时仍能正常运行。
  • 负载均衡:结合 Nginx,可以实现更复杂的负载均衡策略。

Keepalived 的基本工作原理

Keepalived 通过 VRRP 协议在多个服务器之间进行通信,选举出一个主服务器(Master),其他服务器作为备用(Backup)。主服务器持有虚拟 IP(VIP),并负责处理所有流量。如果主服务器发生故障,备用服务器会接管 VIP,继续提供服务。

配置 Keepalived 实现 Nginx 高可用

接下来,我们将逐步讲解如何配置 Keepalived 来实现 Nginx 的高可用性。

1. 安装 Keepalived

首先,在每台服务器上安装 Keepalived。以下命令适用于基于 Debian 的系统(如 Ubuntu):

bash
sudo apt-get update
sudo apt-get install keepalived

对于基于 Red Hat 的系统(如 CentOS),可以使用以下命令:

bash
sudo yum install keepalived

2. 配置 Keepalived

Keepalived 的配置文件通常位于 /etc/keepalived/keepalived.conf。我们需要在主服务器和备用服务器上分别配置该文件。

主服务器配置

在主服务器上,编辑 /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 1234
}
virtual_ipaddress {
192.168.1.100
}
}
  • state MASTER:表示该服务器为主服务器。
  • interface eth0:指定用于 VRRP 通信的网络接口。
  • virtual_router_id 51:虚拟路由 ID,必须在同一组服务器中唯一。
  • priority 100:优先级,主服务器的优先级应高于备用服务器。
  • advert_int 1:VRRP 广播间隔时间(秒)。
  • authentication:用于服务器之间的认证。
  • virtual_ipaddress:虚拟 IP 地址,客户端将通过该地址访问服务。

备用服务器配置

在备用服务器上,编辑 /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 1234
}
virtual_ipaddress {
192.168.1.100
}
}
  • state BACKUP:表示该服务器为备用服务器。
  • priority 90:备用服务器的优先级应低于主服务器。

3. 启动 Keepalived 服务

在主服务器和备用服务器上启动 Keepalived 服务:

bash
sudo systemctl start keepalived
sudo systemctl enable keepalived

4. 验证配置

你可以通过以下命令检查 Keepalived 的状态:

bash
sudo systemctl status keepalived

此外,你还可以使用 ip addr show 命令查看虚拟 IP 是否已绑定到主服务器的网络接口上。

实际应用场景

假设你有一个电商网站,使用 Nginx 作为反向代理服务器。为了确保网站在服务器故障时仍能正常运行,你可以配置 Keepalived 实现 Nginx 的高可用性。当主服务器发生故障时,备用服务器会自动接管服务,确保用户仍能访问网站。

提示

在实际生产环境中,建议结合监控工具(如 Prometheus)来实时监控服务器的健康状态,并在故障发生时及时通知运维人员。

总结

通过 Keepalived,我们可以轻松实现 Nginx 的高可用性架构,确保服务在服务器故障时仍能正常运行。本文介绍了 Keepalived 的基本工作原理、配置步骤以及实际应用场景。希望这些内容能帮助你更好地理解和使用 Keepalived。

附加资源

练习

  1. 在两台服务器上配置 Keepalived,并测试故障转移功能。
  2. 结合 Nginx,实现一个高可用的 Web 服务,并模拟主服务器故障,观察备用服务器是否能够接管服务。