具体来说,我使用带有Heartbeat active / pasive集群的星号。群集中有2个节点。我们假设Asterisk1 Asterisk2。 Eveything在我的群集中配置得很好。当其中一个节点失去Internet连接,星号服务失败或Asterisk1关闭时,星号服务和故障转移IP将迁移到幸存节点(Asterisk2)。
问题是,如果我们在Asterisk1瘫痪时实际处理呼叫时星号停止呼叫,我可以重拨,直到星号服务在asterisk2中启动(5秒,不是很糟糕的时间)。
但是,我的问题是:当呼叫中断连接时,有没有办法让星号像skype一样工作?我的意思是,不停止呼叫并尝试重新连接呼叫,并在Asterisk2中启用星号服务时重新连接它?
答案 0 :(得分:1)
有一些商业系统支持这种行为。
如果你想在非商业系统上这样做,有两种方法:
1)强制回拨所有带autoanswer标志的手机。 Requerment:星号中的大师。
2)使用xen和内存映射/镜像系统在具有相同内存状态的其他节点vps上维护(相同的运行星号)。要求:XEN中的大师。例如,见:http://adrianotto.com/2009/11/remus-project-full-memory-mirroring/
很抱歉,这两种方法都需要大师的知识水平。
注意,如果你通过openvpn隧道啜饮,非常可能的是,如果互联网停机最多20秒,你就不会松开隧道内的呼叫。这不完全是你问的,但可以工作。
答案 1 :(得分:0)
您的解决方案需要在两台服务器上实时更新的共享数据库。数据库将由事件记录器管理,该事件记录器将跟踪正在进行的所有呼叫;也许标记为LINEUP。如果检测到故障,则故障服务器上的所有呼叫都将标记为DROPPEDCALL。当故障转移服务器旋转并接管 - 使用心跳监视或其他 - 那么它首先要做的是生成一组标记为DROPPPEDCALL的所有数据库记录的调用文件。然后可以将这些呼叫召集在一起。
关于它的最难的部分是事件监视器,确保您不会错过任何RING或HANGUP事件,可能会在系统中留下“重影”呼叫,以便在恢复操作中被错误地拨打。
您可能还应该有一种机制来在“管理”计算机上构建您的Asterisk配置,然后将更改推送到您的呼叫管理器AST boxen的服务器场。这样任何节点都可以替换任何其他节点。
您应该拥有的是使用复制技术和Linux高可用性(LHA)的2个DB服务器(1)。或者,使用“公共”IP进行DNS循环或负载平衡也会很好。这些机器可能还有足够轻的负载来托管您的配置管理器,这样可以让LHA“免费”使用。
然后,至少N + 1 AST Boxen进行呼叫处理。 N是您计划每秒处理的呼叫数除以300.“+1”是您的故障转移节点。使用节点轮询,您可以设置一种机制,其中故障转移节点通过从配置管理器中提取正确的配置来采用故障机器的标识。
如果硬件便宜/免费,则1:1 LHA节点冗余始终是一种选择。但是,一般来说,PC硬件和Asterisk软件的故障率相当低;罐中有3或4“9”。所以,实际上,你正试图让最后一点距离达到“第5天”。
我希望能给你一些关于走哪条路的想法。如果您有任何问题,请告诉我,请花点时间“接受”哪个答案能满足您的需求。
(1)http://www.linuxjournal.com/content/ahead-pack-pacemaker-high-availability-stack
答案 2 :(得分:0)
由于近两年后没有接受答案,我会提供一个:没有。这就是原因。
如果从一个Asterisk服务器1故障转移到Asterisk服务器2,则Asterisk服务器2不知道正在进行哪些呼叫(即端点到端点)。 (即使您共享被叫号码数据库,也可以使用星号实时等)。如果星号试图将呼叫的两条腿调到相同的数字,则这些可能与呼叫的端点不同。
另一台服务器无法恢复其他服务器的SIP TCP会话,因为它已与最后一台服务器关闭。
MAC源/目标端口可能相同,您的防火墙也不会知道您正在尝试继续同一会话。
等.....
如果您的目标是电话服务的高可用性,请查看VoIP Info网站。所有其余的(网络冗余,磁盘冗余,共享块存储设备,路由器故障转移协议等)分散注意力......而不是早期检测所有涉及提供电话服务的中继线/路由/设备的故障,然后提供没有共享任何设备的最高恢复程度。 (太多HA解决方案共享磁盘,通道库等会产生单点故障)