2016-08-01 180 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代理协议将帮助),但是这是一个独立的调查捕获...