Asterisk

具有共享數據庫的星號集群

  • December 29, 2016

我想從 3 個星號(13.x)節點建構一個星號集群,一個在美國,一個在歐洲,一個在亞洲。現在我有3台伺服器。Asterisk 正在為 sip/iax 使用者、隊列、cdr、cel、queue_logs 使用實時基礎設施。所有使用者都在使用 SIP 和軟電話。

數據庫是使用 Master <==> Master 解決方案複製的,所以基本上我在所有位置都有“相同”的數據庫,並且數據是實時複製的(1-2 分鐘,因為伺服器彼此相距很遠)。

由於隊列表被複製的事實,我在所有位置都有所有隊列,這是所需的行為,因為一台伺服器是另一台伺服器的備份。

我想要完成的是,無論呼叫被路由到哪裡,“系統”都應該能夠從該隊列中找到可用的代理並響鈴到他們的設備,無論代理在哪裡登錄.

為了複製設備狀態,我使用了 Openfire XMPP,但在這裡我有一些差異,因為使用者經常在不同伺服器上的特定隊列中具有不同的狀態。

IE。我在他正在通話的一台伺服器上有代理 Adrian 實時 IN_USE,在另一台伺服器上有實時 NOT_IN_USE。這裡的問題是,如果呼叫到達第二台伺服器的該隊列中,這將嘗試向 Adrian 發出呼叫,而不知道他已經在呼叫中。由於這個原因,它會給阿德里安帶來壓力,因為它會在軟電話的第二條線路上響起,並且呼叫不會轉到其他可用的代理。

我懷疑這些問題是由我在所有伺服器上都有所有隊列這一事實產生的,因此狀態會因此而改變。

我看到有一個專用隊列伺服器的設置。這是為什麼 ?避免此類問題或負載分配?

使用共享數據庫方案進行星號集群的推薦方法是什麼?

關於如何實現這一目標的任何想法?

PS 我在 sip.com 中啟用了呼叫計數器


更新:

確實,集群一詞在這裡不合適。我想理想的情況是在每個位置(具有故障轉移檢測的主動-被動)上都有一個由兩個星號伺服器組成的集群,然後在該層之後有一個更高的伺服器來平衡這些位置之間的呼叫。

我現在遇到的主要問題是我有這 3 個位置,並且我在它們之間共享隊列(因為它們都有相同的數據庫)。假設名為 TestQueue 的隊列有 15 個使用者,每個位置有 5 個使用者(團隊分為 3 個)。我想要完成的是,無論呼叫在哪台伺服器上進入隊列,都能夠聯繫到所有可用的代理(並確定哪些忙,哪些不忙)。

我不確定我的方法是否可行,或者我應該有一個星號伺服器用於託管隊列和其他 3 個使用者將註冊的伺服器(隊列伺服器和註冊伺服器之間的 xmpp 同步狀態)。

根據您的描述,您正在混淆/混合集群和負載平衡,這會造成混亂……選擇一個或另一個。看看這個 serverfault question and answer,它很好地描述了 Asterisk 的集群狀態。

如果這確實是一個集群,那麼備用節點不應該在不使用時執行 Asterisk(沒有用於代理/中繼連接的活動 SIP 堆棧)。嘗試使用不同的狀態等保持活動和備用節點的執行更接近負載平衡 - 就您要實現的目標而言,這並不是真正可取的。

主主同步也是集群中的一個錯誤。如果一個節點出現故障或開始破壞數據,它不應該破壞其他對等節點——主-主同步會這樣做。同樣,使用 NFS、iSCSI、DRBD 等共享文件儲存都允許一個失敗的對等點破壞所有對等點。

而不是“共享數據庫”尋找“同步數據”。這樣,集群軟體就可以控制同步的內容(並避免在對等點出現故障時進行同步)。

您還缺少集群的一個主要方面 - 健康檢測。您如何知道硬體是否出現故障?樹幹掉下來了?上游設備宕機?代理無法連接?等等。這將如何觸發故障轉移?到哪個節點?

您似乎採取了“硬體層”集群的觀點,這在應用程序層不能很好地工作,它必須在對等方之間共享狀態(例如:語音郵件、隊列等)。您的方法最適用於簡單的作業系統級服務(HA 文件共享、HA 數據庫等),而不是應用層服務。好好看看上面提到的 ServerFault 問題和這個 Voip-Info 網頁

如果您在選擇方向時遇到困難,請考慮這一點:負載平衡非常適合在沒有狀態的系統上實現高容量。10 年前,這對 Asterisk 來說很重要,因為單個伺服器可以保持打開的同時通道很少。現在,即使是商品硬體也可以保持 500 個通道打開(無需轉碼),因此負載平衡已經失寵。

具有託管狀態的集群現在是關鍵呼叫中心的標準。這包括複雜的健康監控、同步(非共享數據)、使用共享撥號計劃的對等點之間的智能定制/差異化等。與 2 個對等點進行集群也是標準(與不同數據中心中的對等點) - 當您達到 3 個以上時在競爭的情況下,您開始遇到新的同步狀態問題(2/3/4/等活動)。正如您所描述的,使用 Master-Master DB,您將永遠無法從多活動爭用中恢復。

聽起來您購買了很多硬體,現在正在設計使用硬體的解決方案。您可能希望以另一種方式解決此問題 - 一旦您有了實用的設計,就可以重新利用不需要的硬體。我建議使用具有數據同步和健康監控功能的 2 節點集群。

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