OceanBase 数据库提供了命令行方式来管理 OBServer 的节点状态

在运维操作中,如果需要替换节点、维修节点或者对节点进行诊断,可以通过 STOP SERVER 命令将该节点的分区 Leader 切到其他节点上。然后该 Server 状态将变为 stopped 并且不会对外提供服务。

节点的 stopped 状态并非等价于进程退出,进程可能仍然在运行,仅仅是集群的状态标志认为该节点为 stopped 状态。同理与之对应的是节点的 started 状态。

Start Server 操作

Start Server 操作对应 Stop Server 操作。当集群中的 OBServer 启动后,默认状态是 started。在执行 Stop Server 操作后,需要通过 Start Server 操作将 Server 状态置为 started。Start Server 操作的命令如下所示:

  1. ALTER SYSTEM START SERVER 'ip:port' [,'ip:port'…] [ZONE='zone']

示例语句如下所示:

  1. obclient> ALTER SYSTEM START SERVER "10.10.10.1:2882"

Stop Server 操作

Stop Server 操作的目的是将该 Server 上的分区 Leader 切到其他节点。当该 Server 上没有分区 Leader 的情况下,系统将内部标记 Server 为 stopped 状态,客户端请求不会再次发送到该 Server,该 Server 也不会再对外提供服务。

Stop Server 操作通常是特殊运维操作时执行,比如机器硬件维修、替换和升级,或者对该 Server 进行诊断等而进行的动作。Stop Server 操作的命令如下所示:

  1. ALTER SYSTEM STOP SERVER 'ip:port' [,'ip:port'…] [ZONE='zone']

示例语句如下所示:

  1. obclient> ALTER SYSTEM STOP SERVER "10.10.10.1:2882" zone='z1'

Add Server 操作

Add Server 操作的目的是添加节点到集群,该操作是运维扩容的操作。被添加的新节点要求是空的,即 CLog 和 ILog 目录下为空。Add Server 操作的命令如下所示:

  1. ALTER SYSTEM ADD SERVER 'ip:port' [,'ip:port'…] [ZONE [=] 'zone']

示例语句如下所示:

  1. obclient> ALTER SYSTEM ADD SERVER "10.10.10.1:2882" zone='z1'

Delete Server 操作

Delete Server 用于从集群中删除节点。Delete Server 操作的命令如下所示:

  1. ALTER SYSTEM DELETE SERVER 'ip:port' [,'ip:port'…] [ZONE [=] 'zone']

示例语句如下所示:

  1. obclient> ALTER SYSTEM DELETE SERVER "192.168.100.1:2882" zone='z1'

Cancel Delete Server 操作

Delete Server 的动作会涉及到负载均衡。被删除的 Server 上的资源单元会在同一个 Zone 中进行资源单元(Unit)迁移。Unit 的迁移动作是 Unit 自动均衡过程由 RootService 控制。Unit 均衡过程中可能发生资源不足,其他同 Zone 的机器资源不足容纳这个新迁移的 Unit。这样将导致 Unit 迁移失败,通过 /home/admin/oceanbase/log/rootservice.log 可以看到迁移 Unit 失败的错误代码 -4624。如果希望取消 Delete Server 动作,可以通过 Cancel Delete Server 操作实现。 Cancel Delete Server 操作的命令如下所示:

  1. ALTER SYSTEM CANCEL DELETE SERVER 'ip:port' [,'ip:port'…] [ZONE [=] 'zone']

示例语句如下所示:

  1. obclient> ALTER SYSTEM CANCEL DELETE SERVER "10.10.10.1:2882" zone='z1'

操作限制说明

对节点执行操作时:

  • 不能跨 Zone 执行 Stop Server 操作,同一个 Zone 可以同时 Stop 多个 Server。

  • 一个 Stop 操作发起没有结束前,不能发起第二个操作。

  • enable_auto_leader_switch参数必须设置为开启。

  • 分区副本满足多数派。

  • 如果分区数多,或者被 Stop Server 的节点分区的 Leader 数量多, Alter System Stop Server 操作时间会比较长,如果超时,可以加大 SQL 超时时间。

  • 如果命令很快失败,那么可能是日志不同步。

  • 检查 __all_rootservice_event_history 可以确认是否有 Stop Server 动作。

  • Stop Server 后该 Server 的状态仍为 Active ,但 stop_service_time 的值由 0 变为 Stop Server 的时间点。