使用双 DNS 实现 3CX failover

介绍

之前我们分享过 Linux 双击热备的文档。拓扑图如下所示:

在上面的方案中,虽然 3CX 有 2 台做了双机热备,但是 DNS 是单点的,出现故障了还是有可能导致 3CX 无法使用。

上周我们有个客户因为 VMware 的物理机的硬盘坏了,3CX 的主机和 DNS 服务器在一个物理机上,导致了 3CX 主机和 DNS 服务器同时宕机。3CX 的备机在另一台 ESXi 物理机上幸免遇难。备份文件也是储存在 3CX 备机上,后期的恢复工作也是相对顺利。

恢复后客户希望能多加一台 DNS 服务器,因为 DNS 服务器需要的配置不高,而且在话机里可以添加 2 个 DNS IP 地址。3CX 的脚本只需要能同时修改两台 DNS 服务器的 IP 地址就可以了。

这样的好处是各能分一台 3CX 和 DNS 服务器在一台 ESXi 物理机上,即使一边的物理机再次宕机,还是可以存活一台 3CX 备机以及一台 DNS 服务器,依旧可以实现 3CX failover 的双击热备。

步骤

由于之前已经介绍过单点 DNS 服务器的配置了,我们就此基础上进行修改。

我们需要搭建第二台 DNS 服务器,可以参考文档:Linux DNS 服务器搭建

搭建好以后,请确保两台 DNS 服务器的所有配置,包括配置文件,db 文件的名称和内容都保持完全一致。

接着我们需要让备机可以直接使用 SSH 登录到第二台 DNS 服务器当中,具体可以参考文档中的创建密钥对部分。

然后我们进到 3CX 备机的 /var/lib/3cxpbx/Instance1/Scripts 目录下修改现有脚本,在这里我的脚本名称是 failover.sh

输入命令编辑脚本文件:

nano /var/lib/3cxpbx/Instance1/Scripts/failover.sh

进来以后我们先将原来的 DNS_IP重新命令为 DNS_IP1,并在下面一行新建一个 DNS_IP2,输入第二台 DNS 的 IP 地址。

接着将 ssh -p .... 开头的这行复制到下面一行,并将第一行和第二行的 $DNS_IP分别修改为 $DNS_IP1$DNS_IP2

修改完以后输入 ctrl + O 保存,提示是否确认按回车确认即可。保存后按 ctrl + X 退出。

接下来我们可以在备机输入下面命令测试:

runuser -l phonesystem -c "/var/lib/3cxpbx/Instance1/Scripts/failover.sh"

没有报错的话使用 nslookup 名称查看两个 DNS 服务器的返回值是否正确。如果都修改为了备机的 IP 地址,那就说明没问题了。我们只需要再将两台 DNS 服务器的记录值修改回 3CX 主机的值即可。

修改完脚本后我们还需要登录话机,在话机的网络设置中添加第二台 DNS 服务器的 IP 地址。