保护模式功能本质上用于定义主集群以何种模式(强同步或异步同步)向不同的备集群传输日志,备集群以何种方式接收日志以及数据是否无损。

OceanBase 数据库提供了两个字段来描述保护模式的配置及主备集群的状态:保护模式(PROTECTION_MODE)和保护级别(PROTECTION_LEVEL)。接着将从以下两个场景来描述这两个字段的取值及其含义。

最大性能模式切换为最大保护模式场景

默认情况下,主集群和备集群均处于最大性能模式,主集群异步向所有备集群传输日志,备集群数据落后于主集群,数据是有损的。主集群和备集群的保护模式和保护级别均显示为 MAXIMUM PERFORMANCE

最大保护模式下,主集群会强同步日志给 SYNC 备集群,SYNC 备集群最终会达到数据无损状态。整个模式过程不是原子的,会存在中间状态。下图展示了从最大性能模式切换为最大保护模式时,<PROTECTION_MODEPROTECTION_LEVEL>二元组状态的转换流程。

保护模式和保护级别的状态转换图图中:

  • 初始状态的主备集群:

    主集群和备集群均处于最大性能模式,保护模式(PROTECTION_MODE)和保护级别(PROTECTION_LEVEL)的字段均为 MAXIMUM PERFORMANCE

  • 收到保护模式切换命令后的主集群:

    1. 主集群的保护模式(PROTECTION_MODE)字段切换为 MAXIMUM PROTECTION,保护级别(PROTECTION_LEVEL)字段保持为 MAXIMUM PERFORMANCE。然后开始通知所有 Server 强同步日志给 SYNC 的备集群。

    2. 等待所有 Server 都进入强同步模式后,保护级别(PROTECTION_LEVEL)的字段切换为 MAXIMUM PROTECTION,表示主集群进入强同步模式。

      注意

      此过程不会停写,需要强同步的日志是之后新写的日志,已经提交成功的日志不受影响。

  • 感知到保护模式变换后的 SYNC 备集群:

    1. SYNC 备集群的保护模式(PROTECTION_MODE)字段变为MAXIMUM PROTECTION,保护级别(PROTECTION_LEVEL)字段保持为 MAXIMUM PERFORMANCE

    2. 待主集群进入强同步模式后,保护级别(PROTECTION_LEVEL)字段会变为 RESYNCHRONIZATION,表示处于追赶数据状态。在这个状态下,备集群会补齐与主集群的日志 GAP。

    3. 待落后的日志补齐后,备集群的保护级别(PROTECTION_LEVEL)字段将变为 MAXIMUM PROTECTION,表示备集群与主集群数据一致,达到数据无损状态。

  • 感知到保护模式变换后的 ASYNC 备集群:

    ASYNC备集群的保护模式(PROTECTION_MODE)字段变为 MAXIMUM PROTECTION,由于始终处于异步同步状态,因此保护级别(PROTECTION_LEVEL)字段将保持为 MAXIMUM PERFORMANCE 不变。

最大性能模式切换为最大可用模式的场景

最大可用模式是最大性能和最大保护两种保护模式的结合,最大可用模式下,主集群会存在两种状态:强同步日志给 SYNC 备集群和异步同步日志给 SYNC 备集群,两种状态会动态变化,同时影响备集群的状态。下图展示了从最大性能模式切换为最大可用模式时,<PROTECTION_MODEPROTECTION_LEVEL>二元组状态的转换流程。最大性能模式切换为最大可用模式图中:

  • 初始状态的主备集群:

    主集群和备集群均处于最大性能模式,保护模式(PROTECTION_MODE)和保护级别(PROTECTION_LEVEL)的字段均为 MAXIMUM PERFORMANCE。

  • 收到保护模式切换命令后的主集群:

    1. 主集群的保护模式(PROTECTION_MODE)字段切换为 MAXIMUM AVAILABILITY,保护级别(PROTECTION_LEVEL)保持为 MAXIMUM PERFORMANCE,表示当前仍然维持异步同步模式。

    2. 然后不断检查备集群是否同步正常,如果备集群同步正常,则开始通知所有 Server 强同步日志给SYNC备集群。

    3. 等待所有 Server 都进入强同步模式后,保护级别(PROTECTION_LEVEL)字段切换为 MAXIMUM AVAILABILITY,表示主集群进入强同步模式。

    4. 此后,一直维持强同步模式,直到感知到 SYNC 备集群同步日志异常,自动降级为异步同步模式,保护级别(PROTECTION_LEVEL)字段切换为 MAXIMUM PERFORMANCE

  • 感知到保护模式变换后的 SYNC 备集群:

    1. SYNC备集群的保护模式(PROTECTION_MODE)字段切换为 MAXIMUM AVAILABILITY

    2. 与最大保护模式类似,待主集群进入强同步模式后,保护级别(PROTECTION_LEVEL)字段会变为 RESYNCHRONIZATION,表示处于追赶数据状态。

    3. 待落后的日志补齐后,备集群的保护级别(PROTECTION_LEVEL)字段将变为 MAXIMUM AVAILABILITY,表示处于强同步状态,与主集群数据一致,达到数据无损状态。

  • 感知到保护模式变换后的 ASYNC 备集群:

    ASYNC备集群的保护模式(PROTECTION_MODE)字段变为 MAXIMUM AVAILABILITY,由于始终处于异步同步状态,因此保护级别(PROTECTION_LEVEL)字段将保持为 MAXIMUM PERFORMANCE 不变。

从以上两个场景可以看出,保护模式(PROTECTION_MODE)字段是跨集群共享的状态值,主集群和备集群是一致的,表示当前配置下主备集群的数据保护能力。

保护模式(PROTECTION_MODE)字段的取值及含义如下:

  • MAXIMUM PERFORMANCE :最大性能模式,表示主集群会异步同步日志给所有备集群。

  • MAXIMUM PROTECTION :最大保护模式,表示主集群会强同步日志给 SYNC 备集群。

  • MAXIMUM AVAILABILITY: 最大可用模式,表示主集群会尽力强同步日志给 SYNC 备集群,支持自动降级为异步同步模式。

保护级别(PROTECTION_LEVEL)是集群级别的状态,在主集群和备集群上有不同的含义。在主集群上表示是否正在强同步日志;在备集群上表示当前是否进入强同步模式,数据是否无损。

保护级别(PROTECTION_LEVEL)字段的取值及含义如下:

  • MAXIMUM PERFORMANCE:表示主集群和备集群都在异步同步模式。

  • MAXIMUM PROTECTION:主集群表示在最大保护模式下强同步日志给 SYNC 备集群;备集群表示进入强同步模式,数据无损。

  • MAXIMUM AVAILABILITY:主集群表示在最大可用模式下强同步日志给 SYNC 备集群;备集群表示进入强同步模式,数据无损。

  • RESYNCHRONIZATION:主集群不会出现这个状态;备集群表示在追赶数据中,正在补齐日志 GAP。

不同模式下,主集群和备集群的保护级别的取值组合如下表所示。

保护模式

主集群为最大性能级别

主集群为最大保护级别

主集群为最大可用级别

最大性能模式

  • SYNC 备集群的保护级别:最大性能级别

  • ASYNC 备集群的保护级别:最大性能级别

N/A

N/A

最大保护模式

主集群的最大性能级别为临时状态,则:

  • SYNC 备集群的保护级别:最大性能级别

  • ASYNC 备集群的保护级别:最大性能级别

  • SYNC 备集群的保护级别:最大保护级别或 RESYNCHRONIZATION

  • ASYNC 备集群的保护级别:最大性能级别

N/A

最大可用模式

  • SYNC 备集群的保护级别:最大性能级别

  • ASYNC 备集群的保护级别:最大性能级别

N/A

  • SYNC 备集群的保护级别:最大可用级别或 RESYNCHRONIZATION

  • ASYNC 备集群的保护级别:最大性能级别

获取保护模式和保护级别

登录集群,查询 V$OB_CLUSTER 视图的 PROTECTION_MODEPROTECTION_LEVEL 列可以分别获取当前集群的保护模式和保护级别。

  1. obclient> SELECT PROTECTION_MODE, PROTECTION_LEVEL FROM V$OB_CLUSTER;
  2. +--------------------+--------------------+
  3. | PROTECTION_MODE | PROTECTION_LEVEL |
  4. +--------------------+--------------------+
  5. | MAXIMUM PROTECTION | MAXIMUM PROTECTION |
  6. +--------------------+--------------------+
  7. 1 row in set