节点管理
添加指定数据节点
将 gcChangeInfo.xml 中的 data 节点添加到指定集群中。集群安装成功后会自动调用此命令,无需用户手工执行 addnodes 命令。
语法:
gcadmin addnodes gcChangeInfo.xml [vc_name | single_vc_add_to_rc]
参数:
- gcChangeInfo.xml: 该文件与节点安装文件格式近似,用于描述新安装节点的信息。新数据节点安装Gbase 8a软件包后,会自动调用 gcadmin addnodes 命令,加入根集群,成为Free node节点。
- vc name: 指定 vc name 则将Free node节点添加到指定 vc 中,否则仅添加到 root cluster 中。
- single_vc_add_to_rc: 兼容模式下该参数将节点添加到root cluster 中,作为 free node。 该参数仅在兼容模式下有效。
举例:
[gbase@node131 ~]$ gcadmin addnodes gcChangeInfo.xml vc2
[gbase@node131 ~]
$ gcadmin showcluster vc vc2
CLUSTER STATE: ACTIVE
VIRTUAL CLUSTER MODE: NORMAL
===============================================
| GBASE VIRTUAL CLUSTER INFORMATION |
===============================================
| VcName | DistributionId | comment |
-----------------------------------------------
| vc2 | 3 | vc2 cluster |
-----------------------------------------------
=========================================================================================================
| VIRTUAL CLUSTER DATA NODE INFORMATION |
=========================================================================================================
| NodeName | IpAddress | DistributionId | gnode | syncserver | DataState |
---------------------------------------------------------------------------------------------------------
| node1 | 172.16.4.133 | 3 | OPEN | OPEN | 0 |
---------------------------------------------------------------------------------------------------------
| node2 | 172.16.4.134 | 3 | OPEN | OPEN | 0 |
---------------------------------------------------------------------------------------------------------
| node3 | 172.16.4.151 | | OPEN | OPEN | 0 |
---------------------------------------------------------------------------------------------------------
3 data node
修改gcChangeInfo.xml文件,只填写新增节点。
<?xml version="1.0" encoding="utf-8"?>
<servers>
<rack>
<node ip="172.16.4.151"/>
</rack>
</servers>
集群添加节点的场景:
- 场景一:为root集群添加Free node数据节点(安装即可)
修改集群安装配置文件,为新节点安装8a数据库软件后,多VC环境下新节点被自动添加到root集群成为Free node 节点。
注:单VC兼容模式下,新节点被添加到默认集群成为集群内数据节点。
- 场景二:将free node 节点加入到指定VC(须使用节点添加命令)
根集群内的Free node节点须通过节点添加命令加入到指定VC,成为VC内的数据节点。
命令举例:gcadmin addnodes gcChangeInfo.xml vc_name
- 场景三:为集群添加新coordinate节点(安装即可)
修改集群安装配置文件,为新节点安装8a软件后,新节点自动加入coordinate集群,成为coordinate节点。
“场景一”示例:为root集群添加Free node数据节点
- 设置新增节点的安装环境:(以RHEL7为例说明)
1、为新节点创建DBA用户、指定密码,并将数据库待安装目录的所有者权限分配给DBA用户。(与集群其它节点一致。)
#useradd gbase 和 #passwd gbase
# chown -R gbase:gbase /opt
2、使用gcinstall目录内预置的 SetSysEnv.py脚本,设置新节点系统参数。
拷贝主安装节点的SetSysEnv.py脚本文件到集群新节点的opt目录下,并执行环境设置。(与集群其它节点一致。)
# scp root@主安装节点ip:/opt/gcinstall/SetSysEnv.py /opt
# python SetSysEnv.py --dbaUser=gbase --installPrefix=/opt --cgroup
参数 :
- --installPrefix:用户指定的数据库安装目录,必须为demo.options 文件中 installPrefix设置的目录。
- --dbaUser=DBA用户,即指定的集群安装用户。必须为 demo.options 中dbaUser一致。
- --cgroup 使用资源管理功能时,主要用于修改资源管理配置文件。默认不配置。
- 修改demo.options文件:
设置dataHost 参数为需要增加的data 节点所在的机器IP;
设置existCoordinateHost 为已存在的coordinator 节点所在机器IP;
设置existDataHost 为已存在的data 节点所在机器IP。
installPrefix= /opt
#coordinateHost =172.16.83.11,172.16.83.12,172.16.83.13
dataHost = 172.16.4.15
1
existCoordinateHost = 172.16.4.131,172.16.4.132,172.16.4.133
existDataHost = 172.16.4.131,172.16.4.132,172.16.4.133,172.16.4.134
dbaUser = gbase
dbaGroup = gbase
dbaPwd = gbase
rootPwd = 111111
#mcastAddr = 226.94.1.39
mcastPort = 5493
- 使用gbase用户执行安装:
./gcinstall.py --silent=demo.options --license_file hostslicense.txt
- 多VC模式下,查看扩容结果:
[gbase@node131 gcinstall]$ gcadmin
CLUSTER STATE: ACTIVE
===============================================================
| GBASE COORDINATOR CLUSTER INFORMATION |
===============================================================
| NodeName | IpAddress | gcware | gcluster | DataState |
---------------------------------------------------------------
| coordinator1 | 172.16.4.131 | OPEN | OPEN | 0 |
---------------------------------------------------------------
| coordinator2 | 172.16.4.132 | OPEN | OPEN | 0 |
---------------------------------------------------------------
| coordinator3 | 172.16.4.133 | OPEN | OPEN | 0 |
---------------------------------------------------------------
===============================================
| GBASE VIRTUAL CLUSTER INFORMATION |
===============================================
| VcName | DistributionId | comment |
-----------------------------------------------
| vc1 | 2 | vc1 cluster |
-----------------------------------------------
| vc2 | 3 | vc2 cluster |
-----------------------------------------------
=============================================================
| GBASE CLUSTER FREE DATA NODE INFORMATION |
=============================================================
| NodeName | IpAddress | gnode | syncserver | DataState |
-------------------------------------------------------------
| FreeNode1 | 172.16.4.151 | OPEN | OPEN | 0 |
-------------------------------------------------------------
2 virtual cluster: vc1, vc2
3 coordinator node
1 free data node
“场景二”示例:将free node 节点加入到指定VC
- 修改gcChangeInfo.xml文件,只填写新增节点。
[gbase@131 gcinstall]$ cat gcChangekuorong2.xml
<?xml version="1.0" encoding="utf-8"?>
<servers>
<rack>
<node ip="172.16.4.151"/>
</rack>
</servers>
- 使用gcadmin工具将新节点加入指定VC。
[gbase@node131 ~]$ gcadmin addnodes gcChangekuorong2.xml vc2
- 查看添加结果
[gbase@node131 ~]$ gcadmin showcluster vc vc2
CLUSTER STATE: ACTIVE
VIRTUAL CLUSTER MODE: NORMAL
===============================================
| GBASE VIRTUAL CLUSTER INFORMATION |
===============================================
| VcName | DistributionId | comment |
-----------------------------------------------
| vc2 | 3 | vc2 cluster |
-----------------------------------------------
=========================================================================================================
| VIRTUAL CLUSTER DATA NODE INFORMATION |
=========================================================================================================
| NodeName | IpAddress | DistributionId | gnode | syncserver | DataState |
---------------------------------------------------------------------------------------------------------
| node1 | 172.16.4.133 | 3 | OPEN | OPEN | 0 |
---------------------------------------------------------------------------------------------------------
| node2 | 172.16.4.134 | 3 | OPEN | OPEN | 0 |
---------------------------------------------------------------------------------------------------------
| node3 | 172.16.4.151 | | OPEN | OPEN | 0 |
---------------------------------------------------------------------------------------------------------
3 data node
“场景三”示例:为集群新添加coordinate节点
- 设置新增节点的安装环境:(以RHEL7为例说明)
1、为新节点创建DBA用户、指定密码,并将数据库待安装目录的所有者权限分配给DBA用户。(与集群其它节点一致。)
#useradd gbase 和 #passwd gbase
# chown -R gbase:gbase /opt
2、使用gcinstall目录内预置的 SetSysEnv.py脚本,设置新节点系统参数。
拷贝主安装节点的SetSysEnv.py脚本文件到集群新节点的opt目录下,并执行环境设置。(与集群其它节点一致。)
# scp root@主安装节点ip:/opt/gcinstall/SetSysEnv.py /opt
# python SetSysEnv.py --dbaUser=gbase --installPrefix=/opt --cgroup
参数 :
- --installPrefix:用户指定的数据库安装目录,必须为demo.options 文件中 installPrefix设置的目录。
- --dbaUser=DBA用户,即指定的集群安装用户。必须为 demo.options 中dbaUser一致。
- --cgroup 使用资源管理功能时,主要用于修改资源管理配置文件。默认不配置。
- 关停所有集群节点的8a服务($gcluster_services all stop)。
- 修改demo.options文件:
设置CoordinateHost为需要增加的Coordinator节点的IP;
设置existCoordinateHost 为已存在的Coordinator节点的IP;
设置existDataHost 为已存在的所有data节点的IP。
installPrefix= /opt
coordinateHost =172.16.4.149
#dataHost = 172.16.83.14
existCoordinateHost = 172.16.4.142,172.16.4.143,172.16.4.144
existDataHost = 172.16.4.142,172.16.4.143,172.16.4.144
dbaUser = gbase
dbaGroup = gbase
dbaPwd = gbase
rootPwd = 111111
- 使用gbase用户执行安装:
./gcinstall.py --silent=demo.options --license_file hostslicense.txt
- 查看集群信息:
[gbase@node143 gcinstall]$ gcadmin
CLUSTER STATE: ACTIVE
VIRTUAL CLUSTER MODE: NORMAL
===============================================================
| GBASE COORDINATOR CLUSTER INFORMATION |
===============================================================
| NodeName | IpAddress | gcware | gcluster | DataState |
---------------------------------------------------------------
| coordinator1 | 172.16.4.142 | OPEN | OPEN | 0 |
---------------------------------------------------------------
| coordinator2 | 172.16.4.143 | OPEN | OPEN | 0 |
---------------------------------------------------------------
| coordinator3 | 172.16.4.144 | OPEN | OPEN | 0 |
---------------------------------------------------------------
| coordinator4 | 172.16.4.149 | OPEN | OPEN | 0 |
---------------------------------------------------------------
=========================================================================================================
| GBASE DATA CLUSTER INFORMATION |
=========================================================================================================
| NodeName | IpAddress | DistributionId | gnode | syncserver | DataState |
---------------------------------------------------------------------------------------------------------
| node1 | 172.16.4.142 | 1 | OPEN | OPEN | 0 |
---------------------------------------------------------------------------------------------------------
| node2 | 172.16.4.143 | 1 | OPEN | OPEN | 0 |
---------------------------------------------------------------------------------------------------------
| node3 | 172.16.4.144 | 1 | OPEN | OPEN | 0 |
---------------------------------------------------------------------------------------------------------
移除指定数据节点
将 gcChangeInfo.xml 中指定的数据节点从集群中移除。
语法:
gcadmin rmnodes gcChangeInfo.xml [vc_name | single_vc_rm_to_rc]
参数:
- gcChangeInfo.xml: 要删除的数据节点信息文件。无可选参数时表示从根集群移除Free node。
- vc name: 指定vc name则将该vc中的指定节点移除,变为root cluster中的free node。
- single_vc_rm_to_rc: 兼容模式下 rmnodes 命令将节点从默认集群中移除,成为 root cluster 中的 free node。 该参数仅在兼容模式下有效。
集群移除节点的场景:
- 场景一:移除管理调度集群的节点(卸载即可)
为待移除的管理调度集群节点卸载GBase 8a数据库软件即可。 - 场景二:移除VC内的数据节点(使用节点移除命令)
将Data节点移出VC,成为Free node 节点。 - 场景三:从根集群移除Free node 节点
从根集群移除Free node 节点后才能执行卸载操作。
“场景一”示例:移除coordinator节点
- 卸载Coordinator节点
1、停止所有节点集群服务。($gcluster_services all stop)
2、修改demo.options文件:
- 设置CoordinateHost 为要卸载的Coordinator节点IP;
- 修改existCoordinateHost参数和existDataHost 参数为保留的节点;
installPrefix= /opt
coordinateHost =172.16.4.133
#dataHost =
existCoordinateHost = 172.16.4.131,172.16.4.132
existDataHost = 172.16.4.133,172.16.4.134
dbaUser = gbase
dbaGroup = gbase
dbaPwd = gbase
rootPwd = 111111
#mcastAddr = 226.94.1.39
mcastPort = 5493
3、执行卸载命令:./unInstall.py --silent=demo.options
注意:
- 使用卸载命令移除节点时不要使用--Force 参数,这会导致卸载脚本不检查将要卸载的节点是否正在被集群使用。
“场景二”示例:移除VC内的数据节点
1、修改gcChangeInfo.xml文件(只填写要删除的节点):
重新整理rack,将要移除的节点放到对应的rack中:
<?xml version="1.0" encoding="utf-8"?>
<servers>
<rack>
<node ip="172.16.9.165"/>
</rack>
</servers>
2、兼容模式下,执行移除集群节点命令:
gcadmin rmnodes gcChangeInfo.xml single_vc_rm_to_rc
3、查看集群信息:
[gbase@163 gcinstall]$ gcadmin
CLUSTER STATE: ACTIVE
VIRTUAL CLUSTER MODE: NORMAL
===============================================================
| GBASE COORDINATOR CLUSTER INFORMATION |
===============================================================
| NodeName | IpAddress | gcware | gcluster | DataState |
---------------------------------------------------------------
| coordinator1 | 172.16.9.163 | OPEN | OPEN | 0 |
---------------------------------------------------------------
| coordinator2 | 172.16.9.164 | OPEN | OPEN | 0 |
---------------------------------------------------------------
=========================================================================================================
| GBASE DATA CLUSTER INFORMATION |
=========================================================================================================
| NodeName | IpAddress | DistributionId | gnode | syncserver | DataState |
---------------------------------------------------------------------------------------------------------
| node1 | 172.16.9.163 | 1 | OPEN | OPEN | 0 |
---------------------------------------------------------------------------------------------------------
| node2 | 172.16.9.164 | 1 | OPEN | OPEN | 0 |
---------------------------------------------------------------------------------------------------------
=============================================================
| GBASE CLUSTER FREE DATA NODE INFORMATION |
=============================================================
| NodeName | IpAddress | gnode | syncserver | DataState |
-------------------------------------------------------------
| FreeNode1 | 172.16.9.165 | OPEN | OPEN | 0 |
-------------------------------------------------------------
“场景三”示例:从根集群移除Free node 节点
1、停止将要卸载的data节点服务($gcluster_services all stop)。
2、修改demo.options文件:
- 设置dataHost 参数为要卸载的data节点的IP;
- 修改existCoordinateHost参数和existDataHost 参数为保留的节点;
installPrefix= /opt
#coordinateHost =
dataHost = 172.16.9.165
existCoordinateHost = 172.16.9.163,172.16.9.164
existDataHost = 172.16.9.163,172.16.9.164
dbaUser = gbase
dbaGroup = gbase
dbaPwd = gbase
rootPwd = 111111
#mcastAddr = 226.94.1.39
mcastPort = 5493
设置节点状态
设置一个节点的状态。
语法:
gcadmin setnodestate <ip> <state>
参数:
- IP: 要设置状态的节点 ip。
- state: 设置后的节点状态,节点状态有 3 种:
- unavailable : 标识节点为不可用,不记录fevent。设置该状态后必须进行节点替换,替换完成后状态恢复为 normal;
- failure:标识集群故障,相当于 offline ,这时 dml、ddl 将不会下发到该节点,而是直接记录 fevent; 节点修复可手动调回normal。
- normal:当节点故障解决后可以直接将节点置为 normal,这相当于节点重新 online,这时 gcrecover 将恢复之前记录的 feventlog,新发起的 ddl、dml 将重新下发到该节点。
分布信息管理
概述
分布信息管理是对数据分片分布方式的管理,也是对分布信息表的管理,其中包括对分布信息表的创建、删除、查看、导出等操作。
“分布信息表”简称“分布表”或“Distribution表”,是GBase 8a数据库存放数据的核心映射表。它记录着VC、Rack、节点和分片布局的关键信息。它决定着数据库数据存储和访问的位置,并会影响数据库的工作性能和高可用性。
创建分布信息
创建分布信息表的方式 :
1、自动创建: 管理员根据业务需求,选择系统自带的分片分布规则,由系统自动生成分布信息表的创建方式。
2、手动创建: 管理员通过编辑XML配置文件,人为指定主、备分片存放位置来创建分布信息表。
语法:
gcadmin distribution <gcChangeInfo.xml> <p number> [d number] [extension] [pattern 1|2] [db_user user_name] [db_pwd password] [vc vc_name]
参数:
- gcChangeInfo.xml: 描述rack内的gnode节点信息文件。
- p number:每个数据节点存放的分片数量,p值*节点数<=65535。(pattern1模式要求该参数必须小于每个rack内的节点数(1<=p<rack内节点数)。
- d number:每个分片的备份数量,取值为0,1 或2。若不输入参数d,默认值为1。
- extension:生成的新 distribution 将原有分片尽可能分布到原节点上。
- pattern number:pattern1 为负载均衡模式,pattern 2 为高可用模式。默认为pattern 1。
- db_user user_name: 生成新 distribution 并且新旧 distribution 数据节点不完全相同时,需要在执行命令时传入数据库用户名。
- db_pwd password: 传入的数据库用户名对应的密码。
- vc vc_name:指定生成 distribution 的虚拟集群。
自动创建分布信息表的核心参数:
- 数据分布模板参数:
1、pattern 1 负载均衡模式
“Pattern 1”系统提供的默认模式。Pattern 1会根据rack的设定调整分片的分布方式。 “rack”就是机架,也可理解为机柜。本来是物理节点的布放方式,然而在数据库层面,可以理解为对Data节点的逻辑分组。每个rack就是一个逻辑分组,影响着主备分片的存放位置。
多rack
单rack
注意:rack与VC无关,它只是一个VC内的节点布局。
2、pattern 2 节点高可用模式
“Pattern 2”模式采用了将节点内的主分片自动完整备份到下一个节点的备份方式。其分布方式与rack无关,完全是针对节点的备份。
无rack概念
注:最多可以承受集群内一半节点的故障。适用于奇数节点和偶数节点分别部署在不同的机柜内。
- P参数: 每个节点上主分片的数量。
- d参数: 主分片的备份份数。
查看 VC 的 distribution
查看指定VC的分布信息表,主要查看分布信息表的ID、状态、主备分片的布放规则。
- 每新建一张分布表,分布信息表的ID自动加“1”。
- 每个VC内最多允许同时存在两张分布信息表。
- 新创建的分布表初始化后其分布表状态为“new”,同一VC中先前创建的分布表状态自动调整为“old”。
- 新入库的数据自动按照状态为“new”的分布表分布存储数据。
语法:
gcadmin showdistribution [node | f] [vc vc_name]
参数:
- node:按节点为单位,显示各节点分片
- f:以xml文件格式显示
- vc vc_name:显示指定vc的分布信息表
示例:
[gbase@181 ~]$ gcadmin showdistribution vc hr_vc
Distribution ID: 4 | State: new | Total segment num: 2
Primary Segment Node IP Segment ID Duplicate Segment node IP
========================================================================================================================
| 172.16.9.181 | 1 | 172.16.9.182 |
------------------------------------------------------------------------------------------------------------------------
| 172.16.9.182 | 2 | 172.16.9.181 |
========================================================================================================================
[gbase@181 ~]$ gcadmin showdistribution node vc hr_vc
Distribution ID: 4 | State: new | Total segment num: 2
============================================================================================
| nodes | 172.16.9.181 | 172.16.9.182 |
--------------------------------------------------------------------------------------------
| primary | 1 | 2 |
| segments | | |
--------------------------------------------------------------------------------------------
|duplicate | 2 | 1 |
|segments 1| | |
============================================================================================
导出 VC 的 distribution
将指定 ID 的 distribution 信息保存在指定的文件中,生成的文件为 xml 文件,用户可修改文件中的分片信息,然后使用该文件采用手动方式重新生成新的 distribution。
语法:
gcadmin getdistribution <ID> <distribution_info.xml> [vc vc_name ]
参数:
- ID:要获取的 distribution id。
- distribution_info.xml:保存 distribution 信息的文件名。
示例:
[gbase@181 ~]$ gcadmin getdistribution 4 distribution.xml vc hr_vc
gcadmin getdistribution 4 distribution.xml vc hr_vc ...
get segments information
write segments information to file [distribution.xml]
gcadmin getdistribution information successful
删除 VC 的 distribution
从集群中删除指定 id 的 distribution。若不输入 distribution id,则默认删除旧的 distribution,集群中只有一个 distribution 时则默认删除该 distribution。
语法:
gcadmin rmdistribution [ID] [vc vc_name ]
- 若distribution 为正在使用,则无法删除该 distribution。需先执行 refreshnodedatamap drop <ID>操作才可删除。若 distribution 中有 fevent log 需先清除才可删除该 distribution;
- 删除 distribution 时,需要先确认所有的 GCluster 节点服务正常,若有 GCluster 节点服务不正常,会导致删除 distribution 后产生无法恢复的 fevent log。
其它
1、获取帮助
语法:
gcadmin --help
2、查看版本
语法:
gcadmin -V