本节主要介绍角色切换前的准备操作,包括获取集群信息和选择待切换的备集群。

获取集群信息

查询 V$OB_CLUSTER 视图,获取各个集群的角色、状态、保护模式和保护级别。

例如:

  1. 执行以下命令,获取当前集群的角色和状态。

    1. obclient> SELECT CLUSTER_ID, CLUSTER_NAME, CLUSTER_ROLE, CLUSTER_STATUS FROM V$OB_CLUSTER;
    2. +------------+--------------+--------------+----------------+
    3. | CLUSTER_ID | CLUSTER_NAME | CLUSTER_ROLE | CLUSTER_STATUS |
    4. +------------+--------------+--------------+----------------+
    5. | 1 | obcluster | PRIMARY | VALID |
    6. +------------+--------------+--------------+----------------+
    7. 1 row in set

    其中:

    • CLUSTER_ID 字段是本集群的集群 ID,主备集群的 ID 不同。

    • CLUSTER_NAME 字段展示了本集群的集群名,主备集群的集群名相同。

    • CLUSTER_ROLE 展示了本集群的角色,PRIMARY 表示主集群;PHYSICAL STANDBY 表示备集群。

    • CLUSTER_STATUS 展示了本集群的状态,VALID 表示是正常状态;DISABLED 表示禁止同步状态,只有 VALID 状态的主集群和备集群才能执行角色切换。

    确认主集群后,您可以在主集群上查询 V$OB_STANDBY_STATUS 视图,获取所有备集群列表及状态。

    例如,示例中存在两个备集群,CLUSTER_ID 分别为 23,均处于 VALID 状态。

    1. obclient> SELECT CLUSTER_ID, CLUSTER_NAME, CLUSTER_ROLE, CLUSTER_STATUS FROM V$OB_STANDBY_STATUS;
    2. +------------+--------------+------------------+----------------+
    3. | CLUSTER_ID | CLUSTER_NAME | CLUSTER_ROLE | CLUSTER_STATUS |
    4. +------------+--------------+------------------+----------------+
    5. | 2 | obcluster | PHYSICAL STANDBY | VALID |
    6. | 3 | obcluster | PHYSICAL STANDBY | VALID |
    7. +------------+--------------+------------------+----------------+
    8. 2 rows in set
  2. 执行以下命令,获取当前集群的保护模式和保护级别。

    1. obclient> SELECT PROTECTION_MODE, PROTECTION_LEVEL FROM V$OB_CLUSTER;
    2. +--------------------+--------------------+
    3. | PROTECTION_MODE | PROTECTION_LEVEL |
    4. +--------------------+--------------------+
    5. | MAXIMUM PROTECTION | MAXIMUM PROTECTION |
    6. +--------------------+--------------------+
    7. 1 row in set

    其中:

    • PROTECTION_MODE 展示了主备集群的保护模式。

    • PROTECTION_LEVEL 展示了当前集群的保护级别。

    保护模式及保护级别字段的更多介绍请参见 保护模式与保护级别

选择待切换的备集群

当存在多个备集群时,需要选择合适的备集群作为待切换的目标集群。主要考虑以下几点:

  • 备集群的地域

  • 备集群的硬件配置,包括 CPU、I/O 带宽等

  • 备集群的同步进度

    最大性能模式下,备集群落后越多,Switchover 切换的时间越长,Failover 后丢失的数据越多。

  • 备集群的保护模式和保护级别

    最大保护和最大可用模式下,Switchover 仅支持日志传输模式为 SYNC 的备集群切换为主集群角色;Failover 也需要根据保护模式和保护级别选择合适的 Failover 命令。

选择待切换的备集群的具体操作方法如下:

  1. 在各个集群上,查询 V$OB_CLUSTER 视图的 CURRENT_SCN 字段,获取各个集群的同步进度。

    CURRENT_SCN 是 unix 时间戳,是整型值,单位为微秒,表示当前的同步进度。

    例如,登录到备集群 2 上,执行以下 SQL 语句,查询备集群 2 的同步进度:

    1. obclient> SELECT CURRENT_SCN, USEC_TO_TIME(CURRENT_SCN) AS SYNC_TS FROM V$OB_CLUSTER;
    2. +------------------+----------------------------+
    3. | CURRENT_SCN | SYNC_TS |
    4. +------------------+----------------------------+
    5. | 1596354672506590 | 2020-08-02 15:51:12.506590 |
    6. +------------------+----------------------------+
    7. 1 row in set

    CURRENT_SCN 越大,表示备集群同步延迟越低。同步延迟低的备集群适合作为目标切换集群。可以使用主集群的 CURRENT_SCN 值减去备集群的 CURRENT_SCN 值作为备集群的落后时间。

  2. 在主集群上,查询 V$OB_STANDBY_STATUS 视图,查看各个备集群的配置和保护级别。

    1. obclient> SELECT CLUSTER_ID, PROTECTION_LEVEL, REDO_TRANSPORT_OPTIONS FROM V$OB_STANDBY_STATUS;
    2. +------------+---------------------+------------------------------+
    3. | CLUSTER_ID | PROTECTION_LEVEL | REDO_TRANSPORT_OPTIONS |
    4. +------------+---------------------+------------------------------+
    5. | 2 | MAXIMUM PROTECTION | SYNC NET_TIMEOUT = 30000000 |
    6. | 3 | MAXIMUM PERFORMANCE | ASYNC NET_TIMEOUT = 30000000 |
    7. +------------+---------------------+------------------------------+
    8. 2 rows in set

    其中:

    • 通过 REDO_TRANSPORT_OPTIONS 字段可以查看各个备集群的日志传输参数配置,SYNC 表示是强同步的备集群;ASYNC 表示是异步同步的备集群。

    • 通过 PROTECTION_LEVEL 字段可以查看各个备集群的保护级别,等价于 V$OB_CLUSTER 视图的 PROTECTION_LEVEL 字段。

或者,您也可以通过 OCP 查看主备集群关系及同步延时情况,具体方法如下:

  1. 使用具备管理员权限的账号登录 OCP。

    默认进入 集群概览 页面。

  2. 集群列表 区域,可以看到主集群信息,单击主集群左侧的+图标即可看到对应的备集群信息。

  3. 单击主集群名,跳转到主集群详情页面,再在左侧导航栏上,单击 拓扑图

    拓扑图中展示了当前各个集群的角色。如果是备集群,还可以查看该备集群的同步延迟时间。

    例如,图中展示的备集群 47,同步延时为 0.16s。

    查看主备关系和同步延时