基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
停止或启动 OBServer
更新时间:2023-08-07 17:30:43
您可以根据数据库的运行情况,启动或停止 OBServer 的运行。
通过 SQL 语句停止 OBServer
停止 OBServer 主要包含以下 2 个 操作:
停止节点服务,即 Stop Server 操作
停止 observer 进程
停止节点服务
您可以通过对 OBServer 执行 Stop Server 操作来停止节点服务。Stop Server 操作的目的是将该 OBServer 上的分区 Leader 切到其他节点。当该 OBServer 上没有分区 Leader 的情况下,系统将内部标记 OBServer 为 stopped 状态,客户端请求不会再次发送到该 OBServer,该 OBServer 也不会再对外提供服务。
关于 OBServer 状态的更多说明请参见 查看 OBServer 状态。
Stop Server 操作通常是特殊运维操作时执行,例如机器硬件维修、替换和升级,或者对该 Server 进行诊断等而进行的动作。
Stop Server 操作的语句如下:
obclient> ALTER SYSTEM STOP SERVER 'ip:port' [,'ip:port'...] [ZONE='zone'];
该语句仅支持在 sys 租户中执行。
在执行 Stop Server 操作前,需要确认以下信息:
enable_auto_leader_switch参数已设置为开启状态,即enable_auto_leader_switch的值为True。enable_auto_leader_switch参数的更多说明请参见 enable_auto_leader_switch。分区副本满足多数派。
此外,执行 Stop Server 操作时,还需要注意以下事项:
不能跨 Zone 执行 Stop Server 操作,同一个 Zone 可以同时 Stop 多个 Server。
一个 Stop 操作发起没有结束前,不能发起第二个操作。
如果分区数多,或者被 Stop Server 的节点分区的 Leader 数量多, Stop Server 操作时间会比较长,如果超时,可以加大 SQL 超时时间。
SQL 超时时间可通过租户变量
ob_query_timeout来设置,该变量的默认值为10000000,单位为微秒,具体设置方法可参见 设置变量。更多变量
ob_query_timeout的介绍信息请参见 ob_query_timeout。如果命令很快执行失败,那么可能是日志不同步,需要检查
__all_rootservice_event_history表,确认是否有 Stop Server 的记录。如果没有记录,则说明在 RS 没执行 Stop Server 操作前就失败了;如果有记录,则说明是日志不同步导致 Stop Server 操作执行失败。查询示例如下:
obclient> SELECT rs_svr_ip FROM oceanbase.__all_rootservice_event_history WHERE event='stop_server'; +----------------+ | rs_svr_ip | +----------------+ | xxx.xx.xxx.xx5 | | xxx.xx.xxx.xx5 | +----------------+ 2 rows in set执行 Stop Server 操作后,
__all_server内部表中该 Server 的status字段仍为Active不变,但stop_time字段的值由0变为 Stop Server 的时间点,同时 OBServer 处于stopped状态。更多 OBServer 状态的介绍和查看相关操作请参见 查看 OBServer 状态。
示例:
使用
root用户登录数据库的sys租户。执行以下 SQL 语句,停止节点服务。
obclient> ALTER SYSTEM STOP SERVER "10.10.10.1:2882" zone='z1';停止节点服务后,如果该节点上有主副本,则系统会自动切换为备副本,且节点的备副本依然可以参与投票,但不会当选为主副本。节点服务停止与 OBServer 宕机性质不同,节点停止服务的时间可以超出配置项
server_permanent_offline_time指定的永久下线时间且不会导致节点真的下线。说明
配置项
server_permanent_offline_time用于设置节点心跳中断的时间阈值,即节点心跳中断多久后认为其被永久下线,永久下线的节点上的数据副本需要被自动补足。
停止 observer 进程
登录 OBServer 所在的机器。
通过命令行工具进入
/home/admin/oceanbase/bin目录。运行以下命令,停止 observer 进程。
kill `pidof observer`运行以下命令,确认进程是否已停止。
ps -ef | grep observer | grep -v grep如果命令执行后没有返回信息,则表示进程停止成功。
通过 OCP 停止 OBServer
您可以通过 OCP 停止 OBServer,OCP 上停止 OBServer 的操作包含了 ALTER SYSTEM STOP SERVER 操作和停止该 observer 进程的操作。
前提条件
待操作的集群可以在当前 OCP 中进行管理。
如果该集群未加入到 OCP 中进行管理,请联系管理员将待操作的集群接管到当前 OCP 中,具体操作方法请参见 OCP 对应版本的《用户指南》文档中的 接管集群 。
停止 OBServer 前,请确认当前登录用户已具备集群的管理权限。
如果当前用户没有集群管理的权限,请联系管理员为您添加相应权限的角色,具体操作方法请参见 OCP 对应版本的《用户指南》文档中的 编辑用户 。
可选)如果您希望在停止 OBServer 时不影响业务的运行,则需要保证待停止的 OBServer 所在 Zone 内还有其他 OBServer,且资源充足,以保证在停止 OBServer 时,该 OBServer 上的 Unit 会自动切换到其他 OBServer,从而不影响业务的运行。
操作步骤
登录 OCP。
默认进入 集群概览 页面。
在该页面的 集群列表 中单击集群名,进入 总览 页面。
在 OBServer 列表 部分,单击需要停止的 OBServer 操作列的 停止 。

在弹出框 停止 ,停止 OBServer。
您可通过弹出框中的 查看任务 按钮,查看停止进度。
您也可在 系统管理 > 任务 中查看该任务的进度。
当该任务状态为 完成 ,且集群 总览 页的 OBServer 列表 中该 OBServer 的状态为 已停止 时,则停止成功。
通过 SQL 语句启动 OBServer
启动 OBServer 主要包含以下 2 个操作:
启动 observer 进程
启动节点服务,即 Start Server 操作
启动 observer 进程
某些特殊情况下,您可以通过命令启动 observer 进程。
登录 OBServer 所在的机器。
通过命令行工具进入
/home/admin/oceanbase/bin目录。运行以下命令,启动 observer 进程。
cd /home/admin/oceanbase/ ./bin/observer [启动参数]通常仅在第一次启动时,需要添加启动参数,其他时候启动时,可直接使用
./bin/observer命令启动 observer 进程。同时,您还可以运行./bin/observer --help查看 observer 启动参数的详细信息。第一次启动 observer 进程的命令示例如下:
cd /home/admin/oceanbase/bin ./observer -p 2881 -P 2882 -z 'zone_1' -d '/data/1/prod_data/' -r '10.10.10.1:2882:2881;10.10.10.2:2882:2881;10.10.10.3:2882:2881' -l WARN -d '/data/1/prod_data' -o 'memory_limit=100GB,datafile_disk_percentage=85'其中:
2881:表示 MySQL 的访问端口。2882:表示远程访问端口。zone_1:表示 Zone 名称。/data/1/prod_data:表示数据盘目录。datafile_disk_percentage=85:表示数据盘的占用比率为 85%。10.10.10.1和10.10.10.2和10.10.10.3:表示 RootServer 列表。memory_limit=100GB:表示进程启动内存上限为 100 GB。WARN:表示日志级别为 WARNING 级别。使用
-o参数时,需满足以下条件:不分大小写,但是推荐按照
observer.config.bin中的变量名称来写。参数不能包含以下特殊字符:空格、
\r、\n、\t参数名和参数值中间必须有等号(=)。
参数之间使用逗号(,)进行分割。
进程启动后,5~10 秒钟后,执行以下命令,确认进程是否启动成功。
执行以下命令,确认进程是否已存在。
示例如下:
[root@xx oceanbase]#ps -ef | grep observer | grep -v grep root 6136 0 99 11:23 ? 00:00:19 ./bin/observer示例中,命令执行后有返回信息,表示进程已启动成功。如果命令执行后没有返回信息,则表示进程未启动成功。
执行以下命令,确认端口监听是否成功。
示例如下:
[root@xxx oceanbase]#netstat -ntlp | grep `pidof observer` tcp 0 0 0.0.0.0:2881 0.0.0.0:* LISTEN 6136/./bin/observer tcp 0 0 0.0.0.0:2882 0.0.0.0:* LISTEN 6136/./bin/observer示例中,
6136/./bin/observer中的6136表示 observer 的进程 ID,从执行结果可知,端口监听成功。
启动节点服务
一般情况下,您可以通过 Start Server 操作来启动节点服务。Start Server 操作对应 Stop Server 操作。集群中的 OBServer 启动后,通常默认状态为 started。如果执行过 Stop Server 操作,则需要通过 Start Server 操作将 Server 状态置为 started。
启动节点服务的语句如下:
obclient> ALTER SYSTEM START SERVER 'ip:port' [,'ip:port'...] [ZONE='zone'];
该语句仅支持在 sys 租户中执行。
示例:
使用
root用户登录数据库的sys租户。执行以下 SQL 语句,启动节点服务。
obclient> ALTER SYSTEM START SERVER "10.10.10.1:2882";执行以下 SQL 语句,查看节点服务是否已经正常。
示例如下:
obclient> SELECT a.zone, concat(a.svr_ip,':', a.svr_port) observer, cpu_total, (cpu_total-cpu_assigned) cpu_free, round(mem_total/1024/1024/1024) mem_total_gb, round((mem_total-mem_assigned)/1024/1024/1024) mem_free_gb, usec_to_time(b.last_offline_time) last_offline_time, usec_to_time(b.start_service_time) start_service_time, b.status, usec_to_time(b.stop_time) stop_time, b.build_version FROM oceanbase.__all_virtual_server_stat a join oceanbase.__all_server b on (a.svr_ip=b.svr_ip and a.svr_port=b.svr_port) ORDER BY a.zone, a.svr_ip\G *************************** 1. row *************************** zone: zone1 observer: 10.10.10.2:2882 cpu_total: 62 cpu_free: 55 mem_total_gb: 50 mem_free_gb: 20 last_offline_time: 1970-01-01 08:00:00.000000 start_service_time: 2021-12-03 09:54:53.237400 status: active stop_time: 1970-01-01 08:00:00.000000 build_version: 3.2.1_20211031212624-2c7eade2fd94a4ae32bec1683d1118da9d30cf8b(Oct 31 2021 22:03:03) *************************** 2. row *************************** zone: zone2 observer: 10.10.10.1:2882 cpu_total: 62 cpu_free: 55 mem_total_gb: 50 mem_free_gb: 20 last_offline_time: 1970-01-01 08:00:00.000000 start_service_time: 2021-12-08 11:24:05.281388 status: active stop_time: 1970-01-01 08:00:00.000000 build_version: 3.2.1_20211031212624-2c7eade2fd94a4ae32bec1683d1118da9d30cf8b(Oct 31 2021 22:03:03) 2 rows in set其中:
status:表示节点服务的状态,一般有以下几种状态:active:表示该 OBServer 节点为正常状态。inactive:表示该 OBServer 节点为下线状态,集群升级过程中该值为inactive。deleting:表示该 OBServer 节点正在被删除。
start_service_time:表示节点服务时间,该时间不能是默认值1970-01-01 08:00:00.000000;如果是,则表示该节点还没有完成恢复。stop_time:表示节点停止时间,该时间应该是默认值1970-01-01 08:00:00.000000,如果不是,则表示该节点被停止服务(Stop Server 操作)了,需要先启动服务(Start Server)。