本节主要介绍无损 Failover 后原主集群的接入流程。

前提条件

在操作前,您需要根据执行无损 Failover 操作前原主集群的状态来判断是否能够重新接入建立主备关系:

  • 初始时,如果原主集群处于最大保护模式,备集群处于最大保护级别。当主集群不可用时,备集群执行无损 Failover,这种场景下原主集群可以接入。

  • 初始时,如果原主集群处于最大保护模式,备集群处于最大保护级别,同时主备集群网络隔离,主集群人工修改保护模式后,继续提供服务,备集群仍然处于最大保护级别。当主集群不可用时,备集群执行无损 Failover,这种场景下原主集群不能接入。

  • 初始时,如果原主集群处于最大可用模式,主集群和备集群均处于最大可用级别,当主集群不可用时,备集群执行无损 Failover,这种场景下原主集群可以接入。

  • 初始时,如果原主集群处于最大可用模式,主集群和备集群均处于最大可用级别,同时主备集群网络隔离,主集群自动降级为最大性能级别异步同步日志,备集群仍然处于最大可用级别。当主集群不可用时,备集群执行无损 Failover,这种场景下原主集群不能接入。

注意

原主集群接入时,由于接入流程不会完整校验数据的一致性,您需要人工保证执行 Failover 操作前主备集群的数据一致。如果执行 Failover 操作前主备集群数据不一致,接入后可能会出现数据 Checksum 校验错误。

操作步骤

确认可接入后,原主集群的接入流程如下。

  1. 恢复原主集群。

    Failover 开始到恢复原主集群前,要求原主集群的所有 Server 一直处于宕机状态,否则原主集群的数据可能与新主集群的数据不一致。

    在恢复原主集群的过程中,要求原主集群的所有 Server 以特殊参数启动。集群启动成功后,会进入 DISABLED 状态。DISABLED 状态的集群不接受新的写入,不会产生新的日志,保证新主集群和原主集群处于一致状态。如果原主集群的所有 Server 没有采用特殊参数启动,则原主集群会产生新的日志,导致接入流程失败或者出现数据 Checksum 错误。

    在原主集群的所有 Server 上,指定 -m disabled_cluster 参数,启动 observer。

    1. bin/observer -m disabled_cluster

    原主集群恢复后,查询原主集群的状态,发现原主集群是 PRIMARY 角色,但是处于 DISABLED 状态。

    1. obclient> SELECT CLUSTER_ID, CLUSTER_ROLE, CLUSTER_STATUS FROM V$OB_CLUSTER;
    2. +------------+--------------+----------------+
    3. | CLUSTER_ID | CLUSTER_ROLE | CLUSTER_STATUS |
    4. +------------+--------------+----------------+
    5. | 1 | PRIMARY | DISABLED |
    6. +------------+--------------+----------------+
    7. 1 row in set
  2. 将原主集群切换为备集群角色。

    在原主集群上,执行以下命令,切换为备集群角色。

    1. obclient> ALTER SYSTEM CONVERT TO PHYSICAL STANDBY;

    完成后,查看集群角色,切换成功。

    1. obclient> SELECT CLUSTER_ID, CLUSTER_ROLE, CLUSTER_STATUS FROM V$OB_CLUSTER;
    2. +------------+------------------+----------------+
    3. | CLUSTER_ID | CLUSTER_ROLE | CLUSTER_STATUS |
    4. +------------+------------------+----------------+
    5. | 1 | PHYSICAL STANDBY | DISABLED |
    6. +------------+------------------+----------------+
    7. 1 row in set
  3. 在新主集群上,开启原主集群同步。

    1. 登录新主集群,执行以下命令,开启备集群同步。

      1. obclient> ALTER SYSTEM ENABLE CLUSTER SYNCHRONIZATION 'obcluster' CLUSTER_ID=1;
    2. 查看同步状态,确认开启成功。

      1. obclient> SELECT CLUSTER_ID, CLUSTER_ROLE, CLUSTER_STATUS FROM V$OB_STANDBY_STATUS;
      2. +------------+------------------+----------------+
      3. | CLUSTER_ID | CLUSTER_ROLE | CLUSTER_STATUS |
      4. +------------+------------------+----------------+
      5. | 1 | PHYSICAL STANDBY | VALID |
      6. +------------+------------------+----------------+
      7. 1 row in set

后续处理

至此,原主集群接入成功,原主集群的角色变为备集群。

您可以登录备集群,查看集群角色。

  1. obclient> SELECT CLUSTER_ID, CLUSTER_ROLE, CLUSTER_STATUS FROM V$OB_CLUSTER;
  2. +------------+------------------+----------------+
  3. | CLUSTER_ID | CLUSTER_ROLE | CLUSTER_STATUS |
  4. +------------+------------------+----------------+
  5. | 1 | PHYSICAL STANDBY | VALID |
  6. +------------+------------------+----------------+
  7. 1 row in set