范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

一次Keepalived高可用的事故,让我重学了一遍它

  前言
  上次我们遇到了一个 MySQL 故障的事故,这次我又遇到了另外一个奇葩的问题:
  Keepalived 高可用组件的虚拟 IP 持续漂移,导致 MySQL 主从不断切换,进而导致 MySQL 主从数据同步失败。
  虽然没能重现 Keepalived 的这个问题,但是我深入研究了下 Keepalived 的原理以及针对核心配置参数做了大量实验。悟空带着大家一起看下 Keepalived 到底是如何运转的,以及为什么它能做到高可用。
  原理讲解分为上、中、下三篇:
  上篇涉及以下知识点 : Keepalived 如何提供数据流量转发。  Keepalived 选举的原理。  Keepalived 的负载均衡算法。
  中篇涉及以下知识点 : Keepalived 的路由规则。  Keepalived 如何监控服务的。  Keepalived 如何进行故障切换。  Keepalived 的架构剖析。
  下篇设计以下知识点 : Keepalived 配置详解  Keepalived 实战部署  一、Keepalived 和 LVS 概述1.1 Keepalived 概述
  谈到 Keepalived,给人的印象就是用在 高可用 架构中,保证某个服务不故障,其实它还有很多其他的功能。Keepalived 是 Linux 系统下的一个比较轻量级的高可用解决方案,这个轻量级是相对于 Heartbeat 等组件的。虽然 Heartbeat 功能完善、专业性强,但是安装部署就没有 Keepalived 简单,Keepalived 只需要一个配置文件即可。企业中大多选择 Keepalived 作为高可用组件。 1.2 LVS 概述
  Keepalived 最开始是由 Alexandre Cassen 使用 C 语言编写的开源软件项目,项目的目的主要是简化 LVS 项目的配置并增强 LVS 的稳定性。简单来说,Keepalived 就是对 LVS 的扩展增强。
  LVS (Linux Virtual Server)翻译过来就是 Linux 虚拟服务器,由章文嵩博士主导开发的开源负载项目,目前 LVS 已经被集成到 Linux 内核模块中。
  LVS 主要用在负载均衡方面,比如 Web 客户端想要访问后端服务,Web 请求会先经过 LVS 调度器,调度器根据预设的算法决定如何分发给后端的所有服务器。  1.3 LVS 基本原理
  LVS 的基本原理如下图所示:
  LVS基本原理
  LVS 的核心功能就是提供负载均衡,负载均衡技术有多种:  基于 DNS 域名轮流解析方案。  基于客户端调度访问方案。  基于应用层系统的调度方案。  基于 IP 地址的调度方案。
  而效率最高的是基于 IP 地址的调度方案 。其实就是将请求转发给对应的 IP 地址 + 端口号,它的效率是非常高的,LVS 的 IP 负载均衡技术是通过 IPVS 模块来实现的,IPVS 是 LVS 集群系统的核心软件。
  LVS 负载均衡器会虚拟化一个IP( VIP ),对于客户端来说,它事先只知道这个 VIP 的,客户端就将请求发送给 VIP,然后 LVS 负载均衡器会将请求转发给后端服务器中的一个,这些服务器都称为 Real Server(真实服务器)。转发的规则是通过设置 LVS 的负载均衡算法来的,比如随机分配、按照权重分配等。
  后端服务器的提供的功能要求是一致的,不论转发到哪台服务器,最终得到的结果是一致的,所以对于客户端来说,它并不关心有多少个后端服务器在提供服务,它只关心访问的 VIP 是多少。
  那么后端服务处理完请求后,如何将数据返回给客户端呢?根据 LVS 的不同模式,会选择不同的方式将数据返回给客户端。LVS 的工作模式有三种:NAT 模式、TUN 模式、DR 模式。这个后面讲到路由机制再来细说。  二、Keepalived 流量转发原理
  Keepalived 为 Linux 系统提供了负载均衡和高可用能力。负载均衡的能力来自 Linux 内核中的 LVS 项目模块  IPVS (IP Virtual Server)。
  Keepalived 运行在 Linux 系统中,它会启动内核中的 LVS 服务来创建虚拟服务器。比如我们在两台服务器上都启动了一个 Keepalived 服务,然后 LVS 会虚拟化出来一个 IP(VIP),但是只有一个 Keepalived 会接管这个 VIP,就是说客户端的请求只会到 Master Keepalived 节点上。这样流量就只会到一台 keepalived 上了,然后 keepalived 可以配置几台真实的服务 IP 地址和端口,通过负载调度算法将流量分摊到这些服务上。对于另外一台 Backup Keepalived 节点,它是待机状态,没有流量接入的。
  三、Keepalived 如何进行选主的
  那么上面的两个 Keepalived 服务是如何选出其中一个作为 Master 节点的呢?
  我们一般都是运行在两台主备服务器或一主多备的服务器上。而这多台服务器都是遵循 VRRP 的。  3.1 VRRP 协议
  VRRP  的全称为 Virtual Router Redundancy Protoco,虚拟路由冗余协议。它是一种容错协议,为了解决局域网中单点路由故障的问题。比如之前我们都是一个路由器进行路由转发,如果这个路由器故障了,那么整个路由转发的链路就断了,服务就不可用了。
  VRRP 协议主要的功能:  虚拟路由器和虚拟 IP。  Master 广播 ARP 报文。  Backup 选举新的 Master。
  现在我们配置多台路由器(一主多备),每台路由器都有一个自己的 IP 地址,它们组成一个路由器组,其中有一个作为 Master,其他作为 Backup。然后这些路由器会虚拟出单个路由,拥有自己的 IP 地址,也就是 Virtual IP,简称 VIP。
  客户端访问这个虚拟的 IP 地址就可以了,当主路由器故障了,备份路由器通过选举机制选出一个新的主路由器,继续向客户端提供路由服务,实现了路由功能的高可用。
  路由器开启 VRRP 功能后,根据优先级配置进行选举,优先级高的会成为主(Master)路由器,另外的则会成为备(Backup)路由器。
  Master 路由器定期发送 VRRP 通知报文给 Backup 路由器,告诉它们我是在正常工作的,你们不用竞选新的 Master 路由器。
  关于 Master 和 Backup 通信的原理其实很简单,就是一个 心跳机制 ,不过这个和 Eureka 的心跳机制不一样,Eureka 是客户端定期向 Eureka 注册中心发送心跳,而 Keepalived 则是 Master 定期向 Backup 发送心跳机制,而 Backup 路由器它有一个定时监测通知的任务,如果在这个时间段内未收到通知,则认为 Mater 故障了,然后通过优先级进行选举,选举出新的 Master 后,就定期发送 VRRP 通知报文给 Backup 路由器。(Eureka 心跳机制:唐太宗把微服务的"心跳机制"玩到了极致!)
  通过这个 VRRP 协议,可以提高系统的可用性,避免因单点故障导致的服务不可用问题,同时在路由器故障时,无需手动修改网络连接信息以访问新的 Master 路由器。如下图所示,Backup 切换为了 Master。
  关于选举的配置主要依赖 vrrp_instance 和 vrrp_script 字段。  3.2 vrrp_instance 配置
  对于 Keepalived 的选主有三个重要参数:  state:可选值为 MASTER、BACKUP。  priority:节点的优先级,可选值为 [1-255]。  nopreempt:不抢占模式,如果配置,则当优先级高时,会将自己设置为 Master。  vrrp_instance VI_1 {     # 节点为 BACKUP     state BACKUP     # 优先级为 100     priority 100        # 不抢占模式     nopreempt }
  当一台设置为 master,另外一台设置为 BACKUP,当 MASTER 故障后,BACKUP 会成为新的 MASTER,而当老的 MASTER 恢复后,又会抢占成为新的 MASTER,接管 VIP 的流量,导致不必要的主备切换。为了避免这种主备切换,我们可以将两台 Keepalived 都设置为 BACKUP,且高优先级的那台 Keepalived 设置为不抢占 nopreempt。  3.2 vrrp_script 配置
  而优先级 priority 它是可以增减的,通过 vrrp_script 来配置:  vrrp_script restart_mysql {    # 监测和重启 mysql 容器,如果 MySQL 服务正常或 MySQL 失败    script "/usr/local/keepalived/restart_mysql.sh"      interval 5    weight -20 }
  这个是定时执行脚本的配置,script 配置会监测 mysql 服务是否不正常。这是一个自定义的脚本,可以自己写返回值。这里我写的逻辑是如果 MySQL 服务正常则返回 0,不正常则返回 1。  当 weight 为正数
  当脚本返回 0 时(服务正常),则增加优先级=priority + weight;否则,保持设置的 priority 值。
  切换策略:  如果 MASTER 节点的 vrrp_script 脚本检测失败时,如果 MASTER 节点的 priority 值小于 BACKUP 节点 weight + priority,则发生主备切换。  如果 MASTER 节点的 vrrp_script 脚本检测成功时,如果 MASTER 节点的 priority 值大于 BACKUP 节点 weight + priority,则不发生主备切换。  当 weight 为负数
  当脚本返回非 0 时(服务异常),则优先级=priority - |weight|;否则,保持设置的 priority 值。
  切换策略:  如果 MASTER 节点的 vrrp_script 脚本检测失败时,如果 MASTER 节点的 priority - |weight| 值小于 BACKUP 节点 priority 值,则发生主备切换。  如果 MASTER 节点的 vrrp_script 脚本检测成功时,如果 MASTER 节点的 priority 值大于 BACKUP 节点 priority 值,则不发生主备切换。
  注意:增加或减少优先级的范围为 [1,254]。
  举例说明:
  两台 Keepalived 的 state 都配置成 BACKUP,其中一台服务器 node1 的 Keepalived 的优先级设置为 100,不抢占模式,另外一台 node2 的优先级设置为 90,抢占模式。
  node1 节点配置的优先级高,它成为 Master 节点,当 Master 节点监控的 MySQL 服务发生故障后,会降低优先级,从 100 降低到 80。另外一台优先级为 90,收到优先级比自己低的 ARP 广播时,就会变成新的 Master 节点。而 node1 节点会成为 BACKUP 节点,当 node1 监控到 MySQL 服务恢复后,优先级变为配置的 priority 100,但是也不会抢占。
  如下图所示:虽然 node1 上的 keepalived 重启 mysql 成功了,优先级也恢复成了 100,但是并没有变为 master,还是维持 backup 状态。
  而 node2 还是 master 节点,定时向 node 1 发送 vrrp 通知,如下图所示:
  如果 node2 的 mysql 宕机了,那么它的优先级会从 90 降低到 70,即使这样,也不会出现主备切换,因为我们配置的策略就是 node1 不会抢占。如果要在这种情况下切换到 node1,就只能将 node2 的 keepalived 主动停掉,故障转移中篇会讲到。  四、Keepalived 的负载均衡机制4.1 转发机制
  要理解 Keepalived 的负载均衡机制,必须了解 IPVS,也就是 IP Virtual Server,IP 虚拟服务器。
  IPVS  模块是 Keepalived 引入的一个第三方模块,目的是解决单 IP 多服务器的工作环境,通过 IPVS 可以实现基于 IP 的负载均衡集群。IPVS 默认包含在 LVS 软件中,而 LVS 又是包含在 Linux 系统中。所以 Keepalived 在 Linux 系统上可以直接利用 LVS 的功能。LVS 的作用就是虚拟出一个 IP,也就是 VIP,客户端请求先到达 VIP,然后从服务器集群中选择一个服务器节点,将流量转发给这个节点,由这个节点处理请求。
  如图所示:  Keepalived 是运行在用户空间的 LVS 路由(LVS Router)进程,作为 MASTER 角色 Keepalived 称为 Active Router,BACKUP 角色的 Keepalived 称为 SLAVE Router。只有 Active Router 是工作的,其他 Router 是 Stand By (待机状态)。  Active Router 和 Backup Router 之间是通过 VRRP 协议进行主备切换的。  Active Router 会启动内核中 LVS 服务以创建虚拟服务器,虚拟服务器有一个虚拟 IP(VIP),比如下图中的 VIP 为 192.168.56.88。  Active Router 还会设置 IPVS TABLES(服务器列表),记录了后端服务器的地址及服务运行状态。负载均衡就从服务器列表选择一个可用的服务进行转发。  这些后端服务是配置在 Keepalived 的 virtual_server 配置项里面的,如下所示,配置了三个 real_server,分别对应了三台后端服务器。  virtual_server 192.168.56.88 80 {     delay_loop 6     lb_algo rr     lb kind NAT     protocol tcp    # 服务器 1    real_server 192.168.56.11 80 {        TCP_CHECK {        connect timeout 10     }    # 服务器 2    real_server 192.168.56.12 80 {        TCP_CHECK {        connect timeout 10     }    # 服务器 3    real_server 192.168.56.13 80 {        TCP_CHECK {        connect timeout 10     } 4.2 负载调度算法
  配置中有一个字段 lb_algo,这个就是负载调度算法,可以配置成 rr、wrr、lc、wlc、sh、dh 等。常用的是 rr 和 wrr。  rr,就是 Round-Robin,轮询算法, 每个服务器平等的,依次被调度。  wrr,就是 Weighted Round-Robin,加权轮询调度算法,加权值较大的,会被转发更多的请求。比如有的服务器硬件能力较弱,则可以将加权值配置得低一点。  lc,就是 Least-Connection,最少连接算法。请求被转发到活动连接较少的服务器上。连接数是通过 IPVS Table 来动态跟踪的。  wlc,加权最少连接。根据权重 + 连接数 分配请求。  sh,目标地址哈希算法,通过在静态 Hash 表中查询目的 IP 地址来确定请求要转发的服务器,这类算法主要用于缓存代理服务器中。  dh,源地址哈希算法,通过在静态 Hash 表中查询源 IP 地址来确定请求要转发的服务器,这类算法主要用于防火墙的 LVS Router 中。  五、总结
  Keepalived 作为高可用、高性能组件,在集群环境中用得还是挺多的,所以去理解 Keepalived 的底层原理,也可以学到很多高可用和负载均衡的通用原理。
  本篇介绍了 Keepalived 的 IPVS 功能,启动了一个虚拟服务器,虚拟化了一个 VIP,用来接收客户端的请求,然后通过负载调度算法将流量转发给真实服务器。
  Keepalived 一般用在都是一主一备或一主多备的场景,而对于主的选举是通过配置 state、privority、nopreemt、weight 字段来达到的。
  下篇我们再来看下真实服务器处理完请求后,如何将数据返回给客户端,这个涉及到 LVS 的路由规则。以及监控和故障切换也是 Keepalived 的核心功能,这个很有必要深入探索下。
  原文链接:https://mp.weixin.qq.com/s/LgqSqxBiK25wmwrsmPa83w

新歌内涵邓紫棋和杨颖,被吐槽后拒不道歉,热狗为何这么拽?中国台湾饶舌歌手热狗,又一次因不尊重女性上了热搜,这次的他得罪的人可不少。事情是这样的,热狗发了一首新歌,名叫Ladyboy,歌词中出现了这么两句你是我的Angelababy,还是他身家过亿却喜欢跑龙套,张嘉译去哪他去哪以前的很多明星进入娱乐圈,都是为了梦想或者说是为了赚钱,而现在的娱乐圈中有很多的富二代,进去娱乐圈是为了玩的,打发时间。像最近很火的一个组合叫大虞海棠,虞书欣和赵小棠,两个人一个被2013年吴京父母家里被偷,随后发了条微博,小偷吓得物归原主不战而屈人之兵出自孙子兵法谋攻,如果出现这样的情况,那绝对是两军交锋之时,胜利一方取得的最理想战果。本以为这样的情况只会发生在战场上,离现在和平稳定的中国还有段距离。没想到的是前些网剧爱上你是命中注定今日甜蜜开播霸总变醋精男友猛追初恋6月30日,由刘帅良执导,刘宇轩徐小舒领衔主演,杨韵然熊小小刘一帆李筱玥刘泊栩徐艺真主演的都市甜宠爱情网剧爱上你是命中注定今日中午12点在腾讯视频搜狐视频甜蜜开播!每周四五六12点秦岚SOFIGARO艺术片置身花海,率性自在秦岚SOFIGARO艺术片置身花海,率性自在摄影文学随笔札记列夫托尔斯泰有一句话,讲的是关于幸福的,大意是真正的幸福哪怕从物质的角度看也不是金钱,于人类而言是和平。这里说的和平不单新歌首发苏谭谭秋风起好想你中交广际发行冒牌音乐制作秋风起好想你苏谭谭QQ音乐千万正版音乐海量无损曲库新歌热歌天天畅听的高品质音乐平台!秋风起好想你作词郭冬青作曲陈伟演唱苏谭谭编曲王飞吉他牛侠混音王哲录音小苏制作冒牌音乐发行公司中交为什么孙俪从不晒公婆的照片?当看到照片后,网友这谁敢晒啊在甄嬛传中,孙俪的演技简直就炸裂了,在这部电视剧以后,她的人气就节节攀升,成为许多人心目中的老戏骨。孙俪炸裂式的演技,是整部剧能收获如此高收视率的重要原因。之前,在奔跑吧里,孙俪就开放麒麟正式发布,国产操作系统与软件齐飞今天有两条消息值得大家关注一是我国首个桌面操作系统开发者平台开放麒麟正式发布二是中国上百个重要信息系统被美国植入木马病毒。这两个新闻看似没什么关系,实际却意味深远。数字经济是我国未618之后,电商风向变了,京东唯品会确定性成商家定心丸最近这段时间,无论是刚刚过去的618成交额同比增长20。3达6959亿超出市场预期的佳绩,还是一些新兴业态迎来火爆,都在表明消费市场正在逐步走出疫情阴霾。然而,尽管一片向好,一些商汪峰晒全家福,女儿小苹果因颜值上热搜,后妈章子怡做对了什么?小苹果好漂亮汪峰全家福汪峰晒出全家福,上热搜的不是他,而是他的大女儿小苹果!汪峰上头条一直是娱乐界里的一个梗,每次不管是发专辑还是私生活被爆,眼看就要上热搜,总会在关键时刻被其他热她是陈佩斯外甥女,毕业名校,办明星婚礼,产后住88万月子中心出生演艺世家,却无明星梦大家是否记得三国演义中张山饰演的赵云将军,高大英勇,他就是张嘉芸的父亲,现在是国家一级演员。不仅如此,张嘉芸的母亲一家更有来头。外祖父陈强是新中国的第一位国
现场冰岛一座火山最新喷发,近距离看活火熔岩漫溢大片8月3日在冰岛雷克雅内斯半岛格林达维克镇附近拍摄的正在喷发的法格拉达尔火山。冰岛西南部雷克雅内斯半岛一座火山3日喷发。冰岛政府评估认为,此次火山喷发对人口稠密地区和关键基础设施造成为什么不少新能源车主都后悔了?别看充电便宜,这三个缺点是硬伤作为特斯拉的创始人,马斯克也凭借着新能源产业,登上了世界首富的位置。新能源产业,在21世纪,创造出了新的发展机遇,我国也有不少的新能源汽车制造企业,凭借着新能源汽车的生产销售,在这网友买到iPhone13ProMax扩容机,商家却说是换出来的很多人都知道iPhone分零售机官换机资源机等等。零售机最贵,官换机次之。所以很多人在买机器的时候会选择官换机。网友买了一台iPhone13ProMax官换机,但验机的时候却发现该MotoEdge2022最新消息遭曝光,MotoEdgeX30价崩遭疯抢,网友欢呼根据消息MotoEdge2022搭载联发科天玑MT6879处理器,这款MT6879处理器将包含两个CortexA78核心(2。6GHz)和六个A55核心(2。0GHz)以及一个尚未佩洛西见台积电董事长刘德音?那A16芯片是否会用上3nm制程工艺8月3日消息,据相关新闻报道,消息人士指出,美国众议院议长佩洛西今日(3日)将会晤台积电董事长刘德音,两人将讨论美国国会最近通过的芯片与科学法案的实施。台积电目前正在美国亚利桑那州买备用机优先选择这几款!价格便宜续航长,性能还不错OPPOK9S这是目前来说千元出头最值得购买的备用机了,骁龙778G的性能和骁龙855接近,并且功耗十分低,算得上是中端神U了,搭配上5000毫安的大电池续航一天一充问题不大。除了好消息!河南省这些建设工程项目已通过审批,8月即将开工经河南省政府同意,印发河南省2022年重点项目实施方案,聚焦机械电子电器园林景区绿化教育科研等10大重点领域,项目清单如下1。桐柏县产业集聚区管理委员会2022年周庄村兰花产业园兰资讯亿咖通联手处理器巨头AMD,共同打造下一代电动车计算平台文懂车帝原创常思玥懂车帝原创行业日前,亿咖通科技宣布与全球处理器巨头AMD达成战略合作,双方将协力打造面向下一代电动汽车的车载计算平台,预计于2023年末面向全球市场量产。亿咖通联新任安卓表皇来了!OPPOWatch3系列将于8月10日发布文科技秋风OPPOWatch系列的产品一直在安卓智能手表市场中饱受好评。而就在8月5日上午OPPO官方宣布,OPPOWatch3系列及智美生活新品发布会将于8月10日19点召开。而爆料iPhone14系列最新信息,iPhone13加速降价抢购时间有限目前有爆料信息称iPhone14和iPhone13系列一致,起步128GB,最高可选1TB,但是在部分机型中,可能会有内存方面的差异,有可能会强行消费。值得一提的是,由于iPhon别当真!郭艾伦不过是小情侣闹别扭!留下未来辽篮可以做得更包容郭艾伦和辽篮能有多大的矛盾?辽篮历史上,巅峰离队的核心球员不在少数,90年代被迫退役的李春江和10年前两度离队的张庆鹏应当是最突出的代表,但无论如何,一个不争的事实就是,郭艾伦如今