• Nginx + KeepAlived高可用负载均衡集群


    目录

    一、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)修改主调度器配置

    1. stream {
    2.     upstream backends {
    3.          server 192.168.10.124:80;
    4.          server 192.168.10.125:80;
    5.      }
    6.     server {
    7.          listen 8080;
    8.          proxy_pass backends;
    9.     }
    10. }

    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)主服务器

    1. #!/bin/bash
    2. if ! killall -0 nginx &> /dev/null
    3. then
    4. systemctl stop keepalived
    5. fi

     修改配置文件 keepalived.conf

    2)备服务器

    先做备份

     将主里的复制到备里

    修改配置文件 keepalived.conf

    5.开启keepalived服务并测试

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

    2)浏览器测试

  • 相关阅读:
    spring事务传播的Propagation.REQUIRES_NEW以及NEVER MANDATORY验证,及其失效的诡异问题
    C语言下的文件详解
    工商银行卡安全码怎么看
    Ps:简单快速的主背分离方法
    数据治理案例 | 某大型集成电路企业数据质量管理实践
    C语言求解一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
    SDC可伸缩的高维约束基准和算法
    【python基础】基本数据类型-字符串类型
    Vatee万腾的数字化掌舵:Vatee科技解决方案的全面引领
    640. 求解方程(JavaScript)
  • 原文地址:https://blog.csdn.net/weixin_68840588/article/details/139728986