通過硬件冗余或軟件的方法都可以從很大程度上提高系統的可用性。硬件冗余主要是通過在系統中維護多個冗余部件如硬盤、網線等來保證工作部件失效時可 以繼續使用冗余部件來提供服務;而軟件的方法是通過軟件對集群中的多台機器的運行狀態進行監測,在某台機器失效時啟動備用機器接管失效機器的工作來繼續提 供服務。
一般來說,需要保證集群管理器的高可用性和節點的高可用性。Eddie、Linux Virtual Server、Turbolinux、Piranha和Ultramonkey 都采用了類似於圖1的高可用性解決方案。
圖1 高可用性解決方案示意圖
集群管理器的高可用性
為了屏蔽集群管理器的失效,需要為它建立一個備份機。主管理器和備份管理器上都運行著heartbeat程序,通過傳送諸如"我活著"這樣的信 息來監測對方的運行狀況。當備份機不能在一定的時間內收到這樣的信息時,它就激活fake程序,讓備份管理器接管主管理器繼續提供服務;當備份管理器又從 主管理器收到"我活著"這樣的信息時,它就使fake程序無效,從而釋放IP地址,這樣主管理器就開始再次進行集群管理的工作了。
節點的高可用性
節點的高可用性可以通過不斷監視節點的狀態以及節點上的應用程序的運行狀態來實現,當發現節點已經失效時,可以重新配置系統並且將工作負載交給 那些運行正常的節點來完成。如圖1所示,系統通過在集群管理器上運行mon精靈程序來監視集群中的實際服務器上的服務程序的運行狀況。例如使用 fping.monitor 以一定的時間間隔來監視實際服務器是否還在正常運轉;使用http.monitor 來監測http服務,使用ftp.monitor來監測ftp服務等等。如果發現某個實際服務器出了故障,或者是其上的服務已失敗,則在集群管理器中刪除 有關這個實際服務器的所有規則。反之,如果不久以後發現系統已經重新能夠提供服務,則增加相應的所有規則。通過這種方法,集群管理器可以自動屏蔽服務器和 其上運行的服務程序的失效,並且當實際服務器正常運轉時能將它們重新加入到集群系統中。