首批通过分布式安全可靠测评,为关键业务系统打造
停止或启动 OBServer
更新时间:2024-03-29 16:30:42
您可以根据数据库的运行情况,启动或停止 OBServer 的运行。
通过 SQL 语句停止 OBServer
停止 OBServer 主要包含以下 2 个 操作:
停止节点服务,即 Stop Server 操作
停止 observer 进程
停止节点服务
说明
停止 OBServer 服务会将所有流量和主副本的角色切到其他 OBServer,请谨慎操作。
您可以通过对 OBServer 执行 Stop Server 操作来停止节点服务。Stop Server 操作通常是特殊运维操作时执行,例如机器硬件维修、替换和升级,或者对该 Server 进行诊断等而进行的动作。
Stop Server 操作的目的是将该 OBServer 上的分区 Leader 切到其他节点。当该 OBServer 上没有分区 Leader 的情况下,系统将内部标记 OBServer 为 stopped 状态,客户端请求不会再次发送到该 OBServer,该 OBServer 也不会再对外提供服务。
关于 OBServer 状态的更多说明请参见 查看 OBServer 状态。
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 进程会导致 OBServer 不可用,无法提供服务,请谨慎操作。
使用
admin用户登录 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 对应版本的《用户指南》文档中的 编辑用户。
操作步骤
登录 OCP。
默认进入 集群 页面。
在该页面的 集群列表 中单击集群名,进入 总览 页面。
在 OBServer 列表 部分,单击需要停止的 OBServer 操作列的 停止 。

在弹出框 停止 ,停止 OBServer。
您可通过弹出框中的 查看任务 按钮,查看停止进度。
您也可在 系统管理 > 任务 中查看该任务的进度。
当该任务状态为 完成 ,且集群 总览 页的 OBServer 列表 中该 OBServer 的状态为 已停止 时,则停止成功。
通过 SQL 语句启动 OBServer
启动 OBServer 主要包含以下 2 个操作:
启动 observer 进程
启动节点服务,即 Start Server 操作
启动 observer 进程
某些特殊情况下,您可以通过命令启动 observer 进程。
使用
admin用户登录 OBServer 节点所在的机器。通过命令行工具进入
/home/admin/oceanbase目录。运行以下命令,启动 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 -o 'memory_limit=100GB,datafile_disk_percentage=85'其中:
-p用于指定直连端口号,本示例中为2881。-P用于指定 RPC 端口号,本示例中为2882。-z用于指定待启动的 OBServer 所在的 Zone,本示例中为zone_1。-d用于指定数据盘的存储目录,本示例中为/data/1/prod_data。-r用于指定待启动的 OBServer 的 IP 地址列表。-l:用于指定日志的级别,本示例中为WARN,表示日志级别为 WARNING 级别。-o用于指定启动配置项。 使用-o参数时,需满足以下条件:不分大小写,但是推荐按照
observer.config.bin中的名称来写。配置项名不能包含以下特殊字符:空格、
\r、\n、\t配置项名和配置项值中间必须有等号(=)。
配置项之间使用逗号(,)进行分割。
datafile_disk_percentage=85:表示数据盘的占用比率为 85%。memory_limit=100GB:表示进程启动内存上限为 100 GB。
进程启动后,5~10 秒钟后,执行以下命令,确认进程是否启动成功。
执行以下命令,确认进程是否已存在。
示例如下:
[admin@xx oceanbase]#ps -ef | grep observer | grep -v grep root 6136 0 99 11:23 ? 00:00:19 ./bin/observer示例中,命令执行后有返回信息,表示进程已启动成功。如果命令执行后没有返回信息,则表示进程未启动成功。
执行以下命令,确认端口监听是否成功。
示例如下:
[admin@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)。
通过 OCP 启动 OBServer
您可以通过 OCP 启动 OBServer,OCP 上启动 OBServer 的操作包含了 ALTER SYSTEM START SERVER 操作和启动该 observer 进程的操作。
前提条件
待操作的集群可以在当前 OCP 中进行管理。
如果该集群未加入到 OCP 中进行管理,请联系管理员将待操作的集群接管到当前 OCP 中,具体操作方法请参见 OCP 对应版本的 《用户指南》 文档中的 接管集群。
停止 OBServer 前,请确认当前登录用户已具备集群的管理权限。
如果当前用户没有集群管理的权限,请联系管理员为您添加相应权限的角色,具体操作方法请参见 OCP 对应版本的《用户指南》文档中的 编辑用户。
操作步骤
登录 OCP。
默认进入 集群 页面。
在该页面的 集群列表 中单击集群名,进入 总览 页面。
在 OBServer 列表 部分,单击需要停止的 OBServer 操作列的 启动 。

在弹出框 启动 ,启动 OBServer。

您可通过弹出框中的 查看任务 按钮,查看停止进度。

您也可在 系统管理 > 任务 中查看该任务的进度。

当该任务状态为 完成 ,且集群 总览 页的 OBServer 列表 中该 OBServer 的状态为 运行中 时,则启动成功。