在V2的Heartbeat中,为了将资源的监控和切换结合起来,同时支持多节点集群,Heartbeat提供了一种积分策略来控制各个资源在集群中各节点之间的切换策略。通过该积分机制,计算出各节点的的总分数,得分最高者将成为active状态来管理某个(或某组)资源。 如果

在V2的Heartbeat中,为了将资源的监控和切换结合起来,同时支持多节点集群,Heartbeat提供了一种积分策略来控制各个资源在集群中各节点之间的切换策略。通过该积分机制,计算出各节点的的总分数,得分最高者将成为active状态来管理某个(或某组)资源。

如果在CIB的配置文件中不做出任何配置的话,那么每一个资源的初始分数(resource-stickiness)都会是默认的0,而且每一个资源在每次失败之后所减掉的分数(resource-failure-stickiness)也是0。如此的话,一个资源不论他失败多少次,heartbeat都只是执行restart操作,不会进行节点切换。一般来说,resource-stickiness的值都是正数,resource-failure-stickiness的值都是负数。另外还有一个特殊值那就是正无穷大(INFINITY)和负无穷大(-INFINITY)。如果节点的分数为负分,那么不管什么情况发生,该节点都不会接管资源(冷备节点)。随着资源的各种状态的发生,在各节点上面的分数就会发生变化,随着分数的变化,一旦某节点的分数大于当前运行该资源的节点的分数之后,heartbeat就会做出切换动作,现在运行该资源的节点将释放资源,分数高出的节点将接管该资源。

在CIB的配置中,可以给每个资源定义一个分数,通过resource-stickiness来设置,同样也可以设置一个失败后丢失的分数,通过resource-failure-stickiness来设置。如下:

上面的配置就是给mysql_db这个resource配置了两个分数,成功运行的时候所得到的分数(resource_stickiness)和运行失败会丢失的分数(resource_failure_stickiness),两项分数值一样多,成功则得100分,失败则-100分。

除了可以通过给每个资源单独设置两项的分数之外,也可以将所有的resource设置成相同的分数,如下:

在这个配置中,就是给所有资源设置了两个默认的分数,省去单独每个资源都设置的麻烦。当然,如果在设置了这个default分数之后,同时也给部分或者全部资源也设置了这两个分数的话,将取单独设置的各个资源设置的分数而不取默认分数。

除了资源的分数之外,节点自身同样也有分数。节点分数可以如下设置:

注意这里节点分数的设置是放在configuration配置项里面的constraints配置项下的,通过rule来设置。这里是通过节点主机名来匹配的(实际上heartbeat的很多配置中对主机名都是很敏感的)。这里的value值就是节点的主机名,rule里面的score就是一个节点的分数。

通过上面的配置,我们可以作出如下计算:

a、在最开始,两边同时启动heartbeat的话,两边都没有开始运行这个resource,resource本身没有分数,那么仅仅计算节点的分数:

mysql1的分数:node+resource+failcount*failure=200+0+(0*(-100))=200

mysql2的分数:node+resource+failcount*failure=150+0+(0*(-100))=150

heartbeat会做出选择在mysql1上面运行mysql_db这个资源,然后mysql1的分数发生变化了,因为有资源自身的分数加入了:

mysql1的分数:node+resource+failcount*failure=200+100+(0*(-100))=300

mysql2的分数:node+resource+failcount*failure=150+0+(0*(-100))=150

b、过了一段时间,heartbeat的monitor发现mysql_db这个资源crash(或者其他问题)了,分数马上会发生变化,如下:

mysql1的分数:node+resource+failcount*failure=200+100+(1*(-100))=200

mysql2的分数:node+resource+failcount*failure=150+0+(0*(-100))=150

heartbeat发现mysql1节点的分数还是比mysql2的高,那么资源不发生迁移,将执行restart类操作。

c、继续运行一段时间发现又有问题(或者是b后面restart没有起来)了,分数又发生变化了:

mysql1的分数:node+resource+failcount*failure=200+100+(2*(-100))=100

mysql2的分数:node+resource+failcount*failure=150+0+(0*(-100))=150

这时候heartbeat发现mysql2节点比mysql1节点的分数高了,资源将发生迁移切换,mysql1释 mysql_db相关资源,mysql2接管相关资源,并在mysql2上运行mysql_db这个资源。这时候,节点的分数又会发生变化如下:

mysql1的分数:node+resource+failcount*failure=200+0+(2*(-100))=0

mysql2的分数:node+resource+failcount*failure=150+100+(0*(-100))=250

这时候如果在mysql2上面三次出现问题,那么mysql2的分数将变成-50,又比mysql1少了,资源将迁移回 mysql1,mysql1的分数将变成100,而mysql2的分数将变成-150,因为又少了资源所有者的那100分。到这里,mysql2节点的分数已经是负数了。heartbeat还有一个规则,就是资源永远都不会迁移到一个分数分数是负数的节点上面去。也就是说从这以后,mysql1节点上面不管mysql_db这个资源失败多少次,不管这个资源出现什么问题,都不会迁移回mysql2节点了。一个节点的分数会在该节点的heartbeat重启之后被重置为初始状态。或者通过相关命令来对集群中某个节点的某个资源或者资源组来重置或者查看其failcount,如下:

crm_failcount -G -U mysql1 -r mysql_db #将查看mysql1节点上面的mysql_db这个资源的failcount

crm_failcount -D -U mysql1 -r mysql_db #将重置mysql1节点上面的mysql_db这个资源的failcount

当然,在实际应用中,我们一般都是将某一些互相关联的资源放到一起组成一个资源组,一旦资源组中某资源有问题的时候,需要迁移整个资源组的资源。这个和上面针对单个资源的情况实际上没有太多区别,只需要将上面mysql_db的设置换到资源组即可,如下:

… …

这样,在该资源组中任何一个资源出现问题之后,都会被认为该资源组有问题,当分数低于其他节点出现切换的时候就是整个资源组的切换。

另外,对于INFINITY和-INFINITY这两个值,实际上主要用途就是为了控制永远不切换和只要失败必须切换用的。因为代表的意思就是拥有正无穷大的分数和失败就到负无穷大,主要用来满足极端规则的简单配置项。

总的来说,一项资源(或者资源组)在一个节点运行迁移到另一个节点之前,可以失败的次数的计算公式可以如下表示:

(nodeA score – nodeB score + stickiness)/abs(failure stickiness),即为A节点分数减去B节点分数,再加上资源运行分数后得到的总分数,除以资源失败分数的绝对值。

php 做积分策略,Heartbeat的切换策略-积分统计方法相关推荐

  1. 要做差异性分析,如何选择正确的统计方法?

    大家好啊!最近SPSSAU后台有很多小伙伴留言提问,其中有两个问题: 其实上面的问题,主要是想要研究定类数据和定类数据之间的差异关系,而不是相关性的分析,我们进行数据研究,就是想要挖掘数据间的信息和价 ...

  2. 算法的封装与切换——策略模式

    本文转载自 :http://blog.csdn.net/lovelion/article/details/7818983 俗话说:条条大路通罗马.在很多情况下,实现某个目标的途径不止一条,例如我们在外 ...

  3. Mysql 主从间延迟,主从切换策略

    Mysql 主从间延迟 首先需要知道在网络情况良好的情况下,主从之间的延迟主要产生于从库根据消费 relay log 的时间. 主从间的延迟是 seconds_behind_master. 主从延迟的 ...

  4. 浅谈用企业微信生态做私域流量运营的策略!

    在2020企业微信年度大会上,官方公布了几组有意思的数据:截至至2020年12月23日,企业微信连接的微信用户已经达到4亿:企业微信上真实的企业与组织超550万,月活跃用户超过1.3亿:开放接口增加到 ...

  5. 什么是积分兑换商城,积分体系有什么管理策略?

    积分兑换商城在用户运营体系里时长遇到,积分兑换商城概念指的是用户在消费交易或参与积分任务后,获得积分奖励,从而实现客户关怀.客户忠诚度提升的目的.积分兑换商城构建过程中必须注意的两点:有价化及感知度. ...

  6. SAR ADC系列13:单调开关切换策略

    单调开关切换策略 台湾成功大学Chun-Cheng Liu等人提出 单调开关切换策略:所谓单调,指的是在CDAC的上极板(比较器输入)会单调性下降或者上升. 单调开关切换策略和传统开关切换策略的区别 ...

  7. SAR ADC系列12:CDAC传统开关切换策略

    目录 一.传统的开关切换策略 传统的CDAC切换策略:采样阶段--同时进行一次比较 传统的CDAC切换策略:第一次比较阶段 传统的CDAC切换策略:第二次比较阶段 总体框图 传统开关切换策略:能耗 一 ...

  8. dubbo调用失败策略_面试官:dubbo负载均衡策略,集群容错策略,动态代理策略有哪些...

    面试官心理分析 继续深问吧,这些都是用 dubbo 必须知道的一些东西,你得知道基本原理,知道序列化是什么协议,还得知道具体用 dubbo 的时候,如何负载均衡,如何高可用,如何动态代理. 说白了,就 ...

  9. python数据分析及可视化(十七)聚宽(双均线分析、因子选股策略、多因子选股策略、均值回归理论、布林带策略、PEG策略、权重收益策略)

    聚宽 聚宽是一个做金融量化的网站,https://www.joinquant.com,登录注册,如果你写的文章.策略被别人采纳,增加积分,积分用于免费的回测时长.在我的策略,进入策略列表,里面有做好的 ...

最新文章

  1. linux服务器环境要求,在Linux服务器中配置node环境
  2. 人工蜂群算法python_教程 | 用人工蜂群算法求解k-分区聚类问题
  3. ML、DL、CNN学习记录7
  4. 明晚7点,中科院专家带你走进智能计算系统的世界
  5. 图:[电子商务-明日网商-知识竞赛策划方案-双屏PPT技术策划] 某大学明日网商知识竞赛圆满结束.
  6. community_louvain社群划分方法
  7. 【元胞自动机】基于元胞自动机模拟生命游戏含Matlab源码
  8. 编译原理第二版5.1答案
  9. 在excel上画交换机面板_如何在Excel中创建面板图
  10. html如何让标签居中显示,HTML怎么让标签居中
  11. 10分钟免费邮箱:10minutemail
  12. 移动互联网(一)短信和彩信等接口开发封装
  13. css固定定位如何基于父级来定为而不是视口
  14. 关于背包问题的递归解法
  15. 乌镇现场 | 倪光南:人工智能应该更好的为人类的服务
  16. Web安全学习系列(1)
  17. 【前端面试题(3)】
  18. shp文件转换到CAD dwg,dxf
  19. 字节跳动校招提前批前端一面总结
  20. 【聊聊Java】Java中HashMap常见问题 -- 扩容、树化、死链问题

热门文章

  1. 使用Stackblitz一分钟之内创建一个Angular应用
  2. 从HTTP 400 bad request说起 - 一个函数被注释掉后引起的血案
  3. Jerry's spark demo application
  4. 什么是SAP Graph
  5. How is SCM product maintenance tcode redirecting access to MARA
  6. Even for transaction data request, metadata is still needed as prerequisite
  7. 利用Chrome开发者工具分析C4C Opportunity搜索的前端性能
  8. HANA report creation implementation go through
  9. SAP Netweaver ECATT介绍
  10. 与大家分享一个我最近开始用的不错的JavaScript IDE