本节主要介绍如何通过命令行方式进行主备库切换。

主集群切换为备集群

  1. 验证主集群是否能够切换为备集群角色。

    在主集群上查询 V$OB_CLUSTER 视图的 SWITCHOVER_STATUSSWITCHOVER_INFO 字段。

    示例如下:

    1. obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM V$OB_CLUSTER;
    2. +-------------------+------------------------------+
    3. | SWITCHOVER_STATUS | SWITCHOVER_INFO |
    4. +-------------------+------------------------------+
    5. | TO STANDBY | SYNCED STANDBY CLUSTERS: 2,3 |
    6. +-------------------+------------------------------+
    7. 1 row in set

    其中:

    • SWITCHOVER_STATUS 展示了当前的切换状态,TO STANDBY 表示可以切换为备集群。如果为 NOT ALLOWED 或其他值,则说明当前不满足切换条件。

    • TO STANDBY 状态下,SWITCHOVER_INFO 字段展示了当前可以切换为主集群的备集群列表,例如:SYNCED STANDBY CLUSTERS: 2,3 表示 CLUSTER_ID23 的备集群均可以切换为主集群。

    • NOT ALLOWED 状态下,SWITCHOVER_INFO 字段展示了不允许切换的原因,例如:CHECK PRIMARY CLUSTER SERVER STATUS 表示需要检查主集群的 Server 状态。OceanBase 数据库要求所有 Server 都在线才能执行 Switchover,如果有部分 Server 不在线,则不允许切换。

      更多 SWITCHOVER_INFO 字段取值对应的问题排查,请参见 Switchover 相关的问题

  2. 在主集群上执行以下命令,将角色切换为 PHYSICAL STANDBY

    1. obclient> ALTER SYSTEM COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
    2. Query OK, 0 rows affected

    命令执行完成后,主集群会切换为备集群角色,执行以下命令,可以看到 SWITCHOVER_STATUS 变为 SWTICHOVER SWITCHING

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

备集群切换为主集群

  1. 在目标备集群上执行以下命令,验证是否可以切换为主集群。

    1. obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM V$OB_CLUSTER;
    2. +-------------------+-----------------+
    3. | SWITCHOVER_STATUS | SWITCHOVER_INFO |
    4. +-------------------+-----------------+
    5. | TO PRIMARY | |
    6. +-------------------+-----------------+
    7. 1 row in set

    SWITCHOVER_STATUS 字段为 TO PRIMARY 表示可以切换为主集群;如果值为 NOT ALLOWED,则表示本备集群不允许切换为主集群,SWITCHOVER_INFO 字段会展示相应的原因。

    如果没有备集群允许切换为主集群,则可以在原主集群上执行以下命令,将切换操作回滚,切换回主集群角色。

    1. obclient> ALTER SYSTEM COMMIT TO SWITCHOVER TO PRIMARY;
    2. Query OK, 0 rows affected
  2. 如果满足切换条件,则在目标备集群上执行以下命令,切换为主集群。

    1. obclient> ALTER SYSTEM COMMIT TO SWITCHOVER TO PRIMARY;
    2. Query OK, 0 rows affected

    命令执行成功后,备集群切换为主集群角色,您可以执行以下命令,查询 V$OB_CLUSTER 视图,确认是否切换成功。

    1. obclient> SELECT CLUSTER_ID, CLUSTER_ROLE, SWITCHOVER_STATUS, SWITCHOVER_INFO FROM V$OB_CLUSTER;
    2. +------------+--------------+-------------------+------------------------------+
    3. | CLUSTER_ID | CLUSTER_ROLE | SWITCHOVER_STATUS | SWITCHOVER_INFO |
    4. +------------+--------------+-------------------+------------------------------+
    5. | 2 | PRIMARY | TO STANDBY | SYNCED STANDBY CLUSTERS: 1,3 |
    6. +------------+--------------+-------------------+------------------------------+
    7. 1 row in set