机器维护 #
本文介绍如何对机器进行临时停机维护。
OBServer 节点停机维护 #
操作步骤 #
重启节点的主要流程为:停止服务 -> 转储 -> 关闭进程 -> 启动进程 -> 启动服务。
根据预估维护时间调整 server_permanent_offline_time
alter system server_permanent_offline_time='2h';
在 OceanBase 数据库中,server_permanent_offline_time 配置项的名称为“永久下线时长”,是用来控制集群中某个节点的不可用时长,超过设置的时长后,OceanBase 数据库会将其踢出成员列表。
使用 root 用户登录到集群的 sys 租户。
obclient -h10.xx.xx.xx -P2883 -uroot@sys -p -A
执行以下命令,进行节点隔离。
说明
如果可以接受节点停止服务,也可以跳过本步骤。
obclient [(none)]> ALTER SYSTEM STOP SERVER 'svr_ip:svr_port';
端口默认为 2882。
执行成功后,可以查询 oceanbase.DBA_OB_SERVERS 视图中该 Server 的 STATUS 字段,可以看到字段值仍为 ACTIVE 不变,但 STOP_TIME 字段的值由 NULL 变为停止服务的时间点。
STOP SERVER 命令在多副本架构的基础上能够达到业务无损的重启效果,STOP SERVER 命令执行以下逻辑:
将待重启节点上的 Leader 全部切走,并保证除了重启节点以外的其他节点上的副本满足多数派。
在 Root Service 上将待重启节点标记为 stopped(节点状态为 ACTIVE 状态且 stop_time 字段大于 0),客户端识别后,不会将业务请求路由到该节点。
最终成功 Stop Server 后,重启节点不会引起无主选举及客户端报错等问题,对业务流量完全透明。
执行以下命令,对待重启的节点进行转储操作,以便缩短重启后回放 Redo Log 的时间,加速重启。
obclient [(none)]> ALTER SYSTEM MINOR FREEZE SERVER = ('svr_ip:svr_port');
确认是否转储成功,需要等待转储结束方可执行下一步操作。
SELECT * FROM oceanbase.GV$OB_TABLET_COMPACTION_PROGRESS WHERE TYPE='MINI_MERGE'\G
停止 observer 进程。
使用 admin 用户登录待停止进程的节点所在的机器。
通过命令行工具进入 /home/admin/oceanbase/bin 目录。
停止 observer 进程。
执行以下命令,确认进程是否已停止。
kill `pidof observer` ps -ef | grep observer | grep -v grep
(可选)如果需要维修机器,在本步骤对机器进行短暂的维修。
启动 observer 进程。
使用 admin 用户登录待启动进程的节点所在的机器。
启动 observer 进程
[admin@xxx oceanbase]$ cd /home/admin/oceanbase && ./bin/observer
执行以下命令,启动节点服务。
obclient [(none)]> ALTER SYSTEM START SERVER 'svr_ip:svr_port';
执行成功后,可以查询 oceanbase.DBA_OB_SERVERS 视图中的 START_SERVICE_TIME 字段,该字段表示节点启动服务的时间。如果该值为 NULL,则表示该节点的服务还没有启动。
OBProxy 停机维护 #
OceanBase Database Proxy(简称 ODP)是 OceanBase 数据库专用的代理服务器,正常情况下单节点重启对业务没有影响。
停止 obproxy 进程 #
使用 admin 用户登录到 obproxy 进程所在的机器。
执行以下命令,查看 obproxy 进程的进程号。
$ps -ef | grep obproxy admin 37360 0 6 11:35 ? 00:00:09 bin/obproxy admin 43055 36750 0 11:37 pts/10 00:00:00 grep --color=auto obproxy root 85623 1 0 Jun02 ? 00:15:19 /home/admin/ocp_agent/obagent/obstat2 -o http://xx.xx.xx.xx:81 -c test323 __obproxy__ -f 20
示例中查询到 ODP 的进程号为 37360。
执行如下命令,根据查询到的进程号,停止 obproxy 进程。
$kill -9 37360
停止成功后,再次执行以下命令,确认 obproxy 进程已不存在。
$ps -ef|grep obproxy
启动 obproxy 进程 #
背景信息 #
支持通过以下两种方式来启动 obproxy 进程:
在启动命令中指定 -r 参数来指定 OceanBase 集群的 RootServer 信息。该启动方式不需要额外配置,一般用于开发调试阶段。
在启动命令中指定 obproxy_config_server_url 参数项来查询获取 OceanBase 集群的 RootServer 信息。该方式需要配置 obproxy_config_server_url,故会依赖 Config Server 的启动,建议使用该方式启动 ODP。
操作步骤 #
使用 admin 用户登录到待启动的 ODP 所在的机器。
进入 ODP 的安装目录。
执行以下命令,启动 ODP。
在启动命令中指定 -r 参数命令如下:
$./bin/obproxy -p6789 -r'ip:port' -e -n appname -o obproxy_config_server_url='' -c cluster_name
示例:
$./bin/obproxy -r'10.10.10.1:26506;10.10.10.2:26506' -n test -c mycluster
在启动命令中指定 obproxy_config_server_url 参数命令如下:
$./bin/obproxy -p6789 -e -n appname -o obproxy_config_server_url='your_config_url'
示例:
$./bin/obproxy -n test -o obproxy_config_server_url='http://xx.xx.xx.xx:8877/obproxy_config'
启动后,执行以下命令,查看 obproxy 进程是否存在。
$ps -ef|grep obproxy
Prometheus #
可以直接重启,但是这段时间的监控告警会没办法发出。或者重新部署一个 Prometheus,让其接管这个集群,并将当前 Prometheus 下线掉。但是使用此方法后历史的监控数据可能就没办法查看了。
OBAgent #
OBAgent 是一个监控采集框架。OBAgent 支持推、拉两种数据采集模式,可以满足不同的应用场景。正常情况下停止机器的 OBAgent 会导致监控不到对应机器的信息,机器维护直接停就可以了,重启后恢复。
OCP #
待补充,敬请期待。