linux消息类型,heartbeat消息类型
heartbeat消息類型:
心跳消息為約150字節(jié)的數(shù)據(jù)包,可為單薄,廣播,多播的方式,控制心跳頻率及出現(xiàn)故障要等待多久進行故障切換
集群轉(zhuǎn)換消息
ip-request和ip-request-resp
當主服務器恢復在線狀態(tài)時,通過ip-request消息要求備機釋放主服務器失敗時備服務器取得的資源,然后備份服務器關閉服務釋放主服務器失敗時取得的資源及服務
備服務器釋放主服務器失敗時取得的資源及服務后,就會通過ip-request-resp消息通知主服務器它不在擁有該資源及服務,主服務器收到來自備節(jié)點的ip-request-resp消息通知后,啟動失敗時釋放的資源及服務,并開始提供正常的訪問服務!
重傳請求
rexmit-request控制重傳心跳請求!
以上的心跳控制消息使用UDP協(xié)議發(fā)送到/etc/ha.d/ha.cf文件制定的任意端口,或制定的多播地址,如果使用默認為694
心跳消息的查看:借鑒http://blog.chinaunix.net/uid-7921481-id-1617030.html
heartbeat中,可以使用命令cl_status來查詢集群心跳的相關信息。
顯示節(jié)點server-1所使用的心跳:
[root@server-1 bin]# ./cl_status listhblinks server-1
eth1
eth0
顯示節(jié)點server-1的eth0心跳狀態(tài):
[root@server-1 bin]# ./cl_status hblinkstatus server-1 eth0
up
為了在mgmt下可以檢查心跳狀態(tài),在mgmt/daemon/mgmt_hb.c中添加如下函數(shù):
char*
on_status_of_hblinks(char* argv[], int argc)
{
const char * intf;
const char * if_status;
const char* name = NULL;
char* ret = cl_strdup(MSG_OK);
if (hb->llc_ops->init_nodewalk(hb) != HA_OK) {
mgmt_log(LOG_ERR, "Cannot start node walk");
mgmt_log(LOG_ERR, "REASON: %s", hb->llc_ops->errmsg(hb));
cl_free(ret);
return cl_strdup(MSG_FAIL);
}
while((name = hb->llc_ops->nextnode(hb))!= NULL) {
if (strcmp(hb->llc_ops->node_type(hb,name), "ping") == 0)
continue;
if (strcmp(get_localnodeinfo(), name) == 0)
continue;
if (hb->llc_ops->init_ifwalk(hb, name) != HA_OK) {
cl_log(LOG_ERR, "Cannot start heartbeat
link interface walk.");
cl_log(LOG_ERR, "REASON: %s",
hb->llc_ops->errmsg(hb));
return cl_strdup(MSG_FAIL"\nCannot start
heartbeat link interface walk");
}
while ((intf = hb->llc_ops->nextif(hb))) {
if_status = hb->llc_ops->if_status(hb, name, intf);
if (if_status == NULL) { /* Should be error ? */
cl_log(LOG_ERR, "Cannot get heartbeat
link status");
cl_log(LOG_ERR, "REASON: %s",
hb->llc_ops->errmsg(hb));
return cl_strdup(MSG_FAIL"\nCannot get
heartbeat link status");
}
if ( STRNCMP_CONST(if_status, "dead") == 0 ) {
return cl_strdup(MSG_OK"\nhas_dead");
}
}
if (hb->llc_ops->end_ifwalk(hb) != HA_OK) {
cl_log(LOG_ERR, "Cannot end heartbeat
link interface walk");
cl_log(LOG_ERR, "REASON: %s",
hb->llc_ops->errmsg(hb));
return cl_strdup(MSG_FAIL"\nCannot end
heartbeat link interface walk");
}
}
if (hb->llc_ops->end_nodewalk(hb) != HA_OK) {
mgmt_log(LOG_ERR, "Cannot end node walk");
mgmt_log(LOG_ERR, "REASON: %s",
hb->llc_ops->errmsg(hb));
cl_free(ret);
return cl_strdup(MSG_FAIL);
}
return cl_strdup(MSG_OK"\ngood");
}
之后即可在mgmt中使用status_hblinks命令即可查詢心跳的狀態(tài),如:
[root@server-1 heartbeat-gui]# ./mgmtcmd.py status_hblinks
---------------------------
ok
has_dead
除非另有說明,否則本站上的內(nèi)容根據(jù)以下許可進行許可: CC署名-非商業(yè)性使用-相同方式共享4.0國際許可協(xié)議4.0進行許可
本文作者:www.linuxea.com for Mark
文章鏈接:http://www.linuxea.com/942.html (轉(zhuǎn)載請注明本文出處和本章鏈接)
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的linux消息类型,heartbeat消息类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何解决php无法找到该页的问题
- 下一篇: CSS如何实现旋转动画