您可以根据数据库的运行情况,启动或停止 OBServer 的运行。
通过 SQL 语句停止 OBServer
停止 OBServer 主要包含以下 2 个 操作:
停止节点服务,即 Stop Server 操作
停止 observer 进程
停止节点服务
您可以通过对 OBServer 执行 Stop Server 操作来停止节点服务。Stop Server 操作的目的是将该 OBServer 上的分区 Leader 切到其他节点。当该 OBServer 上没有分区 Leader 的情况下,系统将内部标记 OBServer 为 stop 状态,客户端请求不会再次发送到该 OBServer,该 OBServer 也不会再对外提供服务。
关于 OBServer 状态的更多说明请参见 查看 OBServer 状态。
Stop Server 操作通常是特殊运维操作时执行,例如机器硬件维修、替换和升级,或者对该 Server 进行诊断等而进行的动作。
Stop Server 操作的语句如下:
obclient> ALTER SYSTEM STOP SERVER 'ip:port' [,'ip:port'...] [ZONE='zone'];
该语句仅支持在 sys 租户中执行。
在执行 Stop Server 操作前,需要确认分区副本满足多数派。
此外,执行 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 。如果命令很快执行失败,那么可能是日志不同步,需要查询
oceanbase.DBA_OB_ROOTSERVICE_EVENT_HISTORY视图,确认是否有 Stop Server 的记录。如果没有记录,则说明在 RS 没执行 Stop Server 操作前就失败了;如果有记录,则说明是日志不同步导致 Stop Server 操作执行失败。查询示例如下:
obclient> SELECT rs_svr_ip FROM oceanbase.DBA_OB_ROOTSERVICE_EVENT_HISTORY WHERE event='stop_server'; +----------------+ | RS_SVR_IP | +----------------+ | xxx.xx.xxx.xx5 | | xxx.xx.xxx.xx5 | +----------------+ 2 rows in set执行 Stop Server 操作后,
oceanbase.DBA_OB_SERVERS视图中该 Server 的status字段仍为Active不变,但stop_time字段的值由NULL变为 Stop Server 的时间点,同时 OBServer 处于stop状态。更多 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 进程
使用
admin用户登录 OBServer 所在的机器。通过命令行工具进入
/home/admin/oceanbase/bin目录。运行以下命令,停止 observer 进程。
kill `pidof observer`运行以下命令,确认进程是否已停止。
ps -ef | grep observer | grep -v grep如果命令执行后没有返回信息,则表示进程停止成功。
通过 SQL 语句启动 OBServer
启动 OBServer 主要包含以下 2 个操作:
启动 observer 进程
启动节点服务,即 Start Server 操作
启动 observer 进程
某些特殊情况下,您可以通过命令启动 observer 进程。
使用
admin用户登录 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 * 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其中:
status:表示节点服务的状态,一般有以下几种状态:active:表示该 OBServer 节点为正常状态。inactive:表示该 OBServer 节点为下线状态,集群升级过程中该值为inactive。
start_service_time:表示节点启动服务的时间。如果该值是NULL;则表示该节点的服务还没有启动。stop_time:表示节点停止时间,该时间应该是默认值NULL,如果不是,则表示该节点被停止服务(Stop Server 操作)了,需要先启动服务(Start Server)。




