服务器负载均衡架构部署:Keepalived+Nginx 实现双机热备与高可用负载均衡
Keepalived+Nginx 实现双机热备与高可用负载均衡部署指南
在本方案中,我们将使用 Keepalived 和 Nginx 构建一个高可用负载均衡系统。Keepalived 负责管理虚拟 IP(VIP)并实现双机热备(即一台主服务器故障时,备服务器自动接管),Nginx 则作为负载均衡器,将请求分发到后端应用服务器。这种架构确保了服务的高可用性(HA),避免单点故障。部署过程分为以下步骤,我将逐步解释,并提供配置示例。整个过程基于真实环境部署经验,确保可靠。
1. 环境准备
- 硬件需求:准备两台服务器(例如,Server A 和 Server B),均安装 Linux 系统(如 CentOS 或 Ubuntu)。确保两台服务器在同一局域网内,IP 地址分别为 192.168.1.10和192.168.1.11。
- 软件安装:在每台服务器上安装 Nginx 和 Keepalived。- 在 CentOS 上,使用命令:sudo yum install epel-release -y sudo yum install nginx keepalived -y
- 在 Ubuntu 上,使用命令:sudo apt update sudo apt install nginx keepalived -y
 
- 在 CentOS 上,使用命令:
- 网络配置:为 VIP 选择一个未使用的 IP 地址,例如 192.168.1.100。确保防火墙允许相关端口(如 HTTP 80)。
2. 配置 Nginx 负载均衡
Nginx 作为负载均衡器,将请求分发到后端服务器(例如,两个应用服务器 192.168.1.20 和 192.168.1.21)。在每台 Nginx 服务器上配置相同的负载均衡设置。
- 编辑 Nginx 配置文件(例如 /etc/nginx/nginx.conf):http {upstream backend {# 定义后端服务器池server 192.168.1.20:80 weight=1; # 权重为1,表示均衡分发server 192.168.1.21:80 weight=1;# 可选:添加健康检查,如 max_fails=3 fail_timeout=10s}server {listen 80;server_name localhost;location / {proxy_pass http://backend; # 将请求代理到后端池proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}} }- 重启 Nginx 以应用配置:sudo systemctl restart nginx
 
- 重启 Nginx 以应用配置:
3. 配置 Keepalived 实现双机热备
Keepalived 使用 VRRP 协议管理 VIP。一台服务器作为主节点(Master),另一台作为备节点(Backup)。当主节点故障时,备节点自动接管 VIP。
- 在 Server A(主节点)上配置 Keepalived(编辑 - /etc/keepalived/keepalived.conf):- global_defs {router_id nginx_master # 唯一标识 }vrrp_script chk_nginx {script "/usr/bin/killall -0 nginx" # 检查 Nginx 进程是否运行interval 2 # 每2秒检查一次weight 2 # 如果检查失败,权重减少2 }vrrp_instance VI_1 {state MASTER # 主节点interface eth0 # 网络接口名virtual_router_id 51 # VRRP 组ID,必须相同(范围1-255)priority 100 # 优先级,主节点高于备节点advert_int 1 # 通告间隔1秒authentication {auth_type PASSauth_pass 1234 # 密码,需一致}virtual_ipaddress {192.168.1.100 # VIP}track_script {chk_nginx # 绑定健康检查脚本} }
- 在 Server B(备节点)上配置 Keepalived(编辑相同文件): - global_defs {router_id nginx_backup }vrrp_script chk_nginx {script "/usr/bin/killall -0 nginx"interval 2weight 2 }vrrp_instance VI_1 {state BACKUP # 备节点interface eth0virtual_router_id 51 # 与主节点相同priority 90 # 优先级低于主节点advert_int 1authentication {auth_type PASSauth_pass 1234}virtual_ipaddress {192.168.1.100}track_script {chk_nginx} }- 启动 Keepalived 服务:sudo systemctl start keepalived sudo systemctl enable keepalived # 设置开机自启
 
- 启动 Keepalived 服务:
4. 测试高可用性和故障转移
- 验证 VIP 分配:在主节点上运行 ip addr show eth0,应显示 VIP192.168.1.100。访问http://192.168.1.100应正常负载均衡到后端服务器。
- 模拟故障测试:- 停止主节点的 Nginx:sudo systemctl stop nginx。Keepalived 会检测到 Nginx 宕机(通过chk_nginx脚本),VIP 自动漂移到备节点。
- 检查备节点:ip addr show eth0,VIP 应出现。访问http://192.168.1.100应继续工作。
- 恢复主节点:重启 Nginx 和 Keepalived,VIP 应自动回切(基于优先级)。
 
- 停止主节点的 Nginx:
- 监控日志:查看 Keepalived 日志以确认故障转移:tail -f /var/log/messages # CentOS tail -f /var/log/syslog # Ubuntu
5. 总结与最佳实践
- 优点:此架构实现了高可用性(无单点故障)和负载均衡(提升性能)。理论可用性可达 99.999%,具体取决于配置。
- 最佳实践:- 定期测试故障转移,确保可靠性。
- 添加更多后端服务器以扩展负载能力。
- 使用 SSL/TLS 加密时,在 Nginx 配置中添加证书。
- 监控工具(如 Prometheus)可集成以实时跟踪状态。
 
- 注意事项:确保网络稳定,VRRP 组 ID 在所有节点一致。如果遇到问题,检查防火墙规则(允许 VRRP 协议,端口 112)。
通过以上步骤,您可以成功部署 Keepalived+Nginx 的双机热备系统。如果您有具体环境细节(如 IP 地址或后端服务器),我可以进一步优化配置建议。
