2016-08-01 42 views
0

我在AWS中有一個ejabberd集羣,我想要負載均衡。我最初嘗試在節點前放置一個ELB,但這會使會話變得非粘性。然後,我在ELB上啓用了代理協議,並在ELB和ejabberd羣集之間引入了HAProxy節點。我的假設/理解是HAProxy實例將使用TCP代理並確保會話在ejabberd服務器上是粘性的。通過ELB和HAProxy進行ejabberd TCP會話的會話粘性

但是,這似乎仍然沒有發生!這甚至可能在第一位?在HAProxy.cfg文件中引入cookie配置會導致只啓用HTTP的錯誤,因此如何讓TCP會話在服務器上保持粘滯狀態...

請幫忙,因爲看起來在想法上丟失了這裏!

+0

記得最近的問題從另一個用戶誰似乎認爲在ELB上啓用代理協議會以某種方式使會話對ejabberd變得粘稠,這當然是沒有意義的。你的設置,在ELB之後用HAProxy,至少是有道理的,但是需要用['stick on src']來配置(http://blog.haproxy.com/2013/04/22/client-ip- persistence-or-source-ip-hash-load-balancing /)...但我仍然不清楚......爲什麼粘性至關重要?如果連接到不同的服務器,爲什麼這很重要?如果你完成了這個,它會解決你的實際問題嗎? –

+0

嗨@ Michael-sqlbot - 謝謝。是的,我看到了這個問題 - 我也沒有明白這一點。就我而言,如果我不讓會話變得粘滯,用戶的連接流在不同的服務器之間不斷旋轉,並且沒有長時間運行的流。所以基本上,在同一個會話中,用戶會多次註銷並登錄。我想我可能需要更深入地研究ejabberd的行爲 - Mickael在下面提到了ejabberd不存在粘性的必要性,所以我會進一步檢查......謝謝! – Samantha

+0

默認情況下,ELB將在60秒後關閉空閒連接。您是否已將超時重新配置爲更高的值? –

回答

0

ejabberd不需要粘性負載均衡。你不需要實現這一點。只需在前面使用帶ELB或HAProxy的ejabberd羣集,無需粘性。

+0

謝謝@Mickael - 感謝您的回覆。恐怕這似乎是我的理解上的一個缺陷,但是當我使用ELB運行羣集時,會話會持續輪換,並且沒有長期存在的XMPP流。這意味着用戶不斷簽出和進入。這是預期的嗎?我肯定是在俯視一些東西 - 請讓我知道你的想法...再次感謝! – Samantha

+0

不,XMPP是關於長期連接和ELB榮譽的長期連接。它不關閉它們。在您的架構/網絡設置中存在某些錯誤,粘性不會改變整個事情被破壞的事實。 –

0

感謝@ Michael-sqlbot和@Mickael - 似乎它與ELB中的空閒超時有關。這被設置爲60秒,所以如果我沒有將任何數據從客戶端推送到ejabberd服務器,TCP連接就會刷新。在加上健康檢查間隔時,我可以看到ELB給我一個長期運行的連接......謝謝。

我仍然要弄清楚如何獲取客戶端IP在ejabberd(相信能夠在ELB代理協議將幫助),但是這是一個獨立的調查捕獲...