1. 应用场景

1.1 什么是双机

  • 从广义上讲,有两台数据库服务器提供服务。一台作为主用,可以进行读写操作;一台作为备用,可以进行读操作。当主机出现故障的时候,可以将备机升为主机,承担服务任务,从而在不需要人工干预的情况下,自动保证系统能持续提供服务。
  • 从狭义上讲,双机是指primary/standby模式的数据库服务器部署机制。如果primary模式的数据库出现故障,数据库维护人员或仲裁程序将standby模式的数据库升为primary模式,继续提供服务。

1.2 双机基本概念

主机

  • GaussDB中的Primary角色,双机关系中的主节点,业务的直接处理节点,并且负责与备机通信,向备机同步xlog日志,使得用户可以对主机数据做一个实时备份。

备机

  • GaussDB中的Standby角色,双机关系中的备节点,是只读状态,主要用于接收主机日志,并且只能连接到主机,对主机业务数据进行备份,在主机出现异常或者宕机的情况下切换成主机保证业务正常进行。在存在级联备机的情况下,备机还有向级联备机同步日志,承担数据发送者的任务。

级联备机

  • GaussDB中的Cascadestandby角色,双机关系中的级联备节点,是只读状态,主要用于接收备机日志,对备机业务数据起到备份作用,在备机出现异常或者宕机的情况下可以切换成备机继续做主机的备份,保证数据的高可靠性。在异地灾备部署的情况下(数据库参数deploymode为1,并且级联备机与主机分别配置了连接字符串的情况下),当存在主机备机级联备机关系正常的情况下,如果备机宕机或者级联备机因为异常原因无法连接到备机,则在短时间内级联备机会连接到主机上继续接收日志。

次级联备机

  • GaussDB中的Cascadestandby1角色,双机关系中的次级联备节点,是只读状态,主要用于接收级联备机日志,并且只能连接到级联备机,可用于异地灾备双机部署场景中,保证数据在多地的高可靠性。在级联备机异常或者宕机的情况下可以切换成级联备机。

1.3 为何使用双机

  • 对于现代企业的网络来说,数据的高可用性和系统的连续运转能力极其重要,数据库服务器是企业存放数据的重要设备,如果一旦因为数据库服务器的故障而无法正常运转,就会造成业务停顿,导致不可挽回的损失。
  • 数据库服务器的故障可能由各种原因引起,如设备故障、操作系统故障、软件故障等。
  • 如果技术人员在现场,恢复服务器正常可能需要10分钟,几小时甚至几天,从实际经验来看,除非是简单重启服务器(可能隐患仍然存在),否则通常需要几个小时。
  • 如果技术人员不在现场,则恢复服务的时间就更长了。 而对于一些重要系统而言,用户是很难忍受这样长时间的服务中断的。因此需要双机部署机制,来避免长时间的服务中断,保证系统长期、可靠的服务。

1.4 双机适用场景

GaussDB提供多种双机方案:

一主一备

  • 大多数场合下使用一主机一备机,既有很好的性能,也有很高的可靠性。

一主双备

  • 对于可靠性要求非常高的场合使用一个主机两个备机。这样主机宕掉,任一备机都可升为主机,继续提供服务。

一主一备一级联

  • 为预防灾难性事件的发生采用一个主机一个备机和一个级联备机(如火灾、地震等)。这种情况下,级联备机通常被用作灾备,放在远程环境中,如果主机和备机发生灾难性毁坏,可以使用级联备机上的数据进行恢复。

一主一备一级联一次级联

  • 在异地灾备部署场景中,次级联备机可以用来保证级联备机数据的可靠性,从而形成两个地点均存在两个节点的高可靠性保证。即,主机和备机在地点A组成一组双机,级联备机在地点B与备机远程保持连接,级联备机和次级联备机在地点B组成一组双机。

1.5 双机应用约束

  • 在GaussDB的双机方案中,数据只能存放在本地磁盘,不支持存放在磁盘阵列。
  • 只支持主备双机,不支持双主双机。
  • 双机的部署网络是可靠可信的网络。
  • 最多支持主备级联次级联总该8个节点的配置,并且主机只有一个

1.6 双机网络示意图

MySQL双机架构并使用共享存储 双机数据库_MySQL双机架构并使用共享存储

  • 一主一备

MySQL双机架构并使用共享存储 双机数据库_数据库_02

  • 一主双备
  • MySQL双机架构并使用共享存储 双机数据库_级联_03

  • 一主一备一级联
  • MySQL双机架构并使用共享存储 双机数据库_数据_04

  • 一主一备一级联一次级联

MySQL双机架构并使用共享存储 双机数据库_数据_05

2. 工作机制

2.1 双机模式

GaussDB双机部署主要有以下几种模式:

一主一备

  • 主机与备机直接通讯。主机和备机处于同步状态,在主机上执行事务提交操作的时候,备机的数据和主机同时改变。主机故障时,可把备机升为主机继续提供服务。

一主双备

  • 主机与两个备机直接通讯。主机和两个备机同时处于同步状态,在主机上执行事务提交操作的时候,两个备机的数据和主机同时改变。主机故障时,可把任一正常备机升为主机,继续提供服务。

一主一备一级联

  • 主机与备机通讯,备机与级联备机通讯。主机与备机、级联备机处于同步状态,在主机上执行事务提交操作的时候,备机和级联备机的数据同时改变。主机故障,可将备机升主,而级联备机只做灾备使用,放在远程的环境中,从备机上拷贝数据,对业务环境的性能影响很小。

一主四备三级联

  • 为提高整个双机组网的安全性可靠性,提供一主四备三级联的部署方案。在这种情况下,一共在四个地点存在两两成对的双机关系,其中主机和一个备机组成双机关系,另外三对备机和级联备机分别在和主机异地的三个不同地方组织双机关系,并且三个异地的备机都连接到主机上。

一主一备三级联三次级联

  • 为提高整个双机组网的安全性可靠性,提供一主一备三级联三次级联的部署方案。在这种情况下,一共在四个地点存在两两成对的双机关系,其中主机和备机组成双机关系,另外三对级联备机和次级联备机分别在三个地方组成双机关系,并且三个异地的级联备机都连接到备机上。在这种情况下,假如备机因为意外原因挂掉,则级联备机会在短时间内检测到备机无法连接从而连接到主机上。假如备机接下来恢复启动连接到主机,则三个级联备机会和主机断开连接继续和备机保持连接

说明: 五种模式中,主机可以进行数据库读写操作,而备机只能进行数据库读操作,级联备机、次级联备机一般情况下只做灾备使用,不参与业务。

2.2 工作原理

2.2.1 数据同步

主备日志同步复制

  • 当客户端向主机发起连接请求,并提交数据库增、删、查、改等事务的时候,主机会将记录日志发送给备机,备机收到日志之后会发送响应消息给主机,这个时候主机才向客户端返回成功消息。备机会根据收到的日志更新自己的数据库,和主机的数据库数据保持同步状态。但采用这种方式会降低主机性能,并且在备机宕机时,主机的业务被阻塞,所以实际中多不采用这种方式,只有对可靠性要求很高的系统才使用此方式,比如计费系统。

优点:保证数据在备机上也有一份拷贝,使得数据具有双可靠性。


主备日志异步复制

  • 当客户端向主机发起连接请求,并提交数据库增、删、查、改等事务的时候,主机会将记录日志发送给备机,并立即向客户端返回成功消息。备机会根据收到的日志更新自己的数据库,和主机数据库数据保持同步。但是当主机异常的时候,可能会导致过多的数据丢失。为获得高性能,GaussDB多用这种方式进行日志复制。

优点:主机的业务不受备机的影响,性能比较高。

说明: GaussDB默认采用主备日志异步复制的方式,您可以通过配置synchronous_standby_names参数列出采用主备日志同步复制方式的备机名称。


主备最大可用同步

  • 在同步模式下,如果主备通信发生异常,则会阻塞主机上的业务使用。如果采用主备最大可用同步,在备机宕机时,主机不会等待备机的响应,直接提交事务,并且在备机恢复时,如果原来是同步模式,仍旧会按照同步模式处理。

优点:主机的业务不受备机的影响,同时也保证了数据的高可靠性。

说明: GaussDB默认采用主备日志异步复制的方式,您可以通过配置synchronous_standby_names参数列出采用主备日志同步复制方式的备机名称,同时配置most_available_sync参数为on。


日志多通道传输技术
主备日志支持多通道传输,在一个通道损坏的情况下,可以切换到另外一个通道继续传输,维护双机关系不变。

优点:提高了主备间日志传输的可靠性。

2.2.2 平滑切换

当数据库需要升级时,可以将备机停机,将备机数据库升级,然后启动备机,待主备关系稳定后,切换主备机,让备机升为主机继续提供数据库服务,这时可以升级主机数据库。

优点:可保证业务零中断,数据零丢失,提供高可靠性数据库服务,并且主备平滑切换 150 秒完成,具有很好的性能。

2.2.3 异常恢复

主机异常
当主机异常时,数据库维护人员可在备机下使用以下命令将备机升主,继续提供服务。

gs_ctl failover

优点:具有高可用性,主备协同工作,主机失效备机可立即取代它的位置,并且故障切换在 15 秒内完成,具有很好的性能。


备机异常
当备机异常时,数据库维护人员可在备机下使用以下命令重建备机。

gs_ctl build -b full

gs_ctl build -b incremental

优点:快速恢复备机,重建主备关系,为数据库不间断服务提供双保险。

2.2.4 应用程序访问双机

应用程序通常使用仲裁程序访问GaussDB双机,我们只为仲裁程序提供接口,由仲裁程序自动完成双机切换,重建,查询等功能,这些操作对应用程序来说是透明的。

2.2.5 负载均衡

当使用双机热备模式时,主机可以执行增加、删除、查询、修改等操作,备机可以执行查询操作,这样当客户端发起查询操作的事务时,备机就负载了一部分主机的业务,减轻了主机的负担,实现负载均衡,提高了性能。

2.2.6 命令并发控制

GaussDB实现命令的并发控制,即只有在一个命令执行完成的情况下,才允许另外一个命令执行,保证多进程环境不会对数据库造成不确定的影响,提高稳定性和可靠性。