Linux

Apache - 高可用性

  • January 17, 2017

我正在尋找一種將 Apache 設置為高可用性的方法。這個想法是讓一個由 2 個以上的 Apache 伺服器組成的集群為相同的網站提供服務。我可以使用循環 DNS 設置每台伺服器的 IP 地址,以便將每個請求隨機發送到集群中的一台伺服器(我還不太關心負載平衡,儘管這可能會涉及以後玩)。

我已經設置了它並使用多個 Apache VM 伺服器(分佈在多個物理伺服器上)服務網站,以及循環 DNS,這工作正常。SQL 數據庫使用 MariaDB 在高可用性集群中設置,Web 數據(HTML、JS、PHP 腳本、圖像、其他資產)儲存在 LizardFS 中,會話也儲存在共享位置。這一切都很好,直到集群中的一台伺服器由於某種原因變得無法訪問。然後有一定百分比的請求(大致是停機伺服器的數量除以集群中的總伺服器數量)沒有得到響應。以下是我考慮過的選項:

自動 DNS 更新

有一些過程來監控 Web 伺服器的功能,並從 DNS 中刪除任何宕機的伺服器。這有兩個問題:

  • 首先,即使我們可以將 TTL 設置為一個非常低的數字(例如 5 秒),我聽說少數 DNS 伺服器會強制執行比我們的更高的最小 TTL。並且,一些瀏覽器(即 Chrome)將記憶體 DNS 不少於 60 秒,無論 TTL 設置如何。因此,即使我們做得很好,但在 DNS 更新的情況下,一些客戶端可能在一段時間內無法訪問站點。
  • 其次,監控集群功能

和更新 DNS 記錄的程序成為新的單點故障。我們

或許可以通過將一台以上的顯示器分佈在多個顯示器上來解決這個問題

系統,因為如果它們都檢測到問題並且都進行了相同的 DNS 更改,那麼這不會導致任何問題。

uCarp/心跳

將訪問的 IP 地址和輪詢 DNS 虛擬化,並在伺服器出現故障的情況下將它們從關閉的伺服器重新分配給啟動的伺服器。例如,server1 的 VIP 為 192.168.0.101,server2 的 VIP 為 192.168.0.102。如果 server1 出現故障,則 192.168.1.102 將成為 server2 上的附加 IP。這有兩個問題:

  • 首先,據我所知,uCarp/Heartbeat 會專門監控它們的對等點是否無法訪問,例如,如果對等點無法被 ping 通。發生這種情況時,它會接管故障對等方的 IP。這是一個問題,因為除了在網路上無法訪問之外,Web 伺服器可能無法服務請求的原因還有很多。Apache 可能已崩潰、可能存在配置錯誤或其他原因。我希望標準是“伺服器未按要求提供頁面”而不是“伺服器不可 ping”。我不認為我可以在 uCarp/Heartbeat 中定義它。
  • 其次,這不適用於跨數據中心,因為跨數據中心的每組伺服器都有不同的 IP 地址塊。我不能在數據中心之間有一個虛擬 IP 浮動。不需要跨數據中心執行(是的,我的分佈式文件系統和數據庫集群可以跨數據中心使用),但這將是一個很好的加分項。

問題

那麼,關於如何處理這個問題的任何想法?基本上,高可用性的聖杯:沒有單點故障(在伺服器、負載平衡器或數據中心),並且在切換時幾乎沒有停機時間。

當我想要 HA 和負載共享時,我使用 keepalived 並使用兩個 VIP 對其進行配置。預設情況下,VIP1 分配給 server1,VIP2 分配給 server2。當任何伺服器停機時,另一台伺服器同時佔用兩個 VIP。

Keepalived 將通過監視其他伺服器來處理 HA。如果伺服器不可訪問或任何介面已關閉,則它會更改為FAULT狀態。VIP 將被其他伺服器佔用。要監控您的服務,您可以使用track_script選項。

如果您想在另一個數據中心添加另一個集群,您可以再添加兩台伺服器並進行相同的配置。現在,您可以使用 DNS 循環在數據中心之間負載共享流量。在這種情況下不需要 DNS 更新。

引用自:https://serverfault.com/questions/826658