Failover

支持故障轉移的 IRC 服務?

  • February 24, 2014

我執行一個伺服器*(稱為“伺服器 A”)* IRC“網路”,感謝一些朋友的慷慨,我得到了第二個伺服器*(“伺服器 B”)*,我可以在其上執行 IRCd,以便在伺服器 A 崩潰的情況下提供冗餘。這很好,我可以設置一個與伺服器連結的循環 DNS。我的問題是如何處理服務?**有誰知道在伺服器出現故障時讓服務“故障轉移”的方法?**例如,伺服器 A 開始執行服務,但突然崩潰。伺服器 B 檢測到這一點並啟動它自己的服務副本(理想情況下,與伺服器 B 上的服務具有相同的配置和數據)

想到的一個解決方案是編寫一個每個伺服器都執行的機器人,它位於一個頻道中,定期檢查來自另一台伺服器的機器人是否在頻道中。如果是,那麼一切都很好。如果沒有,則進行故障轉移。我寧願不必自己編寫程式碼

我們目前在 Linux 上使用 Unreal IRCd 和 Anope 服務

簡短回答:您不能使用 Anope(或我知道的任何其他服務系統)

長答案:你的想法很好,你可能不必從頭開始編寫程式碼——你可以為簡單的 IRC 機器人(例如 Python)獲取現有的模板程式碼;他們也不一定要定期輪詢其他機器人,而只需處理加入/部分/退出消息。當然,您必須以某種方式處理各種競爭條件(例如網路拆分、數據庫訪問問題等)

無需編寫自定義服務即可獲得最接近故障轉移的功能(這不是一項簡單的任務)。是在您已經在網路上執行 IRCd 的其他幾個帳戶上安裝服務,並 crontab 一個 rsync 腳本以將服務數據庫分發到其他機器。這樣,如果盒子服務當機,您可以從另一台機器啟動服務,並且仍然擁有相對最新的數據庫。

Crontab 並不難學,rsync 也不難,而且比編寫自定義解決方案要快得多。

最重要的是,此方法適用於所有使用平面數據庫的現有服務包。

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