基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
Switchover 相关的问题
更新时间:2024-04-07 15:50:48
在验证主集群是否能够切换为备集群角色或备集群是否能切换为主集群角色时,需要查看 V$OB_CLUSTER 视图中的 SWITCHOVER_INFO 字段,该字段展示了不能成功执行 Switchover 命令的原因,本节主要介绍该字段的不同值所表示的含义以及针对此类问题的处理方法。
字段值 1:CHECK PRIMARY CLUSTER SERVER STATUS
含义
可能有 Server 不在线,需要校验主集群的 Server 状态。
示例如下:
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+-------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO |
+-------------------+-------------------------------------+
| NOT ALLOWED | CHECK PRIMARY CLUSTER SERVER STATUS |
+-------------------+-------------------------------------+
其中:
SWITCHOVER_STATUS表示切换状态,值为NOT ALLOWED则表示不允许进行切换。SWITCHOVER_INFO字段展示了不能切换的原因。示例中,CHECK PRIMARY CLUSTER SERVER STATUS表示有 Server 不在线,需要校验主集群的 Server 状态。
处理方法
执行以下命令,在主集群或备集群上查询 Server 状态。如果 STATUS 不是 ACTIVE,则说明 Server 不在线,需要处理不在线的 Server。
示例如下:
obclient> SELECT SVR_IP, STATUS FROM oceanbase.__ALL_SERVER WHERE STATUS != 'ACTIVE';
+-------------+----------+
| SVR_IP | STATUS |
+-------------+----------+
| xxx.xx.x.x5 | inactive |
+-------------+----------+
其中:
SVR_IP表示 Server IP。STATUS表示该 Server 的服务状态,值为inactive表示 Server 不在线。
字段值 2:CHECK MERGE STATUS
含义
合并任务的状态不正常,需要检查合并状态是否出现 ERROR。
示例如下:
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+-------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO |
+-------------------+-------------------------------------+
| NOT ALLOWED | CHECK MERGE STATUS |
+-------------------+-------------------------------------+
处理方法
在当前集群上执行以下命令,查询合并状态。如果合并状态出现 ERROR,请联系技术支持人员协助处理。
obclient> SELECT ZONE, NAME, INFO FROM oceanbase.__ALL_ZONE WHERE NAME ='MERGE_STATUS';
+-------+--------------+------+
| ZONE | NAME | INFO |
+-------+--------------+------+
| | merge_status | IDLE |
| zone1 | merge_status | IDLE |
| zone2 | merge_status | IDLE |
| zone3 | merge_status | IDLE |
+-------+--------------+------+
INFO 字段信息代表合并状态,分别有以下几种
IDLE:表示未进行合并MERGING:表示正在进行合并TIMEOUT:表示合并超时(但是合并不会暂停,仍然继续,仅设置超时标志)ERROR:表示合并出错(需要高优先级处理)
字段值 3:NONE SYNCED STANDBY CLUSTER
含义
不存在同步的备集群,主集群不能切换为备集群。
示例如下:
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+-------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO |
+-------------------+-------------------------------------+
| NOT ALLOWED | NONE SYNCED STANDBY CLUSTER |
+-------------------+-------------------------------------+
处理方法
在主集群上,执行以下命令,查询备集群的详细同步状态以及不同步的原因。
示例如下:
obclient> SELECT CLUSTER_ID, SYNCHRONIZATION_STATUS FROM oceanbase.V$OB_STANDBY_STATUS;
+------------+------------------------+
| CLUSTER_ID | SYNCHRONIZATION_STATUS |
+------------+------------------------+
| 2 | OK |
+------------+------------------------+
其中:
CLUSTER_ID表示集群 ID 。SYNCHRONIZATION_STATUS表示同步状态,显示OK则表示同步成功,如果不同步则会显示不同步的原因。
字段值 4:CHECK SYS SCHEMA SYNC STATUS
含义
Schema 没有同步完成,需要校验备集群的系统租户的 Schema 是否同步完成。
示例如下:
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+-------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO |
+-------------------+-------------------------------------+
| NOT ALLOWED | CHECK SYS SCHEMA SYNC STATUS |
+-------------------+-------------------------------------+
处理方法
分别在主集群和备集群上执行以下命令,对比主备集群的 REFRECHED_SCHEMA_VERSION 是否一致,如果不一致,说明备集群系统租户的 Schema 未同步完成。需要等待备集群系统租户的 Schema 同步完成,如果发现同步卡住,请联系技术支持人员协助处理。
查询语句如下:
obclient> SELECT * FROM oceanbase.__all_virtual_server_schema_info WHERE tenant_id = 1;
字段值 5:CHECK USER SCHEMA SYNC STATUS
含义
Schema 没有同步完成,需要校验备集群的普通租户的 Schema 是否同步完成。
示例如下:
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+-------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO |
+-------------------+-------------------------------------+
| NOT ALLOWED | CHECK USER SCHEMA SYNC STATUS |
+-------------------+-------------------------------------+
处理方法
在备集群上执行以下命令,查询备集群上普通租户的 Schema 同步状态,查看出现 Schema 同步落后的
tenant_id。obclient> SELECT *, USEC_TO_TIME(MIN_SYS_TABLE_SCN), USEC_TO_TIME(MIN_USER_TABLE_SCN) FROM oceanbase.V$OB_CLUSTER_STATS; +-----------+--------------------------+---------+-------------------+--------------------+---------------------------------+----------------------------------+ | tenant_id | refreshed_schema_version | ddl_lag | min_sys_table_scn | min_user_table_scn | USEC_TO_TIME(MIN_SYS_TABLE_SCN) | USEC_TO_TIME(MIN_USER_TABLE_SCN) | +-----------+--------------------------+---------+-------------------+--------------------+---------------------------------+----------------------------------+ | 1 | 1638945061379584 | 0 | 1638965918418375 | 1638965918418375 | 2021-12-08 20:18:38.418375 | 2021-12-08 20:18:38.418375 | | 1001 | 1638945068536016 | 0 | 1638965918418766 | 1638965918418766 | 2021-12-08 20:18:38.418766 | 2021-12-08 20:18:38.418766 | | 1002 | 1638945068659384 | 0 | 1638965918418912 | 1638965918418912 | 2021-12-08 20:18:38.418912 | 2021-12-08 20:18:38.418912 | +-----------+--------------------------+---------+-------------------+--------------------+---------------------------------+----------------------------------+TENANT_ID:表示租户ID,TENANT_ID为1表示系统租户,其他数值表示普通租户。MIN_SYS_TABLE_SCN:表示系统表的同步进度。MIN_USER_TABLE_SCN:表示用户表的同步进度。
查询结果中,如果有租户(不包含系统租户)的
MIN_SYS_TABLE_SCN的值与当前时间不一致,则代表该租户的 Schema 不同步。可以分别在主备集群上执行以下命令,检查主备集群上对应租户的REFRECHED_SCHEMA_VERSION是否不一致。如果不一致,请联系技术支持人员协助处理。obclient> SELECT * FROM oceanbase.__all_virtual_server_schema_info WHERE tenant_id = xxxx;其中,
tenant_id需要替换为前面查询出来的出现 Schema 同步落后的tenant_id。如果所有租户(不包含系统租户)的
MIN_SYS_TABLE_SCN的值均与当前时间一致,需要进行下一步检查。在备集群上执行以下命令,检查分区中相同的
row_id,其created_schema_version和readable_schema_version是否相等。obclient> SELECT * FROM oceanbase.__all_core_table WHERE table_name = '__all_schema_status';查询结果中,对于相同的
row_id,如果其created_schema_version和readable_schema_version的值不相等,则表示该分区未创建成功,请联系技术支持协助处理。如果其
created_schema_version和readable_schema_version的值相等,需要进行下一步检查。在备集群上执行以下命令,检查
__all_ddl_helper表是否为空。obclient> SELECT * FROM oceanbase.__all_ddl_helper;查询结果中,如果
__all_ddl_helper表不为空,则表示索引没有生效,请联系技术支持协助处理。
字段值 6:CHECK FREEZE INFO SYNC STATUS
含义
冻结信息没有同步完成,需要校验备集群的冻结信息是否同步完成。
示例如下:
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+-------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO |
+-------------------+-------------------------------------+
| NOT ALLOWED | CHECK FREEZE INFO SYNC STATUS |
+-------------------+-------------------------------------+
处理方法
分别在主集群和备集群上执行以下命令,查询各自集群的冻结信息,查看落后的冻结版本。需要等待冻结信息同步完成,如果发现同步卡住,请联系技术支持人员协助处理。
示例如下:
obclient> SELECT * FROM oceanbase.__ALL_VIRTUAL_FREEZE_INFO;
+----------------+------------------+----------------+
| frozen_version | frozen_timestamp | schema_version |
+----------------+------------------+----------------+
| 1 | 1 | NULL |
| 2 | 1637548600183610 | NULL |
| 3 | 1637604010868012 | NULL |
+----------------+------------------+----------------+
其中:
frozen_version:表示冻结版本。当主备集群的frozen_version字段的值一样时,代表冻结信息同步完成。frozen_timestamp:表示冻结时间戳。
字段值 7:CHECK ENOUGH REPLICA
含义
备集群副本不足,需要检查备集群的副本个数是否足够。
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+-------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO |
+-------------------+-------------------------------------+
| NOT ALLOWED | CHECK ENOUGH REPLICA |
+-------------------+-------------------------------------+
处理方法
副本不足是指分区的活跃副本不满足多数派,一般原因是多数派副本所在的 Server 故障或者网络隔离所致,可以通过检查备集群上所有 Server 的状态是否正常来确认每个分区的副本数是否都足够。
检查所有 Server 的状态是否正常的语句如下:
obclient> SELECT SVR_IP, STATUS FROM oceanbase.__ALL_SERVER WHERE STATUS != 'ACTIVE';
+-------------+----------+
| SVR_IP | STATUS |
+-------------+----------+
| xxx.xx.x.x5 | inactive |
+-------------+----------+
SVR_IP表示 Server IP。STATUS表示该 Server 的状态,值为inactive表示 Server 的状态不正常,active表示正常。
字段值 8:CHECK REDO LOG SYNC STATUS
含义
REDO 日志没有同步完成,需要校验备集群的 Redo 日志是否同步完成。
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+-------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO |
+-------------------+-------------------------------------+
| NOT ALLOWED | CHECK REDO LOG SYNC STATUS |
+-------------------+-------------------------------------+
处理方法
在备集群上执行以下命令,查询是否存在没有完成日志同步的副本,并查看对应副本的状态。
obclient> SELECT * FROM oceanbase.__ALL_VIRTUAL_CLOG_STAT WHERE IS_IN_SYNC=0;
如果存在没有完成日志同步的副本,需要等待同步完成。如果备集群一直追不上或者同步卡住,请联系技术支持人员协助处理。
字段值 9:CAN NOT ACCESS CLUSTERS: cluster1, cluster2
含义
某些集群不能访问,需要校验这些备集群的状态。
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+------------------------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO |
+-------------------+------------------------------------------------------+
| NOT ALLOWED | CAN NOT ACCESS CLUSTERS: cluster1, cluster2 |
+-------------------+------------------------------------------------------+
cluster1 , cluster2 分别代表不能访问的备集群。
处理方法
在主集群上,执行以下命令,查询备集群的详细同步状态。
obclient> SELECT CLUSTER_ID, SYNCHRONIZATION_STATUS FROM oceanbase.V$OB_STANDBY_STATUS;根据查询结果中
SYNCHRONIZATION_STATUS字段的描述进行处理。
字段值 10:NO CLUSTER IN SWITCHING
含义
主集群没有处于 SWITCHING 状态,不能让备集群 Switchover 成为主集群。当备集群处于 NOT ALLOWED 状态时可能出现该信息。
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+------------------------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO |
+-------------------+------------------------------------------------------+
| NOT ALLOWED | NO CLUSTER IN SWITCHING |
+-------------------+------------------------------------------------------+
处理方法
在主集群上执行以下命令,查询集群的状态,确认之前是否已成功执行了主集群切换为备集群的操作。
obclient> SELECT SWITCHOVER_STATUS FROM oceanbase.V$OB_CLUSTER;
+-------------------+
| SWITCHOVER_STATUS |
+-------------------+
| NOT ALLOWED |
+-------------------+
字段值 11:PRIMARY CLUSTER HAS REPLICA IN RESTORE
含义
当前主集群上有部分副本没有创建完成,不允许执行角色切换。
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+------------------------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO |
+-------------------+------------------------------------------------------+
| NOT ALLOWED | PRIMARY CLUSTER HAS REPLICA IN RESTORE |
+-------------------+------------------------------------------------------+
处理方法
需要您主动删除这部分副本后才能继续执行角色切换。
查询主集群上副本状态的方法如下:
查看正在恢复的系统表的副本状态
obclient> SELECT * FROM oceanbase.__ALL_ROOT_TABLE WHERE IS_RESTORE != 0;查看正在恢复的用户表副本状态
obclient> SELECT * FROM oceanbase.__ALL_VIRTUAL_META_TABLE WHERE IS_RESTORE != 0;
字段值 12:STANDBY CLUSTER HAS REPLICA IN RESTORE
含义
当前备集群上有部分副本没有创建完成,不允许执行角色切换。
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+------------------------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO |
+-------------------+------------------------------------------------------+
| NOT ALLOWED | STANDBY CLUSTER HAS REPLICA IN RESTORE |
+-------------------+------------------------------------------------------+
处理方法
需要等待备集群上的副本创建完成后才能继续执行角色切换。
您可以在备集群上执行以下命令,查看副本状态:
查看正在恢复的系统表的副本状态
obclient> SELECT * FROM oceanbase.__ALL_ROOT_TABLE WHERE IS_RESTORE != 0;查看正在恢复的用户表副本状态
obclient> SELECT * FROM oceanbase.__ALL_VIRTUAL_META_TABLE WHERE IS_RESTORE != 0;
字段值 13:PRIMARY CLUSTER DOING BACKUP
含义
主集群正在执行数据备份或日志备份,不允许执行角色切换,因为切换为备集群后不再支持数据备份和日志备份,要求您先停止数据备份任务和日志备份任务。
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+------------------------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO |
+-------------------+------------------------------------------------------+
| NOT ALLOWED | PRIMARY CLUSTER DOING BACKUP |
+-------------------+------------------------------------------------------+
处理方法
在主集群上,执行以下命令,停止数据备份任务和日志备份任务。
停止数据备份任务
obclient> ALTER SYSTEM CANCEL BACKUP;停止日志备份任务
obclient> ALTER SYSTEM NOARCHIVELOG;
字段值 14:CHECK OTHER PRIMARY CLUSTER
含义
存在其他主集群,不允许执行角色切换,防止集群出现双主。
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+------------------------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO |
+-------------------+------------------------------------------------------+
| NOT ALLOWED | CHECK OTHER PRIMARY CLUSTER |
+-------------------+------------------------------------------------------+
处理方法
执行以下命令,查询其他集群的信息,以便确认集群状态并选择正确的集群执行角色切换。
obclient> SELECT * FROM oceanbase.V$OB_STANDBY_STATUS;
字段值 15:INNER ERROR
含义
发生内部错误。
obclient> SELECT SWITCHOVER_STATUS, SWITCHOVER_INFO FROM oceanbase.V$OB_CLUSTER;
+-------------------+------------------------------------------------------+
| SWITCHOVER_STATUS | SWITCHOVER_INFO |
+-------------------+------------------------------------------------------+
| NOT ALLOWED | INNER ERROR |
+-------------------+------------------------------------------------------+
处理方法
请联系技术支持人员协助处理。