当 OBServer 发生故障时,您可以隔离故障 OBServer。隔离后,新的读写请求不会路由到该故障的 OBServer 上。 当 OBServer 故障后,您可以通过隔离操作将故障 OBServer 上的 Leader 切换到其他 OBServer 上,以此尝试恢复用户的写服务和日志同步。待集群恢复正常后,再尝试通过
STOP SERVER 命令停止 OBServer 的服务后,重启该故障的 OBServer 来解决问题。
隔离故障 OBServer 的 SQL 语句如下:
ALTER SYSTEM ISOLATE SERVER 'ip:port' [,'ip:port'...] [ZONE [=] 'zone']
该语句仅支持在
sys 租户中执行。
示例:
使用
root 用户登录数据库的
sys 租户。
执行以下命令,隔离故障的机器。
示例如下:
obclient> ALTER SYSTEM ISOLATE SERVER '10.10.10.10:2882' ZONE='zone1';
SQL 语句执行成功,则表示隔离故障 OBServer 的操作执行成功。同时,可以看到
oceanbase.DBA_OB_SERVERS 视图中
status 字段仍然为
active,但是该 OBServer 对应的
stop_time 字段不为
NULL,表示该 OBServer 处于
stop 状态,且此时
stop_time 对应的值为该 OBServer 被执行故障隔离的时间戳。
查看
oceanbase.DBA_OB_SERVERS 视图的示例如下:
obclient> SELECT * FROM oceanbase.DBA_OB_SERVERS\G *************************** 1. row *************************** SVR_IP: xx.xx.xx.xx SVR_PORT: 2882 ID: 1 ZONE: zone1 SQL_PORT: 2881 WITH_ROOTSERVER: YES STATUS: ACTIVE START_SERVICE_TIME: 2022-06-17 11:30:04.589074 STOP_TIME: NULL BLOCK_MIGRATE_IN_TIME: NULL LAST_OFFLINE_TIME: NULL BUILD_VERSION: 4.0.0.0_20220525115829-1873fc2598d56060fe307ce3b7b88647686e0b09(May 25 2022 12:12:10) 1 row in set
oceanbase.DBA_OB_SERVERS 视图中各字段的详细说明,请参见
DBA_OB_SERVERS。
隔离故障的 OBServer 后,如果需要解除隔离状态,您可以通过执行
ALTER SYSTEM START SERVER '10.10.10.10:2882' 命令来完成。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70026121/viewspace-2932615/ ,如需转载,请注明出处,否则将追究法律责任。