Keepalived详解(五):Keepalived集群中MASTER和BACKUP角色选举策略【转】
一.Keepalived集群中MASTER和BACKUP角色选举策略
在keepalived集群中,其实并没有严格意义上的主、备节点,虽然可以在keepalived配置文件中设置state选项为MASTER状态,但是这并不意味着此节点一直就是MASTER角色。控制节点角色的是keepalived配置文件中的priority值,但它并不控制所有节点的角色,另一个能改变节点角色的是在vrrp_script模块中设置的weight值,这两个选项对应的都是一个整数值,其中weight值可以是个负整数,一个节点在集群中的角色就是通过这两个值的大小决定的。
在一个一主多备的Keepalived集群中,priority值最大的将成为集群中的MASTER节点,而其他都是BACKUP节点。在MASTER节点发生故障后,BACKUP节点之间将进行“民主选举”,通过对节点优先级值priority和weight的计算,选出新的MASTER节点接管集群服务。
在vrrp_script模块中,如果不设置weight选项值,那么集群优先级的选择将由Keepalived配置文件中的priority值决定,而在需要对集群中优先级进行灵活控制时,可以通过在vrrp_script模块中设置weight值来实现。下面举例说明:
假定由A和B两个节点组成的Keepalived集群,在A节点keepalived.conf文件中,设置priority值为100,而在B节点keepalived.conf文件中,设置priority值为80,并且A、B两个节点都使用了vrrp_script模块来监控MySQL服务,同时都设置weight值为10,那么将会发生如下情况。
在两节点都启动Keepalived服务后,正常情况是A节点将成为集群中的MASTER节点,而B自动成为BACKUP节点,此时将A节点的MySQL服务关闭,通过查看日志发现,并没有出现B节点接管A节点的日志,B节点仍然处于BACKUP状态,而A节点依旧处于MASTER状态,在这种情况下整个HA集群将失去意义。
下面分析产生这种情况的原因。这也就是Keepalived集群中主、备角色选举策略的问题。下面总结在keepalived中使用vrrp_script模块时整个集群角色的选举算法,由于weight值可以是正数也可以是负数,因此,要分两种情况说明:
1.weight值为正数时:
在vrrp_script中指定的脚本如果检测成功,那么MASTER节点的权值将是weight值与priority值之和;如果脚本检测失效,那么MASTER节点的权值保持为priority值,因此切换策略为:
◇MASTER 节点vrrp_script脚本检测失败时,如果MASTER节点priority值小于BACKUP节点weight值与priority值之和,将发生主、备切换。
◆MASTER节点vrrp_script脚本检测成功时,如果MASTER节点weight值与priority值之和大于BACKUP节点weight值与priority值之和,主节点依然为主节点,不发生切换。
2.weight值为负数时:
在vrrp_script中指定的脚本如果检测成功,那么MASTER节点的权值仍为priority值,当脚本检测失败时,MASTER节点的权值将是priority值与weight值之差,因此切换策略为:
◇MASTER节点vrrp_script脚本检测失败时,如果MASTER节点priority值与weight值之差小于BACKUP节点priority值,将发生主、备切换。
◆MASTER节点vrrp_scrip脚本检测成功时,如果MASTER节点priority值大于BACKUP节点priority值时,主节点依然为主节点,不发生切换。
在熟悉了Keepalived主、备角色的选举策略后,再来分析一下前面的那个实例。由于A、B两个节点设置的weight值都为10,因此符合选举策略的第一种,在A节点停止MySQL服务后,A节点的脚本检测将失败,此时A节点的权值将保持为A节点上设置的priority值,即为100,而B节点的权值将变为weight值与priority值之和,也就是90(10+80),这样就出现看A节点权值仍然大于B节点权值的情况,因此不会发生主、备切换。
对于weight值的设置,有一个简单的标准,即weight值的绝对值要大于MASTER和BACKUP节点priority值之差。对于上面A、B两个节点的例子,只要设置weight值大于20即可保证集群正常运行和切换。由此可见,对于weight值的设置要非常谨慎,如果设置不好,主节点发生故障时将导致集群角色选举失败,使集群陷于瘫痪状态。
转自
Keepalived详解(五)-闫利朋的博客-51CTO博客
http://blog.51cto.com/6284444/2136238
Keepalived详解(五):Keepalived集群中MASTER和BACKUP角色选举策略【转】的更多相关文章
- Keepalived中Master和Backup角色选举策略
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://ixdba.blog.51cto.com/2895551/1544858 在Kee ...
- 详解Redis Cluster集群
Redis Cluster是Redis的分布式解决方案,在Redis 3.0版本正式推出的,有效解决了Redis分布式方面的需求.当遇到单机内存.并发.流量等瓶颈时,可以采用Cluster架构达到负载 ...
- 【图文详解】Hadoop集群搭建(CentOs6.3)
本文主要详细地描述了hadoop集群的搭建以及一些配置文件的说明,用于自己复习以及供新人学习,若有错误之处还请指出. 前期准备 先给出我的集群架构: 到hadoop官网下载好hadoop安装包http ...
- 【图文详解】Zookeeper集群搭建(CentOs6.3)
Zookeeper简介: Zookeeper是一个分布式协调服务,就是为用户的分布式应用程序提供协调服务的. A.zookeeper是为别的分布式程序服务的 B.Zookeeper本身就是一个分布式程 ...
- hadoop 集群中数据块的副本存放策略
HDFS采用一种称为机架感知(rack-aware)的策略来改进数据的可靠性.可用性和网络带宽的利用率.目前实现的副本存放策略只是在这个方向上的第一步.实现这个策略的短期目标是验证它在生产环境下的有效 ...
- 记录一个奇葩的问题:k8s集群中master节点上部署一个单节点的nacos,导致master节点状态不在线
情况详细描述; k8s集群,一台master,两台worker 在master节点上部署一个单节点的nacos,导致master节点状态不在线(不论是否修改nacos的默认端口号都会导致master节 ...
- Linux 高可用(HA)集群之keepalived详解
http://freeloda.blog.51cto.com/2033581/1280962 大纲 一.前言 二.Keepalived 详解 三.环境准备 四.LVS+Keepalived 实现高可用 ...
- Keepalived详解(四):通过vrrp_script实现对集群资源的监控【转】
一.通过vrrp_script实现对集群资源的监控: Keepalived基础HA功能时用到了vrrp_script这个模块,此模块专门用于对集群中服务资源进行监控.与此模块一起使用的还有track_ ...
- centos7.4安装高可用(haproxy+keepalived实现)kubernetes1.6.0集群(开启TLS认证)
目录 目录 前言 集群详情 环境说明 安装前准备 提醒 一.创建TLS证书和秘钥 安装CFSSL 创建 CA (Certificate Authority) 创建 CA 配置文件 创建 CA 证书签名 ...
随机推荐
- sklearn-数据预处理scale
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- 访问内网(https,udp)
安装teamview 客户端. 安装vpn驱动(这里的VPN应该是A主机与B客户端分别连接上了teamview的服务器,但是本身不是局域 网,所以不能直接访问A的局域网的其他主机) 主机端A,安装主机 ...
- 4、JPA-EntityManager.merge()
EntityManager#merge merge() 用于处理 Entity 的同步.即数据库的插入和更新操作 merge的几种情况 1. 若传入的是一个临时对象 package jpa.test; ...
- 设计模式---领域规则模式之解析器模式(Interpreter)
前提:领域规则模式 在特定领域内,某些变化虽然频繁,但可以抽象为某种规则.这时候,结合特定领域,将问题抽象为语法规则,从而给出该领域下的一般性解决方案. 典型模式 解析器模式:Interpreter ...
- scrapy框架使用教程
scrapy框架真的是很强大.非常值得学习一下.本身py就追求简洁,所以本身代码量很少却能写出很强大的功能.对比java来说.不过py的语法有些操蛋,比如没有智能提示.动态语言的通病.我也刚学习不到1 ...
- 使用List和Map遇到得空指针异常
如题,经常遇到同类得问题,因为集合在使用之前必须先new一个对象. private List<Orderdatil> orderdatilList=new ArrayList<Ord ...
- IQueryable & IEnumberable 区别
Namespace And Inheritances Relations ? 1 2 3 4 5 6 7 8 9 Namespace: System.Collections [ComVisib ...
- IO流之FileUtils工具类的使用
IO流之FileUtils工具类的使用: 使用apache的commons-io包下的FileUtils,我筛选了一些常用方法:
- Consul 域名服务
=============================Web请求的全过程(包含DNS) =============================完整过程参考 https://blog.csdn. ...
- dp题2
1.seq 给出数组 A,则 l 到 r 的一段序列可以选择以下两种得分方式之一进行得分:1.得到