
在一些高流量的Web应用场景中,单个Nginx实例可能无法提供足够的性能和稳定性。为了避免单点故障带来的服务中断,通常需要将 Nginx 部署为一个高可用集群,其中一个节点作为主节点,另一个节点作为备节点。为了实现节点之间的自动故障切换,我们可以使用 Keepalived 作为一个高可用性解决方案,结合 Nginx 配置负载均衡功能,实现主备切换的功能。
1.部署目标
- 使用 Keepalived 实现主备节点的高可用性。
- 配置 Nginx 在两台服务器上进行负载均衡。
- 在主节点出现故障时,自动切换至备节点,保持服务不中断。
2. 硬件与软件配置
硬件配置
假设我们有两台物理服务器,分别配置如下:
Server 1(主节点)
- CPU:Intel Xeon E5-2620 v4 (8 核)
- 内存:16 GB
- 存储:500 GB SSD
- 操作系统:CentOS 7
- 公网 IP:203.0.113.1
Server 2(备节点)
- CPU:Intel Xeon E5-2620 v4 (8 核)
- 内存:16 GB
- 存储:500 GB SSD
- 操作系统:CentOS 7
- 公网 IP:203.0.113.2
软件配置
- Nginx:版本 1.18
- Keepalived:版本 2.0
- 操作系统:CentOS 7
为了便于理解,本文将使用 Keepalived 进行 VRRP(Virtual Router Redundancy Protocol)配置,通过虚拟 IP 来实现主备切换。主节点和备节点上将运行 Nginx 服务,并通过 Keepalived 管理虚拟 IP 的切换。
3. 安装与配置
安装 Nginx
在两台服务器上安装 Nginx:
sudo yum install epel-release
sudo yum install nginx
安装完成后,启动 Nginx 服务:
sudo systemctl start nginx
sudo systemctl enable nginx
可以通过访问 http://203.0.113.1 和 http://203.0.113.2 来检查 Nginx 是否成功启动。
安装 Keepalived
在两台服务器上安装 Keepalived:
sudo yum install keepalived
配置 Keepalived
①主节点配置(Server 1)
在主节点 Server 1 上配置 Keepalived。编辑 /etc/keepalived/keepalived.conf 文件:
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
203.0.113.100
}
}
解释:
- state MASTER:指定该服务器为主节点。
- priority 101:主节点的优先级设置为 101,备节点的优先级应低于 101(例如 100)。
- virtual_ipaddress:指定虚拟 IP 地址 203.0.113.100,这是主备切换时使用的虚拟 IP。
②备节点配置(Server 2)
在备节点 Server 2 上配置 Keepalived。编辑 /etc/keepalived/keepalived.conf 文件:
http {
upstream backend {
server 127.0.0.1:80; # 指向本地 Nginx 服务
# 可以添加更多的后端服务器(例如多个应用服务器)
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
解释:
- state BACKUP:指定该服务器为备节点。
- priority 100:备节点的优先级设置为 100。
③ 启动 Keepalived
在两台服务器上启动 Keepalived 服务:
sudo systemctl start keepalived
sudo systemctl enable keepalived
通过 ip addr show 命令可以查看虚拟 IP 地址是否已经被分配。
4. 配置 Nginx 负载均衡
Nginx 配置负载均衡用于在多个 Web 服务器之间分发流量。在主节点和备节点上,编辑 Nginx 配置文件 /etc/nginx/nginx.conf,配置负载均衡规则:
nginx
复制
编辑
http {
upstream backend {
server 127.0.0.1:80; # 指向本地 Nginx 服务
# 可以添加更多的后端服务器(例如多个应用服务器)
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
在每台服务器上都进行相同的配置,并重启 Nginx 服务:
bash
复制
编辑
sudo systemctl restart nginx
5. 测试与验证
验证虚拟 IP 的切换:在主节点 Server 1 上停掉 Keepalived 服务:
bash
复制
编辑
sudo systemctl stop keepalived
此时,虚拟 IP 203.0.113.100 会自动切换到备节点 Server 2。使用 ping 命令或访问虚拟 IP 地址来验证切换是否成功。
验证负载均衡:同时向虚拟 IP 地址发起请求,查看请求是否被负载均衡到正确的服务器上。可以通过查看 Nginx 日志来确认请求的处理情况。
验证故障恢复:恢复主节点上的 Keepalived 服务,验证虚拟 IP 是否能够自动切换回主节点,并且 Nginx 服务继续正常运行。
我们通过 Keepalived 和 Nginx 配置高可用主备切换方案,可以有效避免 Web 服务的单点故障,确保在一个节点发生故障时,另一个节点能够自动接管流量,保证服务的高可用性。











