[TOC] # 管理 OBServer 节点状态 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 操作的命令如下所示: ~~~ ALTER SYSTEM START SERVER 'ip:port' [,'ip:port'…] [ZONE='zone'] ~~~ 示例语句如下所示: ~~~ 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 操作的命令如下所示: ~~~ ALTER SYSTEM STOP SERVER 'ip:port' [,'ip:port'…] [ZONE='zone'] ~~~ 示例语句如下所示: ~~~ obclient> ALTER SYSTEM STOP SERVER "10.10.10.1:2882" zone='z1' ~~~ ## **Add Server 操作** Add Server 操作的目的是添加节点到集群,该操作是运维扩容的操作。被添加的新节点要求是空的,即 CLog 和 ILog 目录下为空。Add Server 操作的命令如下所示: ~~~ ALTER SYSTEM ADD SERVER 'ip:port' [,'ip:port'…] [ZONE [=] 'zone'] ~~~ 示例语句如下所示: ~~~ obclient> ALTER SYSTEM ADD SERVER "10.10.10.1:2882" zone='z1' ~~~ ## **Delete Server 操作** Delete Server 用于从集群中删除节点。Delete Server 操作的命令如下所示: ~~~ ALTER SYSTEM DELETE SERVER 'ip:port' [,'ip:port'…] [ZONE [=] 'zone'] ~~~ 示例语句如下所示: ~~~ 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 操作的命令如下所示: ~~~ ALTER SYSTEM CANCEL DELETE SERVER 'ip:port' [,'ip:port'…] [ZONE [=] 'zone'] ~~~ 示例语句如下所示: ~~~ 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 的时间点。