南大通用GBase 8a数据库正常重启服务的注意事项

本文介绍在GBase 8a数据库服务需要重启时,要注意的事项整理。本文所指的重启,指有安排的正常重启,不包括断电,死机,宕机等意外重启。

重启原因

一般由于如下原因,需要重启全部或者部分节点的数据库服务。

整体重启

  • 常规维护,比如每年计划重启一次,重置下系统
  • 修改部分数据库参数后,需要重启使之生效
  • 升级版本
  • 扩容调度节点(coordinator)

局部重启

  • 数据库状态异常,比如内存占用高
  • 操作系统服务异常,比如磁盘mount 错了
  • 操作系统异常,比如ssh时断时续,出现僵尸进程,一般需要reboot
  • 调试数据库

重启影响

数据库服务重启,可能造成的影响包括:

停止影响

  • 无法连接该IP的服务;
  • 该IP正在运行的SQL报错或消失,应用报错;
  • 其它IP的SQL,需要使用该IP时无法连接而报错;
  • 服务停止后,数据【可能】会出现主副本不一致,并被记录event标记;
  • 该IP的数据库内部定时任务会失效,针对local类型的。

启动影响

服务启动后,可能出现的影响包括

重启前建议

从减少重启影响角度考虑,如果是部分节点停服务,时间预计较短,或者短期报错可接受,则可以不停外部服务,否则建议如下:

停掉加载等入库业务

避免数据库停止期间,加载报错和出现主副本不一致。

停掉定时任务

主要时定时汇总,定时清理的任务,包括用户级(自行应用层调度)、操作系统级(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

整个集群重启方案

建议按照单台的操作顺序进行,全部停掉,检查,再全部启动。

  • 停掉每个节点的服务
  • 检查每个节点的服务是否正确停止了
  • 启动每个节点的服务