GBase 8c DN节点扩容缩容使用解析
在生产环境中用户会面临业务需求增长时系统自动增加数据库节点以保证计算存储能力。在业务需求下降时系统自动减少数据库节点以节约成本。一、概述GBase 8c 数据库支持对于数据节点的在线扩缩容操作。gha_ctl 提供扩缩容接口支持对 datanode 节点进行扩容及缩容操作。在进行扩缩容期间集群能对现有数据表进行正常的读写操作。扩缩容后需保证数据库集群的数据一致性。在进行扩容时将既存节点的数据迁移一部分到新加入节点进行缩容时将删除节点的数据迁移到保留节点上。支持 Replication 表的在线扩容缩容。支持 hashbucket 表的在线扩容缩容。注意扩容后 DN 高可用组的副本数应保持一致否则存在风险。二、扩容操作步骤GBase 8c 数据库集群扩容的步骤如下(1) 在新增节点的主机上配置集群节点间互信。生成新主机密钥并传至其他所有节点ssh-keygen -t rsa ssh-copy-id rootip ssh-copy-id gbaseip注意该步骤必须配置并检查如配置互信过程出错可能影响后续步骤。(2) 在集群中添加新增节点的 IP在 DCS 节点上执行命令gha_ctl deploy host_ip -l http://dcs_ip:2379执行返回以下信息即为操作成功{ ret:0, msg:Success }(3) 执行扩容命令。将原集群的 M 个 DN 主备组扩容为 N 个主备组NM将新增加的每一个主备组信息用一组引号单独括起来每个主备的信息是 DN 组名 用括号括起来的所有主备节点的信息一个节点用一个括号。语法如下gha_ctl expand datanode new_group1 (name1_1 host1_1 port1_1 dir1_1 agent_port1_1 agent_host1_1) (name1_2 host1_2 port1_2 dir1_2 agent_port1_2 agent_host1_2) new_group2 (name2_1 host2_1 port2_1 dir2_1 agent_port2_1 agent_host2_1) (name2_2 host2_2 port2_2 dir2_2 agent_port2_2 agent_host2_2) [...] -l dcslist [-c cluster] -u uuid -j parallel_num [-a/--action retry|rollback] -U/--user user_name -W/ --password password其中参数说明new_group指定新增高可用组的名称。可根据需要同时扩充多个高可用组。name指定高可用组内的 DN 节点名称一般格式应为 dn[数字]_[数字]。host指定扩容高可用组内对应 DN 节点的 IP。port指定对应 DN 节点的端口号。同高可用组内端口需一致。当资源限制需重复使用同一节点在不同高可用组内分别承担主备角色时需将两个高可用组端口设置不同避免端口复用而报错。dir指定对应 DN 节点的存储路径。agent_port指定对应 DN 节点的代理端口号。agent_host为可选参数。缺省值为 host 参数值。指定 DN 节点控制面 IP。-u uuid通过唯一标识指定数据库。uuid 可以用如下命令生成cat /proc/sys/kernel/random/uuid-j parallel_num指定扩容时并行执行参数多表同时执行重分布。默认值为 1。-a,--action指定扩容失败后的动作可选值为 retry、rollback分别表示失败后重试、失败后回退。-U, --user指定连接的数据库用户。-W, --password指定数据库用户的登录密码。限制为避免数据库扩容过程中可能出现的数据丢失问题扩容新增的节点必须是按照组名排序后处在最后的分片。示例示例一扩容 DN2 高可用组组内主节点为 10.0.7.6备节点 10.0.7.7。cat /proc/sys/kernel/random/uuid 40ac7d83-6be3-486c-83c4-8942a16d3590 gha_ctl expand datanode dn2 (dn2_1 10.0.7.6 15466 /home/gbase/data/dn2_1 8011 10.0.7.6) (dn2_2 10.0.7.7 15466 /home/gbase/data/dn2_2 8012 10.0.7.7) -l http://10.0.7.7:2379 -u 40ac7d83-6be3-486c-83c4-8942a16d3590 -U testadmin -W Gbase,123返回以下信息表示扩容成功{ ret:0, msg:Success }查看数据库集群状态gha_ctl monitor all -H -l** **http://10.0.7.7:2379 --------------------------------------------------- | No | name | host | port | state | leader | --------------------------------------------------- | 0 | gha_server1 | 10.0.7.7 | 20001 | running | True | --------------------------------------------------- ----------------------------------------------------------------------- | No | name | host | port | work_dir | state | role | ----------------------------------------------------------------------- | 0 | gtm1 | 10.0.7.7 | 6666 | /home/gbase/data/gtm/gtm1 | running | primary | | 1 | gtm2 | 10.0.7.8 | 6666 | /home/gbase/data/gtm/gtm2 | running | standby | ----------------------------------------------------------------------- ------------------------------------------------------------------------ | No | name | host | port | work_dir | state | role | ------------------------------------------------------------------------ | 0 | cn1 | 10.0.7.7 | 5432 | /home/gbase/data/coord/cn1 | running | primary | | 1 | cn2 | 10.0.7.8 | 5432 | /home/gbase/data/coord/cn2 | running | primary | ------------------------------------------------------------------------ --------------------------------------------------------------------------------- | No | group | name | host | port | work_dir | state | role | --------------------------------------------------------------------------------- | 0 | dn1 | dn1_1 | 10.0.7.7 | 15432 | /home/gbase/data/dn1/dn1_1 | running | primary | | 1 | dn1 | dn1_2 | 10.0.7.8 | 15432 | /home/gbase/data/dn1/dn1_2 | running | standby | --------------------------------------------------------------------------------- ----------------------------------------------------- | No | url | name | state | isLeader | ----------------------------------------------------- | 0 | http://10.0.7.7:2379 | node_0 | healthy | True | | 1 | http://10.0.7.8:2379 | node_1 | healthy | False | | 2 | http://10.0.7.9:2379 | node_2 | healthy | False | -----------------------------------------------------二、缩容语法格式gha_ctl shrink datanode del_group1 [del_group2 ...] -l dcslist [-c cluster] -u uuid -j parallel_num [-a/--action retry|rollback]将原集群的 M 个 DN 主备组缩容为 N 个主备组NMdel_group1, del_group2 为缩容时需要删除的 DN 主备组名称。其他参数说明同上。限制为避免数据库缩容过程中可能出现的数据丢失问题缩容的节点必须是按照组名排序后处在最后的分片。示例gha_ctl shrink datanode dn3 dn4 -l http://10.0.7.7:2379 -u b99ee57c-8b90-4196-896c-19d58bdaae6a三、查询扩缩容结果语法格式gha_ctl get expand latest/history -l dcslist [-c cluster]示例gha_ctl get expand latest -l http://10.0.7.16:2379 gha_ctl get expand history -l http://10.0.7.16:2379