在生产环境中,用户会面临业务需求增长时,系统自动增加数据库节点以保证计算存储能力。在业务需求下降时,系统自动减少数据库节点以节约成本。
一、概述
GBase 8c 数据库支持对于数据节点的在线扩缩容操作。
- gha_ctl 提供扩缩容接口,支持对 datanode 节点进行扩容及缩容操作。
- 在进行扩缩容期间,集群能对现有数据表进行正常的读写操作。
- 扩缩容后,需保证数据库集群的数据一致性。在进行扩容时,将既存节点的数据迁移一部分到新加入节点,进行缩容时,将删除节点的数据迁移到保留节点上。
- 支持 Replication 表的在线扩容缩容。
- 支持 hashbucket 表的在线扩容缩容。
注意:扩容后 DN 高可用组的副本数应保持一致,否则存在风险。
二、扩容
操作步骤
GBase 8c 数据库集群扩容的步骤如下:
(1) 在新增节点的主机上配置集群节点间互信。生成新主机密钥并传至其他所有节点:
ssh-keygen -t rsa ssh-copy-id root@ip ssh-copy-id gbase@ip注意:该步骤必须配置并检查,如配置互信过程出错,可能影响后续步骤。
(2) 在集群中添加新增节点的 IP,在 DCS 节点上执行命令:
gha_ctl deploy host_ip -l http://dcs_ip:2379执行返回以下信息,即为操作成功,
{ "ret":0, "msg":"Success" }(3) 执行扩容命令。
将原集群的 M 个 DN 主备组扩容为 N 个主备组(N>M),将新增加的每一个主备组信息用一组引号单独括起来,每个主备的信息是 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 个主备组(N<M),del_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