GBase8a v95 节点替换
集群节点替换
使用背景
当集群的节点损坏时,需要对损坏的集群节点进行替换,保证集群能够正常工作。 集群节点替换功能具备在线节点替换能力,即可在生产环境不停机的情况下进行节点替换。
说明
在线不停服务节点替换说明:
节点替换时,集群变为 readonly 状态,集群收到应用程序的写操作时,让 SQL 等待,不返回报错信息,等节点替换完成之后,再返回,应用程序未超时的情况下,可以继续执行,保证节点替换时完全在线。
节点替换命令
使用 replace.py 命令对要替换的节点进行替换安装。须在集群中 Coordinator 节点上使用集群安装用户 dbauser 执行命令。
命令格式:
replace.py [options]
参数说明如下:
--host:指定将要替换的节点 ip 列表,用逗号分隔。
--freenode:指定将要被替换的空闲的数据节点 ip。在替换纯数据节点时,使用空闲的数据节点(即未被任何虚拟机使用的数据节点)替换损坏的纯数据节点。
--type:被替换的节点类型,若替换数据节点,--type=data;若替换管理节点,
--type=coor;若替换同时存在 coordinator 和 data 服务的复合节点,则需要分别设置--type=data 替换管理节点服务、设置--type=coor 替换数据节点服务。
--dbaUser::集群运行时使用的操作系统 DBA 用户名。
--dbaUserPwd:操作系统 DBA 用户的密码,要求所有节点 DBA 密码一致。
--generalDBUser::数据库用户名,可选参数,不输入时默认为数据库 root 用户。
--generalDBPwd:数据库 generalDBUser 用户密码,目前密码中不支持单引号,其它特殊符号用单引号包围。
--overwrite:强制替换标志,如果设置了这个标志,被替换节点上残留的集群软件将被强制卸载,重新安装新的集群。这个参数可选。
--sync_coordi_metadata_timeout:执行节点替换时,每次拷贝 coordinator 节点元数据的超时时间,单位为分钟,默认为 15 分钟,最小值为 1,最大值为2147483647。
--parallel_pack:备份拷贝 coordinator 节点元数据的模式,取值为 0 或 1, 默认 为 0。0--各节点全量备份;1--每个节点备份一部分,最后在目的节点汇总。
--retry_times:替换过程中单步操作失败的重试次数,默认为 3,最小值为 1,最大值为 2147483647。
--use_shm:使用共享内存存放数据包,使用该参数需先确认每个 coordinator节点的/dev/shm 有足够空间存放所有集群层元数据。默认值为 0,最小值为 1。
--use_shm_save_temp:是否使用/dev/shm 存储替换过程中产生的临时文件数据,使用/dev/shm 可以提高效率,但是如果/dev/shm 空间不足,效率可能会更低,并影响系统运行。取值为 0 或 1,默认为 1,现场根据表以及列的数量自行评估是否使用。0--不使用/dev/shm;1--使用/dev/shm。
--license_file:针对带有 License 认证的集群,在执行节点替换的时候,需要提前生成 license 文件,通过--license_file 参数将文件传入,在集群安装成功后,集群可正常使用。
--vcname:被替换数据节点的 vc name,每次替换只能替换一个 vc。
freenode 替换纯 Data 节点
替换说明
检查参数,被替换节点应设置为 unavailable 状态,集群状态应为 normal。被替换节点之外的 Coordinator 节点状态正常。
创建新的 distribution,将数据从旧的 distribution 重分布到节点替换成功后新创建的 distribution 上,其他分片不变。使用 replace.py 脚本执行节点替换操作。使用 freenode 替换后, freenode 节点替代被替换的 Data 节点。
替换步骤
使用 1 个 freenode 节点替换 1 个纯 data 节点,以七节点集群为例:
192.168.6.101 为存在 Coordinator 和 Data 的复合节点;
192.168.6.102,192.168.6.103,192.168.6.104,192.168.6.105 为纯 Data 节点;
192.168.6.106 为 freenode 节点。
用 freenode 节点 192.168.6.106 替换纯 data 节点 192.168.6.102。
步骤 1
将被替换节点设置为 unavailable:在操作系统的 DBA 用户(demo.options 文件中dbauser 参数指定的用户)下运行 gcadmin setnodestate 命令设置要替换的节点状态为 unavailable。
将被替换节点设置为 unavailable 的命令如下:
gcadmin setnodestate 192.168.6.102 unavailable
步骤 2
使用 gcadmin 命令删除被替换节点的 feventlog。
gcadmin rmfeventlog 192.168.6.102
步骤 3
建立新的 distribution(剔除被替换节点,其他节点分片分布保持不变)。
获取 192.168.6.102 节点所在 vc 的 distribution 信息。
1) 查看 distribution 信息:
$ gcadmin showdistribution vc vc1
2) 使用 gcadmin getdistribution <ID> <distribution_info.xml> [vc vcname]将指定 id 的 distribution 信息保存在指定的文件中,生成的文件为 xml 文件:
gcadmin getdistribution 1 distribution.xml vc vc1
在安装目录下编辑 distribution.xml 文件,创建新的 distribution。与原 distribution 相比只是让被替换节点没有任何分片,其他节点分片的分布规则不变,注意如果原有分片只剩备份分片,则新的 distribution 将备份分片节点改为主分片节点。
# vi distribution.xml
<?xml version='1.0' encoding="utf-8"?>
<distributions>
<distribution>
<segments>
<segment>
<primarynode ip="192.168.6.101"/>
</segment>
<segment>
<primarynode ip="192.168.6.103"/>
</segment>
<segment>
<primarynode ip="192.168.6.103"/>
<duplicatenodes>
<duplicatenode ip="192.168.6.104"/>
</duplicatenodes>
</segment>
<segment>
<primarynode ip="192.168.6.104"/>
<duplicatenodes>
<duplicatenode ip="192.168.6.105"/>
</duplicatenodes>
</segment>
<segment>
<primarynode ip="192.168.6.105"/>
<duplicatenodes>
<duplicatenode ip="192.168.6.101"/>
</duplicatenodes>
</segment>
</segments>
</distribution>
</distributions>
在安装目录中拷贝一份 gcChangeInfo.xml,并重命名为 new_gcChangeInfo.xml。
$ cp gcChangeInfo.xml new_gcChangeInfo.xml
$ cat new_gcChangeInfo.xml
<?xml version="1.0" encoding="utf-8"?>
<servers>
<cfgFile file="distribution.xml"/>
</servers>
创建新的 distribution(示例中为 Distribution ID:2,用于中转数据)。
使用命令:
gcadmin distribution new_gcChangeInfo.xml vc vc1
查看新的 distribution 信息:
$ gcadmin showdistribution vc vc1
步骤 4
执行 initnodedatamap,创建新的 hashmap。
步骤 5
将数据 rebalance instance 到最新的 distribution(Distribution ID: 2)上。
执行 rebalance instance 命令将原有 distribution 的数据库表重分布到新的 distribution(Distribution ID: 2)上,然后执行 select * from gclusterdb.rebalancing_status等待rebalance 完成。
步骤 6
replace.py 替换安装。选择集群中一个 Coordinator 节点,使用集群安装用户 dbauser进行替换。
以上面示例集群为例,执行节点替换命令 replace.py 替换纯 data 节点。
./replace.py --host=192.168.6.102 --freenode=192.168.6.109 --type=data --dbaUser=g
base --dbaUserPwd=gbase --generalDBUser=root --generalDBPwd=password --overwrite -
-vcname=vc1
replace.py 执行成功后,生成了新的 distribution。
步骤 7
执行 rebalance instance 命令,将数据重分布到使用 freenode 新建的 distribution 上。
gbase> rebalance instance;
Query OK, 6 rows affected(Elapsed: 00:00:00:89)
gbase> select * from gclusterdb.rebalancing_status;
+----------+-------+----------+--------+----------+--------+------+----------+-----
---+----+---------------+
|index_name|db_name|table_name|tmptable|start_time|end_time|status
|percentage|priority|host|distribution_id|
+----------+-------+----------+--------+----------+--------+------+----------+-----
---+----+---------------+
|test228.tt2 |test228|tt2 | |2019-01-24 17:02:13.685000|2019-01-24 17:02:15.22300
0|COMPLETED|100|5|::ffff:192.168.6.101|5|
|test228.tt1 |test228|tt1 | |2019-01-24 16:55:54.677000|2019-01-24 17:02:15.22300
0|COMPLETED|100|5|::ffff:192.168.6.101|5|
|test229.ttt1|test229|ttt1| |2019-01-24 16:55:53.750000|2019-01-24 17:02:16.85600
0|COMPLETED|100|5|::ffff:192.168.6.101|5|
|test227.t1 |test227|t1 | |2019-01-24 16:55:53.683000|2019-01-
步骤 8
确保所有数据 rebalance 完成后,可以将中间中转数据的 distribution 删掉,将被替换节点从虚拟集群中移除。
$ gcadmin rmdistribution 2
cluster distribution ID [2]
it will be removed now
please ensure this is ok, input [Y,y] or [N,n]: y
gcadmin remove distribution [2] success
全新节点替换
替换纯 Data 节点
替换说明
检查参数,被替换节点应为 unavailable 状态,集群状态应为 normal。被替换节点之外的 Coordinator 节点状态正常。
创建新的 distribution,将数据从旧的 distribution 重分布到节点替换成功后新创
建的 distribution 上,其他分片不变。
使用 replace.py 脚本执行节点替换操作。
使用全新节点替换完成后,节点 IP 不改变,分布规则也不变。
替换步骤
步骤 1
将被替换节点设置为 unavailable:
gcadmin setnodestate IP unavailable
步骤 2
使用 gcadmin 命令删除被替换节点的 fevent:
gcadmin rmfeventlog IP
步骤 3
建立新的 Distribution(剔除被替换节点,其他节点分片分布保持不变),设旧的Distribution ID 为 A:
使用 gcadmin getdistribution <ID> <distribution_info.xml> [vc vcname]将指定 id的 distribution 信息保存在指定的文件中,生成的文件为 xml 文件:
gcadmin getdistribution A distribution.xml vc vc1
在安装目录下编辑 distribution.xml 文件,创建新的 distribution。与原 distribution相比只是让被替换节点没有任何分片,其他节点分片的分布规则不变,注意如果原有分片只剩备份分片,则新的 distribution 将备份分片节点改为主分片节点。
在安装目录中拷贝一份 gcChangeInfo.xml,并重命名为 new_gcChangeInfo.xml。
cp gcChangeInfo.xml new_gcChangeInfo.xml
创建新的 Distribution,ID 为 B。使用命令:
gcadmin distribution new_gcChangeInfo.xml vc vc1
步骤 4
执行 initnodedatamap,创建新的 hashmap。
步骤 5
将数据 rebalance instance 到 Distribution B 上。
步骤 6
用全新节点替换 data 节点,执行节点替换命令 replace.py,形成新的 Distribution(设
其 ID 为 C)。
步骤 7
执行 rebalance instance 命令,将数据重新分布到 distribution C 上。
步骤 8
确认 rebalance 完成后,将中间中转数据的 distribution B 删掉。
替换纯 Coordinator 节点
替换说明
检查参数,集群状态应为 normal。
执行 replace.py 脚本,执行节点替换操作。
节点替换结束,打印提示信息。
替换步骤
步骤 1
将被替换 Coordinator 节点设置为 unavailable:
gcadmin setnodestate IP unavailable
步骤 2
使用 gcadmin 命令删除被替换节点的 fevent:
gcadmin rmfeventlog IP
步骤 3
执行节点替换命令 replace.py 替换 Coordinator 节点。
替换同时存在 Coordinator 和 Data 服务的复合节点
替换复合节点需要执行两次节点替换,分别替换 Coordinator 服务和 Data 服务(顺
序没有限制)。
替换步骤
替换 Data 服务部分的步骤请参考以上章节。
替换 Coordinator 服务部分的步骤请参考以上章节。
说明
替换复合节点只能使用全新节点替换,不能使用 freenode 节点替换。替换 Data 服务需确认被替换节点之外的 Coordinator 节点状态正常。
停止节点替换过程
节点替换在执行过程中可以通过执行 replaceStop.py 来停止节点替换。若被停止的节点替换同时替换多个节点,则会停止所有被替换节点的替换过程。
注意
节点替换过程中,在一些软硬件异常、长时间不能完成节点替换操作等异常情况,才需要运行 replaceStop.py 脚本停止替换节点操作。注意不能手动 kill 节点替换相关的进程停止节点替换。
命令格式
replaceStop.py --host=192.168.1.1 --type=data --dbaUser=gbase --dbaUserPwd=gbase
参数说明
--host:指定将要停止的节点 ip 列表,用逗号分隔。
--type:被停止的节点类型,若被停止替换的节点为数据节点,--type=data;若被停止替换的节点为管理节点,--type=coor;若停止替换同时存在 coordinator和 data 服务的复合节点,则需要停止对应的服务。
--dbaUser:集群运行时使用的操作系统用户名。
--dbaUserPwd:操作系统 DBA 用户的密码, 要求所有节点 DBA 密码一致。
运行前提
集群有节点替换操作正在运行。
在正常可用的 Coordinator 节点上使用 DBA 用户执行 replaceStop.py 脚本。
运行结果
恢复集群模式为 NORMAL,节点状态不能回滚,则节点状态可能为 UNAVAILABLE或 REPLACE。
示例
Coordinator 节点替换过程停止:
在执行替换命令的节点上用 DBA 用户执行下面命令,开始进行 Coordinator 节
点替换;
./replace.py --host=192.168.6.105 --type=coor --dbaUser=gbase --dbaUserPwd=gbase –overwrite --vcname=vc1
当打印出“build data packet start”信息后表示正在进行打包,此时在该节点上执行命令,停止 coordinator 节点替换。
$ ./replaceStop.py --host=192.168.6.105 --type=coor --dbaUser=gbase --dbaUserPwd=gbase
评论
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526