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