集群扩缩容
集群扩容
说明
- 扩容集群时,如果集群中的节点数量少于许可证限制的节点数量时,用户可以正常扩容集群。否则,禁止用户扩容集群。
- 集群执行扩容期间,可能会出现短暂的数据查询不完整情况,操作完成后,系统将自动同步并确保数据查询的完整性和准确性。
KaiwuDB 多副本集群和单副本集群均支持集群扩容操作。
多副本集群扩容
KaiwuDB 多副本集群的扩容非常简单,只需要将待扩容节点加入到现有集群,集群就能自动完成数据的重分布。
在扩容期间,由于数据迁移,集群所需的磁盘总容量可能会增加。一旦扩容完成,集群所需的磁盘总容量将会回落到扩容前的水平,仅有细微差异。
在扩容期间执行时序索引相关的 DDL 操作可能会报错,扩容完成后操作会执行成功。
在扩容期间,如果频繁执行 ALTER
语句操作,可能会延迟扩容后的数据自平衡。
前提条件:
- 待扩容节点已通过多副本集群部署方式安装 KaiwuDB, 具体操作信息,参见集群部署。
- 目标集群已启动。
- 如果集群采用安全部署模式,已备好
kaiwudb_certs.tar.gz
文件。
步骤:
登录需要加入集群的节点。
如果集群采用安全部署模式,将部署后在安装包目录生成的
kaiwudb_certs.tar.gz
文件复制到当前节点。执行加入集群命令。
提示
以下命令仅列出了常用的启动参数,KaiwuDB支持的所有启动参数见启动参数。
TLS 安全模式
<kwbase_path>/kwbase start --certs-dir=<cert_path> --store=<data_dir> --listen-addr=<new_node>:<kaiwudb_port> --http-addr=<new_node>:<rest_port> --join=<node_address_list> --background
TLCP 安全模式
<kwbase_path>/kwbase start --certs-dir=<cert_path> --store=<data_dir> --listen-addr=<new_node>:<kaiwudb_port> --http-addr=<new_node>:<rest_port> --join=<node_address_list> --background --tlcp
非安全模式
<kwbase_path>/kwbase start --insecure --store=<data_dir> --listen-addr=<node4_address>:26257 --http-addr=<new_node>:<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>:<kaiwudb_port>
: 可选参数,用于指定新节点地址和KaiwuDB服务端口,默认端口为26257
。<new_node>:<rest_port>
: 可选参数,用于指定新节点地址以及KaiwuDB 监控平台和 RESTful 的端口,默认端口为8080
。<node_address_list>
: 必选参数,待连接的集群节点列表,支持指定一个或多个节点地址,节点地址间使用逗号隔开。--background
: 可选参数,在后台运行。
使用 KaiwuDB 监控平台或以下命令检查集群节点状态。
TLS 安全模式
<kwbase_path>/kwbase node status --certs-dir=<cert_path> [--host=<address_of_any_alive_node>]
TLCP 安全模式
<kwbase_path>/kwbase node status --certs-dir=<cert_path> [--host=<address_of_any_alive_node>] --tlcp
非安全模式
<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
。
单副本集群扩容
KaiwuDB 单副本集群的扩容非常简单,只需要将待扩容节点加入到现有集群即可。
前提条件:
- 待扩容节点已通过单副本集群部署方式安装 KaiwuDB, 具体操作信息,参见集群部署。
- 目标集群已启动。
- 如果集群采用安全部署模式,已备好
kaiwudb_certs.tar.gz
文件。
步骤:
登录需要加入集群的节点。
如果集群采用安全部署模式,将部署后在安装包目录生成的
kaiwudb_certs.tar.gz
文件复制到当前节点。执行加入集群命令。
提示
以下命令仅列出了常用的启动参数,KaiwuDB支持的所有启动参数见启动参数。
TLS 安全模式
<kwbase_path>/kwbase start-single-replica --certs-dir=<cert_path> --store=<data_dir> --listen-addr=<new_node>:<kaiwudb_port> --http-addr=<new_node>:<rest_port> --join=<node_address_list> --background
TLCP 安全模式
<kwbase_path>/kwbase start-single-replica --certs-dir=<cert_path> --store=<data_dir> --listen-addr=<new_node>:<kaiwudb_port> --http-addr=<new_node>:<rest_port> --join=<node_address_list> --background --tlcp
非安全模式
<kwbase_path>/kwbase start-single-replica --insecure --store=<data_dir> --listen-addr=<node4_address>:26257 --http-addr=<new_node>:<rest_port> --join=<node_address_list> --background
使用KaiwuDB 监控平台或以下命令检查集群节点状态。
TLS 安全模式
<kwbase_path>/kwbase node status --certs-dir=<cert_path> [--host=<address_of_any_alive_node>]
TLCP 安全模式
<kwbase_path>/kwbase node status --certs-dir=<cert_path> [--host=<address_of_any_alive_node>] --tlcp
非安全模式
<kwbase_path>/kwbase node status --insecure [--host=<address_of_any_alive_node>]
集群缩容
目前,单副本集群不支持集群缩容操作。
在多副本集群中,用户主动移除节点时,KaiwuDB 会允许节点完成正在执行的请求,拒绝任何新的请求,同时将该节点上的分区副本和分区租约迁移到其他节点,以确保数据的平稳迁移。移除后的节点可以根据实际需求选择永久移除,以最大程度地保障系统的可用性和数据的完整性。
注意
- 移除节点时,必须确保有其他节点可以接管该节点的分区副本。如果没有可用的其他节点,移除操作将无限期挂起。
- KaiwuDB 集群采用三副本机制,最小集群节点数为 3,不允许进一步缩容。
- 在缩容过程中,缩容节点的重启可能导致宕机。
在缩容期间,由于数据迁移,集群所需的磁盘总容量可能会增加。一旦缩容完成,集群所需的磁盘总容量将会回落到缩容前的水平,仅有细微差异。
缩容期间,因数据分区迁移,时序索引相关的 DDL 操作可能会报错,数据查询可能不完整,但缩容完成后将确保操作成功执行且数据查询完整准确。
节点退役后再次加入集群时,需要清空数据目录作为新节点重新加入集群。
前提条件:
集群内所有节点均处于存活状态(
is_available
和is_live
均为true
)。使用 KaiwuDB 监控平台:
使用命令:
在安装包目录执行集群节点状态查看命令:
./deploy.sh cluster --status
通过
kwbase node status
命令查看节点状态:<kwbase_path>/kwbase node status [--host=<ip:port>] [--insecure | --certs-dir=<path>]
已通过 KaiwuDB 监控平台或命令获得待退役节点的 ID。
没有不可用分区和副本不足分区。
使用 KaiwuDB 监控平台:
使用命令:
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;
步骤:
登录集群中的任一节点,执行节点退役命令:
TLS 安全模式
<kwbase_path>/kwbase node decommission <node_id> --certs-dir=<cert_path> [--host=<address_of_any_alive_node>]
TLCP 安全模式
<kwbase_path>/kwbase node decommission <node_id> --certs-dir=<cert_path> [--host=<address_of_any_alive_node>] --tlcp
非安全模式
<kwbase_path>/kwbase node decommission <node_id> --insecure [--host=<address_of_any_alive_node>]
使用 KaiwuDB 监控平台或以下命令检查集群节点状态。退役节点状态变为
decommissioning
, 节点上的副本数缩减到0
时表示退役完成。TLS 安全模式
<kwbase_path>/kwbase node status --certs-dir=<cert_path> [--host=<address_of_any_alive_node>] --decommission
TLCP 安全模式
<kwbase_path>/kwbase node status --certs-dir=<cert_path> [--host=<address_of_any_alive_node>] --decommission --tlcp
非安全模式
<kwbase_path>/kwbase node status --insecure [--host=<address_of_any_alive_node>] --decommission
(可选)如需将退役节点彻底移出集群,执行以下命令:
TLS 安全模式
<kwbase_path>/kwbase quit --certs-dir=<cert_path> --host=<decommissioned_node>
TLCP 安全模式
<kwbase_path>/kwbase quit --certs-dir=<cert_path> --host=<decommissioned_node> --tlcp
非安全模式
<kwbase_path>/kwbase quit --insecure --host=<decommissioned_node>
(可选)使用 KaiwuDB 监控平台或以下命令检查集群节点是否移除成功。
TLS 安全模式
<kwbase_path>/kwbase node status --certs-dir=<cert_path> [--host=<address_of_any_alive_node>]
TLCP 安全模式
<kwbase_path>/kwbase node status --certs-dir=<cert_path> [--host=<address_of_any_alive_node>] --tlcp
非安全模式
<kwbase_path>/kwbase node status --insecure [--host=<address_of_any_alive_node>]