本节主要介绍角色切换前的准备操作,包括获取集群信息和选择待切换的备集群。
获取集群信息
查询 V$OB_CLUSTER
视图,获取各个集群的角色、状态、保护模式和保护级别。
例如:
执行以下命令,获取当前集群的角色和状态。
obclient> SELECT CLUSTER_ID, CLUSTER_NAME, CLUSTER_ROLE, CLUSTER_STATUS FROM V$OB_CLUSTER;
+------------+--------------+--------------+----------------+
| CLUSTER_ID | CLUSTER_NAME | CLUSTER_ROLE | CLUSTER_STATUS |
+------------+--------------+--------------+----------------+
| 1 | obcluster | PRIMARY | VALID |
+------------+--------------+--------------+----------------+
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
分别为2
和3
,均处于VALID
状态。obclient> SELECT CLUSTER_ID, CLUSTER_NAME, CLUSTER_ROLE, CLUSTER_STATUS FROM V$OB_STANDBY_STATUS;
+------------+--------------+------------------+----------------+
| CLUSTER_ID | CLUSTER_NAME | CLUSTER_ROLE | CLUSTER_STATUS |
+------------+--------------+------------------+----------------+
| 2 | obcluster | PHYSICAL STANDBY | VALID |
| 3 | obcluster | PHYSICAL STANDBY | VALID |
+------------+--------------+------------------+----------------+
2 rows in set
执行以下命令,获取当前集群的保护模式和保护级别。
obclient> SELECT PROTECTION_MODE, PROTECTION_LEVEL FROM V$OB_CLUSTER;
+--------------------+--------------------+
| PROTECTION_MODE | PROTECTION_LEVEL |
+--------------------+--------------------+
| MAXIMUM PROTECTION | MAXIMUM PROTECTION |
+--------------------+--------------------+
1 row in set
其中:
PROTECTION_MODE
展示了主备集群的保护模式。PROTECTION_LEVEL
展示了当前集群的保护级别。
保护模式及保护级别字段的更多介绍请参见 保护模式与保护级别。
选择待切换的备集群
当存在多个备集群时,需要选择合适的备集群作为待切换的目标集群。主要考虑以下几点:
备集群的地域
备集群的硬件配置,包括 CPU、I/O 带宽等
备集群的同步进度
最大性能模式下,备集群落后越多,Switchover 切换的时间越长,Failover 后丢失的数据越多。
备集群的保护模式和保护级别
最大保护和最大可用模式下,Switchover 仅支持日志传输模式为
SYNC
的备集群切换为主集群角色;Failover 也需要根据保护模式和保护级别选择合适的 Failover 命令。
选择待切换的备集群的具体操作方法如下:
在各个集群上,查询
V$OB_CLUSTER
视图的CURRENT_SCN
字段,获取各个集群的同步进度。CURRENT_SCN
是 unix 时间戳,是整型值,单位为微秒,表示当前的同步进度。例如,登录到备集群 2 上,执行以下 SQL 语句,查询备集群 2 的同步进度:
obclient> SELECT CURRENT_SCN, USEC_TO_TIME(CURRENT_SCN) AS SYNC_TS FROM V$OB_CLUSTER;
+------------------+----------------------------+
| CURRENT_SCN | SYNC_TS |
+------------------+----------------------------+
| 1596354672506590 | 2020-08-02 15:51:12.506590 |
+------------------+----------------------------+
1 row in set
CURRENT_SCN
越大,表示备集群同步延迟越低。同步延迟低的备集群适合作为目标切换集群。可以使用主集群的CURRENT_SCN
值减去备集群的CURRENT_SCN
值作为备集群的落后时间。在主集群上,查询
V$OB_STANDBY_STATUS
视图,查看各个备集群的配置和保护级别。obclient> SELECT CLUSTER_ID, PROTECTION_LEVEL, REDO_TRANSPORT_OPTIONS FROM V$OB_STANDBY_STATUS;
+------------+---------------------+------------------------------+
| CLUSTER_ID | PROTECTION_LEVEL | REDO_TRANSPORT_OPTIONS |
+------------+---------------------+------------------------------+
| 2 | MAXIMUM PROTECTION | SYNC NET_TIMEOUT = 30000000 |
| 3 | MAXIMUM PERFORMANCE | ASYNC NET_TIMEOUT = 30000000 |
+------------+---------------------+------------------------------+
2 rows in set
其中:
通过
REDO_TRANSPORT_OPTIONS
字段可以查看各个备集群的日志传输参数配置,SYNC
表示是强同步的备集群;ASYNC
表示是异步同步的备集群。通过
PROTECTION_LEVEL
字段可以查看各个备集群的保护级别,等价于V$OB_CLUSTER
视图的PROTECTION_LEVEL
字段。
或者,您也可以通过 OCP 查看主备集群关系及同步延时情况,具体方法如下:
使用具备管理员权限的账号登录 OCP。
默认进入 集群概览 页面。
在 集群列表 区域,可以看到主集群信息,单击主集群左侧的+图标即可看到对应的备集群信息。
单击主集群名,跳转到主集群详情页面,再在左侧导航栏上,单击 拓扑图。
拓扑图中展示了当前各个集群的角色。如果是备集群,还可以查看该备集群的同步延迟时间。
例如,图中展示的备集群 47,同步延时为 0.16s。