GBase 8a南大通用数据库节点替换

原文链接:https://www.gbase.cn/community/post/5583

更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

节点替换的理论

1.节点故障

2.集群硬件升级

替换的节点类型:

1.coordinator节点

原理:替换安装程序会修改corosync的配置文件,使得新节点能够在集群内代替旧节点

清除ddl恢复日志

2.data节点

原理:替换安装程序会创建用户数据库,设置所有的用户数据全同步标志;

清除ddl恢复日志,dml恢复日志和dml全同步日志(以前节点的同步信息没作用)

3.复合节点(coordinator+data)

注:节点替换会执行清除同步日志信息,同步元数据信息等操作,随后数据同步由自动恢复服务完成

准备替换节点设备硬件-->重新安装集群软件-->进行数据同步操作

注:节点替换的过程中,集群不支持写操作,只能执行select等读操作0

节点替换过程中集群模式的变化:

NORMAL -> READONLY -> NORMAL

同步元数据前:集群模式为 NORMAL,集群可以正常操作

同步元数据期间:集群模式为 READONLY,只允许进行查询操作,不允许任何 dml、 ddl 以及加载操作,此 时进行数据表结构的同步操作,对用户数据表设置全同步标志

同步完成后:集群模式为 NORMAL,集群可以正常操作

替换完成后,集群可以正常进行操作。

节点替换过程中节点的变化:

OFFLINE -> UNAVAILABLE(无效) -> REPLACE -> ONLINE

替换开始前:节点损坏,节点的状态为 OFFLINE,用户必须设置节点状态为 UNAVAILABLE;

替换开始后:节点状态转换为 REPLACE

替换成功后:节点状态转换为 ONLINE

替换执行失败:节点状态回滚为 UNAVAILABLE

注:数据不会丢失

节点替换的步骤

1.检查网络状态

保证集群内网络畅通,带宽充裕

2.设置要替换的节点的状态为unavailable;

在操作系统的gbase用户下(demo.options文件中dbauser参数指定的用户)下运行 gcadmin setnodestate 命令设置要替换的节点状态为unavailable(改成unavailable之后,只能做替换操作,不能改成其他模式)

如:gcadmin setnodestate 192.168.18.11 unavailable

今日霍州(www.jrhz.info)©️

3.准备用于节点替换的机器

1).新机器安装和原节点机器的操作系统相同, ip地址设置相同

将原节点关闭,然后将替换节点的ip地址改为被替换节点ip,删除原ssh信任关系

2).符合集群的安装要求,如:关闭防火墙,关闭selinux等

4.查看集群各项状态

CLUSTER STATE: ACTIVE

VIRTUAL CLUSTER MODE: NORMAL

节点状态为unavailable

5.replace.py对节点进行替换安装

[gbase@gbaseman gcinstall]$ python replace.py --help

Usage: replace.py [options] 3

Options:

-h, --help show this help message and exit

-a do not prompt the user for confirmation

--host=HOSTLIST replaced nodes' ip splitting by comma 指定要替换的节点ip, 用','隔离

--rootPwd root 用户的密码, 要求所有节点 root 密码一致。

--root_pwd_file 该参数支持 root 用户在多节点不同密码方式, 与参数rootPwd 不能同时使用, 否 则报错。

--type=NODETYPE replaced nodes' type,value:coor,data 替换节点的类型

--freenode=FREENODE cluster freenodes' ip splitting by comma

--dbaUser=DBAUSER dba user

--dbaUserPwd=DBAPWD dba user password

--generalDBUser=GENDBUSER cluster database user

--generalDBPwd=GENDBPWD

cluster database user password

--overwrite new and complete overwrite 强制覆盖,参数可选

--sync_coordi_metadata_timeout=SYNC_COORDI_METADATA_TIMEOUT 设置coor节点替换的超时时 间,默认为15

sync coordinators' metadata timeout,default 15mins

--parallel_pack=PARALLEL_PACK 节点替换并行打包开关

whether to parallel packaging,value<0 |1>,default 0

--retry_times=RETRY_TIMES 节点替换时同步系统表retry次数默认为3,最小值 为1,最大值为2147483647

replace node retry times,default 3

--use_shm=USE_SHM whether to set path of package,value<0|1>,default 0

--license_file=LICENSE_FILE 在执行节点替换时,需要提前生产lic文件,通过此参数传入

import license file

--vcname=VC_NAME vc name,only support one vc

-p, --addr_protocol domain map address,default False(IPv4)

--passwordInputMode=PASSWORDINPUTMODE 指定密码的获取方式

get password method[file,pwdsame],

file: get from command line parameters,default 文件中获取

pwdsame: nodes have same user passwd 终端输入

pwddiff: 表示从终端由用户输入密码,并且节点间的密码不一致情况下使用该 参数,对于不同用户密码每个节点分别输入一次,适用于不同节点使用不同的密码;

复合节点替换:

1.将节点设置为unavailable

[gbase@gbaseman gcinstall]$ gcadmin setnodestate 192.168.18.11 unavailable;

after set node state into unavailable,can not set the state into normal,

must run gcadmin replacenodes to replace this node ,after that command node state return into normal.

you realy want to set node state into unavailable(yes or no)?

yes

node 192.168.18.11 state already is unavailable, not need repeat set

2.清理feventlog日志

[gbase@gbaseman opt]$ gcadmin rmfeventlog 192.168.18.11

after rmfeventlog 192.168.18.11, fevent log will be removed, must run gcadmin replacenodes to replace this node.

you realy want to remove node 192.168.18.11 fevent log(yes or no)?

yes

delete ddl event log on node 192.168.18.11 start

delete ddl event log on node 192.168.18.11 end

delete dml event log on node 192.168.18.11 start

delete dml event log on node 192.168.18.11 end

delete dml storage event log on node 192.168.18.11 start

delete dml storage event log on node 192.168.18.11 end

3.进行coor节点替换命令

[gbase@gbasedata1 gcinstall]$ ./replace.py --host 192.168.18.11 --type=coor --

dbaUser=gbase --dbaUserPwd=gbase@123 --generalDBUser=gbase --generalDBPwd=gbase@123

4.检查节点状态

[gbase@gbaseman opt]$ gcadmin showcluster

5.清理feventlog日志

[gbase@gbaseman opt]$ gcadmin rmfeventlog 192.168.18.11

after rmfeventlog 192.168.18.11, fevent log will be removed, must run gcadmin replacenodes to replace this node.

you realy want to remove node 192.168.18.11 fevent log(yes or no)?

yes

delete ddl event log on node 192.168.18.11 start

delete ddl event log on node 192.168.18.11 end

delete dml event log on node 192.168.18.11 start

delete dml event log on node 192.168.18.11 end

delete dml storage event log on node 192.168.18.11 start

delete dml storage event log on node 192.168.18.11 end

6.创建中间的distributeion

建立新的 distribution,该分布信息用于剔除被替换节点,其他节点分片分布保持不变。

查看分片信息

[gbase@gbaseman opt]$ gcadmin showdistribution node

Distribution ID: 1 | State: new | Total segment num: 6

========================================================================================

============================================

nodes | 192.168.18.13 | 192.168.18.11

192.168.18.14 |

----------------------------------------------------------------------------------------

------------------------------------------

primary | 1 | 2 | 3 |

segments | 4 | 5 | 6 |

----------------------------------------------------------------------------------------

------------------------------------------

duplicate | 3 | 1 | 2 |

segments 1 | 6 | 4 | 5 |

========================================================================================

============================================

使用 gcadmin getdistribution 命令将待替换节点所在的 vc 的 distribution 信息保存在指定的文件中

[gbase@gbaseman gcinstall]$ gcadmin getdistribution 1 distribution_info_1.xml

gcadmin getdistribution 1 distribution_info_1.xml ...

get segments information

write segments information to file [distribution_info_1.xml]

gcadmin getdistribution information successful

修改新的 distribution 的分布规则信息。

修改原则为让被替换节点没有任何分片,其他节点分片的分布规则不变,

若被替换节点存储的分片是作为主分片,则将该分片的备份分片节点修改为主分片节点,即节点 IP 在 primarynode 标签中,则将该 segment 内的 duplicatenodes标签内的 IP 替换被替换节点 IP,并删除 duplicatenodes 标签。

若被替换节点存储的分片是作为备份分片,即被替换的节点 IP 在 duplicatenodes标签中,则将 该 duplicatenodes 标签删除。

[gbase@gbaseman gcinstall]$ cat distribution_info_1.xml

<?xml version='1.0' encoding="utf-8"?>

<distributions>

<distribution>

<segments>

<segment>

<primarynode ip="192.168.18.13"/>

<duplicatenodes>

<duplicatenode ip="192.168.18.11"/> //删除

</duplicatenodes>

</segment> 13

<segment>

<primarynode ip="192.168.18.11"/> //将备份节点分片修改为主分 片,即把192.168.18.11改为14

<duplicatenodes>

<duplicatenode ip="192.168.18.14"/> //删除

</duplicatenodes>

</segment> 21

<segment>

<primarynode ip="192.168.18.14"/> 24

<duplicatenodes>

<duplicatenode ip="192.168.18.13"/>

</duplicatenodes>

</segment> 29

<segment>

<primarynode ip="192.168.18.13"/> 32

<duplicatenodes>

<duplicatenode ip="192.168.18.11"/> //删除

</duplicatenodes>

</segment> 37

<segment>

<primarynode ip="192.168.18.11"/> //将备份节点分片修改为主 分片,即把192.168.18.11改为14

<duplicatenodes>

<duplicatenode ip="192.168.18.14"/> //删除

</duplicatenodes>

</segment>

<segment>

<primarynode ip="192.168.18.14"/> 48

<duplicatenodes>

<duplicatenode ip="192.168.18.13"/>

</duplicatenodes>

</segment>

</segments>

</distribution>

</distributions>

修改创建 distribution 所需的 gcChangeInfo_vc2.xml 文件

[gbase@gbaseman gcinstall]$ cat gcChangeInfo.xml

<?xml version="1.0" encoding="utf-8"?>

<servers>

<cfgFile file="distribution_info_1.xml"/>

</servers>

执行创建新的 distribution

[gbase@gbaseman gcinstall]$ gcadmin distribution gcChangeInfo.xml

gcadmin generate distribution ...

gcadmin generate distribution successful

查看分片信息

[gbase@gbaseman gcinstall]$ gcadmin showdistribution node

执行 initnodedatamap 命令初始化 hashmap,然后将数据通过 rebalance instance 命令重分布到 最新的 distribution( Distribution ID: 1)上。

说明:按 distribution 分布规则,此次 rebalance 操作不会实际进行数据搬移,所以会很快完成;

本次 rebalance 操作后不要删掉旧版 nodedatamap 和 distribution。

初始化hashmap

gbase> initnodedatamap;

Query OK, 0 rows affected, 6 warnings (Elapsed: 00:00:00.35)

数据重分布

gbase> rebalance instance;

Query OK, 19 rows affected (Elapsed: 00:00:00.73)

查看rebalance状态

gbase> select index_name,status,percentage,priority,host,distribution_id from gclusterdb.rebalancing_status;

+---------------+-----------+------------+----------+---------------+-----------------+

index_name | status | percentage | priority | host | distribution_id |

+---------------+-----------+------------+----------+---------------+-----------------+

test.t4 | COMPLETED | 100 | 5 | 192.168.18.11 | 2 |

test.liguixin | COMPLETED | 100 | 5 | 192.168.18.11 | 2 |

test.t10 | COMPLETED | 100 | 5 | 192.168.18.11 | 2 |

test.t5 | COMPLETED | 100 | 5 | 192.168.18.11 | 2 |

test.t12 | COMPLETED | 100 | 5 | 192.168.18.11 | 2 |

test.t16 | COMPLETED | 100 | 5 | 192.168.18.11 | 2 |

test.t6 | COMPLETED | 100 | 5 | 192.168.18.11 | 2 |

test.t7 | COMPLETED | 100 | 5 | 192.168.18.11 | 2 |

test.t15 | COMPLETED | 100 | 5 | 192.168.18.11 | 2 |

test.t_user1 | COMPLETED | 100 | 5 | 192.168.18.11 | 2 |

test.t11 | COMPLETED | 100 | 5 | 192.168.18.11 | 2 |

test.t_user | COMPLETED | 100 | 5 | 192.168.18.11 | 2 |

test.t20 | COMPLETED | 100 | 5 | 192.168.18.11 | 2 |

test.t17 | COMPLETED | 100 | 5 | 192.168.18.11 | 2 |

test.t1 | COMPLETED | 100 | 5 | 192.168.18.11 | 2 |

test.t2 | COMPLETED | 100 | 5 | 192.168.18.11 | 2 |

test.t3 | COMPLETED | 100 | 5 | 192.168.18.11 | 2 |

test.t14 | COMPLETED | 100 | 5 | 192.168.18.11 | 2 |

test.t9 | COMPLETED | 100 | 5 | 192.168.18.11 | 2 |

+---------------+-----------+------------+----------+---------------+-----------------+

执行data节点替换命令

[gbase@gbasedata1 gcinstall]$ ./replace.py --host 192.168.18.11 --type=data --

dbaUser=gbase --dbaUserPwd=gbase@123 --generalDBUser=gbase --generalDBPwd=gbase@123

查看节点状态

数据重分布

本次数据重分布将进行实际数据的重分布;重分布的所需时间需要根据数据量,系统 CPU,磁盘,网络 等综合情况进行评估

删除旧的分片id

[gbase@gbasedata1 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 success

gcadmin remove distribution [2] success

节点替换过程需要注意以下问题:

1.如果替换coordiantor集群节点,要求总数不可以超过coordiantor集群总数的一半,也就是保证集 群不能是lock状态,因为超过一半集群就进入锁定状态

2.如果是data节点,不可以同时替换主备分片的节点,保证分片必须有可用的备份源数据,如果同时 替换,数据无法拷贝,会导致数据丢失。

3.损坏的节点上有 nocopies 表,数据无法恢复,必须用户手工进行恢复。 nocopies 表数据没有副 本,无法拷贝。

4.损坏的节点上存在不通过集群命令创建的数据,这些数据无法恢复,必须用户手工进行恢复。比 如:集群数据节点当单机使用,在不是集群状态,对数据进行写入。

5.在节点替换过程中,如果出现 replace.py 命令被强杀或者执行replace.py 命令的机器掉电等现象, 可能会导致集群状态处于READONLY状态无法自行恢复正常。此时可以使用gcadmin switchmode normal 恢复集群状态然后继续使用集群。或者再一次执行

6.节点状态转换为 UNAVAILABLE 后,只有在节点替换成功的时候,节点状态才能转换为 ONLINE。

用户不能对 corosync 中的节点状态持久化文件进行手工操作,如果手工修改持久化文件中的节点状态 (UNAVAILABLE - > ONLINE),会导致数据丢失。

7.设置节点为 UNAVAILABLE 时,若集群中有大量 ddl event, dml event或 dmlstorage event

时,程序需要检查所有的 event,判断被设置状态的节点的备份节点是否正常,有大量 event 时,该 过程可能需要较长时间。

8.开始节点替换时,若被替换节点有大量 ddl event, dml event 或dmlstorage event 时,节点替换 程序要将被替换节点的所有 event 删除,该过程可能会需要较长时间。

常见问题:

host key verification failed

解决方法:

1.编辑文件/home/gbase/.ssh/known_hosts文件(最简单直接删除,重新建立互信)

2.删除替换节点对应的ssh-rsa秘钥

3.通过ssh连接新节点,重新建立连接互信。

原文链接:https://www.gbase.cn/community/post/5583

更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

特别声明:[GBase 8a南大通用数据库节点替换] 该文观点仅代表作者本人,今日霍州系信息发布平台,霍州网仅提供信息存储空间服务。

猜你喜欢

咖博士和德龙咖啡机哪个好(breville和德龙咖啡机)

在家庭应用场景中,咖博士全自动家用咖啡机具备“咖啡馆级口感+一键出杯+全链自清洁”的特点:通过精工级大冲泡器与仿大师手冲预浸泡技术,结合商用级陶瓷刀盘,还原咖啡豆的细腻风味;一键操作即可制作数十款创意咖啡…

咖博士和德龙咖啡机哪个好(breville和德龙咖啡机)

锚定“双碳”目标!2026工业零碳系统集成创新论坛暨热泵展重磅启幕

2. 第三届工业余热回收利用及高温热泵技术创新论坛(3月10日下午):聚焦关键技术与具体应用,深入研讨《超高温蒸汽热泵创新与发展》《余热回收——未来的“零碳热源”》《工业热泵在化工食品医药领域的应用》《相…

锚定“双碳”目标!2026工业零碳系统集成创新论坛暨热泵展重磅启幕

马蓉离婚7年现状揭露:父亲劝她再婚寻归宿,现生活反差令人意外(马蓉离婚7年现场视频)

离婚判决刚下来时,马蓉母亲还在到处哭诉“是『王宝强』对不起我女儿”。 当年撮合马蓉嫁『王宝强』,看中的是他的名气和票房号召力。马蓉的父母,从一开始就没瞧得上这个“草根女婿”,只把他当成女儿“飞黄腾达”的跳板。 对…

马蓉离婚7年现状揭露:父亲劝她再婚寻归宿,现生活反差令人意外(马蓉离婚7年现场视频)

离婚21年后,再看戴志诚和杨蕾的境遇,差距截然不同却让人清醒(离婚二十多年又复婚)

如今,当杨蕾再次从容地站在我们面前,我们终于读懂了她那份穿越伤痛后的透彻与清醒。2004年春晚,刚演绎完《好人不打折》的杨蕾,妆未卸,喜悦尚在眉梢,丈夫戴志诚的来电却送来了最冰冷的决断:“我们离婚吧”。仅仅半…

离婚21年后,再看戴志诚和杨蕾的境遇,差距截然不同却让人清醒(离婚二十多年又复婚)

突发!“祝枝山”陈百祥决定安乐死!妻子回应令人心酸!

所以,当他谈论以安乐死自主决定生命终点时,谈论的并非消极的厌世,而是一种极致的、清醒的自主权。有人敬佩他的豁达与坦诚,视之为一种生命教育的范本;也有人无法接受,在伦理与法律的框架下,这仍是一个充满禁忌的话题…

突发!“祝枝山”陈百祥决定安乐死!妻子回应令人心酸!