本文面向使用 KaiwuDB 分布式集群的开发者、DBA 和运维工程师分享数据库扩缩容的基本原理与工程实践。文章内容包括垂直扩展与水平扩展的区别、数据分片与数据重分布的工作机制、扩缩容过程中需要关注的一致性与成本问题以及 KaiwuDB 集群扩缩容的完整操作指南——涵盖多副本集群与单副本集群的扩容方式安装程序 / 命令行、多副本集群的节点退役缩容流程、操作前后的检查清单和注意事项。你可以理解分布式集群弹性的实现原理并能够在业务低峰期安全地完成 KaiwuDB 集群的扩容与缩容操作。文章目录一、为什么数据库需要弹性二、从“停机搬数据”到“在线弹性”三、KaiwuDB 集群的扩缩容能力四、KaiwuDB 集群扩容实操4.1 安装程序扩容4.2 命令行扩容五、KaiwuDB 集群缩容实操5.1 缩容前提条件5.2 操作步骤本文相关术语表本文 FAQ写在最后一、为什么数据库需要弹性原因很简单因为业务量是变化的。一个物联网平台可能在接入初期每天处理几百万条传感器数据一年后这个数字可能增长百倍也可能遇到项目结项、产线停产负载大幅下降。如果数据库集群的资源配置固定不变长期来看会出现两个问题资源不够时性能瓶颈拖累业务资源过剩时硬件和电力成本白白消耗。解决办法是让集群具备弹性负载增长时增加资源负载下降时回收资源。这引出一个前提问题——资源怎么加垂直扩展Scale-Up 是直觉上的做法换更强的 CPU、加更大的内存、挂更大的磁盘。单机升级简单但天花板明显单机硬件有物理上限而且扩容期间通常需要停机。水平扩展Scale-Out 是另一种思路不换更强的机器而是加更多的机器让多台服务器共同承担负载。水平扩展的上限高得多理论上可以无限加节点但它对数据库架构有硬性要求——数据必须被拆分成可以分布到多台机器上的单元。这就是数据分片Sharding的由来。分布式数据库将数据按规则切分为一个个分片KaiwuDB 中称为 Range分散存储在集群各节点上每个分片再按副本数如 三副本冗余到不同节点。当集群增加节点时系统可以把已有分片迁移到新节点上让数据重新均匀分布这个过程称为数据重分布Rebalance。重分布完成后新节点开始承担读写负载扩容才算真正生效。理解了这一层就能看清扩缩容的两个关键工程问题数据怎么迁分片是数据迁移的最小单元。迁移某个分片前需要在目标节点准备好副本并同步数据同步完成后再切换服务的主副本归属整个过程必须保证数据强一致、业务不中断。什么时候迁迁移占用网络带宽和磁盘 IO。在业务高峰期执行重分布会与正常业务竞争资源。因此扩缩容操作普遍建议安排在业务低峰期并预留足够的磁盘空间——迁移期间数据尚未清理完成源端和目标端会同时持有数据副本磁盘使用量会临时升高。缩容是扩容的逆过程但风险不对称。扩容只是增加承载能力而缩容要在移除节点的过程中保证数据不丢、服务不断。正确的做法不是直接关机而是先让节点退役拒绝新请求、允许存量请求完成、把该节点上的分片副本和租约逐一迁移到其他节点确认该节点不再持有任何数据后再将其移除。缩容也有一个底线剩余节点数必须仍然满足副本数要求否则部分分片将无处可迁操作会一直挂起。二、从“停机搬数据”到“在线弹性”数据库扩缩容的实践也经历了一个演进过程。早期单机架构下扩容就是换一台更大的机器或者停机把数据迁移到新服务器上。这个过程通常需要数小时甚至数天业务中断不可避免。主备架构出现后扩容的思路变成了“加备库”。但主备之间的数据同步是单向的备库加入后需要先做全量数据拷贝拷贝完成才能开始增量同步。对于TB级的数据这个“预热”过程可能持续数小时期间备库无法承担读请求。分布式数据库的成熟改变了局面。以Raft协议为代表的一致性协议让多副本之间的数据同步变得自动化和可靠。新节点加入集群后系统可以自动把部分副本迁移到新节点上迁移过程不影响正在进行的读写操作。这就好比从“搬家时全家停业”变成了“一边营业一边搬”——业务感知不到但容量已经悄悄增加了。KaiwuDB的多副本集群正是基于这一路线集群中的分片副本可以在节点之间自动迁移扩容和缩容操作在集群可用状态下即可执行即使发生扩缩容或节点故障系统仍能正常执行DDL、DML、DQL等各类数据库操作。三、KaiwuDB 集群的扩缩容能力KaiwuDB 支持集群的动态扩容和缩容不同集群类型的同集群类型的能力主要有以下三点差异这里有三点差异值得注意多副本集群扩容后自动重分布新节点加入后系统默认自动将现有数据均匀分布到所有节点确保负载均衡。如需关闭自动重分布可设置集群参数SETCLUSTER SETTING kv.allocator.ts_consider_rebalance.enabledfalse;重分布期间建议避免频繁执行 ALTER 语句以免延长重分布时间。单副本集群扩容不做存量迁移数据重分布仅对新建表生效已有数据仍留在原节点。这意味着单副本集群扩容主要提升的是新建数据的承载能力和整体吞吐存量热点不会自动均衡。有存量均衡需求的生产环境建议采用多副本集群。操作前的通用注意事项集群节点数必须在许可证允许范围内超出上限时扩容将被拒绝扩缩容期间时序索引相关的 DDL 操作如 CREATE INDEX、DROP INDEX可能返回超时错误操作完成后重试即可扩缩容期间因数据迁移需要磁盘使用量可能临时增加完成后恢复正常建议在业务低峰期执行操作。四、KaiwuDB 集群扩容实操KaiwuDB 提供安装程序扩容和命令行扩容两种方式用户可以根据不同需求来选择。安装程序扩容尤其命令行模式流程标准化、自动完成参数配置适合大多数场景命令行扩容适合已有自动化运维体系、需要精细控制启动参数如自定义 store 路径、多 join 地址的场景。两者对安全模式的证书要求不同需按部署方式提前准备。无论选择哪种方式开始前均需满足待扩容节点未安装 KaiwuDB目标集群处于运行状态当前节点数未达到许可证上限。4.1 安装程序扩容KaiwuDB 安装程序提供三种交互模式均支持安装 KaiwuDB 并加入集群适用于多副本集群和单副本集群操作流程一致命令行模式-c / --cli执行安装程序后输入 3 选择安装 KaiwuDB 并加入集群再按集群类型选择加入单副本集群或加入三副本集群依次填写目标集群任一节点地址与服务端口默认 26257、CA 证书路径非安全模式可跳过安装程序生成配置文件模板并打开编辑器确认保存后自动完成安装和入群。[global] secure_modetls # 安全模式需与目标集群一致 rest_port8080 # Admin UI 端口 kaiwudb_port26257 # 数据库服务端口 brpc_port27257 # 数据传输端口 data_root/var/lib/kaiwudb # 数据目录 [node1] host192.168.122.224 # 待扩容节点 IP port22 # SSH 端口 useradmin # SSH 用户 passwd****** # SSH 密码终端图形交互模式-i / --interact在菜单中选择安装 KaiwuDB 并加入集群逐项设置安全模式、各端口、数据目录、目标集群地址与端口、待扩容节点信息配置完成后开始安装。可视化 GUI 模式-g / --gui向导式操作在参数配置页设置与目标集群一致的参数在节点管理页添加待扩容节点并勾选加入集群填写目标集群参数后开始安装。三种模式安装完成后均通过以下命令检查新节点是否成功加入kw-status4.2 命令行扩容登录待扩容节点按集群类型执行加入命令。多副本集群使用 kwbase start单副本集群使用 kwbase start-single-replica两者参数相同区别在于副本机制不同。以非安全模式的多副本集群为例kwbase_path/kwbase start\--insecure\--storedata_dir\--brpc-addr:27257\--listen-addrnew_node_ip:kaiwudb_port\--http-addrnew_node_ip:rest_port\--joinnode_address_list\--background参数说明加入后通过 kwbase node status或监控平台 / kw-status确认节点状态。多副本集群此时会自动触发数据重分布待分片均衡后新节点开始承担负载。五、KaiwuDB 集群缩容实操KaiwuDB 目前支持多副本集群和双副本集群的命令行缩容方式。用户主动移除节点时KaiwuDB 会允许节点完成正在执行的请求拒绝任何新的请求同时将该节点上的分区副本和分区租约迁移到其他节点以确保数据的平稳迁移。节点可以根据实际需求选择永久移除以最大程度地保障系统的可用性和数据的完整性。以下几点需要重点关注移除节点时必须确保有其他节点可以接管该节点的分区副本。如果没有可用的其他节点移除操作将无限期挂起。KaiwuDB 多副本集群采用三副本机制最小集群节点数为 3不允许进一步缩容。双副本集群缩容时退役数据节点要求集群中至少存在 3 个数据节点退役仲裁节点要求集群中至少存在 2 个仲裁节点。不满足上述条件时退役操作将失败。如果之前通过 CONFIGURE ZONE 语句设置了副本约束且约束规则中包含待缩容节点可能会影响集群缩容的正常运行。此时需要重新配置约束规则将待缩容节点从规则中移除集群缩容即可恢复正常。节点退役后如需再次加入集群需要先清空数据目录作为新节点重新加入集群。5.1 缩容前提条件集群内所有节点均处于存活状态is_available 和 is_live 均为 true可通过 kw-status 或 kwbase node status 确认已通过监控平台或命令获得待退役节点的 ID集群中不存在不可用分区或副本不足的分区可通过以下 SQL 检查SELECTsum((metrics-ranges.unavailable)::DECIMAL)::INTASranges_unavailable,sum((metrics-ranges.underreplicated)::DECIMAL)::INTASranges_underreplicatedFROMkwdb_internal.kv_store_status;5.2 操作步骤执行节点退役命令在集群任一节点执行# 非安全模式[kwbase_path]/kwbasenodedecommissionnode_id--insecure[--hostaddress_of_any_alive_node]# TLS 安全模式[kwbase_path]/kwbasenodedecommissionnode_id--certs-dircert_path[--hostaddress_of_any_alive_node]# TLCP 安全模式[kwbase_path]/kwbasenodedecommissionnode_id--certs-dircert_path[--hostaddress_of_any_alive_node]--tlcp等待迁移完成。通过以下命令观察退役进度节点状态变为 decommissioning其上的副本数缩减到 0 时退役完成# 非安全模式[kwbase_path]/kwbasenodestatus--insecure[--hostaddress_of_any_alive_node]--decommission# TLS 安全模式[kwbase_path]/kwbasenodestatus --certs-dircert_path[--hostaddress_of_any_alive_node]--decommission# TLCP 安全模式[kwbase_path]/kwbasenodestatus --certs-dircert_path[--hostaddress_of_any_alive_node]--decommission--tlcp3.可选如需将退役节点彻底移出集群可执行以下命令# 非安全模式[kwbase_path]/kwbase quit--insecure--hostdecommissioned_node# TLS 安全模式[kwbase_path]/kwbase quit --certs-dircert_path--hostdecommissioned_node# TLCP 安全模式[kwbase_path]/kwbase quit --certs-dircert_path--hostdecommissioned_node--tlcp4.可选确认移除结果通过 kw-status 或 kwbase node status 确认节点已不在集群中。# TLS 安全模式[kwbase_path]/kwbasenodestatus --certs-dircert_path[--hostaddress_of_any_alive_node]# TLCP 安全模式[kwbase_path]/kwbasenodestatus --certs-dircert_path[--hostaddress_of_any_alive_node]--tlcp# 非安全模式[kwbase_path]/kwbasenodestatus--insecure[--hostaddress_of_any_alive_node]本文相关术语表术语全称说明Scale-Up / 垂直扩展—通过升级单机硬件CPU、内存、磁盘扩展能力存在物理上限通常需停机Scale-Out / 水平扩展—通过增加服务器节点扩展能力依赖数据分片机制数据分片 / Sharding—将数据按规则切分为独立单元KaiwuDB 中为 Range分布存储在不同节点Range—KaiwuDB 中数据分片的单位副本 / Replica—分片的冗余拷贝多副本集群默认三副本数据重分布 / Rebalance—节点变化后系统自动在各节点间迁移分片使数据重新均衡的过程租约 / Lease—分片主副本的服务权归属决定哪个副本对外提供该分片的读写服务退役 / Decommission—节点主动退出的标准化流程拒新请求、放完存量请求、迁走副本与租约kwbase—KaiwuDB 的命令行工具提供 start、node、quit、sql 等子命令kw-status—安装程序部署方式下的集群状态检查命令data_root—KaiwuDB 数据目录默认 /var/lib/kaiwudb不可用分区 / ranges.unavailable—因副本缺失而不可访问的分片扩缩容前必须为 0副本不足分区 / ranges.underreplicated—存活副本数低于副本数要求的分片扩缩容前必须为 0本文 FAQQ1KaiwuDB 扩容后数据会自动均衡吗多副本集群会自动触发重分布将现有数据均匀分布到所有节点单副本集群的重分布仅对新建表生效已有数据不迁移。如果关闭了自动重分布参数kv.allocator.ts_consider_rebalance.enabled false多副本集群也不会自动均衡。Q2KaiwuDB 扩容期间业务会受影响吗正常情况下不中断但数据迁移会占用网络带宽和磁盘 IO建议业务低峰期执行。期间时序索引类 DDL 可能返回超时错误操作完成后重试即可。磁盘使用量会因迁移临时升高需预留空间。Q3KaiwuDB 缩容操作一直挂起是什么原因最常见的原因是没有足够的节点接管待退役节点的分片副本。多副本集群最小节点数为 3缩容到 3 节点以下会被拒绝另外如果通过 CONFIGURE ZONE 设置了包含该节点的副本约束也会阻塞迁移需先移除约束。Q4KaiwuDB 退役过的节点还能重新加入集群吗可以但必须先清空该节点的数据目录然后作为全新节点执行扩容流程加入。写在最后扩缩容是分布式数据库弹性最直接的体现但它的本质不是简单的加减机器而是数据的迁移与再均衡。扩容的关键在于分片能否自动、平滑地重分布缩容的关键在于数据能否先迁走、节点再退役。KaiwuDB 多副本集群把这两条路径都做成了自动化流程扩容后自动均衡缩容时自动迁移副本和租约。