Nginx + Keepalived 达成高可用负载均衡集群

Nginx + Keepalived 高可用负载均衡集群实现

Nginx 作为高性能的反向代理服务器,结合 Keepalived 实现 VIP(虚拟 IP)漂移,可以构建高可用的负载均衡集群。以下是具体实现方法:


环境准备

  • 两台以上服务器安装 Nginx 和 Keepalived
  • 统一的虚拟 IP(VIP),例如 10.96.4.32
  • 所有节点配置相同的 Nginx 负载均衡规则

Nginx 负载均衡配置

在每台 Nginx 服务器上配置相同的 upstream 规则,指向后端应用服务器:

http {
upstream backend {
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}

Keepalived 主节点配置

主节点(Master)配置文件 /etc/keepalived/keepalived.conf
注:# 主备节点设为BACKUP+nopreempt才可以实现非抢占式

! Configuration File for keepalived
global_defs {
router_id lb02 #标识信息
}
vrrp_script check {
script "/usr/local/nginx/check/check_nginx.sh"
interval  4
}
vrrp_instance VI_1 {
state BACKUP   #角色是master/backup  # 所有节点设为BACKUP+nopreempt才可以实现非抢占式
interface eth0  #vip 绑定端口
virtual_router_id 40    #让master 和backup在同一个虚拟路由里,id 号必须相同;
priority 150            #优先级,谁的优先级高谁就是master ;
advert_int 3            #心跳间隔时间
nopreempt				#非抢占式
authentication {
auth_type PASS      #认证
auth_pass 1111      #密码
}
virtual_ipaddress {
10.96.4.32            #虚拟ip
}
track_script  {
check
}
}

Keepalived 备节点配置

备节点(Backup)配置文件差异部分:

global_defs {
router_id  lb01
}
vrrp_instance VI_1 {
state BACKUP
priority 100
# 其他配置与主节点相同
}

脚本本地检测,防止脑裂

#!/bin/bash
NGPID=$(ps -C nginx --no-header|wc -l)
NGINX=/usr/local/nginx/sbin/nginx
HTTPCODE=$(curl -s -o /dev/null -w "%{http_code}" "http://192.168.1.101:8080/RATIOHandleProject/ProxyService/ReportListProxyService?wsdl")
if [ $NGPID -lt 4 ];
then
# $NGINX
# sleep 2
NGPIDT=$(ps -C nginx --no-header|wc -l)
if [ $NGPIDT -lt 4 ] &&
[ "$HTTPCODE" -ne 200 ];
then
service keepalived stop
$NGINX -s stop
fi
fi

健康检查机制

Keepalived 通过以下方式确保高可用:

  • 每 4 秒执行 check_nginx.sh 检查 Nginx 进程状态以及后端程序可用性检测
  • 当 Nginx 和后端程序异常时,触发 VIP 漂移到备用节点
  • 主节点恢复后,VIP 不自动回切(因设置 nopreempt 禁用抢占模式)
  • 心跳VIP之间每3秒进行VRRP协议通信检测

注意事项

  • 确保防火墙允许 VRRP 协议通信(IP 协议号 112)
  • 所有节点时间同步(NTP 服务)
  • 建议配置邮件报警通知运维人员
  • 生产环境建议使用至少 3 个节点避免脑裂问题
  • 监控Nginx和Keepalived的运行状态(zabbix/prometheus)

通过这种架构,可以实现前端负载均衡服务的毫秒级故障转移,确保业务连续性。

posted @ 2025-08-25 21:12  wzzkaifa  阅读(45)  评论(0)    收藏  举报