使用 Nginx + Keepalived 可以实现高可用的负载均衡架构,确保在某个 Nginx 节点故障时,自动将流量转移到备用节点。以下是详细的实现步骤:
1. 架构概述
- Nginx:作为负载均衡器,将流量分发到后端服务器。
- Keepalived:实现虚拟 IP(VIP)的故障转移,确保高可用性。
- VIP(Virtual IP):客户端通过该 IP 访问服务,Keepalived 负责将 VIP 绑定到主节点或备用节点。
2. 环境准备
- 两台服务器(主节点和备用节点),均安装 Nginx 和 Keepalived。
- 确保两台服务器之间可以互相通信。
- 确保 VIP 未被其他服务占用。
3. 安装 Nginx
在两台服务器上安装 Nginx:
# Ubuntu/Debian
sudo apt update
sudo apt install nginx# CentOS/RHEL
sudo yum install nginx
启动并启用 Nginx:
sudo systemctl start nginx
sudo systemctl enable nginx
4. 安装 Keepalived
在两台服务器上安装 Keepalived:
# Ubuntu/Debian
sudo apt install keepalived# CentOS/RHEL
sudo yum install keepalived
启动并启用 Keepalived:
sudo systemctl start keepalived
sudo systemctl enable keepalived
5. 配置 Keepalived
5.1 主节点配置
编辑 /etc/keepalived/keepalived.conf
:
vrrp_instance VI_1 {state MASTER # 主节点interface eth0 # 网卡名称(根据实际情况修改)virtual_router_id 51 # 虚拟路由 ID,主备节点必须相同priority 100 # 优先级,主节点高于备用节点advert_int 1 # 检查间隔(秒)authentication {auth_type PASSauth_pass 1234 # 认证密码,主备节点必须相同}virtual_ipaddress {192.168.1.100 # 虚拟 IP(VIP)}
}
5.2 备用节点配置
编辑 /etc/keepalived/keepalived.conf
:
vrrp_instance VI_1 {state BACKUP # 备用节点interface eth0 # 网卡名称(根据实际情况修改)virtual_router_id 51 # 虚拟路由 ID,主备节点必须相同priority 90 # 优先级,低于主节点advert_int 1 # 检查间隔(秒)authentication {auth_type PASSauth_pass 1234 # 认证密码,主备节点必须相同}virtual_ipaddress {192.168.1.100 # 虚拟 IP(VIP)}
}
6. 配置 Nginx
在两台服务器上配置 Nginx,确保负载均衡功能正常。例如:
http {upstream backend {server 192.168.1.101; # 后端服务器 1server 192.168.1.102; # 后端服务器 2}server {listen 80;location / {proxy_pass http://backend;}}
}
7. 启动服务
7.1 启动 Keepalived
在主节点和备用节点上启动 Keepalived:
sudo systemctl restart keepalived
7.2 检查 VIP 绑定
在主节点上检查 VIP 是否绑定:
ip addr show eth0
输出示例:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000inet 192.168.1.100/32 scope global eth0valid_lft forever preferred_lft forever
8. 测试故障转移
8.1 停止主节点的 Keepalived
在主节点上停止 Keepalived:
sudo systemctl stop keepalived
8.2 检查备用节点的 VIP
在备用节点上检查 VIP 是否绑定:
ip addr show eth0
8.3 恢复主节点
在主节点上重新启动 Keepalived:
sudo systemctl start keepalived
VIP 应重新绑定到主节点。
9. 日志与监控
9.1 查看 Keepalived 日志
journalctl -u keepalived
9.2 监控 Nginx 状态
确保 Nginx 正常运行:
systemctl status nginx
10. 总结
通过 Nginx + Keepalived 实现故障自动转移的步骤如下:
- 在两台服务器上安装 Nginx 和 Keepalived。
- 配置 Keepalived 的主备节点,设置 VIP。
- 配置 Nginx 实现负载均衡。
- 测试故障转移功能,确保高可用性。
这种架构可以确保在单点故障时,服务仍然可用,适合生产环境中的高可用需求。