基本定義:
高可用(High Availability)是系統架構設計中必須考慮的因素之一,它通常是指,通過設計減少系統不能提供服務的時間。
如何來衡量高可用性?
可用性通常表示為一個百分比,表示在給定時間段內特定系統或組件的正常運行時間,其中100%的值表示系統永不失效。例如,在一年的時間內保證99%可用性的系統最多可以有3.65天的停機時間(1%)。
這些值是根據幾個因素計算的,包括計划和非計划維護周期,以及從可能的系統故障中恢復的時間。
目前大部分企業的高可用目標是4個9,也就是99.99%,也就是允許這台系統的年停機時間為52.56分鍾。
高可用目標:
消除基礎架構中的單點故障。
單點的定義是:技術堆棧中的某個組件,如果它變得不可用,將導致服務中斷。
因此,應用程序中沒有冗余的正常功能的部件被認為是單一故障點。
要消除單點故障,必須為堆棧的每一層做好冗余准備。
高可用簡單示意:
例如,假設您的基礎架構由負載均衡器后面的兩個相同的冗余Web服務器組成。來自客戶端的流量將在Web服務器之間平均分配,但如果其中一個服務器出現故障,負載均衡器會將所有流量重定向到剩余的在線服務器。
此方案中的Web服務器層不是單點故障,因為:
- 適用於同一任務的冗余組件
- 該層頂部的機制(負載均衡器)能夠檢測組件中的故障並調整其行為以便及時恢復
另外一種情況,如果負載均衡器宕機,消除這個剩余的單點故障可能具有挑戰性; 即使您可以輕松配置額外的負載均衡器以實現冗余,但在負載均衡器之上沒有明顯的點來實現故障檢測和恢復。
因此,僅冗余不能保證高可用性。必須有一種機制來檢測故障並在堆棧的某個組件不可用時采取措施。
可以使用從上到下的方法實現冗余系統的故障檢測和恢復:頂部的層負責監視其下方的層以確定故障。在這里,基礎架構中有一個點,即頂層不存在或不可及,負載平衡器層就是這種情況。為外部服務器中的負載均衡器創建故障檢測服務只會創建新的單點故障。
對於負載平衡器的情況,由於名稱服務器的工作方式,還有一個額外的復雜因素。從負載平衡器故障中恢復通常意味着故障轉移到冗余負載平衡器,這意味着必須進行DNS更改才能將域名指向冗余負載平衡器的IP地址。
這樣的更改可能需要相當長的時間才能在Internet上傳播,這會導致此系統嚴重停機。
一種可能的解決方案是使用DNS循環負載平衡。但是,這種方法不可靠,因為它使客戶端應用程序的故障轉移。
更強大和可靠的解決方案是使用允許靈活IP地址重映射的系統,例如浮動IP。按需IP地址重新映射通過提供可在需要時輕松重新映射的靜態IP地址,消除了DNS更改中固有的傳播和緩存問題。域名可以保持與相同的IP地址關聯,而IP地址本身也可以在服務器之間移動。
可以使用哪些軟件來配置高可用性?
高可用性系統的每一層在軟件和配置方面都有不同的需求。但是,在應用程序級別,負載平衡器是創建任何高可用性設置的重要軟件。
HAProxy(高可用性代理)是負載平衡的常見選擇,因為它可以處理多個層的負載平衡,以及不同類型的服務器,包括數據庫服務器。
向上移動系統堆棧,為應用程序入口點(通常是負載均衡器)實施可靠的冗余解決方案非常重要。要消除此單點故障,如前所述,我們需要在浮動IP后面實現負載均衡器集群。Corosync和Pacemaker是在Ubuntu和CentOS服務器上創建此類設置的流行選擇。
結論
高可用性是可靠性工程的重要子集,專注於確保系統或組件在給定的時間段內具有高水平的操作性能。乍一看,它的實施可能看起來相當復雜; 但是,它可以為需要提高可靠性的系統帶來巨大的好處。
謝謝大家,也歡迎大家關注我的技術與資源分享公眾號: