KingbaseES V8R6集群部署案例之---openEuler系统脚本部署故障

发布时间 2023-09-18 16:19:06作者: KINGBASE研究院

案例说明:
在openEuler系统下通过脚本方式部署KingbaseES V8R6集群,脚本执行过程中,加载vip失败。本次故障问题,主要是因为openEuler系统shell和脚本的不兼容引起。

适用版本:
KingbaseES V8R6

系统环境:
openEuler-22.03-LTS

一、问题现象
通过脚本方式部署KingbaseES V8R6集群,脚本执行过程,提示“ vip无法加载”。

二、问题分析

1、查看install.conf配置(vip相关配置)

[kingbase@node101 ~]$ cat install.conf |grep -v ^#|grep -v ^$
[install]
on_bmj=0
all_ip=(172.31.*.27 172.31.*.28 172.31.*.29)
.....
virtual_ip="172.31.*.121/24"
net_device=(ens33 ens33 ens33)
net_device_ip=(172.31.*.27 172.31.*.28 172.31.*.29)
ipaddr_path="/usr/sbin"
arping_path="/home/kingbase/cluster/kingbase/bin"
ping_path="/usr/bin"
.......

如上所示,和vip相关的配置正确。

2、查看故障日志
如下图所示,在测试vip地址是否已被占用(ping)测试,返回的变量值为空。

3、分析部署脚本'vip Cannot use'的原因
如下图所示,脚本通过ping vip和当前主机是否已经加载vip来判断vip地址是否被占用,当ping返回的结果非0,而且vip已经被加载,将提示 ’vip Cannot use‘错误。

4、执行ping测试

1)CentOS系统测试
如下图所示,对ip地址执行ping测试,可ping通地址返回结果非0,没有被使用的ip,无法ping通返回0。

2)openEuler系统测试

如下图所示,在openEuler测试,ping不通的ip返回空值。

如下图所示,系统执行ping测试后返回的提示为中文,而脚本是通过英文‘received’过滤,因此返回空值。

经过多次测试,需要将语句改为如下:(返回0)

三、问题解决
1、修改部署脚本判断vip是否被占用ping语句,如下图所示:

2、执行部署脚本,部署成功。

四、问题总结
此次部署问题,是由openEuler系统shell和脚本部分语句部兼容引起:

1、系统提示,显示为中文,脚本语句通过英文单词执行过滤,过滤失败。
2、grep中‘-w’参数,中文支持问题。-w,按照单词过滤,在系统提示‘已接收’,用-w ‘接收’无法过滤。
3、 2>/dev/null,对于语句执行错误的提示写入到/dev/null,对于CentOS系统,能返回ping结果,但是openEuler将不再返回ping结果。

在一些比较特殊的操作系统,通过脚本部署时,要注意shell的兼容性。