在平常的集羣系統架構中,通常用到Heartbeat的主要就2種:
1)高可用(High Availability)HA集羣, 使用Heartbeat實現,也稱爲」雙機熱備」, 「雙機互備」, 「雙機」;
2)負載均衡羣集(Load Balance Cluster),使用Linux Virtual Server(LVS)實現;node
Heartbeat 的介紹
Heartbeat是Linux-HA項目中的一個組件,它實現了一個高可用集羣系統。心跳服務和集羣通訊是高可用集羣的兩個關鍵組件,在 Heartbeat項目裏,由heartbeat模塊實現了這兩個功能。Heartbeat是目前開源HA項目中十分紅功的一個例子,它提供了全部 HA 軟件所須要的基本功能,好比心跳檢測和資源接管、監測羣集中的系統服務、在羣集中的節點間轉移共享 IP 地址的全部者等,自1999年開始到如今,Heartbeat在行業內獲得了普遍的應用。heartbeat最核心的功能包括兩個部分,心跳監測和資源接管。心跳監測能夠經過網絡鏈路和串口進行,並且支持冗 餘鏈路,它們之間相互發送報文來告訴對方本身當前的狀態,若是在指定的時間內未收到對方發送的報文,那麼就認爲對方失效,這時需啓動資源接管模塊來接管運行在對方主機上的資源或者服務。linux
Hearbeat和Keepalived區別
1) Keepalived使用的VRRP協議方式,虛擬路由冗餘協議 (Virtual Router Redundancy Protocol,簡稱VRRP);
2) Heartbeat是基於主機或網絡的服務的高可用方式;
3) Keepalived的目的是模擬路由器的雙機;
4) Heartbeat的目的是用戶Service的雙機;
5) LVS的高可用建議用Keepavlived;
6) 業務的高可用用Heartbeat;算法
Keepalived 主要控制IP飄移,配置應用簡單,並且分層,layer3,4,5,各自配置極爲簡單
Heartbeat 不但能夠控制IP飄移,更擅長對資源服務的控制,配置,應用比較複雜;shell
HA集羣中的相關術語數據庫
.節點(node)
運行heartbeat進程的一個獨立主機,稱爲節點,節點是HA的核心組成部分,每一個節點上運行着操做系統和heartbeat軟件服務,在heartbeat集羣中,節點有主次之分,分別稱爲主節點和備用/備份節點,每一個節點擁有惟一的主機名,而且擁有屬於本身的一組資源,例如,磁盤、文件系統、網絡地址和應用服務等。主節點上通常運行着一個或多個應用服務。而備用節點通常處於監控狀態。api
.資源(resource)
資源是一個節點能夠控制的實體,而且當節點發生故障時,這些資源可以被其它節點接管,heartbeat中,能夠當作資源的實體有:
- 磁盤分區、文件系統
- IP地址
- 應用程序服務
- NFS文件系統服務器
.事件(event)
集羣中可能發生的事情,例如節點系統故障、網絡連通故障、網卡故障、應用程序故障等。這些事件都會致使節點的資源發生轉移,HA的測試也是基於這些事件來進行的。網絡
.動做(action)
事件發生時HA的響應方式,動做是由shell腳步控制的,例如當某個節點發生故障後,備份節點將經過事先設定好的執行腳本進行服務關閉或啓動, 進而接管故障節點的資源。架構
HeartBeat 的組成負載均衡
Heartbeat提供了高可用集羣最基本的功能,例如,節點間的內部通訊方式、集羣合做管理機制、監控工具和失效切換功能等等,目前的最新版本是Heartbeat2.x,下面講述也是以Heartbeat2.x爲主,主要介紹Heartbeat2.0的內部組成,主要分爲如下幾大部分:
.heartbeat: 節點間通訊檢測模塊
.ha-logd: 集羣事件日誌服務
.CCM(Consensus Cluster Membership):集羣成員一致性管理模塊
.LRM (Local Resource Manager):本地資源管理模塊
.Stonith Daemon: 使出現問題的節點從集羣環境中脫離
.CRM(Cluster resource management):集羣資源管理模塊
.Cluster policy engine: 集羣策略引擎
.Cluster transition engine:集羣轉移引擎
下圖顯示的是Heartbeat2.0內部結構組成
Heartbeat僅僅是個HA軟件,它僅能完成心跳監控和資源接管,不會監視它控制的資源或應用程序,要監控資源和應用程序是否運行正常,必須使用第三方的插件,例如ipfail、Mon、Ldirector等。Heartbeat自身包含了幾個插件,分別是ipfail、Stonith和Ldirectord,介紹以下:
ipfail插件的功能直接包含在Heartbeat裏面,主要用於檢測網絡故障,並做出合理的反應,爲了實現這個功能,ipfail使用ping節點或者ping節點組來檢測網絡鏈接是否出現故障,從而及時的作出轉移措施。
Stonith插件能夠在一個沒有響應的節點恢復後,合理接管集羣服務資源,防止數據衝突,當一個節點失效後,會從集羣中刪除,若是不使用Stonith插件,那麼失效的節點可能會致使集羣服務在多於一個節點運行,從而形成數據衝突甚至是系統崩潰。所以,使用Stonith插件能夠保證共享存儲環境中的數據完整性。
Ldirector插件是一個監控集羣服務節點運行狀態的插件。Ldirector若是監控到集羣節點中某個服務出現故障,就屏蔽此節點的對外鏈接功能,同時將後續請求轉移到正常的節點提供服務,這個插件常常用在LVS負載均衡集羣中。
一樣,對於操做系統自身出現的問題,Heartbeat也沒法監控,若是主節點操做系統掛起,一方面可能致使服務中斷,另外一方面因爲主節點資源沒法釋放,而備份節點卻接管了主節點的資源,此時就發生了兩個節點同時爭用一個資源的情況。針對這個問題,就須要在linux內核中啓用一個叫watchdog的模塊,watchdog是一個Linux內核模塊,它經過定時向/dev/watchdog設備文件執行寫操做,從而肯定系統是否正常運行,若是watchdog認爲內核掛起,就會從新啓動系統,進而釋放節點資源。
在linux中完成watchdog功能的軟件叫softdog,softdog維護一個內部計時器,此計時器在一個進程寫入/dev/watchdog設備文件時更新,若是softdog沒有看到進程寫入/dev/watchdog文件,就認爲內核可能出了故障。watchdog超時週期默認是一分鐘,能夠經過將watchdog集成到Heartbeat中,從而經過Heartbeat來監控系統是否正常運行。
HeartBeat 的做用
經過HeartBeat,能夠將資源(IP以及程序服務等資源)從一臺已經故障的計算機快速轉移到另外一臺正常運轉的機器上繼續提供服務,通常稱之爲高可用的服務。在實際的生產應用場景中,heartbeat的功能和另外一個高可用的開源軟件keepalived有不少的相同之處,在咱們實際的生產業務中也是有區別的。
HeartBeat 的工做原理
heartbeat最核心的包括兩個部分,心跳監測部分和資源接管部分,心跳監測能夠經過網絡鏈路和串口進行,並且支持冗 餘鏈路,它們之間相互發送報文來告訴對方本身當前的狀態,若是在指定的時間內未收到對方發送的報文,那麼就認爲對方失效,這時需啓動資源接管模塊來接管運行在對方主機上的資源或者服務。
Heartbeat: (心跳檢測)自己是整個集羣的基礎(cluster messaging layer),負責維護集羣各節點的信息以及它們以前通訊;只提供主從備份功能,並不能對各個節點進行監控,須要安裝ldirectord。
Resource-agent: (資源代理)就是各類的資源的ocf腳本,這些腳本將被LRM調用從而實現各類資源啓動、中止、監控等等。
Cluster-glue: 至關於一箇中間層,能夠將heartbeat和crm(pacemaker)聯繫起來,主要包含2個部分,LRM和STONITH;
Ldirectord: 負責realserver的健康檢查,能夠自動將realserver中宕機的機器移除,再也不分配請求。
經過修改Heartbeat的軟件的配置文件,能夠制定那一臺Heartbeat服務器做爲主服務器,則另外一臺將自動成爲熱備服務器。而後在熱備服務器上配置Heartbeat守護程序來監聽來自主服務器的心跳消息。若是熱備服務器在指定時間內爲監聽到來自主服務器的心跳,就會啓動故障轉義程序,並取得主服務器上的相關資源服務的全部權,接替主服務器繼續不間斷的提供服務,從而達到資源以及服務高可用的目的。
以上的描述heartbeat的主備模式,heartbeat還支持主主模式,即兩臺服務器互爲主備,這是他們之間還會互相發送報文來告訴對方本身的當前的狀態,若是在指定的時間內未收到對方發送的心跳報文,那麼,一方就會認爲對方失效或者是已經宕機了,這時每一個運行正常的主機就會啓動自身的資源接管模塊來接管運行在對方主機上的資源或者是服務,繼續爲用戶提供服務。通常狀況下,能夠較好的實現一臺主機故障後,企業業務可以不間斷的持續的提供服務(注意:所謂的業務不間斷)。在故障轉移期間也是須要切換時間的,heartbeat的切換時間是5-20秒。(服務器宕機的切換比人工切換要快).
另外,和keepalived高可用軟件同樣,heartbeat高可用是操做系統級別的,不是服務(軟件)級別的,能夠經過簡單的腳本控制,實現服務級別的高可用!
故障切換的常見條件:
1)主機服務器物理宕機(硬件損壞,操做系統故障)
2)Heartbeat服務自己故障
3)兩臺主備服務器之間的鏈接線路故障
應用服務故障則不會產生切換,能夠經過服務宕機把heartbeat服務停掉。
heartbeat內部結構有三大部分組成
集羣成員一致性管理模塊(CCM)用於管理集羣節點成員,同時管理成員之間的關係和節點間資源的分配,heartbeat模塊負責檢測主次節點的運行狀態,以決定節點是否失效。ha-logd模塊用於記錄集羣中全部模塊和服務的運行信息。
本地資源管理器(LRM)負責本地資源的啓動,中止和監控,通常由LRM守護進程lrmd和節點監控進程(Stonith Daemon)組成,lrmd守護進程負責節點間的通訊,Stonith Daemon一般是一個Fence設備,主要用於監控節點狀態,當一個節點出現問題時處於正常狀態的節點會經過Fence設備將其重啓或關機以釋放IP、磁盤等資源,始終保持資源被一個節點擁有,防止資源爭用的發生。
集羣資源管理模塊(CRM)用於處理節點和資源之間的依賴關係,同時,管理節點對資源的使用,通常由CRM守護進程crmd、集羣策略引擎和集羣轉移引擎三個部分組成,集羣策略引擎(Cluster policy engine)具體實施這些管理和依賴,集羣轉移引擎(Cluster transition engine)監控CRM模塊的狀態,當一個節點出現故障時,負責協調另外一個節點上的進程進行合理的資源接管。
在Heartbeat集羣中,最核心的是heartbeat模塊的心跳監測部分和集羣資源管理模塊的資源接管部分,心跳監測通常由串行接口經過串口線來實現,兩個節點之間經過串口線相互發送報文來告訴對方本身當前的狀態,若是在指定時間內未收到對方發送的報文,則就認爲對方失效,這時資源接管模塊將啓動,用來接管運行在對方主機上的資源或者服務。
HeartBeat 的心跳鏈接
高可用集羣是指一組經過硬件和軟件鏈接起來的獨立計算機,它們在用戶面前表現爲一個單一系統,在這樣的一組計算機系統內部的一個或者多個節點中止工做,服務會從故障節點切換到正常工做的節點上運行,不會引發服務中斷。從這個定義能夠看出,集羣必須檢測節點和服務什麼時候失效,什麼時候恢復爲可用。這個任務一般由一組被稱爲「心跳」的代碼完成。在Linux-HA裏這個功能由一個叫作heartbeat的程序完成。
經過上面的描述,要部署heartbeat服務,至少須要兩臺主機才能完成。那麼,要實現高可用服務,這兩臺主機之間,是如何作到互相通訊互相監控的呢?
下面是兩臺heartbeat主機之間通訊的一些經常使用的可行方法:
1)串行電纜,即所謂的串口(首選,缺點是距離不能太遠)
2)一根以太網電纜量網口直連(生產環境中經常使用的方式)
3)以太網電纜,經過交換機等網絡設備鏈接(次選,緣由是增長了故障點,很差排查故障,同時線路不是專用的心跳線,容易受其餘數據傳輸的影響,致使心跳報文發送問題)
Heartbeat 的裂腦
什麼是裂腦?
因爲兩臺高可用服務器之間在指定的時間內,沒法互相檢測到對方心跳而各自啓動故障轉移功能,取得了資源以及服務的全部權,而此時的兩臺高可用服務器對都還活着並做正常運行,這樣就會致使同一個IP湖綜合服務在兩端同時啓動而發生衝突的嚴重問題,最嚴重的就是兩臺主機同時佔用一個VIP的地址,當用戶寫入數據的時候可能會分別寫入到兩端,這樣可能會致使服務器兩端的數據不一致或形成數據的丟失,這種狀況就本成爲裂腦,也有的人稱之爲分區集羣或者大腦垂直分隔!
簡單來講, Hearbeat腦裂說的就是兩臺服務都正常,可是就是檢測不到對方的心跳信息(心跳通訊出現故障),兩臺heartbeat都綁定VIP,這就是腦裂,因爲相互失去聯繫,兩臺服務器本能的爭取接管資源,最嚴重的後果:共享資源被瓜分,服務都起不起來了,又或者服務都起來,可是共享資源同時寫,最後數據就被破壞了!
致使裂腦發生的緣由:
通常來講,裂腦的發生,主要是由如下的幾個緣由致使的:
1)高可用服務器對之間心跳線路故障,致使沒法正常的通訊。緣由好比:
1--心跳線自己就壞了(包括斷了,老化);
2--網卡以及相關驅動壞了,IP配置及衝突問題;
3--心跳線間鏈接的設備故障(交換機的故障或者是網卡的故障);
4--仲裁的服務器出現問題。
2)高可用服務器對上開啓了防火牆阻擋了心跳消息的傳輸;
3)高可用服務器對上的心跳網卡地址等信息配置的不正確,致使發送心跳失敗;
4)其餘服務配置不當等緣由,如心跳的方式不一樣,心跳廣播衝突,軟件出現了BUG等。
簡單來講,Heartbeat腦裂的緣由可能就是:
1)心跳鏈路故障,致使沒法正常通訊;(好比: 網線誤拔,心跳線斷了,沒法通訊;心跳線之間的中轉設備壞了,仲裁設備壞了;)
2)開啓了防火牆阻擋了心跳信息傳輸;
3)心跳網卡地址等配置不正確;使用網路直連時,網卡驅動壞了,局域網IP衝突;
4)心跳方式,心跳廣播衝突,軟件bug;
防止腦裂發生的方法:
發生腦裂的時候,對業務的影響是及其嚴重的,有的時候甚至是致命的。
好比:兩臺高可用的服務器對之間發生腦裂,致使互相競爭同一個IP資源,就如同咱們局域網內常見的IP地址衝突同樣,兩個機器就會有一個或者兩個不正常,影響用戶正常訪問服務器。若是是應用在數據庫或者是存儲服務這種極重要的高可用上,那就致使用戶發佈的數據間斷的寫在兩臺服務器上的惡果,最終數據恢復及困難或者是難已恢復
實際的生產環境中,咱們能夠從如下幾個方面來防止裂腦的發生:
1)同時使用串行電纜和以太網電纜鏈接,同時用兩條心跳線路,這樣一條線路壞了,另外一個線路仍是好的,依然能傳送消息(推薦的)
2)檢測到裂腦的時候強行的關閉一個心跳節點(須要特殊的節點支持,如stonith,fence),至關於程序上備節點發現心跳線故障,發送關機命令到主節點。
3)作好對裂腦的監控報警(如郵件以及手機短信等),在問題發生的時候可以人爲的介入到仲裁,下降損失。固然,在實施高可用方案的時候,要根據業務的實際需求肯定是否可以容忍這樣的損失。對於通常的網站業務,這個損失是可控的(公司使用)
4)啓用磁盤鎖。正在服務一方鎖住共享磁盤,腦裂發生的時候,讓對方徹底搶不走共享的磁盤資源。但使用鎖磁盤也會有一個不小的問題,若是佔用共享盤的乙方不主動解鎖,另外一方就永遠得不到共享磁盤。現實中介入服務節點忽然死機或者崩潰,另外一方就永遠不可能執行解鎖命令。後備節點也就截關不了共享的資源和應用服務。因而有人在HA中涉及了「智能」鎖,正在服務的一方只在發現心跳線所有斷開時才啓用磁盤鎖,平時就不上鎖了
5)報警報在服務器接管以前,給人員處理留足夠的時間就是1分鐘內報警了,可是服務器不接管,而是5分鐘以後接管,接管的時間較長。數據不會丟失,但就是會致使用戶沒法寫數據。
6)報警後,不直接自動服務器接管,而是由人員接管。
7)增長仲裁的機制,肯定誰該得到資源,這裏面有幾個參考的思路:
1--增長一個仲裁機制。例如設置參考的IP,小心跳徹底斷開的時候,2個節點各自都ping一下參考的IP,不一樣則代表斷點就出如今本段,這樣就主動放棄競爭,讓可以ping通參考IP的一端去接管服務。
2--經過第三方軟件仲裁誰該得到資源,這個在阿里有相似的軟件應用
簡單來講,防止Heartbeat腦裂的辦法:
1)同時使用串行電纜和以太網電纜鏈接,同時使用兩條心跳線;
2)檢測到裂腦時,強制關閉一個節點,(須要特殊設備支持,如stonish和fence),至關於程序上的備節點發現心跳故障,發送關機指令到主節點;
3)作好監控預警,即作好腦裂監控報警(在仲裁設備上作),仲裁方式停服;
4)多個仲裁機制(仲裁設備,第三方仲裁軟件,並肯定讓那個節點接管服務);
5) 一旦報警,短信電話通知運維人員,服務不要自動接管服務,有人員操做;
5)啓用磁盤鎖;
HeartBeat 的配置文件
heartbeat主要的配置文件有3個:
1)認證文件authkeys
2)主配置文件ha.cf
3)資源文件haresources
接下來就重點說一下這3個文件的具體功能以及配置:
1)heartbeat的認證配置文件authkeys,內容以下
auth 1
1 crc
2 sha1 HI!
3 md5 Hello!
該文件主要是用於集羣中兩個節點的認證,採用的算法和密鑰(若是有的話)在集羣中節點上必須相同,目前提供了3種算法:md5,sha1和crc。
其中crc不可以提供認證,它只可以用於校驗數據包是否損壞,而sha1,md5須要一個密鑰來進行認證,從資源消耗的角度來說,md5消耗的比較多,sha1次之,所以建議通常使用sha1算法。
若是要採用sha1算法,只須要將authkeys中的auth 指令(去掉註釋符)改成2,而對應的2 sha1行則須要去掉註釋符(#),後面的密鑰本身改變(兩節點上必須相同)。改完以後,保存,同時須要改變該文件的屬性爲600,不然heartbeat啓動將失敗。
2)heartbeat的主要配置文件ha.cf
第一個是ha.cf該文件位於在安裝後建立的/etc/ha.d目錄中。該文件中包括爲Heartbeat使用何種介質通路和如何配置他們的信息。在源代碼目錄中的ha.cf文件包含了您可使用的所有選項,詳述以下:
debugfile /var/log/ha-debug 用於記錄heartbeat的調試信息
logfile /var/log/ha-log 用於記錄heartbeat的日誌信息
若是未定義上述的日誌文件,那麼日誌信息將送往local0(對應的#/var/log/messages),若是這3個日誌文件都未定義,那麼heartbeat默認狀況下
將在/var/log下創建ha-debug和ha-log來記錄相應的日誌信息。
keepalive 2 發送心跳報文的間隔,默認單位爲秒,若是你毫秒爲單位,那麼須要在後面跟ms單位,如1500ms即表明1.5s
deadtime 30 用於配置認爲對方節點菪掉的間隔
warntime 10 發出最後的心跳警告報文的間隔
initdead 120 網絡啓動的時間
udpport 694 廣播/單播通信使用的udp端口
bcast eth0 Linux 心跳所使用的網絡接口
baud 19200 波特率,串口通訊的速度。
udpport 694 使用端口694進行bcast和ucast通訊。這是默認的,而且在IANA官方註冊的端口號。
mcast eth0 225.0.0.1 694 1 0
若是採用組播通信,在這裏能夠設置組播通信所使用的接口,綁定的組播ip地#址(在224.0.0.0 - 239.255.255.255間),通信端口,ttl(time to live)所能通過路由的#跳數,是否容許環回(也就是本地發出的數據包時候還接收)
ucast eth0 192.168.1.2 若是採用單播,那麼能夠配置其網絡接口以及所使用的ip地址
auto_failback on 該選項是必須配置的!用於決定當擁有該資源的屬主恢復以後,資源是否變遷:是遷移到屬主上,仍是在當前節點上繼續運行,直到當前節點出現故障。
stonith baytech /etc/ha.d/conf/stonith.baytech 用於共享資源的集羣環境中,採用stonith防護技術來保證數據的一致性
watchdog /dev/watchdog 該指令是用於設置看門狗定時器,若是節點一分鐘內都沒有心跳,那麼節點將從新啓動
node ken3 設置集羣中的節點,注意:節點名必須與uname –n相匹配
node primary.mydomain.com 該選項是必須配置的。集羣中機器的主機名,與「uname –n」的輸出相同。
node backup.mydomain.com 該選項是必須配置的。同上。
respawn 該選項是可選配置的:列出將要執行和監控的命令。例如:要執行ccm守護進程,則要添加以下的內容:
ping 10.10.10.254
ping指令以及下面的ping_group指令是用於創建僞集羣成員,它們必須與下述#的ipfail指令一塊兒使用,它們的做用是監測物理鏈路,也就是說若是集羣節點與上述僞設備不相通,那麼該節點也將無權接管資源或服務,它將釋放掉資源。
respawn hacluster /usr/lib/heartbeat/ccm
使得Heartbeat以userid(在本例中爲hacluster)的身份來執行該進程並監視該進程的執行狀況,若是其死亡便重啓之。
對於ipfail,則應該是:
respawn hacluster /usr/lib/heartbeat/ipfail
對於pingd則應該是:
respawn hacluster /usr/lib64/heartbeat/pingd -m 100 -d 5s
注意:若是結束進程的退出代碼爲100,則不會重啓該進程。
apiauth pingd gid=haclient uid=hacluster
apiauth client-name gid=gidlist uid=uidlist
apiauth ipfail gid=haclient uid=hacluster 設置你所指定的啓動進程的權限
3)heartbeat的資源配置文件haresources
配置好ha.cf文件以後,即是haresources文件。
該文件列出集羣所提供的服務以及服務的默認全部者,該文件主要是爲部署的集羣配置資源或者服務。
注意:兩個集羣節點上的該文件必須相同。集羣的IP地址是該選項是必須配置的,不能在haresources文件之外配置該地址, haresources文件用於指定雙機系統的主節點、集羣IP、子網掩碼、廣播地址以及啓動的服務等。
它的每一有效行的格式以下:
node-name resource1 resource2 ... resourceN
其中node-name即爲集羣中某一節點的名稱,必須與uname –n相同,
後面的資源組resource1 resource2 …resourceN中每個資源都是一個shell腳本,它們的搜索路徑爲/etc/init.d/和/usr/local/etc/ha.d/resource.d(該路徑根據你所安裝heartbeat的路徑有所不一樣),heartbeat爲咱們提供了一個很是好的資源擴展框架,若是咱們須要控制一種本身的資源,只須要實現一個支持start和stop參數的shell腳本就能夠了,目前heartbeat所支持的資源腳本能夠在我提供的上述路徑中去查看。
以下配置進行說明:
node-name network-config
其中node-name指定雙機系統的主節點,取值必須匹配ha.cf文件中node選項設置的主機名中的一個,node選項設置的另外一個主機名成爲從節點。network-config用於網絡設置,包括指定集羣IP、子網掩碼、廣播地址等。resource-group用於設置heartbeat啓動的服務,該服務最終由雙機系統經過集羣IP對外提供。在本文中咱們假設要配置的HA服務爲Apache和Samba。
在haresources文件中須要以下內容:
primary.mydomain.com 192.168.85.3 httpd smb
該行指定在啓動時,節點linuxha1獲得IP地址192.168.85.3,並啓動Apache和Samba。在中止時,Heartbeat將首先中止smb,而後中止Apache,最後釋放IP地址192.168.85.3。這裏假設命令「uname –n」的輸出爲「primary.mydomain.com」-若是輸出爲「primary」,便應使用「primary」。
primary.mydomain.com IPaddr::192.168.21.107/24/eth0 drbddisk::r0 Filesystem::/dev/drbd1::/data::ext4 nfs正確配置好haresources文件以後,將ha.cf和haresource拷貝到/etc/ha.d目錄。注意:資源文件中能執行的命令必須在/etc/ha.d/resource.d/ 中可見!