在操作前,您需要根据执行无损 Failover 操作前原主集群的状态来判断是否能够重新接入建立主备关系:
初始时,如果原主集群处于最大保护模式,备集群处于最大保护级别。当主集群不可用时,备集群执行无损 Failover,这种场景下原主集群可以接入。
初始时,如果原主集群处于最大保护模式,备集群处于最大保护级别,同时主备集群网络隔离,主集群人工修改保护模式后,继续提供服务,备集群仍然处于最大保护级别。当主集群不可用时,备集群执行无损 Failover,这种场景下原主集群不能接入。
初始时,如果原主集群处于最大可用模式,主集群和备集群均处于最大可用级别,当主集群不可用时,备集群执行无损 Failover,这种场景下原主集群可以接入。
初始时,如果原主集群处于最大可用模式,主集群和备集群均处于最大可用级别,同时主备集群网络隔离,主集群自动降级为最大性能级别异步同步日志,备集群仍然处于最大可用级别。当主集群不可用时,备集群执行无损 Failover,这种场景下原主集群不能接入。
注意
确认可接入后,原主集群的接入流程如下。
恢复原主集群。
Failover 开始到恢复原主集群前,要求原主集群的所有 Server 一直处于宕机状态,否则原主集群的数据可能与新主集群的数据不一致。
在恢复原主集群的过程中,要求原主集群的所有 Server 以特殊参数启动。集群启动成功后,会进入 状态。
DISABLED
状态的集群不接受新的写入,不会产生新的日志,保证新主集群和原主集群处于一致状态。如果原主集群的所有 Server 没有采用特殊参数启动,则原主集群会产生新的日志,导致接入流程失败或者出现数据 Checksum 错误。在原主集群的所有 Server 上,指定
-m disabled_cluster
参数,启动 observer。原主集群恢复后,查询原主集群的状态,发现原主集群是
PRIMARY
角色,但是处于DISABLED
状态。obclient> SELECT CLUSTER_ID, CLUSTER_ROLE, CLUSTER_STATUS FROM V$OB_CLUSTER;
+------------+--------------+----------------+
| CLUSTER_ID | CLUSTER_ROLE | CLUSTER_STATUS |
| 1 | PRIMARY | DISABLED |
+------------+--------------+----------------+
1 row in set
-
在原主集群上,执行以下命令,切换为备集群角色。
完成后,查看集群角色,切换成功。
obclient> SELECT CLUSTER_ID, CLUSTER_ROLE, CLUSTER_STATUS FROM V$OB_CLUSTER;
+------------+------------------+----------------+
| CLUSTER_ID | CLUSTER_ROLE | CLUSTER_STATUS |
+------------+------------------+----------------+
+------------+------------------+----------------+
在新主集群上,开启原主集群同步。
登录新主集群,执行以下命令,开启备集群同步。
查看同步状态,确认开启成功。
obclient> SELECT CLUSTER_ID, CLUSTER_ROLE, CLUSTER_STATUS FROM V$OB_STANDBY_STATUS;
+------------+------------------+----------------+
| CLUSTER_ID | CLUSTER_ROLE | CLUSTER_STATUS |
+------------+------------------+----------------+
| 1 | PHYSICAL STANDBY | VALID |
1 row in set
至此,原主集群接入成功,原主集群的角色变为备集群。