本节主要介绍如何通过命令行方式进行主备库切换。
主集群切换为备集群
验证主集群是否能够切换为备集群角色。
在主集群上查询
V$OB_CLUSTER
视图的SWITCHOVER_STATUS
和SWITCHOVER_INFO
字段。示例如下:
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM V$OB_CLUSTER;
+-------------------+------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO |
+-------------------+------------------------------+
| TO STANDBY | SYNCED STANDBY CLUSTERS: 2,3 |
+-------------------+------------------------------+
1 row in set
其中:
SWITCHOVER_STATUS
展示了当前的切换状态,TO STANDBY
表示可以切换为备集群。如果为NOT ALLOWED
或其他值,则说明当前不满足切换条件。在
TO STANDBY
状态下,SWITCHOVER_INFO
字段展示了当前可以切换为主集群的备集群列表,例如:SYNCED STANDBY CLUSTERS: 2,3
表示CLUSTER_ID
为2
和3
的备集群均可以切换为主集群。在
NOT ALLOWED
状态下,SWITCHOVER_INFO
字段展示了不允许切换的原因,例如:CHECK PRIMARY CLUSTER SERVER STATUS
表示需要检查主集群的 Server 状态。OceanBase 数据库要求所有 Server 都在线才能执行 Switchover,如果有部分 Server 不在线,则不允许切换。更多
SWITCHOVER_INFO
字段取值对应的问题排查,请参见 Switchover 相关的问题。
在主集群上执行以下命令,将角色切换为
PHYSICAL STANDBY
。obclient> ALTER SYSTEM COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
Query OK, 0 rows affected
命令执行完成后,主集群会切换为备集群角色,执行以下命令,可以看到
SWITCHOVER_STATUS
变为SWTICHOVER SWITCHING
。obclient> SELECT CLUSTER_ID, CLUSTER_ROLE, SWITCHOVER_STATUS FROM V$OB_CLUSTER;
+------------+------------------+----------------------+
| CLUSTER_ID | CLUSTER_ROLE | SWITCHOVER_STATUS |
+------------+------------------+----------------------+
| 1 | PHYSICAL STANDBY | SWITCHOVER SWITCHING |
+------------+------------------+----------------------+
1 row in set
备集群切换为主集群
在目标备集群上执行以下命令,验证是否可以切换为主集群。
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM V$OB_CLUSTER;
+-------------------+-----------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO |
+-------------------+-----------------+
| TO PRIMARY | |
+-------------------+-----------------+
1 row in set
SWITCHOVER_STATUS
字段为TO PRIMARY
表示可以切换为主集群;如果值为NOT ALLOWED
,则表示本备集群不允许切换为主集群,SWITCHOVER_INFO
字段会展示相应的原因。如果没有备集群允许切换为主集群,则可以在原主集群上执行以下命令,将切换操作回滚,切换回主集群角色。
obclient> ALTER SYSTEM COMMIT TO SWITCHOVER TO PRIMARY;
Query OK, 0 rows affected
如果满足切换条件,则在目标备集群上执行以下命令,切换为主集群。
obclient> ALTER SYSTEM COMMIT TO SWITCHOVER TO PRIMARY;
Query OK, 0 rows affected
命令执行成功后,备集群切换为主集群角色,您可以执行以下命令,查询
V$OB_CLUSTER
视图,确认是否切换成功。obclient> SELECT CLUSTER_ID, CLUSTER_ROLE, SWITCHOVER_STATUS, SWITCHOVER_INFO FROM V$OB_CLUSTER;
+------------+--------------+-------------------+------------------------------+
| CLUSTER_ID | CLUSTER_ROLE | SWITCHOVER_STATUS | SWITCHOVER_INFO |
+------------+--------------+-------------------+------------------------------+
| 2 | PRIMARY | TO STANDBY | SYNCED STANDBY CLUSTERS: 1,3 |
+------------+--------------+-------------------+------------------------------+
1 row in set