集群扩缩容
KWDB 支持集群的动态扩容和缩容操作,以满足不同业务场景下的容量和性能需求。不同集群类型的扩缩容特性如下:
| 集群类型 | 扩容 | 缩容 | 数据重分布机制 | 操作方式 |
|---|---|---|---|---|
| 多副本集群 | 支持 | 支持 | 自动触发,平衡所有节点数据 | 脚本 / 命令行 |
| 单副本集群 | 支持 | 不支持 | 仅对新建表生效,已有数据不迁移 | 命令行 |
说明
- 数据查询:扩缩容期间,可能会出现短暂的数据查询不完整情况,操作完成后,系统将自动同步并确保数据查询的完整性和准确性。
- DDL 操作:扩缩容期间,时序索引相关的 DDL 操作(如
CREATE INDEX、DROP INDEX)可能返回超时错误,操作完成后重试即可。 - 磁盘容量:扩缩容期间,因数据迁移需要,集群磁盘使用量可能临时增加。操作完成后将恢复正常水平。
- 操作建议:建议在业务低峰期执行扩缩容操作,以降低对业务的影响。
集群扩容
多副本集群扩容
KWDB 多副本集群支持脚本扩容和命令行扩容两种方式。扩容完成后,集群会自动进行数据重分布,确保负载均衡。
数据重分布
扩容完成后,系统默认自动将现有数据均匀分布到所有节点。如需关闭自动重分布功能,可设置以下参数:
SET CLUSTER SETTING kv.allocator.ts_consider_rebalance.enabled = false;
重分布期间建议避免频繁执行 ALTER 语句,以免延长数据重分布时间。
前提条件
- 待扩容节点已通过多副本集群部署方式完成 KWDB 安装(参见集群部署)
- 目标集群处于运行状态
- 脚本扩容方式:待扩容节点需使用脚本部署方式安装
- 命令行扩容方式:如采用安全部署模式,需准备
kaiwudb_certs.tar.gz证书文件 - 用户权限(仅安全模式需要):
- 主节点的
sudo权限,用于准备和打包证书文件 - 主节点到待扩容节点的 SSH 登录权限,用于传输证书
- 待扩容节点安装目录的写入权限
- 主节点的
脚本扩容
(可选)如果集群采用安全部署模式,需要在主节点上准备并传输证书文件到待扩容节点。
登录集群主节点(集群初始部署节点),进入安装包目录:
cd <install_dir>将 KWDB 的安全证书和密钥复制到当前目录:
sudo cp /etc/kaiwudb/certs/ca.key ./ sudo cp /etc/kaiwudb/certs/ca.crt ./将文件所有者修改为 kaiwudb 用户:
sudo chown kaiwudb:kaiwudb ./ca.key ./ca.crt设置证书文件权限:
sudo chmod 644 ./ca.crt打包证书文件:
sudo tar -czf kaiwudb_certs.tar.gz ./ca.key ./ca.crt将压缩包传输到待扩容节点:
scp kaiwudb_certs.tar.gz <username>@<new_node_ip>:<install_dir>
登录待扩容节点,在安装包目录执行加入集群命令:
安全模式
./deploy.sh join --addr <any_cluster_node_ip>:<port> --tls非安全模式
./deploy.sh join --addr <any_cluster_node_ip>:<port>
参数说明:
<any_cluster_node_ip>:集群任一健康节点的 IP 地址,例如192.168.122.221。<port>:KWDB 服务端口,默认端口为26257。
执行以下命令检查新节点是否成功加入:
kw-status
命令行扩容
登录待扩容节点。
如果集群采用安全部署模式,将
kaiwudb_certs.tar.gz复制到当前节点并解压到/etc/kaiwudb/certs目录。执行加入集群命令:
提示
以下命令仅列出了常用的启动参数,KWDB 支持的所有启动参数见启动参数。
安全模式
<kwbase_path>/kwbase start \ --certs-dir=<cert_path> \ --store=<data_dir> \ --brpc-addr=:27257 \ --listen-addr=<new_node_ip>:<kaiwudb_port> \ --http-addr=<new_node_ip>:<rest_port> \ --join=<node_address_list> \ --background非安全模式
<kwbase_path>/kwbase start \ --insecure \ --store=<data_dir> \ --brpc-addr=:27257 \ --listen-addr=<new_node_ip>:<kaiwudb_port> \ --http-addr=<new_node_ip>:<rest_port> \ --join=<node_address_list> \ --background
参数说明:
<kwbase_path>:kwbase 二进制文件所在目录,裸机部署默认目录为/usr/local/kaiwudb/bin,容器部署默认目录为/kaiwudb/bin。<cert_path>:指定存放证书和密钥的文件夹,默认存储位置为/etc/kaiwudb/certs。<data_dir>:可选参数,用于指定节点的数据和日志存储位置,默认位置为/var/lib/kaiwudb。<new_node_ip>:<kaiwudb_port>:可选参数,用于指定新节点地址和 KWDB 服务端口,默认端口为26257。<new_node_ip>:<rest_port>:可选参数,用于指定新节点地址以及 RESTful 的端口,默认端口为8080。<node_address_list>:待连接的集群节点列表,支持指定一个或多个节点地址,节点地址间使用逗号隔开。--background:可选参数,在后台运行。
使用以下命令检查集群节点状态:
安全模式
<kwbase_path>/kwbase node status --certs-dir=<cert_path> [--host=<address_of_any_alive_node>]非安全模式
<kwbase_path>/kwbase node status --insecure [--host=<address_of_any_alive_node>]
参数说明:
<kwbase_path>:kwbase 二进制文件所在目录,裸机部署默认目录为/usr/local/kaiwudb/bin,容器部署默认目录为/kaiwudb/bin。<cert_path>:证书目录,默认存储位置为/etc/kaiwudb/certs。--host=<address_of_any_alive_node>:可选参数,用于指定执行命令的节点,该节点必须为健康节点,地址格式为<ip>:<port>,不指定时默认使用127.0.0.1:26257。
单副本集群扩容
KWDB 单副本集群的扩容非常简单,只需要将待扩容节点加入到现有集群即可。
前提条件
- 待扩容节点已通过单副本集群部署方式安装 KWDB,具体操作信息,参见集群部署。
- 目标集群已启动。
- 如果集群采用安全部署模式,已备好
kaiwudb_certs.tar.gz文件。
步骤
登录待扩容节点。
如果集群采用安全部署模式,将
kaiwudb_certs.tar.gz复制到当前节点并解压到/etc/kaiwudb/certs目录。执行加入集群命令:
提示
以下命令仅列出了常用的启动参数,KWDB 支持的所有启动参数见启动参数。
安全模式
<kwbase_path>/kwbase start-single-replica \ --certs-dir=<cert_path> \ --store=<data_dir> \ --brpc-addr=:27257 \ --listen-addr=<new_node_ip>:<kaiwudb_port> \ --http-addr=<new_node_ip>:<rest_port> \ --join=<node_address_list> \ --background非安全模式
<kwbase_path>/kwbase start-single-replica \ --insecure \ --store=<data_dir> \ --brpc-addr=:27257 \ --listen-addr=<new_node_ip>:<kaiwudb_port> \ --http-addr=<new_node_ip>:<rest_port> \ --join=<node_address_list> \ --background
使用以下命令检查集群节点状态:
脚本部署
kw-statuskwbase 命令
# 安全模式 <kwbase_path>/kwbase node status --certs-dir=<cert_path> [--host=<address_of_any_alive_node>] # 非安全模式 <kwbase_path>/kwbase node status --insecure [--host=<address_of_any_alive_node>]
集群缩容
目前,单副本集群不支持集群缩容操作。
KWDB 多副本集群支持脚本缩容和命令行缩容两种方式。用户主动移除节点时,KWDB 会允许节点完成正在执行的请求,拒绝任何新的请求,同时将该节点上的分区副本和分区租约迁移到其他节点,以确保数据的平稳迁移。移除后的节点可以根据实际需求选择永久移除,以最大程度地保障系统的可用性和数据的完整性。
注意
- 移除节点时,必须确保有其他节点可以接管该节点的分区副本。如果没有可用的其他节点,移除操作将无限期挂起。
- KWDB 集群采用三副本机制,最小集群节点数为 3,不允许进一步缩容。
- 如果之前通过
CONFIGURE ZONE语句设置了副本约束,且约束规则中包含待缩容节点,可能会影响集群缩容的正常运行。此时需要重新配置约束规则,将待缩容节点从规则中移除,集群缩容即可恢复正常。
节点退役后如需再次加入集群时,需要先清空数据目录,作为新节点重新加入集群。
前提条件
集群内所有节点均处于存活状态(
is_available和is_live均为true):脚本部署
kw-status在安装包目录执行集群节点状态查看命令
./deploy.sh cluster --status通过
kwbase node status命令查看节点状态<kwbase_path>/kwbase node status [--host=<ip:port>] [--insecure | --certs-dir=<path>]
已获得待退役节点的 ID。
没有不可用分区和副本不足分区:
SELECT sum((metrics->>'ranges.unavailable')::DECIMAL)::INT AS ranges_unavailable, sum((metrics->>'ranges.underreplicated')::DECIMAL)::INT As ranges_underreplicated FROM kwdb_internal.kv_store_status;
脚本缩容
登录需要移除的节点,在安装包目录执行节点退役命令:
./deploy.sh decommission在同级目录下查看
decommission_progress文件,监控剩余副本数。待剩余副本数为 0 后,停止数据库运行:
systemctl stop kaiwudb使用以下命令确认节点已成功移除:
kw-status
命令行缩容
登录集群中的任一节点,执行节点退役命令:
安全模式
<kwbase_path>/kwbase node decommission <node_id> --certs-dir=<cert_path> [--host=<address_of_any_alive_node>]非安全模式
<kwbase_path>/kwbase node decommission <node_id> --insecure [--host=<address_of_any_alive_node>]
使用以下命令检查集群节点状态。退役节点状态变为
decommissioning,节点上的副本数缩减到0时表示退役完成。安全模式
<kwbase_path>/kwbase node status --certs-dir=<cert_path> [--host=<address_of_any_alive_node>] --decommission非安全模式
<kwbase_path>/kwbase node status --insecure [--host=<address_of_any_alive_node>] --decommission
(可选)如需将退役节点彻底移出集群,执行以下命令:
安全模式
<kwbase_path>/kwbase quit --certs-dir=<cert_path> --host=<decommissioned_node>非安全模式
<kwbase_path>/kwbase quit --insecure --host=<decommissioned_node>
(可选)使用以下命令确认节点已成功移除:
脚本部署
kw-statuskwbase 命令
# 安全模式 <kwbase_path>/kwbase node status --certs-dir=<cert_path> [--host=<address_of_any_alive_node>] # 非安全模式 <kwbase_path>/kwbase node status --insecure [--host=<address_of_any_alive_node>]