Nginx+KeepAlived高可用负载均衡集群的部署

目录

一.KeepAlived补充知识

1.一个合格的群集应该具备的特点

2.健康检查(探针)常用的工作方式

3.相关面试问题

问题1

问题2

二.Keepealived脑裂现象

1.现象

2.原因

硬件原因

运用配置原因

3.解决

4.预防

方法1

方法2

方法3

方法4

三.实验部署

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

2.四层反向代理配置

2.1.修改主调度器配置

2.2.修改备调度器配置

2.3.浏览器测试两台nginx服务器

3.配置高可用

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

4.1.主服务器

4.2.备服务器

5.开启keepalived服务并测试

5.1.分别开启主备两台服务器keepalived

5.2.浏览器测试


一.KeepAlived补充知识

1.一个合格的群集应该具备的特点

  • 负载均衡 用于提高群集的性能 LVS Nginx HAProxy SLB F5
  • 健康检查(探针) 针对于调度器和节点服务器 Keepalived Heartbeat
  • 故障转移 通过VIP漂移实现主备切换 VRRP 脚本

2.健康检查(探针)常用的工作方式

  • 发送心跳消息 vrrp报文 ping/pong
  • TCP端口检查 向目标主机的 IP:PORT 发起TCP连接请求,如果TCP连接三次握手成功则认为健康检查正常,否则认为健康检查异常
  • HTTP URL检查 向目标主机的URL路径(比如http://IP:PORT/URI路径)发起 HTTP GET 请求方法
  • 如果响应消息的状态码为 2XX 或 3XX,则认为健康检查正常
  • 如果响应消息的状态码为 4XX 或 5XX,则认为健康检查异常

3.相关面试问题

问题1

Keepalived通过什么判断哪台主机为主服务器,通过什么方式配置浮动IP

答案

  1. Keepalived首先做初始化先检查state状态,master为主服务器,backup为备服务器
  2. 然后再对比所有服务器的priority,谁的优先级高谁是最终的主服务
  3. 优先级高的服务器会通过ip命令为自己的电脑配置一个提前定义好的浮动IP地址

问题2

keepalived的抢占与非抢占模式

答案

  1. 抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP
  2. 非抢占式俩节点state必须为bakcup,且必须配置nopreempt

注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了

二.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.104(nginx服务器四层代理)

192.168.80.105(nginx服务器四层代理)

192.168.80.106(web1)

192.168.80.107(web2)

192.168.80.108(nfs共享存储)

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

nginx镜像网址:

2.四层反向代理配置

2.1.修改主调度器配置

stream {
    upstream backends {
         server 192.168.80.106:80;
         server 192.168.80.107:80;
     }
    server {
         listen 8080;
         proxy_pass backends;
    }
}

2.2.修改备调度器配置

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

2.3.浏览器测试两台nginx服务器

192.168.80.104/192.168.80.105

**3.**配置高可用

两台nginx服务器安装keepalived

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

4.1.主服务器

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

4.2.备服务器

将主里的复制到备里

5.开启keepalived服务并测试

5.1.分别开启主备两台服务器keepalived

5.2.浏览器测试

相关推荐
苹果醋32 小时前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
群联云防护小杜4 小时前
如何给负载均衡平台做好安全防御
运维·服务器·网络·网络协议·安全·负载均衡
ljh5746491199 小时前
负载均衡的原理
运维·负载均衡
阿松哥哥201810 小时前
linux环境使用源码方式安装nginx(centos)
linux·nginx·centos
与君共勉1213815 小时前
Nginx 负载均衡的实现
运维·服务器·nginx·负载均衡
okok__TXF16 小时前
Nginx + Lua脚本打配合
nginx·lua
青灯文案116 小时前
前端 HTTP 请求由 Nginx 反向代理和 API 网关到后端服务的流程
前端·nginx·http
小屁不止是运维16 小时前
麒麟操作系统服务架构保姆级教程(五)NGINX中间件详解
linux·运维·服务器·nginx·中间件·架构
恩爸编程1 天前
探索 Nginx:Web 世界的幕后英雄
运维·nginx·nginx反向代理·nginx是什么·nginx静态资源服务器·nginx服务器·nginx解决哪些问题
努力--坚持1 天前
电商项目-网站首页高可用(一)
nginx·lua·openresty