城市直播房产教育博客汽车
投稿投诉
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

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

12月16日 萌嘟嘟投稿
  前言
  上次我们遇到了一个MySQL故障的事故,这次我又遇到了另外一个奇葩的问题:
  Keepalived高可用组件的虚拟IP持续漂移,导致MySQL主从不断切换,进而导致MySQL主从数据同步失败。
  虽然没能重现Keepalived的这个问题,但是我深入研究了下Keepalived的原理以及针对核心配置参数做了大量实验。悟空带着大家一起看下Keepalived到底是如何运转的,以及为什么它能做到高可用。
  原理讲解分为上、中、下三篇:
  上篇涉及以下知识点:Keepalived如何提供数据流量转发。Keepalived选举的原理。Keepalived的负载均衡算法。
  中篇涉及以下知识点:Keepalived的路由规则。Keepalived如何监控服务的。Keepalived如何进行故障切换。Keepalived的架构剖析。
  下篇设计以下知识点:Keepalived配置详解Keepalived实战部署一、Keepalived和LVS概述1。1Keepalived概述
  谈到Keepalived,给人的印象就是用在高可用架构中,保证某个服务不故障,其实它还有很多其他的功能。Keepalived是Linux系统下的一个比较轻量级的高可用解决方案,这个轻量级是相对于Heartbeat等组件的。虽然Heartbeat功能完善、专业性强,但是安装部署就没有Keepalived简单,Keepalived只需要一个配置文件即可。企业中大多选择Keepalived作为高可用组件。1。2LVS概述
  Keepalived最开始是由AlexandreCassen使用C语言编写的开源软件项目,项目的目的主要是简化LVS项目的配置并增强LVS的稳定性。简单来说,Keepalived就是对LVS的扩展增强。
  LVS(LinuxVirtualServer)翻译过来就是Linux虚拟服务器,由章文嵩博士主导开发的开源负载项目,目前LVS已经被集成到Linux内核模块中。
  LVS主要用在负载均衡方面,比如Web客户端想要访问后端服务,Web请求会先经过LVS调度器,调度器根据预设的算法决定如何分发给后端的所有服务器。1。3LVS基本原理
  LVS的基本原理如下图所示:
  LVS基本原理
  LVS的核心功能就是提供负载均衡,负载均衡技术有多种:基于DNS域名轮流解析方案。基于客户端调度访问方案。基于应用层系统的调度方案。基于IP地址的调度方案。
  而效率最高的是基于IP地址的调度方案。其实就是将请求转发给对应的IP地址端口号,它的效率是非常高的,LVS的IP负载均衡技术是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件。
  LVS负载均衡器会虚拟化一个IP(VIP),对于客户端来说,它事先只知道这个VIP的,客户端就将请求发送给VIP,然后LVS负载均衡器会将请求转发给后端服务器中的一个,这些服务器都称为RealServer(真实服务器)。转发的规则是通过设置LVS的负载均衡算法来的,比如随机分配、按照权重分配等。
  后端服务器的提供的功能要求是一致的,不论转发到哪台服务器,最终得到的结果是一致的,所以对于客户端来说,它并不关心有多少个后端服务器在提供服务,它只关心访问的VIP是多少。
  那么后端服务处理完请求后,如何将数据返回给客户端呢?根据LVS的不同模式,会选择不同的方式将数据返回给客户端。LVS的工作模式有三种:NAT模式、TUN模式、DR模式。这个后面讲到路由机制再来细说。二、Keepalived流量转发原理
  Keepalived为Linux系统提供了负载均衡和高可用能力。负载均衡的能力来自Linux内核中的LVS项目模块IPVS(IPVirtualServer)。
  Keepalived运行在Linux系统中,它会启动内核中的LVS服务来创建虚拟服务器。比如我们在两台服务器上都启动了一个Keepalived服务,然后LVS会虚拟化出来一个IP(VIP),但是只有一个Keepalived会接管这个VIP,就是说客户端的请求只会到MasterKeepalived节点上。这样流量就只会到一台keepalived上了,然后keepalived可以配置几台真实的服务IP地址和端口,通过负载调度算法将流量分摊到这些服务上。对于另外一台BackupKeepalived节点,它是待机状态,没有流量接入的。
  三、Keepalived如何进行选主的
  那么上面的两个Keepalived服务是如何选出其中一个作为Master节点的呢?
  我们一般都是运行在两台主备服务器或一主多备的服务器上。而这多台服务器都是遵循VRRP的。3。1VRRP协议
  VRRP的全称为VirtualRouterRedundancyProtoco,虚拟路由冗余协议。它是一种容错协议,为了解决局域网中单点路由故障的问题。比如之前我们都是一个路由器进行路由转发,如果这个路由器故障了,那么整个路由转发的链路就断了,服务就不可用了。
  VRRP协议主要的功能:虚拟路由器和虚拟IP。Master广播ARP报文。Backup选举新的Master。
  现在我们配置多台路由器(一主多备),每台路由器都有一个自己的IP地址,它们组成一个路由器组,其中有一个作为Master,其他作为Backup。然后这些路由器会虚拟出单个路由,拥有自己的IP地址,也就是VirtualIP,简称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。
  关于选举的配置主要依赖vrrpinstance和vrrpscript字段。3。2vrrpinstance配置
  对于Keepalived的选主有三个重要参数:state:可选值为MASTER、BACKUP。priority:节点的优先级,可选值为〔1255〕。nopreempt:不抢占模式,如果配置,则当优先级高时,会将自己设置为Master。vrrpinstanceVI1{节点为BACKUPstateBACKUP优先级为100priority100不抢占模式nopreempt}
  当一台设置为master,另外一台设置为BACKUP,当MASTER故障后,BACKUP会成为新的MASTER,而当老的MASTER恢复后,又会抢占成为新的MASTER,接管VIP的流量,导致不必要的主备切换。为了避免这种主备切换,我们可以将两台Keepalived都设置为BACKUP,且高优先级的那台Keepalived设置为不抢占nopreempt。3。2vrrpscript配置
  而优先级priority它是可以增减的,通过vrrpscript来配置:vrrpscriptrestartmysql{监测和重启mysql容器,如果MySQL服务正常或MySQL失败scriptusrlocalkeepalivedrestartmysql。shinterval5weight20}
  这个是定时执行脚本的配置,script配置会监测mysql服务是否不正常。这是一个自定义的脚本,可以自己写返回值。这里我写的逻辑是如果MySQL服务正常则返回0,不正常则返回1。当weight为正数
  当脚本返回0时(服务正常),则增加优先级否则,保持设置的priority值。
  切换策略:如果MASTER节点的vrrpscript脚本检测失败时,如果MASTER节点的priority值小于BACKUP节点weightpriority,则发生主备切换。如果MASTER节点的vrrpscript脚本检测成功时,如果MASTER节点的priority值大于BACKUP节点weightpriority,则不发生主备切换。当weight为负数
  当脚本返回非0时(服务异常),则优先级否则,保持设置的priority值。
  切换策略:如果MASTER节点的vrrpscript脚本检测失败时,如果MASTER节点的priorityweight值小于BACKUP节点priority值,则发生主备切换。如果MASTER节点的vrrpscript脚本检测成功时,如果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服务恢复后,优先级变为配置的priority100,但是也不会抢占。
  如下图所示:虽然node1上的keepalived重启mysql成功了,优先级也恢复成了100,但是并没有变为master,还是维持backup状态。
  而node2还是master节点,定时向node1发送vrrp通知,如下图所示:
  如果node2的mysql宕机了,那么它的优先级会从90降低到70,即使这样,也不会出现主备切换,因为我们配置的策略就是node1不会抢占。如果要在这种情况下切换到node1,就只能将node2的keepalived主动停掉,故障转移中篇会讲到。四、Keepalived的负载均衡机制4。1转发机制
  要理解Keepalived的负载均衡机制,必须了解IPVS,也就是IPVirtualServer,IP虚拟服务器。
  IPVS模块是Keepalived引入的一个第三方模块,目的是解决单IP多服务器的工作环境,通过IPVS可以实现基于IP的负载均衡集群。IPVS默认包含在LVS软件中,而LVS又是包含在Linux系统中。所以Keepalived在Linux系统上可以直接利用LVS的功能。LVS的作用就是虚拟出一个IP,也就是VIP,客户端请求先到达VIP,然后从服务器集群中选择一个服务器节点,将流量转发给这个节点,由这个节点处理请求。
  如图所示:Keepalived是运行在用户空间的LVS路由(LVSRouter)进程,作为MASTER角色Keepalived称为ActiveRouter,BACKUP角色的Keepalived称为SLAVERouter。只有ActiveRouter是工作的,其他Router是StandBy(待机状态)。ActiveRouter和BackupRouter之间是通过VRRP协议进行主备切换的。ActiveRouter会启动内核中LVS服务以创建虚拟服务器,虚拟服务器有一个虚拟IP(VIP),比如下图中的VIP为192。168。56。88。ActiveRouter还会设置IPVSTABLES(服务器列表),记录了后端服务器的地址及服务运行状态。负载均衡就从服务器列表选择一个可用的服务进行转发。这些后端服务是配置在Keepalived的virtualserver配置项里面的,如下所示,配置了三个realserver,分别对应了三台后端服务器。virtualserver192。168。56。8880{delayloop6lbalgorrlbkindNATprotocoltcp服务器1realserver192。168。56。1180{TCPCHECK{connecttimeout10}服务器2realserver192。168。56。1280{TCPCHECK{connecttimeout10}服务器3realserver192。168。56。1380{TCPCHECK{connecttimeout10}4。2负载调度算法
  配置中有一个字段lbalgo,这个就是负载调度算法,可以配置成rr、wrr、lc、wlc、sh、dh等。常用的是rr和wrr。rr,就是RoundRobin,轮询算法,每个服务器平等的,依次被调度。wrr,就是WeightedRoundRobin,加权轮询调度算法,加权值较大的,会被转发更多的请求。比如有的服务器硬件能力较弱,则可以将加权值配置得低一点。lc,就是LeastConnection,最少连接算法。请求被转发到活动连接较少的服务器上。连接数是通过IPVSTable来动态跟踪的。wlc,加权最少连接。根据权重连接数分配请求。sh,目标地址哈希算法,通过在静态Hash表中查询目的IP地址来确定请求要转发的服务器,这类算法主要用于缓存代理服务器中。dh,源地址哈希算法,通过在静态Hash表中查询源IP地址来确定请求要转发的服务器,这类算法主要用于防火墙的LVSRouter中。五、总结
  Keepalived作为高可用、高性能组件,在集群环境中用得还是挺多的,所以去理解Keepalived的底层原理,也可以学到很多高可用和负载均衡的通用原理。
  本篇介绍了Keepalived的IPVS功能,启动了一个虚拟服务器,虚拟化了一个VIP,用来接收客户端的请求,然后通过负载调度算法将流量转发给真实服务器。
  Keepalived一般用在都是一主一备或一主多备的场景,而对于主的选举是通过配置state、privority、nopreemt、weight字段来达到的。
  下篇我们再来看下真实服务器处理完请求后,如何将数据返回给客户端,这个涉及到LVS的路由规则。以及监控和故障切换也是Keepalived的核心功能,这个很有必要深入探索下。
  原文链接:https:mp。weixin。qq。comsLgqSqxBiK25wmwrsmPa83w
投诉 评论 转载

关于示爱的话1、爱上你,说声:抱歉。关心你,说声:习惯。在乎你,说声:情愿。伤了你,说声:心痛。忘不了你,说声:对不起。谁叫我当初爱上你,让我彻夜难眠,让我魂牵梦绕,让我心甘情愿。1212……这次信息流内测一番折腾都有谁慌得一笔还是原来的配方,还是熟悉的味道。有不少细心网友发现,前两天微信安卓版所推出的版本更新,又双叒有新的动作了之前刚刚改版信息流形式的订阅号,又改为折叠展示。这前后短短二十多天的一哆……CBA半决赛辽粤大战,期待奇迹与练兵广东的奇迹有吗?目前为止,半决赛都已经进行两场的加量,是辽宁与广厦分别已2:0领先对手。通过前两场比赛可以看到一些积极的变化,比如看辽宁队。变得成熟了教练杨鸣……失败案例流量一路高歌后暴跌的反思在电商行业混了这么久,我认为思维这个东西是要有跳动性的,不带有任何评判色彩,拿店铺来说,销售额做不上去,立刻想到货源问题,立刻想到客户体验,立刻想到创意布局,立刻想到账户权重,……摄影要去的十大世界标志性地点多图即使在今天,南极也能将我们征服。南极早已是一个标志性的地点,因人们史诗般的探险故事,因上世纪人们在南极悲剧性的致命的失败,南极已深深滴烙印在我们的想象之中。南极对我们有着不可遏……玉米和大豆的友谊雨过天晴了。大片地里的玉米,由于雨水的冲刷,片片绿叶都更加青翠;由于喝足了水,棵棵都挺直了腰杆,精神十足地沉浸在欢声笑语之中。只有一棵玉米例外。它虽一身青翠,却无暇欣赏自……穆帅以前教你孙凯连线,现在教你怎么断开!四象阵让孔蒂没脾气穆里尼奥:以前教你把孙凯连线,现在教你怎么断开!孔蒂:我要买人,我要换前锋,我要换边锋!热刺老板列维一通买买买,然后特地邀请前主帅的球队,来打场所谓的友谊赛,憋足了……一次Keepalived高可用的事故,让我重学了一遍它前言上次我们遇到了一个MySQL故障的事故,这次我又遇到了另外一个奇葩的问题:Keepalived高可用组件的虚拟IP持续漂移,导致MySQL主从不断切换,进而导致……桨板是夏天最受欢迎的户外水上运动,我们保证用三分钟教会你你知道桨板是夏天最受欢迎的户外水上运动,我们保证用三分钟教会你,你不再羡慕别人可以站在水上漂,我们从握桨,上下板、站板、划桨、四个方面介绍桨板入门技巧,剩下就等你来俱乐部练习。……斜坡式防波堤的缺点是什么斜坡式防波堤是两边为斜坡,由抛筑(有时局部砌筑)块石、混凝土块体或其组合(有时用卵石填心)而成的防波堤。那么斜坡式防波堤的缺点是什么呢?下面本站为大家介绍一下。斜坡式防波……专家速成班看完你就成为专家了如何快速成为专家?某强人总结了4点,太有才了!改天可以去开专家速成培训班了!一、不管别人提什么千奇百怪的问题,你都要回答:这很正常。这样做的好处是,既说明了自己见多识广,……案例分析之根据征信报告判断其偿债能力及信用情况(一)当我们进行信贷贷前审查,或业务合作的尽调时,公司实际控制人的信贷情况和信用情况会是需要我们关注的重点之一。而信用报告又是衡量其信用情况的主要外部证据之一。今天我们就从征信报告这……
水井村小流域治理工程实施方案上报的请示兰芝夜间修护睡眠面膜第四代睡眠面膜评测结果火车票提前一天检票过还能使用吗什么是雾霾那么雾霾的危害究竟有哪些上网女孩美容提示5部不可不看的日本运动电影脑梗老人使用气血循环机有用吗基于作业成本法的快递业成本控制问题研究曝iPhone16Pro16Ultra都会配备潜望长焦镜头老家过年的风俗警惕奶头乐别做那个潮水退去后还在裸泳的人企业服务云窗帘布艺十大品牌榜中榜窗帘布艺十大品牌排行给妈妈做早餐600字初中作文时间停了该多好我生命中的过客游戏厅噪音扰民该如何投诉百分之一造句用百分之一造句大全pi没有上主网的原因皮肤哪个了(皮肤干燥)温柔干净高级短句塔奇纳迪迪巴拉实力毋庸置疑,他的问题来自于身体方面之外造句用之外造句大全尊重六年级作文400字

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找