KingbaseES V8R6集群运维案例之---crond定时任务启动kbha进程慢
案例说明:
某银行系统,kingbaseES V8R6集群在巡检时发现,kbha进程在通过crond定时任务启动时异常,服务启动时间达到了20秒之多。
适用版本:
KingbaseES V8R6
一、问题现象
如下图所示,查看系统,有多个kbha进程在启动:
二、问题分析
1、kbha进程功能
守护进程repmgrd主要是监控集群并保障处理集群中的故障,包括:故障转移、故障恢复、VIP管理等。高可用设计的前提是软件不是百分百可靠的,所以一旦repmgrd进程故障后,集群中数据库遇到故障便无法处理,集群高可用能力就失效了。
为了保护守护进程repmgrd,守护进程kbha通过repmgr_pid_file文件监控repmgrd进程状态,一旦发现repmgrd进程不存在,会尝试启动repmgrd进程,时间间隔为3秒左右。
而守护进程kbha则由操作系统的crond定时服务负责启动,定时任务会每分钟尝试启动一次kbha进程。
这两点分别保证了守护进程kbha和repmgrd的高可用。
2、kbha启动crond任务
[kingbase@node201 bin]$ cat /etc/cron.d/KINGBASECRON
*/1 * * * * kingbase . /etc/profile;/home/kingbase/cluster/R6/R6HA/kingbase/bin/kbha -A daemon -f /home/kingbase/cluster/R6/R6HA/kingbase/bin/../etc/repmgr.conf
3、集群kbha和repmrd进程
[kingbase@node201 bin]$ ps -ef |grep repmgr
kingbase 6587 1 0 10:33 ? 00:00:13 /home/kingbase/cluster/R6/R6HA/kingbase/bin/repmgrd -d -v -f /home/kingbase/cluster/R6/R6HA/kingbase/bin/../etc/repmgr.conf
kingbase 7195 1 0 10:33 ? 00:00:08 /home/kingbase/cluster/R6/R6HA/kingbase/bin/kbha -A daemon -f /home/kingbase/cluster/R6/R6HA/kingbase/bin/../etc/repmgr.conf
4、分析kbha启动过程
如下所示,kbha启动过程:
1)读取repmgr.conf参数,获取数据库data目录路径、网关地址等信息。
2)测试网关的连通性。
3)检测repmgrd进程,如果repmgrd进程down,则启动repmgrd进程。
如上所示,kbha的启动过程非常简单,正常启动应该在瞬间完成。
5、crond定时任务启动kbha
如下图所示,crond定时任务在启动前,会对/etc/profile配置的环境变量进行应用,如果应用过程异常,将导致kbha的启动受到影响。
三、问题解决
检查/etc/profile文件,发现变量配置,在应用过程中出现异常。问题原因如下:
1. 原因是我们定时任务,执行了个. /etc/profile , 里面有个hostnamectl --transient执行耗时20多秒,导致定时任务里2个kbha关联进程一直挂在那儿;
2. hostnamectl 是由于操作系统auditd进程把var目录写满了,把auditd关掉,把var目录日志清理了下就好了。
四、问题总结
此类问题分析,除了关注kbha自身的启动过程,还要注意到/etc/profile环境变量的应用效率。