您可以根据数据库的运行情况,启动或停止 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用于设置节点心跳中断的时间阈值,即节点心跳中断多久后认为其被永久下线,永久下线的节点上的数据副本需要被自动补足。
使用
admin 用户登录 OBServer 所在的机器。
通过命令行工具进入
/home/admin/oceanbase/bin 目录。
运行以下命令,停止 observer 进程。
kill `pidof observer`
运行以下命令,确认进程是否已停止。
ps -ef | grep observer | grep -v grep
如果命令执行后没有返回信息,则表示进程停止成功。
启动 OBServer 主要包含以下 2 个操作:
启动 observer 进程
启动节点服务,即 Start Server 操作
某些特殊情况下,您可以通过命令启动 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)。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70026121/viewspace-2932613/ ,如需转载,请注明出处,否则将追究法律责任。