创建 SBC 高可用集群

有非常多的客户使用 3CX SBC 将其他办公室的话机注册到 3CX 服务器来使用。那么如果 SBC 出现了问题,通过 SBC 注册的话机都会处于离线状态。在这里 SBC 就变成了一个单点故障。为了避免这个问题,用户可以组建 SBC 高可用(High Availability)集群(Cluster)并设置为主备模式来解决。

放置好 SBC 集群后,SBC 成员节点位于群集的浮动 LAN IP 后方 ,由当前活动的主机进行管理。当活动的 SBC 主机离线时,远程注册的 IP 话机将会通过备用 SBC 主机透明地注册到 3CX 上,反之亦然。SBC HA 集群基于crmsh,这是一个用于 Pacemaker 高可用性堆栈的集群管理 shell。

准备条件

  • 集群成员节点必须:
    • 保持两台 PC 或树莓派基于同样的 Debian 或 Raspbian(9/Stretch) Linux 版本以及更新。
    • 按顺序配置,例如:先配置主节点,接着配置备用节点。
    • 配置为同一个时区,同一个网段的静态内网 IP。在每个节点上执行下列命令以避免时间同步问题$ timedatectl set-timezone your_time_zone
    • 保持网卡名称一致,例如:每个 SBC 网卡都为 ens192。
    • 保证两台设备之间没有任何访问限制。
    • 可以对 3CX 主机发送和接受 ICMP(ping)消息。
  • 需要给 HA 集群分配一个静态地址作为浮动 IP 使用。

组建 SBC HA 集群

要组建 SBC HA 集群,需要在 3CX 管理控制台的 “SIP 中继”创建 SBC 的时候分别对节点(1)和节点(2)依次进行以下操作:

  1. 运行下列命令安装 SBC HA 集群:$ wget http://downloads-global.3cx.com/downloads/sbccluster/3cxsbc.zip -O- | sudo bash
  2. 在 Linux 服务器上 根据文档配置 SBC。在安装前,脚本会使用 ICMP 验证 PBX 和 SBC 的连接是否正常。需要确认:
    • PBX 服务器需要允许并响应 SBC 发过来的 ICMP 包。
    • 需要使用相同的 Authentication KEY ID 来配置节点(1)和节点(2)。
  3. 安装好 SBC 后,会询问是否创建 SBC HA 集群。选择 <YES> 集群的安装并按下回车键。
  4. 查看并验证显示出来的 SBC HA 集群安装信息。输入回车继续。
  5. 选择当前安装的节点,例如 “First” 还是 “Second”。接着输入回车继续。为两台机器选择相同的选项会导致网络和集群配置错误。选择用于此节点上的 SBC 服务的网络接口,并选择<Next>。请记住,第一个和第二个节点上的网络接口名称必须相同,如准备条件部分所述。
  6. 如果正在:
    • 配置 SBC 1:输入 SBC 2 的内网 IP 地址。
    • 配置 SBC 2:输入 SBC 1 的内网 IP 地址。
    接着选择 <Next> 进行下一步操作。
  7. 输入一个未分配的 LAN 地址,作为在两个节点上运行的集群 SBC 服务的浮动 IP。SBC 1 和 SBC 2 都必须配置此 IP。选择 <Next> 继续。 选择与第6步中选择的相同的网络接口。
  8. 验证所显示的 SBC 集群信息,然后选择 <Confirm and install> 以应用此节点的配置。
  9. 如果您正在安装 SBC 1,请选择 “<Create>” 来首次初始化集群资源并启动SBC服务。 仅在安装了已创建群集资源且已激活的被动节点上运行 SBC 服务的备用 “第一/主动” 节点时,才使用 “<Skip>”

要添加第二个节点,请等待约 30 秒钟,在第一个节点上线后,然后重复上述步骤。

升级 SBC 集群

要更新集群成员节点上的 SBC 服务,请转到 3CX 管理控制台中的 SIP 中继并遵循以下步骤:

  1. 选择 SBC 连接,然后单击 “更新”。 这将触发活动群集节点(1)将 SBC 服务更新为最新版本并重新启动。 当先前的主动节点(1)脱机以重新启动时,被动节点(2)激活并连接到 PBX。
  2. 选择 SBC 连接,然后再次单击“更新”。 现在,这将触发当前活动的群集节点(2)上的 SBC 服务更新,并随后重新启动该计算机。
  3. 当先前活动的节点 (2) 重新启动时,它将触发已更新的节点 (1) 变为活动的,并为集群提供 SBC 服务。

删除 SBC 集群

要从SBC群集中删除成员节点,请使用以下步骤:

  1. 运行 SBC HA 集群安装脚本:$ wget http://downloads-global.3cx.com/downloads/sbccluster/3cxsbc.zip -O- | sudo bash
  2. 出现提示时,选择要卸载集群的选项。
  3. 当提示删除集群资源时,选择 Skip,除非您也要完全删除集群。
  4. 选择清除 SBC 服务的选项。

已知问题和限制

在管理 SBC HA 集群时,请记住这些要点:

  • 必须按照所有先决条件中的说明配置群集服务。 配置错误会导致群集无法运行,并阻止与成员之间的网络连接。
  • 当 SBC 主备切换时,正在进行的通话不会恢复。
  • 故障转移发生后,新激活的 SBC 节点可以在几秒钟后处理新呼叫。 但是,通过管理控制台进行电话配置等完整功能最多可能需要两分钟的时间来还原。
  • 如果对于任何成员节点临时禁用或断开了本地网络连接,则恢复连接后,群集服务可能无法恢复。 确保成员节点之间的网络连接,以避免导致节点同时承担活动角色并激活两个节点上的群集资源。 此问题将在后续的 Debian / Raspbian Linux 版本中解决。

问题排查

  • 要检查 SBC 集群的状态,请在任何成员节点上使用以下命令:
    • 显示集群和成员状态:crm status
    • 监控集群活动:crm_mon
  • 如果配置了错误的群集设置,最安全的方法是清除设置并从脚本安装重新开始,而不是尝试手动解决问题。
  • 要在发生故障转移事件时得到通知,请启用“设置”>“电子邮件”>“通知”选项卡中的“当中继线/ SBC的状态更改时”选项。
  • 您可以通过运行以下命令获取每个节点的详细集群服务日志消息:$ journalctl -l -u pacemaker.service -u corosync.service
  • 如果群集配置错误,则成员节点之间的连接性可能会受到损害,节点可能会失去连接性或陷入重启循环中。 要解决这种情况,您需要阻止集群成员之间的通信。 最简单的解决方案是:
    1. 关掉两个节点。
    2. 仅启动一个节点,并在其启动后,检查集群状态和 SBC 连接。
    3. 如果可以验证集群状态和连接性,则可以尝试启动第二个节点。 引导后,再次验证集群和 SBC 连接的状态。
  • 如果群集和/或SBC服务仍然配置错误,请断开连接并清除每个节点以使用以下命令替换配置错误的设置:$ sudo apt remove –purge 3cxsbc crmsh pacemaker corosync$ sudo apt autoremove –purge然后,您可以从头开始在每个节点上重新安装SBC HA群集。