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)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值