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