LVS+keepalived群集

一、Keepalived工作原理

Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。

在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP(VIP),主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

Keepalived体系主要模块及其作用:
keepalived体系架构中主要有三个模块,分别是core、check和vrrp。

  • core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
  • vrrp模块:是来实现VRRP协议的。(调度器之间的健康检查和主备切换)
  • check模块:负责健康检查,常见的方式有端口检查及URL检查。(节点服务器的健康检查)

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

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

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

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

二、LVS+Keepalived 高可用群集

主DR 服务器:20.0.0.100 (Linux1)
备DR 服务器:20.0.0.111 (Linux11)
Web 服务器1:20.0.0.101
Web 服务器2:20.0.0.103
vip:20.0.0.50
客户端:20.0.0.3

Nginx四层代理

两个调度器已准备好,下面准备高可用

成功,以下演示故障转移

Keepalived通过什么判断哪台主机为主服务器,通过什么方式配置浮动IP?
答案:
Keepalived首先做初始化先检查state状态,master为主服务器,backup为备服务器。
然后再对比所有服务器的priority,谁的优先级高谁是最终的主服务器。
优先级高的服务器会通过ip命令为自己的电脑配置一个提前定义好的浮动IP地址。


keepalived的抢占与非抢占模式:
抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP
非抢占式俩节点state必须为bakcup,且必须配置nopreempt。
注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了。

脑裂故障
现象:主服务器和备服务器都同时拥有相同的VIP
原因:因为主服务器和备服务器的通信中断,导致备服务器无法收到主服务器发送的VRRP报文,备服务器误认为主服务器已经故障了并通过ip命令生成VIP
解决:关闭主服务器或备服务器其中一个的keepalived服务
预防:(1)如果是系统防火墙导致,则关闭防火墙或添加防火墙规则放通VRRP组播地址(224.0.0.18)的传输
      (2)如果是主备服务器之间的通信链路中断导致,则可以在主备服务器之间添加双链路通信
      (3)在主服务器使用脚本定时判断与备服务器通信链路是否中断,如果判断是主备服务器之间的链接中断则自行关闭主服务器上的keepalived服务
      (4)利用第三方应用或监控系统检测是否发生了脑裂故障现象,如果确认发生了脑裂故障则通过第三方应用或监控系统来关闭主服务器或备服务器其中一个的keepalived服务

相关推荐

  1. Zookeeper+Kafka

    2024-06-13 20:32:03       55 阅读
  2. Redis-主从、哨兵、

    2024-06-13 20:32:03       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-13 20:32:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-13 20:32:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-13 20:32:03       82 阅读
  4. Python语言-面向对象

    2024-06-13 20:32:03       91 阅读

热门阅读

  1. Web前端知道:深入探索与无尽挑战

    2024-06-13 20:32:03       36 阅读
  2. TCP协议

    TCP协议

    2024-06-13 20:32:03      30 阅读
  3. 科技发展对社会就业结构的影响与挑战

    2024-06-13 20:32:03       28 阅读
  4. C语言练习题04

    2024-06-13 20:32:03       31 阅读
  5. 【RAG入门教程04】Langchian的文档切分

    2024-06-13 20:32:03       21 阅读
  6. docker编译一个支持flv的nginx镜像

    2024-06-13 20:32:03       32 阅读
  7. Python基础(一)

    2024-06-13 20:32:03       25 阅读
  8. 【css】html 标初始化CSS样式(初学者必看)

    2024-06-13 20:32:03       33 阅读
  9. Jackson无缝替换Fastjson

    2024-06-13 20:32:03       26 阅读