KingbaseES 集群启停系列 01 -- sys_monitor.sh start启动动态库加载故障

案例说明:
生产环境,在KingbaseES V8R6集群部署了postgis后,执行‘sys_monitor.sh start’启动集群时,出现动态库加载错误,如下所示:

[kingbase@ecs-98no-0001 bin]$ ./sys_monitor.sh restart
awk: symbol lookup error: /home/kingbase/cluster/kingbase/lib/libreadline.so.7: undefined symbol: up

适用版本:
KingbaseES V8R6

操作系统:
Kylin V10 Server

问题解决思路:

  1. 手工启动集群节点数据库服务,判断集群管理及数据库服务是否正常。
  2. 执行'sh -x sys_monitor.sh start',检查集群启动过程,定位问题具体位置。
  3. 根据脚本定位位置后,具体分析对应的错误。
  4. 可以通过对比正常环境和异常环境的展现,进一步分析和定位问题。
  5. 根据具体的故障现象,采取对应的处理方案。

一、问题分析

1、手工启动主备节点数据库服务
通过手工执行sys_ctl启动主备节点数据库服务,数据库启动正常,集群状态正常。

2、分析sys_monitor.sh启动过程

集群通过sys_monitor.sh脚本直接启动集群管理及数据库服务,在通过sys_ctl分别启动主备节点数据库服务,集群启动正常,说明问题出现在sys_monitor.sh的脚本启动过程中。

执行'sh -x sys_monitor.sh start'查看脚本启动过程,如下所示,脚本启动过程中,出现awk加载动态库失败,导致集群启动退出:

.......
+ '[' 0x '!=' x ']'
+ '[' 0 -gt 0 ']'
+ Rocky_OS=0
++ dirname /etc/cron.d/KINGBASECRON
+ '[' '!' -d /etc/cron.d ']'
+ check_and_get_user
+ local file_name=sys_monitor.sh
+ file_name=sys_monitor.sh
+ local file_path=/home/kingbase/cluster/R6C8/HAC8/kingbase/bin/sys_monitor.sh
++ id -un
+ local current_user=kingbase
++ ls -l /home/kingbase/cluster/R6C8/HAC8/kingbase/bin/sys_monitor.sh
++ awk '{print $3}'
awk: symbol lookup error: /home/kingbase/cluster/kingbase/lib/libreadline.so.7: undefined symbol: up

+ local file_owner=kingbase
+ '[' kingbasex '!=' x ']'
......
+ exit 1

---如上所示,在启动脚本时,awk工具出现动态库加载错误。

3、查看系统awk的动态库加载

如下所示,系统正常的awk的动态库加载:

[kingbase@kysrv bin]$ ldd awk
        linux-vdso.so.1 (0x00007ffe83db5000)
        libsigsegv.so.2 => /usr/lib64/libsigsegv.so.2 (0x00007fc029019000)
        libreadline.so.7 => /usr/lib64/libreadline.so.7 (0x00007fc028fca000)
        libmpfr.so.4 => /usr/lib64/libmpfr.so.4 (0x00007fc028f65000)
        libgmp.so.10 => /usr/lib64/libgmp.so.10 (0x00007fc028ee6000)
        libdl.so.2 => /usr/lib64/libdl.so.2 (0x00007fc028ee1000)
        libm.so.6 => /usr/lib64/libm.so.6 (0x00007fc028d5e000)
        libc.so.6 => /usr/lib64/libc.so.6 (0x00007fc028ba4000)
        libtinfo.so.6 => /usr/lib64/libtinfo.so.6 (0x00007fc028b74000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fc0290ee000)

4、对比故障主机awk动态库加载(kingbase用户查看)

如下所示,和系统正常的awk动态库加载,libreadline.so.2加载了数据库软件所带的动态库文件,正常的动态库加载文件应该在/usr/lib64目录下。

[kingbase@ecs-98no-0001 bin]$ ldd awk
        linux-vdso.so.1 (0x00007ffe83db5000)
        libsigsegv.so.2 => /usr/lib64/libsigsegv.so.2 (0x00007fc029019000)
        libreadline.so.7 => /home/kingbase/cluster/kingbase/lib/libreadline.so.7 (0x0000fffe55fd0000)
        libmpfr.so.4 => /usr/lib64/libmpfr.so.4 (0x00007fc028f65000)
        libgmp.so.10 => /usr/lib64/libgmp.so.10 (0x00007fc028ee6000)
        libdl.so.2 => /usr/lib64/libdl.so.2 (0x00007fc028ee1000)
        libm.so.6 => /usr/lib64/libm.so.6 (0x00007fc028d5e000)
        libc.so.6 => /usr/lib64/libc.so.6 (0x00007fc028ba4000)
        libtinfo.so.6 => /usr/lib64/libtinfo.so.6 (0x00007fc028b74000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fc0290ee000)

5、检查系统kingbase用户LD_LIBRARY_PATH变量配置

如下所示,动态库文件加载路径,缺失'/usr/lib64'的路径,优先从数据库软件目录下访问库文件,导致awk调用了错误的动态库:

  [kingbase@ecs-98no-0001 bin]$ cat ~/.bashrc
  export LD_LIBRARY_PATH=/home/kingbase/cluster/kingbase/lib:/lib:/usr/lib:$LD_LIBRARY_PATH

二、问题解决

1、编辑kingbase用户LD_LIBRARY_PATH变量

export LD_LIBRARY_PATH=/usr/lib64:/home/kingbase/cluster/kingbase/lib:$LD_LIBRARY_PATH

Tips:
如果有LD_LIBRARY变量,需要在.bashrc或.bash_profile文件中将其注释。

2、应用变量配置
[kingbase@ecs-98no-0001 bin]$ source ~/.bashrc

3、重启集群
切换到kingbase用户后,重新执行sys_monitor.sh start启动集群,启动正常。

三、总结

对于集群或数据库启动,当出现动态库加载故障时,大多和用户 LD_LIBRARY_PATH变量的配置有关,在分析问题时,可以优先从 LD_LIBRARY_PATH配置来处理和解决问题。

posted @ 2023-09-18 16:14  KINGBASE研究院  阅读(176)  评论(0编辑  收藏  举报