1.问题已在6.0.2修复,后续版本未测试,大概率也ok;
2.使用云服务商虚拟机安装,不排除是虚拟机问题有点关系但不多;
3.没修复,只知道错误点,规避掉解决的,又不是不能用.jpg
早晨开开心心上班来,看到项目管理中openGauss从5.0.0升级到6.0.0的任务静静地躺在那里,仿佛对我说,你来呀,那么,就开干吧。
首先,得去下载安装包,打开openGauss官网下载页面一看,诶嘿,怎么回事,还有个6.0.1LTS,秉持着用新不用旧的理念,和leader果断沟通,反正是LTS,用啥不是用,都没开始,就601吧,获得许可后,开搞!
熟练的打开云平台,快速部署一台虚拟机,将601安装包替换进以前的脚本目录中,bash install.sh,bingo,那么,你跑着吧,我去接水咯。
回来一看,没毛病,看来还是一如既往的顺利呢,gauss酱,查个状态吧。
[root@sss003 gauss]# su - omm -c "gs_om -t status --detail" |
额,怎么回事,好像有点不太对,大早上的,这BUG是不是来的有点早?没辙,看看问题出在哪里吧。
熟悉的路径,熟悉的小日志,俺来了。轻门熟路,日志给俺痛头一击。
---------------Execute pre installation script----------------- |
介是嘛玩意,俺的ip明明是10.125.8.133,你为啥要去获取一个不熟悉的ipv6fe80::4417:bdb2:313c:5971捏,查下IP。
[root@sss003 gauss]# ip addr |
好吧,错怪你了,还真有这玩意,但是,人家有咋了,你干嘛报错呢?
看到提示说/opt/openGauss/script/local/LocalCheckOS.py在执行Check_Network_Bond_Mode检查项报错,那么开干吧。

熟悉的断点神,出动吧。翻开笔记本,开始背笔记。
python文件 |
好的,打开LocalCheckOS.py,811行狠狠地粘贴import pdb;pdb.set_trace(),那么,再来一次吧。
[root@sss003 ~]# python3 '/opt/openGauss/script/local/LocalCheckOS.py' -t Check_Network_Bond_Mode -X '/opt/openGauss/cluster_config.xml' -l '/var/log/vdi/gaussdb/omm/om/gs_local.log' |
嗯?不对劲,十分有十一分不对劲,你怎么传下来就是个IPV6呢?serviceIP是个啥东西,哪里来的?
from gspylib.common.Common import DefaultValue |
哦吼,搞错地方了,那么DefaultValue.getIpByHostName(),再来一次吧。
找到/opt/openGauss/script/gspylib/common/Common.py,
@staticmethod |
吔,怎么还是个staticmethod,这咋整,怎么执行嘞,还是问下万能的AI吧。
在文件末尾添加 if __name__ == "__main__": 块来直接调用 DefaultValue.getIpByHostName() 方法。 |
好的,说干就干,again and again。
[root@sss003 ~]# PYTHONPATH=/opt/openGauss/script/ python3 /opt/openGauss/script/gspylib/common/Common.py |
看到这里,再回头看看代码,释然了,感觉没啥毛病哇,不过是查了所有IP,遍历之后,把最后一个IP当做返回值传给了CheckNetWorkBonding,那么,他为啥要报错呢?
唉呀,好烦,回头再去找LocalCheckOS的麻烦。
[root@sss003 ~]# python3 '/opt/openGauss/script/local/LocalCheckOS.py' -t Check_Network_Bond_Mode -X '/opt/openGauss/cluster_config.xml' -l '/var/log/vdi/gaussdb/omm/om/gs_local.log' |
奥,这又到了NetUtil.getNICNum,继续,和Common.py一个待遇。
在 net_util.py 文件的末尾添加以下代码 |
再跑一下NetUtil
[root@sss003 ~]# PYTHONPATH=/opt/openGauss/script/ python3 /opt/openGauss/script/base_utils/os/net_util.py |
根据这个结果和NetUtil.getNICNum代码一对比
@staticmethod |
根据psutil.net_if_addrs()的结果取匹配传参进来的ip,获取网卡接口名称,但是psutil.net_if_addrs返回的结果中fe80::4417:bdb2:313c:5971是带着%ens7的,所以,无法匹配到,这个方法就报错了,而虚机带的这个ip,是模板虚机带出来的,没有实际意义,也无法去掉,那么,这个问题该怎么办呢?
诶,这个时候就可以再回到DefaultValue.getIpByHostName(),可以看到代码,在有几种特殊情况下,是直接使用了127.0.0.1的,那么,大胆一点,我们统统使用127.0.0.1就好了,又不是不能用.jpg

改完再跑一次,ok,问题解决。
[root@sss003 ~]# python3 '/opt/openGauss/script/local/LocalCheckOS.py' -t Check_Network_Bond_Mode -X '/opt/openGauss/cluster_config.xml' -l '/var/log/vdi/gaussdb/omm/om/gs_local.log' |
最后,为什么这个方法,在psutil.net_if_addrs()返回的结果中,fe80::4417:bdb2:313c:5971是带着%ens7的,这个无法考证,貌似是个内核方法,所以没办法从这边入手,最后也不知道getIpByHostName这个方法为什么要循环遍历,然后把最后一个IP当做返回值,不过看到602已经不是这部分代码了,彻底重写了,改从/etc/hosts里面做筛选了。