暂无图片
暂无图片
6
暂无图片
暂无图片
暂无图片

「YashanDB个人版体验」更换IP地址后,解决yasboot无法启动崖山的问题

原创 克林巴 2023-12-01
682

问题场景

最近搭建了一套国产YashanDB数据库,但是因为一些设置问题主机的IP变了,从192.168.23.171变成了192.168.23.172,发现不能正常使用崖山的管理工具yasboot了。下面是无法启动yasboot的报错信息。

[yashan@localhost ~]$ yasboot process yasom start -c yashandb start yasom failed, no success info in the start log after 7 second, please check yasom.log [yashan@localhost ~]$ yasboot process yasagent start -c yashandb start yasagent failed, no success info in the start log after 7 second, please check yasagent.log

咨询了崖山的技术群,得到的反馈是目前yasboot不支持更换主机IP。但是站在运维的角度,一个IP地址不应该就是一个配置文件的内容而已嘛,这哪能难的我一个长期做运维的,于是就自己动手找找看哪里有旧IP的配置,直接改过来不就行了,说干咱就干。

解决过程记录:

一、先使用grep -r检查一下旧IP在哪些地方有记录。

[yashan@localhost ~]$ grep -r 192.168.23.171 * |grep -v log install/hosts.toml: LISTEN_ADDR = "192.168.23.171:1675" install/hosts.toml: ip = "192.168.23.171" install/hosts.toml: LISTEN_ADDR = "192.168.23.171:1676" install/yashandb.toml: LISTEN_ADDR = "192.168.23.171:1688" install/yashandb.toml: REPLICATION_ADDR = "192.168.23.171:1689" yasdb_data/db-1-1/config/yasdb.ini:LISTEN_ADDR=192.168.23.171:1688 yasdb_data/db-1-1/config/yasdb.ini:REPLICATION_ADDR=192.168.23.171:1689 yasdb_home/yashandb/23.1.1.100/om/yashandb/conf/yasagent.toml:ListenAddr = "192.168.23.171:1676" yasdb_home/yashandb/23.1.1.100/om/yashandb/conf/yasom.toml:listen_addr = "192.168.23.171:1675" Binary file yasdb_home/yashandb/23.1.1.100/om/yashandb/data/cod_domor.db matches

数了一下,也就6个文件,其中5个配置文件,这5个文件修改不难,还有一个.db文件,这个不知道是什么文件。使用file命令看能不能看出什么,结果发现是一个sqlite的数据库文件,那就简单了。

[yashan@localhost ~]$ file /home/yashan/yasdb_home/yashandb/23.1.1.100/om/yashandb/data/cod_domor.db /home/yashan/yasdb_home/yashandb/23.1.1.100/om/yashandb/data/cod_domor.db: SQLite 3.x database

二、使用sed修改5个配置文件里面的IP更换为新的IP

[yashan@localhost ~]$ sed -i 's/192.168.23.171/192.168.23.172/g' install/hosts.toml [yashan@localhost ~]$ sed -i 's/192.168.23.171/192.168.23.172/g' install/yashandb.toml [yashan@localhost ~]$ sed -i 's/192.168.23.171/192.168.23.172/g' yasdb_data/db-1-1/config/yasdb.ini [yashan@localhost ~]$ sed -i 's/192.168.23.171/192.168.23.172/g' yasdb_home/yashandb/23.1.1.100/om/yashandb/conf/yasagent.toml [yashan@localhost ~]$ sed -i 's/192.168.23.171/192.168.23.172/g' yasdb_home/yashandb/23.1.1.100/om/yashandb/conf/yasom.toml [yashan@localhost ~]$ grep -r 192.168.23.171 * |grep -v log Binary file yasdb_home/yashandb/23.1.1.100/om/yashandb/data/cod_domor.db matches

三、修改cod_domor.db数据库文件

更换完就剩下一个sqlite3的数据库文件了,这个也难不倒我,我把数据库dump出来,看看哪些表数据里面有旧IP,我update表一下就行了。

[yashan@localhost ~]$ sqlite3 yasdb_home/yashandb/23.1.1.100/om/yashandb/data/cod_domor.db .dump > boot.sql

通过grep数据库dump出来的sql文件查看哪些表含有旧IP:192.168.23.171的信息

[yashan@localhost ~]$ grep 192.168.23.171 boot.sql INSERT INTO "kv_config" VALUES('om_addr','192.168.23.171:1675',3,'2023-12-01 16:27:11.495696299+08:00','2023-12-01 16:27:11.495696299+08:00',NULL); INSERT INTO "task" VALUES ...... INSERT INTO "host" VALUES('host0001','192.168.23.171','',0,'','','','','0001-01-01 00:00:00+00:00',0,'yashan','yashan','/home/yashan/yasdb_home/yashandb/23.1.1.100','192.168.23.171:1676','',0,1,0,0,'',1,'2023-12-01 16:27:11.490975559+08:00','2023-12-01 16:27:11.490975559+08:00',NULL); INSERT INTO "yasdb_config" VALUES('yashandb','dbg1','1-1','LISTEN_ADDR','192.168.23.171:1688',8,'2023-12-01 16:27:21.587263872+08:00','2023-12-01 16:27:21.587263872+08:00',NULL); INSERT INTO "yasdb_config" VALUES('yashandb','dbg1','1-1','REPLICATION_ADDR','192.168.23.171:1689',9,'2023-12-01 16:27:21.587263872+08:00','2023-12-01 16:27:21.587263872+08:00',NULL);

看起来涉及kv_config、task、host、yasdb_config这4张表
记得用.header on把列名也显示出来。先调表yasdb_config,发现字段value含192.168.23.171

[yashan@localhost ~]$ sqlite3 yasdb_home/yashandb/23.1.1.100/om/yashandb/data/cod_domor.db SQLite version 3.7.17 2013-05-20 00:56:22 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> .header on sqlite> select * from yasdb_config; cluster|group_name|node_name|key|value|id|created_at|updated_at|deleted_at ... ... yashandb|dbg1|1-1|LISTEN_ADDR|192.168.23.171:1688|8|2023-12-01 16:27:21.587263872+08:00|2023-12-01 16:27:21.587263872+08:00| yashandb|dbg1|1-1|REPLICATION_ADDR|192.168.23.171:1689|9|2023-12-01 16:27:21.587263872+08:00|2023-12-01 16:27:21.587263872+08:00|

执行更新语句把数据更新了。

sqlite> update yasdb_config set value='192.168.23.172:1688' where key='LISTEN_ADDR'; sqlite> update yasdb_config set value='192.168.23.172:1689' where key='REPLICATION_ADDR';

同样的方法检查表kv_config、task、host。task里面旧IP记录在一个json串里面,调整比较麻烦一些,看起来像是部署记录,不应该影响起库,先不调整吧。
调整host表

update host set manage_ip='192.168.23.172',listen_addr='192.168.23.172:1676' where hostid='host0001';

调整kv_config 表

update kv_config set value='192.168.23.172:1675' where key='om_addr';

然后再导出一次sqlite数据库,看看是否调整完成,看起来只剩下task表的内容了。这个先不管。

[yashan@localhost ~]$ sqlite3 yasdb_home/yashandb/23.1.1.100/om/yashandb/data/cod_domor.db .dump > boot2.sql [yashan@localhost ~]$ grep 192.168.23.171 boot2.sql

调整完成后yasboot自己的2个进程已经可以正常启动

[yashan@localhost ~]$ yasboot process yasom start -c yashandb start yasom successfully [yashan@localhost ~]$ yasboot process yasagent start -c yashandb start local agent successfully!

五、修改隐藏文件yashandb.env

但是启动yasom后发现问题,启动的yasom进程还是带有旧IP192.168.23.171的信息,这就很奇怪了。

[yashan@localhost ~]$ ps -ef|grep yashan yashan 10163 1 0 18:36 ? 00:00:00 /home/yashan/yasdb_home/yashandb/23.1.1.100/bin/yasom -c yashandb -l 192.168.23.171:1675 -d yashan 10201 1 0 18:36 ? 00:00:00 /home/yashan/yasdb_home/yashandb/23.1.1.100/bin/yasagent -c yashandb -l 192.168.23.172:1676 -d

有点怀疑是grep并没有获取全部的含旧IP192.168.23.171的文件,有一种可能是.开头的隐藏文件。于是grep -r没有带路径,果然有一个yashandb.env文件里面有旧IP的信息。

[yashan@localhost ~]$ grep -r "192.168.23.171" |grep -v log .yasboot/yashandb.env:om_addr="192.168.23.171:1675" .bash_history:./bin/yasboot package se gen --cluster yashandb -u yashan -p yashan --ip 192.168.23.171 --port 22 --install-path /home/yashan/yasdb_home --data-path /home/yashan/yasdb_data --begin-port 1688

于是将这个文件也改正过来。再重启yasom进程

[yashan@localhost ~]$ sed -i 's/192.168.23.171/192.168.23.172/g' .yasboot/yashandb.env [yashan@localhost ~]$ yasboot process yasom start -c yashandb start yasom successfully [yashan@localhost ~]$ ps -ef|grep yashan yashan 10201 1 0 18:36 ? 00:00:00 /home/yashan/yasdb_home/yashandb/23.1.1.100/bin/yasagent -c yashandb -l 192.168.23.172:1676 -d yashan 10570 1 2 18:42 ? 00:00:00 /home/yashan/yasdb_home/yashandb/23.1.1.100/bin/yasom -c yashandb -l 192.168.23.172:1675 -d

六、完美解决

最后启动数据库,完美的启动了。

[yashan@localhost ~]$ yasboot cluster start -c yashandb type | uuid | name | hostid | index | status | return_code | progress | cost ----------------------------------------------------------------------------------------------------------- task | 8235d15a8ade00f6 | StartYasdbCluster | - | yashandb | SUCCESS | 0 | 100 | 3 ------+------------------+-------------------+--------+----------+---------+-------------+----------+------ task completed, status: SUCCESS

问题结果:

经过自己一番动手,解决了崖山更换IP的启动问题,希望对有类似场景需求的朋友可以有所帮助。

个人感受:

看了yasboot这个管理工具的官方手册,他功能项非常的多,需要投入一定的时间去学习和掌握。

最后修改时间:2023-12-01 22:20:37
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论