Linux集群之高可用性
計(jì)算機(jī)系統(tǒng)的可靠性用平均無故障時(shí)間(MTTF)來度量,即計(jì)算機(jī)系統(tǒng)平均能夠正常運(yùn)行多長時(shí)間,才發(fā)生一次故障。系統(tǒng)的可靠性越高,平均無故障時(shí)間越長??删S護(hù)性用平均維修時(shí)間(MTTR)來度量,即系統(tǒng)發(fā)生故障后維修和重新恢復(fù)正常運(yùn)行平均花費(fèi)的時(shí)間。系統(tǒng)的可靠性越高,平均無故障時(shí)間越長。計(jì) 算機(jī)系統(tǒng)的可用性定義為:MTTF/(MTTF+MTTR) * 100%。由此可見,計(jì)算機(jī)系統(tǒng)的可用性定義為系統(tǒng)保持正常運(yùn)行時(shí)間的百分比。
計(jì)算機(jī)產(chǎn)業(yè)界通常用如下表所示的"9"的個數(shù)來劃分計(jì)算機(jī)系統(tǒng)可用性的類型。
可用性分類 | 可用水平 | 每年停機(jī)時(shí)間 |
容錯可用性 | 99.9999 | < 1 min |
極高可用性 | 99.999 | 5 min |
具有故障自動恢復(fù)能力的可用性 | 99.99 | 53 min |
高可用性 | 99.9 | 8.8 h |
商品可用性 | 99 | 43.8h |
通過硬件冗余或軟件的方法都可以從很大程度上提高系統(tǒng)的可用性。硬件冗余主要是通過在系統(tǒng)中維護(hù)多個冗余部件如硬盤、網(wǎng)線等來保證工作部件失效時(shí)可 以繼續(xù)使用冗余部件來提供服務(wù);而軟件的方法是通過軟件對集群中的多臺機(jī)器的運(yùn)行狀態(tài)進(jìn)行監(jiān)測,在某臺機(jī)器失效時(shí)啟動備用機(jī)器接管失效機(jī)器的工作來繼續(xù)提 供服務(wù)。
一般來說,需要保證集群管理器的高可用性和節(jié)點(diǎn)的高可用性。Eddie、Linux Virtual Server、Turbolinux、Piranha和Ultramonkey 都采用了類似于圖1的高可用性解決方案。
集群管理器的高可用性
為了屏蔽集群管理器的失效,需要為它建立一個備份機(jī)。主管理器和備份管理器上都運(yùn)行著heartbeat程序,通過傳送諸如"我活著"這樣的信 息來監(jiān)測對方的運(yùn)行狀況。當(dāng)備份機(jī)不能在一定的時(shí)間內(nèi)收到這樣的信息時(shí),它就激活fake程序,讓備份管理器接管主管理器繼續(xù)提供服務(wù);當(dāng)備份管理器又從 主管理器收到"我活著"這樣的信息時(shí),它就使fake程序無效,從而釋放IP地址,這樣主管理器就開始再次進(jìn)行集群管理的工作了。
節(jié)點(diǎn)的高可用性
節(jié)點(diǎn)的高可用性可以通過不斷監(jiān)視節(jié)點(diǎn)的狀態(tài)以及節(jié)點(diǎn)上的應(yīng)用程序的運(yùn)行狀態(tài)來實(shí)現(xiàn),當(dāng)發(fā)現(xiàn)節(jié)點(diǎn)已經(jīng)失效時(shí),可以重新配置系統(tǒng)并且將工作負(fù)載交給 那些運(yùn)行正常的節(jié)點(diǎn)來完成。如圖1所示,系統(tǒng)通過在集群管理器上運(yùn)行mon精靈程序來監(jiān)視集群中的實(shí)際服務(wù)器上的服務(wù)程序的運(yùn)行狀況。例如使用 fping.monitor 以一定的時(shí)間間隔來監(jiān)視實(shí)際服務(wù)器是否還在正常運(yùn)轉(zhuǎn);使用http.monitor 來監(jiān)測http服務(wù),使用ftp.monitor來監(jiān)測ftp服務(wù)等等。如果發(fā)現(xiàn)某個實(shí)際服務(wù)器出了故障,或者是其上的服務(wù)已失敗,則在集群管理器中刪除 有關(guān)這個實(shí)際服務(wù)器的所有規(guī)則。反之,如果不久以后發(fā)現(xiàn)系統(tǒng)已經(jīng)重新能夠提供服務(wù),則增加相應(yīng)的所有規(guī)則。通過這種方法,集群管理器可以自動屏蔽服務(wù)器和 其上運(yùn)行的服務(wù)程序的失效,并且當(dāng)實(shí)際服務(wù)器正常運(yùn)轉(zhuǎn)時(shí)能將它們重新加入到集群系統(tǒng)中。