Nginx + KeepAlived 高可用负载均衡集群_nginx+keepalived-CSDN 博客

目录

一、Keepealived 脑裂现象

1. 现象

2. 原因

3. 解决

4. 预防

二、实验部署

1. 两台 nginx 做初始化操作并安装 nginx

2. 四层反向代理配置

3. 配置高可用

4. 准备检查 nginx 运行状态脚本

5. 开启 keepalived 服务并测试

一、Keepealived 脑裂现象

1. 现象

主服务器和备服务器都同时拥有相同的 VIP

在 "双机热备" 高可用(HA)系统中,当联系两个节点的 "心跳线" 断开时 (即两个节点断开联系时),本来为一个整体、动作协调的 HA 系统,就分裂成为两个独立的节点 (即两个独立的个体)。由于相互失去了联系,都以为是对方出了故障,此时备用调度器会运转起来争做主调度器的工作,而主调度器依然保持着调度工作,两个调度的同时运转导致整个系统的紊乱。就会发生严重后果:共享资源被瓜分、两边 "服务" 都起不来或者两边 "服务" 都起来了,但同时读写 "共享存储",导致数据损坏(常见如数据库轮询着的联机日志出错)

2. 原因

因为主服务器和备服务器的通信中断,导致备服务器无法收到主服务器发送的 VRRP 报文,备服务器误认为主服务器已经故障了并通过 ip 命令生成 VIP

硬件原因

高可用服务器各节点之间心跳线链路发生故障,导致无法正常通信
因心跳线坏了(包括断了,老化)
因网卡及相关驱动坏了,ip 配置及冲突问题(网卡直连)
因心跳线间连接的设备故障(网卡及交换机)
因仲裁的机器出问题(采用仲裁的方案)

运用配置原因

高可用服务器上开启了 iptables 防火墙阻挡了心跳消息传输
高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败
其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件 Bug 等
Keepalived 配置里同一 VRRP 实例如果 virtual_router_id 两端参数配置不一致也会导致裂脑问题发生

3. 解决

关闭主服务器或备服务器其中一个的 keepalived 服务

4. 预防

方法 1
如果是系统防火墙导致,则关闭防火墙或添加防火墙规则放通 VRRP 组播地址 (224.0.0.18) 的传输

方法 2
如果是主备服务器之间的通信链路中断导致,则可以在主备服务器之间添加双链路通信

方法 3
在主服务器使用脚本定时判断与备服务器通信链路是否中断,如果判断是主备服务器之间的链接中

断则自行关闭主服务器上的 keepalived 服务

方法 4
利用第三方应用或监控系统检测是否发生了脑裂故障现象,如果确认发生了脑裂故障则通过第三方

应用或监控系统来关闭主服务器或备服务器其中一个的 keepalived 服务

二、实验部署

此实验基于以上 LVS+KeepAlived 高可用负载均衡群集的部署实验为基础,将两台调度器改为

nginx 服务器,其余不变

准备虚拟机

192.168.80.122(nginx 服务器四层代理)

192.168.80.123(nginx 服务器四层代理)

192.168.80.124(web1)

192.168.80.125(web2)

192.168.80.126(nfs 共享存储)

1. 两台 nginx 做初始化操作并安装 nginx

2. 四层反向代理配置

1)修改主调度器配置

stream {
    upstream backends {
         server 192.168.10.124:80;
         server 192.168.10.125:80;
     }
    server {
         listen 8080;
         proxy_pass backends;
    }
}

2) 修改备调度器配置

将主调度器的 nginx.conf 复制过来

scp nginx.conf 192.168.10.122:'pwd'

3) 浏览器测试两台 nginx 服务器

192.168.10.122/192.168.10.123

3. 配置高可用

两台 nginx 服务器安装 keepalived

yum install -y keepalived

4. 准备检查 nginx 运行状态脚本

1) 主服务器

#!/bin/bash
 
if ! killall -0 nginx &> /dev/null
   then
   systemctl stop keepalived
fi

 修改配置文件 keepalived.conf

2) 备服务器

先做备份

 将主里的复制到备里

修改配置文件 keepalived.conf

5. 开启 keepalived 服务并测试

1) 分别开启主备两台服务器 keepalived

2) 浏览器测试

全文完
本文由 简悦 SimpRead 转码,用以提升阅读体验,原文地址