当前位置: 首页 > news >正文

keepalived的工作原理和脑裂

一、Keepalived工作原理

  1. keepalived是一个用于实现高可用和负载均衡的服务,主要基于虚拟路由协议,解决了nginx一台机器的单点故障问题。
  2. 通过将两台nginx都配置keepalived,让两天nginx互为主机和备机;且keepalived通过 VRRP 协议和健康检查机制来实现 nginx 的主备互换。
  3. keepalived 会为 nginx 分配一个虚拟 IP,客户端通过该虚拟IP地址 访问 nginx 服务。当主机故障时,keepalived 会将虚拟ip地址漂移到备机上,客户端无需修改配置即可继续访问服务
  4. 两台nginx中优先级高(权重数字越大,优先级越高)的为主机,主机上会有承载域名的虚拟ip地址,负责对外提供服务,备机则一直监测主机心跳线,随时待命。
  5. keepalived 会定期检查 nginx 的健康状态,(检查 nginx 进程是否运行;检查 nginx 的监听端口是否可用),如果检查到主机nginx挂了,且在一定时间内没有再次启用,keepalived 会认为主机不可用,并触发故障转移。
  6. 当主机故障时,keepalived 会停止向主机发送 VRRP 通告。备机在超时时间内没有收到主机的心跳线起跳时,会知道主机故障了,这时,备机会马上接替成为新的主机并绑定虚拟 IP地址。备机直接接管 nginx 服务,客户端流量被引导到成为新的主机的备机上。
  7. 当原主机恢复后会先判断谁的优先级高,如果原主机优先级高,则虚拟IP会再漂移到原主机上,如果原备机(新主机)优先级高,则虚拟IP会留着原备机上,不会产生漂移。
  8. 二、什么是脑裂

  9. (1)脑裂是指

  10. 在keepalived监测多台nginx服务器时,发生多个nginx服务器同时认为自己是主机,并同时持有虚拟 IP,从而引发服务冲突和数据不一致的问题。脑裂会严重影响系统的可用性和数据完整性。

  11. (2)产生脑裂的原因:

  • 网络分区:主机和备机之间的网络连接中断,导致它们无法互相通信(备机监测不到主机心跳线)。
  • VRRP通关丢失:由于网络拥塞、配置错误或硬件故障,VRRP 通告未能及时到达备机,此时备机就会认为主机挂了,将自己提升为主机。
  • 优先级配置错误:如果在keepalived配置文件中多个nginx服务器的优先级配置相同,可能会导致这些nginx服务器同时认为自己是主机。
  • 系统资源不足:可能由于主机硬件资源不足,无法及时处理 VRRP 通告,导致通信超时,这时,备机会认为主机坏了,然后提升自己为主机。
  • (3)脑裂的影响

  • VIP 冲突:多个nginx服务同时绑定相同的虚拟 IP,导致同一个网关内的IP地址冲突,客户端无法正常访问服务。
  • 数据不一致:多个nginx服务器同时处理写操作,可能导致数据不一致或损坏、资源浪费。
  • 服务中断:客户端可能会被分配到不同的nginx服务器上,导致请求中断或服务不可用。
  • (4)日常如何检查防止脑裂

  • 日志检查:查看 Keepalived 的日志(通常位于 /var/log/messages 或 /var/log/syslog),查是否有多个nginx同时声明自己是主机。
  • 网络检查:使用ping检查主机和备机之间的网络连通性。
  • 虚拟ip检查:使用ip a或ifconfig 检查是否有多个nginx服务器同时绑定了相同的相同的虚拟ip。(5)如何防止脑裂

  • 在配置优先级时,确保主机和备机的优先级不同,且主机的优先级要高于备机的优先级。
  • 使用非抢占模式,在主机和备机上配置 nopreempt,防止原主机恢复后出现抢占虚拟IP的情况
  • 配置多播方式或者单播方式,确保 VRRP 通告能够正常传输。如果多播不可靠,可以配置单播模式
  • 增加健康检查,使用 keepalived 的健康检查功能,确保只有健康的ningx服务器才能成为主机。
  • 使用冗余网络,使用多条心跳线来避免单点故障问题。
  • 配置相应的仲裁机制,引入第三方仲裁机制(比如,外部脚本),在脑裂发生时决定那个ningx提升为主机,并应继续提供服务。

http://www.mrgr.cn/news/94903.html

相关文章:

  • 微服务面试题:服务网关和链路追踪
  • PHP、Java、Go、Python、Node.js、Ruby 写的接口,服务器承载量对比
  • STC89C52单片机学习——第25节: [11-1]蜂鸣器
  • 搜广推校招面经五十四
  • vuex持久化存储,手动保存到localStorage
  • 清晰易懂的Java8安装教程
  • 【Mac 从 0 到 1 保姆级配置教程 08】08. 快速配置 Neovim、LazyVim 以及常用开发环境,如果之前有人这么写就好了
  • 7年全栈开发经验 · 兼职技术合作
  • JS逆向案例-通达OA Office Anywhere 2019 的前端密码加密逆向分析
  • JS逆向案例-泛微OA的前端密码加密逆向分析
  • RabbitMQ从入门到实战-知识详情总结
  • 算数操作符、赋值操作符、单目操作符、强制类型转换
  • 宇数科技激光雷达L2
  • Linux中的基本指令(下)
  • 【Python 算法零基础 1.线性枚举】
  • 11 Collection集合、Map集合:分类、功能、遍历、底层原理,Stream流:获取、中间方法、终结方法 (黑马Java视频笔记)
  • C++进阶——AVL树的实现
  • unity基础——Navigation导航系统
  • windows ai本地化 部署常用Ollama软件详解
  • 4.JVM-垃圾回收介绍