priority和weight详解
上⾯提到的weight和priority在主备切换时候的使⽤
在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节点f⽂件中,设置“priority”值为100,⽽
在B节点f⽂件中,设置“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_script”脚本检测成功时,如果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值的设置,要⾮常谨慎,如果设置不好,将导致集群⾓⾊选举失败,使集群陷于瘫痪状态。