欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/
重启是常见运维动作之一,适用于对机器进行短暂维修,以及修改系统配置项后需要重启生效的场景。重启过程中节点的下线时间需要在配置项 server_permanent_offline_time 设置的时间以内,否则会被永久下线。如果机器长时间维修,需要走机器替换流程,有关机器替换的详细操作请参见 替换节点。
说明
集群级配置项 server_permanent_offline_time 用于设置节点心跳中断的时间阈值,即节点心跳中断多久后认为其被永久下线,永久下线的节点上的数据副本需要被自动补足。默认为 3600s。有关该配置项的更多详细信息,请参见 server_permanent_offline_time。
背景信息
OceanBase 数据库作为一款分布式数据库,典型的部署架构为多副本部署(例如,同城三中心部署架构为 3 份副本,三地五中心部署架构为 5 份副本)。事务提交时利用 Paxos 协议在多个副本间达成多数派提交,从而维护副本之间的数据一致性,在少数派副本异常的情况下达成 RPO=0 的 SLA。
STOP SERVER 命令在多副本架构的基础上能够达到业务无损的重启效果,STOP SERVER 命令执行以下逻辑:
将待重启节点上的 Leader 全部切走,并保证除了重启节点以外的其他节点上的副本满足多数派。
在 Root Service 上将待重启节点标记为 stopped(节点状态为
ACTIVE状态且stop_time字段大于 0),客户端识别后,不会将业务请求路由到该节点。
最终成功 Stop Server 后,重启节点不会引起无主选举及客户端报错等问题,对业务流量完全透明。如果 Stop Server 操作执行失败,需要停止重启并检查原因,例如,可能出现的原因有缺少副本、RedoLog 延迟、总投票成员数小于 3 等。
操作步骤
重启节点的主要流程为:停止服务 -> 转储 -> 关闭进程 -> 启动进程 -> 启动服务。
本文以重启集群中的一个节点为例提供操作指导,如果需要重启多个节点,请参考本操作执行多次即可。
使用
root用户登录到集群的sys租户。连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@sys -p***** -A有关更加详细的连接数据库的操作指引,参见 连接数据库概述(MySQL 模式) 和 连接数据库概述(Oracle 模式)。
执行以下命令,进行节点隔离。
节点在重启过程中可能会影响服务的连续性,例如,集群只有一个或两个节点、或者租户的数据只分布在两个节点上的场景,重启节点的过程中系统将可能会无法提供服务。执行 Stop Server 操作进行节点隔离时,系统将会执行安全检查,保证节点重启过程中不影响系统服务的连续性。待节点成功隔离后,该节点上将不再提供服务。如果 Stop Server 操作失败,则需要检查集群的部署情况或根据报错信息解决问题后再重新执行 Stop Server 操作;或者如果可以接受节点停止服务,也可以跳过本步骤。
obclient [(none)]> ALTER SYSTEM STOP SERVER 'svr_ip:svr_port';相关参数说明如下:
svr_ip:表示待停止的节点所在的 IP。svr_port:表示待停止的节点的 RPC 端口,默认为 2882。
示例如下:
obclient [(none)]> ALTER SYSTEM STOP SERVER '172.xx.xx.xx:2882';执行成功后,可以查询
oceanbase.DBA_OB_SERVERS视图中该 Server 的STATUS字段,可以看到字段值仍为ACTIVE不变,但STOP_TIME字段的值由NULL变为停止服务的时间点。查询
oceanbase.DBA_OB_SERVERS视图的具体操作可参见 查看节点。执行以下命令,对待重启的节点进行转储操作,以便缩短重启后回放 Redo Log 的时间,加速重启。
obclient [(none)]> ALTER SYSTEM MINOR FREEZE SERVER = ('svr_ip:svr_port');相关参数说明如下:
svr_ip:表示待重启的节点的 IP。svr_port:表示待重启的节点的 RPC 端口,默认为 2882。
示例如下:
obclient [(none)]> ALTER SYSTEM MINOR FREEZE SERVER = ('172.xx.xx.xx:2882');执行转储操作后,需要等待转储结束方可执行下一步操作,查看转储进度的相关操作请参见 查看转储信息。
更多转储相关的详细介绍,请参见 转储。
停止 observer 进程。
使用
admin用户登录待停止进程的节点所在的机器。通过命令行工具进入
/home/admin/oceanbase/bin目录。[admin@xxx /]$ cd /home/admin/oceanbase/bin更多 OceanBase 数据库软件的安装目录的详细介绍信息,请参见 OBServer 安装目录结构。
执行以下命令,查看并获取节点的进程 ID。
[admin@xxx oceanbase]$ ps -ef | grep observer | grep -v grep admin 103364 1 99 2022 ? 51-17:24:41 /home/admin/oceanbase/bin/observer示例中,
103364即为节点的进程 ID。停止 observer 进程。
命令如下:
[admin@xxx oceanbase]$ kill -9 pid其中,
pid为待停止的节点的 observer 进程 ID。示例如下:
[admin@xxx oceanbase]$ kill -9 103364注意
一个部署目录只能停止该节点上的一个 observer 进程,如果需要停止多个节点上的 observer 进程,则需要依次登录多台机器进行操作。
执行以下命令,确认进程是否已停止。
[admin@xxx oceanbase]$ ps aux | grep observer如果命令执行后没有返回信息,则表示进程停止成功。
(可选)如果需要维修机器,在本步骤对机器进行短暂的维修。
启动 observer 进程。
使用
admin用户登录待启动进程的节点所在的机器。启动 observer 进程。
[admin@xxx oceanbase]$ cd /home/admin/oceanbase && ./bin/observer注意
一个部署目录只能启动该节点上的一个 observer 进程,如果需要启动多个节点上的 observer 进程,则需要依次登录多台机器进行操作。
更多 OceanBase 数据库软件的安装目录的详细介绍信息,请参见 OBServer 安装目录结构。
执行以下命令,启动节点服务。
obclient [(none)]> ALTER SYSTEM START SERVER 'svr_ip:svr_port';其中:
svr_ip:表示待停止的节点的 IP。svr_port:表示待停止的节点的 RPC 端口,默认为 2882。
示例如下:
obclient [(none)]> ALTER SYSTEM START SERVER '172.xx.xx.xx:2882';执行成功后,可以查询
oceanbase.DBA_OB_SERVERS视图中的START_SERVICE_TIME字段,该字段表示节点启动服务的时间。如果该值为NULL,则表示该节点的服务还没有启动。查询
oceanbase.DBA_OB_SERVERS视图的具体操作可参见 查看节点。
欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/




