本文介绍在GBase 8a数据库服务需要重启时,要注意的事项整理。本文所指的重启,指有安排的正常重启,不包括断电,死机,宕机等意外重启。
目录导航
重启原因
一般由于如下原因,需要重启全部或者部分节点的数据库服务。
整体重启
- 常规维护,比如每年计划重启一次,重置下系统
- 修改部分数据库参数后,需要重启使之生效
- 升级版本
- 扩容调度节点(coordinator)
局部重启
- 数据库状态异常,比如内存占用高
- 操作系统服务异常,比如磁盘mount 错了
- 操作系统异常,比如ssh时断时续,出现僵尸进程,一般需要reboot
- 调试数据库
重启影响
数据库服务重启,可能造成的影响包括:
停止影响
- 无法连接该IP的服务;
- 该IP正在运行的SQL报错或消失,应用报错;
- 其它IP的SQL,需要使用该IP时无法连接而报错;
- 服务停止后,数据【可能】会出现主副本不一致,并被记录event标记;
- 该IP的数据库内部定时任务会失效,针对local类型的。
启动影响
服务启动后,可能出现的影响包括
- 数据同步会出现资源争抢。主副本如果出现不一致,服务启动后会自动做同步,会影响主副本机器的CPU和磁盘资源。持续时间和影响程度,取决于服务停止时间,以及停止期间影响到的具体表的数据量和变化程度。表越大,变化频率越高,则同步的耗时【可能】越长。极限情况请参考 GBase 8a 表同步一直完不成,同步强制锁表的参数解决同步一直追不上加载
重启前建议
从减少重启影响角度考虑,如果是部分节点停服务,时间预计较短,或者短期报错可接受,则可以不停外部服务,否则建议如下:
停掉加载等入库业务
避免数据库停止期间,加载报错和出现主副本不一致。
停掉定时任务
主要时定时汇总,定时清理的任务,包括用户级(自行应用层调度)、操作系统级(crontab)、数据库内(event)。这些任务要有重新运行机制。
考虑停掉查询业务
如果是全部停服务,且时间预计较长,建议停掉查询服务。
重启耗时估计
重启服务耗时,主要是2部分。
- 正在执行的SQL, 这部分要等待SQL完成,或者超时(60秒)后强行断掉。
- 服务如果使用了SWAP,要慢慢交换(常见于很长时间没有重启过的情况),这部分耗时最长。可以通过top查看服务占用的SWAP情况判断。
单台机器重启方案
通过stop和start重启,不建议用restart。
停服务
先通过stop停服务,根据版本不同,命令不同。
如只需要重启部分服务,可以在操作系统gbase用户下,用gcluster_service [服务名] stop。无需重启全部服务。
V8版本
root操作系统用户
service gcware stop
V9.5.2版本
操作系统dbauser(一般是gbase)用户下
gcluster_services all stop
V9.5.3多实例
操作系统dbauser(一般是gbase)用户下,多了一个gcware集群需要单独操作。
gcware_services all stop
gcluster_services all stop
确认停服务成功
在某些情况下,会出现stop显示ok,但服务没有停或者又被拉起的情况,已知场景包括
- 进程变成僵尸, 一般需要reboot操作系统
- 磁盘故障无法停止,需要维修
- 环境变量被破坏,无法停服务或者服务停止后又被拉起。需要根据其它正确节点的环境变量做修正。
V8版本
要确认如下的进程都消失了。具体的进程名字包括 gclusterd, gbased, corosync,gcrecover,gc_sync_server,gcmonit,gcmmonit等。在操作系统root下执行
ps -ef|grep corosync
ps -ef|grep gbase
V9.5.2版本
没有corosync,改成了gcware,在操作系统dbauser(一般是gbase)用户下执行。进程包括gclusterd, gbased, gcware, gcrecover, gc_sync_server,gcmonit,gcmmonit等。
ps -ef|grep gbase
启动服务
于停服务操作一样,参数为start。
如只需要重启部分服务,可以在操作系统gbase用户下,用gcluster_service [服务名] start。无需重启全部服务。
V8版本
root操作系统用户
service gcware start
V9.5.2版本
操作系统dbauser(一般是gbase)用户下
gcluster_services all start
V9.5.3多实例
操作系统dbauser(一般是gbase)用户下,多了一个gcware集群需要单独操作。
gcware_services all start
gcluster_services all start
整个集群重启方案
建议按照单台的操作顺序进行,全部停掉,检查,再全部启动。
- 停掉每个节点的服务
- 检查每个节点的服务是否正确停止了
- 启动每个节点的服务