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

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

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

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

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

注意

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

  1. 恢复原主集群。

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

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

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

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

    1. obclient> SELECT CLUSTER_ID, CLUSTER_ROLE, CLUSTER_STATUS FROM V$OB_CLUSTER;
    2. +------------+--------------+----------------+
    3. | CLUSTER_ID | CLUSTER_ROLE | CLUSTER_STATUS |
    4. | 1 | PRIMARY | DISABLED |
    5. +------------+--------------+----------------+
    6. 1 row in set
  2. 在原主集群上,执行以下命令,切换为备集群角色。

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

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

    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. 1 row in set

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