ITPub博客

首页 > 应用开发 > IT综合 > Heartbeat Score的计算-

Heartbeat Score的计算-

原创 IT综合 作者:Steven1981 时间:2009-11-24 10:24:21 0 删除 编辑

"继拜读""大师空空""的关于HEARTBEAT SCORE的计算方法,(详见http://steven1981.itpub.net/post/7967/494023),基于一定的理解,自己也作了一些测试,在实验过程中,发现SCORE的计算方法与前面文章中写的大致相同,但有一些细节还是不一样.所以写下这些来给大家拍砖.

注:以下所有得出的结论是基于<2resource2group4score>的配置环境测试的。
(1个资源组只配置1个资源,简称其cib.xml原文见http://steven1981.itpub.net/post/7967/494026)
[@more@]
一,HB(heartbeat简称)的一些常规动作
1.当HB发现NODE资源失败或发生切换时,会减去之前赋给该NODE的"成功分:default-resource-stickiness"
2.当HB发生NODE资源失败时,会给该NODE加上"失败分:default-resource-failure-stickiness"
3.当HB的资源成功在NODE上START,那么会给该NODE加上"成功分:default-resource-stickiness"

二, Starting Heartbeat on 2 Nodes (mysql3/mysql4):
1. Check status of resources on 2 Nodes. If there is resources running, The score will be added by ""resource-stickiness-default"" ;
CASE 0:
There is no resource on 2 Nodes;
mysql3.mysql.score = mysql4.mysql.score(cib.set)
mysql4.mysql.score = mysql4.mysql.score(cib.set)
CASE 1:
If resource MYSQL is running on the Node mysql3 Before heartbeat start ; then
mysql3.mysql.score = mysql3.mysql.score(cib.set) + ""resource-stickiness-default"";
mysql4.mysql.score = mysql4.mysql.score(cib.set)
CASE 2:
If resource MYSQL is running on the Node mysql4 and mysql 3; then
mysql3.mysql.score = mysql3.mysql.score(cib.set) + ""resource-stickiness-default"";
mysql4.mysql.score = mysql4.mysql.score(cib.set) + ""resource-stickiness-default"";
2. To decide with Node to run resource :
mysql3.mysql.score VS mysql4.mysql.score.
Resource will run on the node which score is bigger;
3. Set Score for 2 Node .
We supposed resource run on the mysql3. (mysql3.mysql.score > mysql4.mysql.score) Then
For Case 0 in Step 1.
mysql3.mysql.score += ""resource-stickiness-default"" ;
msyql4.mysql.score += 0 ;
For Case 1 in Step 1.
mysql4.mysql.score +=0;
mysql3.mysql.score +=0;
For Case 2 in Step 1.
mysql4.mysql.score -= ""resource-stickiness-default"" ;
msyql3.mysql.score += 0 ;"

三, The Monitor find resource mysql failed on mysql3
mysql3.mysql.score=mysql3.mysql.score- ""default-resource-stickiness"" + ""default-failed_resource-stickiness"" ;
if (mysql3.mysql.score+ ""resource-stickiness-default"")>=mysql4.mysql.score then
""NOT_SWITCH"";
else
""SWITCH"" ;
fi"

"NOT_SWITCH():
mysql3.mysql start again;
if START failed ,
mysql3.mysql.score = -100000 ; SWITCH to Node mysql4;
else
mysql3.mysql.score += ""resource-stickiness-default"";
mysql4.mysql.score += 0;
fi"

"SWITCH():
mysql4.mysql start ;
if START failed ,
mysql4.mysql.score = -100000 ; SWITCH to Node mysql3
else
mysql4.mysql.score += ""resource-stickiness-default""
mysql3.mysql.score += 0;
fi"


四, Service heartbeat stop/start
Now Resource mysql running on the Node mysql4, and the Service heartbeat stop/start on the Mysql3;
1, HB stop on the Mysql3,HB set score for 2 Nodes :
mysql4.mysql.score +-= 0;
mysql3.mysql.score = mysql3.mysql.score(cib.set), bug node mysql3.status is "dead"

2, HB start on the Mysql3,Then,HB will decide whether need to Switch resource mysql from mysql4 to mysql3 ;
If mysql3.mysql.score > mysql4.mysql.score then
Switch resource mysql ;
mysql3.mysql.score += ""resource-stickiness-default"" ;
mysql4.mysql.score -= ""resource-stickiness-default"" ;
else
mysql3.status is active . And nothing happened with score for 2 Nodes."

五, 测试结果

1, 测试环境:
OS LINUX RHEL 5.3
HEARTBEAT 2.1.4
RESOURCE: IPADDR,MYSQL
NODES : mysql3,mysql4

2, CIB.XML 重要参数设置: (完整cib.xml见: http://steven1981.itpub.net/post/7967/494026 )
default-resource-stickiness=100 default-resource-failure-stickiness=-101
mysql4.ipaddr.score=350 mysql3.ipaddr.score=400
mysql4.mysql.score=350 mysql3.mysql.score=400

3, 详细的步骤和SCORE,以及资源的状态."
ScoreStatusActionMemo
mysql3.ipaddrmysql4.ipaddrmysql3.mysqlmysql4.mysqlmysql3.allmysql4.allmysql3.statusmysql4.statusseqoperationHB在启动时,会先判断NODE上资源是否已经启动,如果已经启动就会给已经启动的一边加分.比如,
mysql4.mysql在hb启动前就已经工作.那么HB用400<(350+100)判决,MYSQL的资源就跑到MYSQL4上
Mysql3/mysql4.mysql在HB启动前都工作,那么HB用(400+100)>(350+100)判决,决定resocre mysql run on MYSQL3,
然后再把mysql4.mysql stop. Mysql4.mysql.score=450-100=350
500350500350--IPADDR/mysql 0Start刚开始NODE都没有启资源,先比较400>350,决定跑在mysql3上,
然后mysql3.score+=default-resource-stickiness
500350399350--IPADDR/mysql 1mysql3.mysql down先mysql3.mysql.score=mysql3.mysql.score-"default-resource-stickiness"+"default-failed_resource-stickiness";
if (mysql3.mysql.score+ "resource-stickiness-default")>=mysql4.mysql.score then 不切换 else 发生切换 fi
500350198450--IPADDRmysql2mysql3.mysql down先mysql3.mysql.score=(399-101-100),然后发现198+100也小于mysql4.mysql.score=350,
这时就发生切换.mysql4.mysql.score+=100
400450400450-- ipaddr/mysql3mysql3.hb downmysql3.hb stop, HB把mysql3.ipaddr迁到mysql4上. Mysql4.ipaddr.score+=100;
mysql3.hb.start 后,其score=cib.sets
500249400450  ipaddrmysql4mysql4.ipaddr down计算方法同action.1
400349400450   ipaddr/mysql5mysql3.hb down 
500249400450  ipaddrmysql6mysql3.hb start重启后,发现mysql3.cib.set.score>mysql4.ipaddr.score.发生切换.
mysql4.ipaddr.score-=default-resource-stickiness,
mysql3.ipaddr.score+=default-resource-stickiness
           
六, 小结
根据自己的环境和应用需要,合理的设置SCORE和resource-stickiness参数,做到真正的HA,是很有技术含量的一件事情.你可能需要在很多次测试和计算中得出结果.
当然这一次的测试环境相对比较简单,一个资源组只包括一个资源,而且也没有设置Colocation.
如果在一个资源组里包括多个资源的环境里, SCORE的计算更为复杂.我也将再继续研究… 待续.

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/703656/viewspace-1028994/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    127
  • 访问量
    855003