GBase 8a 节点替换
admin
2024-02-29 22:52:21

节点替换 包括替换gcware、替换gcluster、替换gnode  ,新节点可以是freenode节点(替换后节点IP改变),也可以是全新未安装过gbase的节点(替换后节点IP不变),本次内容是使用全新节点替换gnode,其他情况 以后有时间再补充

原始集群   192.168.61.1   【8a-1】 (gcware + gcluster + gnode)

                  192.168.61.2  【8a-2】 (gnode)  待替换节点

新节点       192.168.61.3  【8a-3】

目录

原始状态

设置被替换节点状态为 unavailable

删除被替换节点的 feventlog

生成新的distribution

将被替换的集群节点(原 192.168.61.2)机器网线拔出(或者直接关机),并将待替换的新机器(192.168.61.3)IP改为192.168.61.2

执行节点替换

再次数据重分布,将数据分布到新节点

删除旧的分布方案

问题记录


原始状态

[gbase@8a-1 gcinstall]$ gcadmin
CLUSTER STATE:         ACTIVE====================================
| GBASE GCWARE CLUSTER INFORMATION |
====================================
| NodeName |  IpAddress   | gcware |
------------------------------------
| gcware1  | 192.168.61.1 |  OPEN  |
------------------------------------
======================================================
|       GBASE COORDINATOR CLUSTER INFORMATION        |
======================================================
|   NodeName   |  IpAddress   | gcluster | DataState |
------------------------------------------------------
| coordinator1 | 192.168.61.1 |   OPEN   |     0     |
------------------------------------------------------
=============================================================
|         GBASE CLUSTER FREE DATA NODE INFORMATION          |
=============================================================
| NodeName  |  IpAddress   | gnode | syncserver | DataState |
-------------------------------------------------------------
| FreeNode1 | 192.168.61.2 | OPEN  |    OPEN    |     0     |
-------------------------------------------------------------
| FreeNode2 | 192.168.61.1 | OPEN  |    OPEN    |     0     |
-------------------------------------------------------------0 virtual cluster
1 coordinator node
2 free data node

设置被替换节点状态为 unavailable

当节点状态置为unavaliable时  该节点不再接收gcluster下发的SQL

[gbase@8a-1 gcinstall]$ gcadmin setnodestate 192.168.61.2 unavailable
[gbase@8a-1 gcinstall]$ gcadmin
CLUSTER STATE:         ACTIVE
VIRTUAL CLUSTER MODE:  NORMAL====================================
| GBASE GCWARE CLUSTER INFORMATION |
====================================
| NodeName |  IpAddress   | gcware |
------------------------------------
| gcware1  | 192.168.61.1 |  OPEN  |
------------------------------------
======================================================
|       GBASE COORDINATOR CLUSTER INFORMATION        |
======================================================
|   NodeName   |  IpAddress   | gcluster | DataState |
------------------------------------------------------
| coordinator1 | 192.168.61.1 |   OPEN   |     0     |
------------------------------------------------------
===============================================================================================================
|                                       GBASE DATA CLUSTER INFORMATION                                        |
===============================================================================================================
| NodeName |                IpAddress                 | DistributionId |    gnode    | syncserver | DataState |
---------------------------------------------------------------------------------------------------------------
|  node1   |               192.168.61.2               |       1        | UNAVAILABLE |            |           |
---------------------------------------------------------------------------------------------------------------
|  node2   |               192.168.61.1               |       1        |    OPEN     |    OPEN    |     0     |
---------------------------------------------------------------------------------------------------------------

删除被替换节点的 feventlog

当集群各节点状态不一致时会生成feventlog,这个feventlog也是判断集群各节点是否一致的标准,当我们将节点状态置为unavailable时  这个节点已经与其他节点不一致了,需要手工删除feventlog,虽然再后面替换节点repalce.py这个里面也会删除feventlog, 但是我们选择先手工删除,这样在节点替换过程中 再次删除feventlog的时候会很快,可以保证在节点替换过程中 不会因为feventlog太大 而耗费时间过长,只要feventlog一致,那么集群就可以正常运转,同时也保证了替换节点过程中,瞬间删除feventlog ,集群可以正常工作,同时 在节点替换过程中,如果没有先将feventlog删除的话,那么节点替换过程中也会自动删除,只不过这个时间可能会很长,但是在这个时间段,下发过来的sql不会拒收,而是将SQL置为等待状态,等节点替换完继续执行SQL,这个特性也说明了节点替换过程中,业务不受影响

[gbase@8a-1 gcinstall]$ gcadmin rmfeventlog 192.168.61.2

生成新的distribution

由于192.168.61.2将被替换,所以要将192.168.61.2上面的数据先转移,转移的方法就是先生成新的分布方案,再按照新的分布方案进行数据重分布。比如原集群的分布方案是192.168.61.1和192.168.61.2两个节点,192.168.61.2将被替换,那么新的分布方案就不能包含192.168.61.2了

原始集群的分布方案(Distribution ID = 1)

[gbase@8a-1 gcinstall]$ gcadmin showdistribution nodeDistribution ID: 1 | State: new | Total segment num: 2============================================================================================
|  nodes   |             192.168.61.2              |             192.168.61.1              |
--------------------------------------------------------------------------------------------
| primary  |                  1                    |                  2                    |
| segments |                                       |                                       |
--------------------------------------------------------------------------------------------
|duplicate |                  2                    |                  1                    |
|segments 1|                                       |                                       |
============================================================================================

复制原始的分布方案

[gbase@8a-1 gcinstall]$ gcadmin getdistribution 1 distribution_info_1.xml
[gbase@8a-1 gcinstall]$ cat distribution_info_1.xml 


 修改新的分布方案

[gbase@8a-1 gcinstall]$ vi distribution_info_1.xml



   
       
           
                         如果被替换节点是主分片,那么将ip由被替换的节点改为改为该分片上的备份分片的IP,当前分片的备份分片为192.168.61.1,所以主分片这里改为 192.168.61.1

                                                   因为上面主分片已经改为192.168.61.1,这里的备份分片可以直接删掉
                   
               

           

           
               

               
                       如果被替换节点是备份分片,那么这几行直接删除
               

           
       
   

[gbase@8a-1 gcinstall]$ vi gcChangeInfo_dis1.xml




生成新的分布方案

[gbase@8a-1 gcinstall]$ gcadmin distribution gcChangeInfo_dis1.xml

查看新的分布方案

此时多了distribution ID = 2 ,这个分布方案里面不包含被替换节点

[gbase@8a-1 gcinstall]$ gcadmin showdistribution nodeDistribution ID: 2 | State: new | Total segment num: 2====================================================
|  nodes   |             192.168.61.1              |
----------------------------------------------------
| primary  |                  1                    |
| segments |                  2                    |
====================================================Distribution ID: 1 | State: old | Total segment num: 2============================================================================================
|  nodes   |             192.168.61.2              |             192.168.61.1              |
--------------------------------------------------------------------------------------------
| primary  |                  1                    |                  2                    |
| segments |                                       |                                       |
--------------------------------------------------------------------------------------------
|duplicate |                  2                    |                  1                    |
|segments 1|                                       |                                       |
============================================================================================

使用Distribution = 2 ,将数据重新分布但不给被替换节点分配数据

没有重分布时 数据的分布情况如下(数据全部使用data_distribution_id = 1)

gbase> select index_name,tbname,data_distribution_id,vc_id from gbase.table_distribution;
+-------------------------------+--------------------+----------------------+---------+
| index_name                    | tbname             | data_distribution_id | vc_id   |
+-------------------------------+--------------------+----------------------+---------+
| gclusterdb.rebalancing_status | rebalancing_status |                    1 | vc00001 |
| gclusterdb.dual               | dual               |                    1 | vc00001 |
| testdb.t1                     | t1                 |                    1 | vc00001 |
+-------------------------------+--------------------+----------------------+---------+
3 rows in set (Elapsed: 00:00:00.00)

重分布后 数据的分布情况如下(数据改为使用 data_distribution_id = 2)

gbase> initnodedatamap;
Query OK, 0 rows affected, 3 warnings (Elapsed: 00:00:00.11)gbase> rebalance instance to 2;    这里 to 2 表示使用Distribution = 2 的分布方案
Query OK, 1 row affected (Elapsed: 00:00:00.03)gbase> select index_name,status,percentage,priority,host,distribution_id from gclusterdb.rebalancing_status;
+------------+-----------+------------+----------+--------------+-----------------+
| index_name | status    | percentage | priority | host         | distribution_id |
+------------+-----------+------------+----------+--------------+-----------------+
| testdb.t1  | COMPLETED |        100 |        5 | 192.168.61.1 |               2 |
+------------+-----------+------------+----------+--------------+-----------------+
1 row in set (Elapsed: 00:00:00.01)

将被替换的集群节点(原 192.168.61.2)机器网线拔出(或者直接关机),并将待替换的新机器(192.168.61.3)IP改为192.168.61.2

[root@8a-3 ~]# ip a
2: ens33:  mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:c6:d3:8e brd ff:ff:ff:ff:ff:ffinet 192.168.61.2/24 brd 192.168.61.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet6 fe80::61d5:26ac:7834:3674/64 scope link noprefixroute 
[root@8a-3 ~]# cd /opt/gbase/
[root@8a-3 gbase]# ll  #新节点原始状态 当前目录为空
total 0
[root@8a-3 gbase]# ll  #replace.py 完成之后 再次查看这个目录 发现已经安装了gbase
total 0
drwxrwxr-x 2 gbase gbase 6 Nov 28 23:58 192.168.61.2

自己在虚拟机测试时,这一步非常重要,如果忘记这步,那么替换前后集群是没有变化的,只有先将旧节点关机,新节点开机 才可以达到正常替换的效果,不然替换完了,结果一看 新节点192.168.61.3上什么都没有

执行节点替换

[gbase@8a-1 gcinstall]$ ./replace.py --host=192.168.61.2 --type=data --dbaUser=gbase --dbaUserPwd=gbase --generalDBUser=gbase --generalDBPwd=gbase20110531 --overwrite  这里的host表示被替换节点的IP

再次检查分布情况(替换后的分布方案 Distribution = 3)

[gbase@8a-1 gcinstall]$ gcadmin showdistributionDistribution ID: 3 | State: new | Total segment num: 2Primary Segment Node IP                   Segment ID                 Duplicate Segment node IP
========================================================================================================================
|                  192.168.61.2                  |         1          |                  192.168.61.1                  |
------------------------------------------------------------------------------------------------------------------------
|                  192.168.61.1                  |         2          |                  192.168.61.2                  |
========================================================================================================================Distribution ID: 2 | State: old | Total segment num: 2Primary Segment Node IP                   Segment ID                 Duplicate Segment node IP
========================================================================================================================
|                  192.168.61.1                  |         1          |                                                |
------------------------------------------------------------------------------------------------------------------------
|                  192.168.61.1                  |         2          |                                                |
========================================================================================================================

再次数据重分布,将数据分布到新节点

[gbase@8a-1 gcinstall]$ gccli -uroot -p
Enter password: GBase client 9.5.3.27.14_patch.1b41b5c1. Copyright (c) 2004-2022, GBase.  All Rights Reserved.gbase> rebalance instance to 3;
Query OK, 1 row affected (Elapsed: 00:00:00.02)gbase> select * from gclusterdb.rebalancing_status;
+------------+---------+------------+----------+----------------------------+----------+---------+------------+----------+--------------+-----------------+
| index_name | db_name | table_name | tmptable | start_time                 | end_time | status  | percentage | priority | host         | distribution_id |
+------------+---------+------------+----------+----------------------------+----------+---------+------------+----------+--------------+-----------------+
| test.t     | test    | t          |          | 2022-11-29 00:08:30.294000 | NULL     | RUNNING |          0 |        5 | 192.168.61.1 |               3 |
+------------+---------+------------+----------+----------------------------+----------+---------+------------+----------+--------------+-----------------+
1 row in set (Elapsed: 00:00:00.00)

删除旧的分布方案

[gbase@8a-1 gcinstall]$ gcadmin rmdistribution 2

问题记录

删除旧的分布方案时无法删除,提示还在使用

[gbase@8a-1 gcinstall]$ gcadmin rmdistribution 2
cluster distribution ID [2]
it will be removed now
please ensure this is ok, input [Y,y] or [N,n]: y
select count(*) from gbase.nodedatamap where data_distribution_id=2 result is not 0
refreshnodedatamap drop 2 failed, gcluster command error: Can not drop nodedatamap 2. Some table are using it.
gcadmin remove distribution: check whether distribution [2] is using failed
gcadmin remove distribution [2] failedgbase> select index_name,tbname,data_distribution_id,vc_id from gbase.table_distribution;
+-------------------------------+--------------------+----------------------+---------+
| index_name                    | tbname             | data_distribution_id | vc_id   |
+-------------------------------+--------------------+----------------------+---------+
| gclusterdb.rebalancing_status | rebalancing_status |                    3 | vc00001 |
| test.t                        | t                  |                    2 | vc00001 |
| gclusterdb.dual               | dual               |                    3 | vc00001 |
+-------------------------------+--------------------+----------------------+---------+
3 rows in set (Elapsed: 00:00:00.00)gbase> rebalance table test.t to 3;
ERROR 1707 (HY000): gcluster command error: target table has been rebalancing.

查看重分布状态 发现重分布一直处于running状态

gbase> select index_name,status,percentage,priority,host,distribution_id from gclusterdb.rebalancing_status;
+------------+---------+------------+----------+--------------+-----------------+
| index_name | status  | percentage | priority | host         | distribution_id |
+------------+---------+------------+----------+--------------+-----------------+
| test.t     | RUNNING |          0 |        1 | 192.168.61.1 |               3 |
+------------+---------+------------+----------+--------------+-----------------+

判断是不是锁住了,查看锁信息,果然被锁了

[gbase@8a-1 gcinstall]$ gcadmin showlock+=====================================================================================+|                                    GCLUSTER LOCK                                    |+=====================================================================================++-----------------------------+------------+---------------+--------------+------+----+|          Lock name          |   owner    |    content    | create time  |locked|type|+-----------------------------+------------+---------------+--------------+------+----+|        gc-event-lock        |192.168.61.1| global master |20221129002719| TRUE | E  |+-----------------------------+------------+---------------+--------------+------+----+|    vc00001.hashmap_lock     |192.168.61.1|3388(LWP:41885)|20221129004555| TRUE | S  |+-----------------------------+------------+---------------+--------------+------+----+|    vc00001.test.db_lock     |192.168.61.1|3388(LWP:41885)|20221129004555| TRUE | S  |+-----------------------------+------------+---------------+--------------+------+----+|  vc00001.test.t.meta_lock   |192.168.61.1|3388(LWP:41885)|20221129004555| TRUE | S  |+-----------------------------+------------+---------------+--------------+------+----+|vc00001.test.t.rebalance_lock|192.168.61.1|3388(LWP:41885)|20221129004555| TRUE | E  |+-----------------------------+------------+---------------+--------------+------+----+|vc00001.test.table_space_lock|192.168.61.1|3388(LWP:41885)|20221129004555| TRUE | S  |+-----------------------------+------------+---------------+--------------+------+----+Total : 6

找出当前被锁住的进程ID为3388

gbase> show processlist;
+------+-----------------+--------------------+------+---------+------+-----------------------------+-------------------------------------------------------------------+
| Id   | User            | Host               | db   | Command | Time | State                       | Info                                                              |
+------+-----------------+--------------------+------+---------+------+-----------------------------+-------------------------------------------------------------------+
|    1 | event_scheduler | localhost          | NULL | Daemon  | 1780 | Waiting for next activation | NULL                                                              |
| 3388 | gbase           | 192.168.61.1:36000 | NULL | Query   |  667 | Move table's slice          | REBALANCE /*+ synchronous,vcid */ TABLE "vc00001"."test"."t" TO 3 |
| 3391 | root            | localhost          | NULL | Query   |    0 | NULL                        | show processlist                                                  |
+------+-----------------+--------------------+------+---------+------+-----------------------------+-------------------------------------------------------------------+
3 rows in set (Elapsed: 00:00:00.00)

查看被锁进程的锁状态

[gbase@8a-1 gcinstall]$ gcadmin showlock | grep 3388|    vc00001.hashmap_lock     |192.168.61.1|3388(LWP:41885)|20221129004555| TRUE | S  ||    vc00001.test.db_lock     |192.168.61.1|3388(LWP:41885)|20221129004555| TRUE | S  ||  vc00001.test.t.meta_lock   |192.168.61.1|3388(LWP:41885)|20221129004555| TRUE | S  ||vc00001.test.t.rebalance_lock|192.168.61.1|3388(LWP:41885)|20221129004555| TRUE | E  ||vc00001.test.table_space_lock|192.168.61.1|3388(LWP:41885)|20221129004555| TRUE | S  |

 后面就是排查哪个进程持有了锁没有释放,然后杀掉就好

有时需要先删除datamap 

refreshnodedatamap drop 2

GBase 8a扩容完成后refreshnodedatamap drop报错:Can not drop nodedatamap ,Some table are using it. – 老紫竹的家

相关内容

热门资讯

吴京,咋又火了? 最近,只要拥有手机的人大概会产生同一个疑惑:吴京,咋又火了啊? 这位中国队长、最骁勇善战的狼、绿色痛...
最新披露!两大赛道火爆,这些股... 医药生物和计算机两大行业个股扎堆毛利率榜。食品饮料行业毛利率居首据证券时报·数据宝统计,剔除金融行业...
志存集团不服一审判决上诉,五矿... 本报(chinatimes.net.cn)记者胡雅文 北京报道五矿新能(688779.SH)近日公告...
AI周报 | 寒武纪成A股“股... 寒武纪成为A股“股王”8月27日,寒武纪股价盘中涨10.01%,股价1462元/股,超过贵州茅台,成...
让好内容有确定性,快手给出了答... 定焦One(dingjiaoone)原创作者 | 张星星编辑 | 方展博8月末的成都,一场大雨将连续...
莲花全球整合战略进行时:上半年... 当地时间8月29日,路特斯科技(LOT.US)披露了2025年半年度成绩单。今年上半年,路特斯科技共...
物业巨头扭亏为盈,雅生活率先复... 最近几年,房地产市场的压力可谓是有目共睹,似乎所有的房地产企业日子都不好过,然而就在最近知名物业巨头...
原创 暴... 暴增660%,对美稀土出口怎么越来越多了?中国稀土管制失灵了吗? 暴增660%,对美稀土出口怎么越来...
6名90后,非法荐股被罚! 近日,北京证监局发布了对6名90后的行政处罚决定书。 据悉,6名90后在未取得证券投资咨询业务资质的...
龙芯、汉芯傻傻分不清 龙芯和华... 在中国的芯片史上,汉芯必然有一席之地,只不过是一个耻辱。2003年上海交大微电子学院院长陈进发布了汉...
光峰科技:上半年营收9.61亿... 8月29日晚间,光峰科技(688007.SH)发布2025年半年报显示,上半年公司实现营业收入9.6...
金标联盟携手多家巨头,正式成立... 近日,中国通信工业协会迎来了一位新成员——金标联盟,该联盟携手多家知名企业共同宣布成立了“移动智能终...
李宁赌上三把牌 李宁赌上三把牌... 出品|虎嗅商业消费组作者|柳柳编辑|苗正卿题图|AI生成李宁再次站在十字路口。这家曾凭借“国潮”浪潮...
为什么越用软件“管理”员工,效... 本文来自微信公众号:疯了快跑,作者:侯丹,题图来自:AI生成前段时间,在国内某办公软件大厂的年度发布...
每周股票复盘:传音控股(688... 截至2025年8月29日收盘,传音控股(688036)报收于90.01元,较上周的83.84元上涨7...
每周股票复盘:兆易创新(603... 截至2025年8月29日收盘,兆易创新(603986)报收于158.98元,较上周的150.88元上...
双榜攀升!龙佰集团荣获“中国民... 大象新闻记者 孟湛 2025年8月28日,全国工商联在辽宁沈阳发布“2025中国民营企业500强”...
一边发债补流,一边闲钱“生蛋”... 深圳商报·读创客户端记者 梁佳彤 8月29日晚间,通合科技(300491)披露向不特定对象发行可转换...
小红书线下市集热捧:创意服饰与... 在上海申城的一个炎炎夏日午后,黄浦区局门路上的海军制造飞机处旧址变得异常热闹。尽管户外温度高达36℃...
注册用户数突破2亿大关,霸王茶... 华声在线8月30日讯(通讯员 李萌 记者 王一辰 )8月29日晚间,霸王茶姬(NASDAQ: CHA...
6个月收租55亿,龙湖计划今年... 来源:21世纪经济报道 记者/ 李惠琳 编辑/ 陈晓平 楼市止跌回稳,龙湖也交出成绩单。 8月29...
专注大型高端装备专用部件领域 ... 8月29日晚间,江苏锡华新能源科技股份有限公司(以下简称“锡华科技”或“公司”)发布沪市主板首次公开...
原创 为... 本季度财报公布之后,阿里美股盘前起初乃是波澜不惊,仅从总营收,经营利润等基础指标来看,此次财报多在市...
财经观察丨创业板月涨超24%!... 8月最后一个交易日,A股三大股指开盘涨跌互现。早盘指数分化,沪指冲高回落,深成指震荡走强。午后两市维...
寒武纪“称王”、开普云涨超13... 8月的最后一周,A股市场涨势依旧强劲,指数点位再度创出新高,成交额继续放量。在一片暖意之下,投资者也...
美团二季度利润暴跌98%!补贴... 作者 | 燕大大炮一响黄金万两,一场补贴混战,让美团感觉被掏空。就在刚刚,美团2025第二季度财报出...
堂食正在“消失”?头部餐饮连夜... 订阅 快刀财经 ▲ 做您的私人商学院餐饮界要变天?作者 :内参君来源: 餐企老板内参(ID:cylb...
“热搜”上的非凡“十四五”|政... 中国商报(记者 马文博)8月29日,有关“新股王寒武纪主动降温”的新闻登上今日头条热搜榜。消息面上,...
泸州老窖H1营收未能“稳进” ... 白酒行业存量竞争加剧叠加政策调整情况下,行业龙头泸州老窖(000568.SZ)上半年营收未能实现“稳...
独家|退守湖南大本营后,兴盛优... 「核心提示」 从18省到3省,用50亿美元烧出一场教训,兴盛优被狠狠上了一课。退守湘鄂赣三省,...