系统架构与部署

HA

HA(High Availability),即高可用部署。

基本原理

HA 的基本原理是使用两台服务器,一台主用(称为 master),一台备用(称为 slave),同时只有主用的服务器工作,即两台当一台用。如果另一台平常是关机的,就称为冷备;如果另一台也是正常运行的,只是不承接业务,就称为热备。

主、备用的两台服务器各有一个 IP 地址,同时他们有一个共用的 IP 地址称为业务 IP(Service IP),或浮动 IP(Float IP)。浮动 IP 平时绑在主机上,如果主机发生故障,则浮动 IP 会绑在备机上。对客户端而言,它从来都是连浮动 IP,因此,即使发生了双机切换,客户端照样能得到服务。示意图如下。

使用 HA 的应用程序一般都尽量简单,比如数据库服务器就只运行数据库服务,以便切换时能最简单的处理。

共享存储

数据主、备服务器之间需要共享数据,则需要保证数据也是高可用的。一般可以使用共享存储实现(如 NAS)。在这种情况下,需要保证同时只有一台服务器能访问共享存储,否则数据可能混乱。另外,在这种情况下,存储也是个单点故障点。

另一种方式是同步方式。即主、备服务器分别有自己的存储,主用服务器在业务过程中实时将数据通过网络等方式同步到备用服务器。如果发生主、备切换,则备用服务器也有相应的数据。

一般来说,双机之间会有心跳服务(可通过heartbeatkeepalived实现),双机互相监控对方,如果备机发现主机失去心跳,则会进行服务切换。

一般来说,双机 HA 服务主要是为了解决硬件问题,比如电源故障,网卡故障等。如果是软件出了问题,服务直接重启即可,无需主备切换。

总体架构

所以,在 XSwitch 架构中,最小的应用需要 4 台服务器(XSwitch、PostgreSQL 各两台),如果再加上 NATS,就需要再加 2 台服务器,共 6 台。也就是说,原来一台服务器就能搞定的事情,现在需要 6 台,但吞吐量并没有增加多少。另外,在实际使用时,还需要考虑存储。

可靠性

假设单机的可靠性为 99%(两个 9),即它会有 1%的概率发生故障,也就是说一年中可能有 3.65 天不能正常通信。但如果配置双机,则两者同时故障的概率为1% x 1% = 0.01 x 0.01 = 0.0001 = 0.01%,也就是说会有365 * 0.01% = 0.0365天 = 0.0365 * 24小时 = 0.876小时,即一年中有不到一个小时的故障时间,双机可靠性达到“4 个 9”(99.99%)。在实际应用中通信设备至少有“5 个 9”(即 99.999%)的可靠性,平均故障时间为一年365 * 24 * 60 * 60 * 0.001 * 0.001 = 31.5秒。

当集群中有多个服务时,集群整体的可靠性是由所有服务共同决定的,即所有服务都可用时整个集群才可用。

小结

在 XSwitch 应用中,理论上也可以将 3 种不同的服务部署在两台物理服务器上,上层通过虚拟机分割成 6 台虚拟机,或直接不使用虚拟机而使用物理服务器。但不管怎么来说,这会将逻辑变得复杂,比如,主机上部署了 FreeSWITCH、NATS 和 PostgreSQL,如果其中一个服务崩溃了,是否进行主备切换?

总之,做 HA 是需要有足够的硬件支撑的。如上所述,从两个 9 到 4 个 9(99%~ 99.99),可靠性只是增加了 0.99,却需要至少 4 倍或 6 倍的服务器资源。如果为了节省服务器将所有服务混合部署到主备用的两台服务器上,就会降低整个系统的可靠性,因为任何一个服务不稳定都可能导致整个系统不稳定。

以上只是对 HA 的简单分析,在实际应用中还需要考虑冗余的存储、硬件有冗余电源(电信机房一般都会配备双路市电,一条供电线路停电不影响系统运行),以太网交换机也需要双备等因素。只有所有组件及网元都能双备,才能消除单点故障。

单机架构