介紹Heartbeat 2.0![]() 在商業服務的Rails HTTP Cluster觀念及測試中,我提到了failover也是cluster的其中一個觀念。幾年前我用heartbeat,只是單純架設 pgcluster的load balancer,那個時候也是簡單的active / standby。在那個時候,有這樣的架構已經減輕大部分人所遇到的問題:有一台掛掉另一台可以馬上取代其服務,讓維護者有時間可以救,使用者不會罵,已 經是很偷笑的事情了。不然一般的維護者可能要急得像熱鍋上的螞蟻,拼命地輸入指令試著想要拯救資料或服務,而在數小時的工作後,服務還是救不起來,使用者 罵聲四起。但是其實對我而言,這些比起硬體的方案,還是多多少少嫌不方便。 參考這個網頁,可以瞭解有那些failover的方式。 http://www.ukingdom.com.tw/pro/lifekeeper/lifekeeper.htm 先不管後面的階層化或是多方向failover,其中提到的active/active及active/standby,為啥要有這些分別呢?我來一個一個介紹。 Failover的種類active/standby對於一般架設LAMP來建置phpbb論壇,或是一些簡單Web服務(如wiki)的管理者,在經費拮据的情況下,通常都是先跑一台,在想辦法生另 一台。這時進行active/standby的好處是,原理單純設定簡單,兩台跑同樣的OS同樣的服務,一台掛了另一台頂替。但缺點就會造成 standby的那一台會浪費CPU資源,所以在很久以前的小論壇都沒有問題,但是到現在,要應付可能會日漸成長的web 2.0社群式的論壇,可能一開始就不能考量這樣玩了。 active/active另一種作法是兩台主機都維持上線的狀態,也就是可以說有主站,也有個副站。而一旦任何一方掛了,另一方就可以直接抓下對方的IP,就當作是一樣的服 務了。當然這樣還是可以讓管理者有時間可以去處理。然而在商用服務的狀況下,通常使用者會比較難接受有兩個以上的IP或是URL,這個算是缺點之一。但優 點就是相對地如果使用者可以接受副站的情況之下,就會有效地疏散流量及CPU負載。 以上就是1.0版的時候提供的功能。有關heartbeat 1.0可以參考舊文章 http://kiwi.csie.chu.edu.tw/blog/archives/48 Cluster Resource Management而在heartbeat 2.0中已經引進了資源管理的觀念,意思就是將一個服務程式或是一個IP視作一種資源,而這個資源可以任意在cluster裡的任意的node中 migrate(遷移)。當然與上述兩種不同的是,在這種情況下node就可以是兩個以上了。這並不是 process migration(行程遷移),還沒有那樣進步連程式或設定檔都可以自己搬走。所有node要拿來當作資源的服務,一開始就必須全部自行建置好在完全正 常的狀態。當進行遷移的時候,heartbeat還是會以service {服務名稱} start/stop的方式來完成這樣的工作。其實這個方式基本上是和active/standby一樣,不過重要的是搭配cluster的load balance機制,也就是像下圖一樣。因為本來就要做load balance,每個node預設將apache啟動,而需要遷移的資源也頂多只有ip和haproxy,就不需要浪費時間啟動較慢的apache。 另一點是資源的群組,數量,相依性,啟動順序,甚至限制在哪些node上跑,全部都可以調整。也因此如果要做active/active那樣主站副站的作法也完全可行。 ![]() 如這兩張圖,假設有一個 cluster有四個node,在正常的情況下,使用者會透過Virtual Server的IP連到Real Server的真實服務,這個我們在之前的文章已經談過。然而套用heartbeat 2.0的觀念,我們將virtual server ip及haproxy設定為資源,接著這個資源就可以進行手動或自動的遷移。手動遷移就像是,當你點下移往第二台的按鈕後,第一台就會停止服務,而第二台 就會開啟服務。自動遷移會發生在整個cluster的服務被斷定為無法使用的情況下,其他node自動地挑出下一個Quorum(服務候選人),並且將該 候選人的服務喚起,來完成資源遷移。根據硬體執行完服務的速度,遷移大概會在10秒到30間完成,像haproxy是個小程式,整個遷移的動作在10秒內 就完成了。而當cluster上所有node偵測到原本斷線的node回復,又會自動將資源遷移回第一個node,這個是因為heartbeat執行的演 算法必須要維持一致性的關係。 儘管heartbeat 2.0多個了這個他稱為CRM(Cluster Resource Management)的技術,卻像是以plugin的方式掛上,核心設定還是沒有啥改變,只要加上crm yes選項就可以啟動了。此外也有附上另一個做的不錯的GUI介面,讓資源建立,監控和操作更為順暢。 此外在閱讀過後heartbeat的wiki後,我確實覺得他們的編排有點「偷懶」,就是提到了2.0版更新的部分,然後讓你把1.0的說明和2.0的說明混在一起看。其實這樣子並沒有辦法好好解釋2.0的觀念。 實做安裝在所有linux平台上,包括fedora 6、7, CentOS 5,SuSE Enterprise 10,Ubuntu,Gentoo上都可以找到heartbeat的蹤跡。在這裡就只提到redhat系列平台基本上是採用yum,所以打yum install heartbeat就可以了。不過如果要安裝heartbeat_gui,請確定要有XWindow或是VNC,然後打yum install heartbeat_gui。 兩個設定檔以下兩個步驟和heartbeat 1.0一樣,先從/usr/share/doc/heartbeat-{version} /複製ha.cf, authkeys兩個檔案至/etc/ha.d/ 編輯ha.cf,在node設定的部分,依照你的主機名稱,依序打上。請注意這些名稱一定要符合在該主機上打uname -n所顯示的值
接著編輯authkeys,使用以下設定即可。如果你的網路環境沒有啥防火牆,建議使用md5或是sha1
接著在其他主機也依此安裝,也順手裝好你想要當作資源的服務,就可以service heartbeat start來啟動。 與1.0不相同的是,接著可以參考這段影片,瞭解heartbeat gui怎樣操作。 http://www.linux-ha.org/Education/Newbie/IPaddrScreencast 那我稍微解釋各張投影片在說啥:
結論要測試其實很簡單,把網路線拔掉就可以了。不過要注意的是,拔拔插插的動作不要太頻繁,會導致反應很慢;但因為CRM所使用的演算法在node有兩 個以上,不修改預設設定的情況下,是不會產生死結的,算是可以放心試。此外也不一定要使用hb_gui來監控,在文字介面下有一個crm_mon指令,可 以監控而不會像gui有時候會卡住不更新。 初學者還是要注意,千萬別將load balance和failover所用的程式搞混了。Linux上有名的ip load balance程式為ipvsadm與ldirectord,儘管heartbeat有附資源script來操作ldirectord,但其執行檔還是要 自己用RPM裝的。 |