Apache - 高可用性

Apache - 高可用性

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

我已經設定好它並與多個 Apache VM 伺服器(分佈在多個實體伺服器上)一起使用,為網站提供服務,並且循環 DNS,效果很好。 SQL 資料庫是在高可用性叢集中使用 MariaDB 設定的,Web 資料(HTML、JS、PHP 腳本、映像和其他資產)儲存在 LizardFS 中,會話也儲存在共用位置。這一切都運作良好,直到叢集中的一台伺服器因某種原因無法存取為止。然後,一定百分比的請求(大約是已關閉的伺服器數量除以叢集中的伺服器總數)未得到答覆。以下是我考慮過的選項:

自動 DNS 更新

有一些進程可以監視 Web 伺服器的功能,並從 DNS 中刪除任何已關閉的伺服器。這有兩個問題:

  • 首先,儘管我們可以將 TTL 設定為某個非常低的數字(例如 5 秒),但我聽說少數 DNS 伺服器會強制執行比我們更高的最小 TTL。而且,無論 TTL 設定為何,某些瀏覽器(即 Chrome)都會快取 DNS 不少於 60 秒。因此,即使我們做得很好,但在 DNS 更新時,某些用戶端可能會在一段時間內無法存取網站。

  • 其次,監視叢集功能
    並更新 DNS 記錄的程式成為新的單點故障。我們
    也許可以透過將多個監視器分佈在多個監視器上來解決這個問題

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

uCarp/心跳

將存取的 IP 位址和循環 DNS 中的 IP 位址虛擬化,並在伺服器發生故障時將它們從故障的伺服器重新分配給正在執行的伺服器。例如,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 浮動。跨資料中心運行的要求(是的,我的分散式檔案系統和資料庫叢集可以跨資料中心使用)不是必需的,但這將是一個很好的優點。

問題

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

答案1

當我需要 HA 和負載共用時,我使用 keepalived 並為其配置兩個 VIP。預設情況下,VIP1 指派給server1,VIP2 指派給server2。當任何伺服器發生故障時,另一台伺服器將佔用這兩個 VIP。

Keepalived 將透過監視其他伺服器來處理 HA。如果無法存取伺服器或任何介面已關閉,則會變更為FAULT狀態。 VIP將被其他伺服器佔用。若要監控您的服務,您可以使用track_script選項。

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

相關內容