很多新手 DBA 会觉得扩缩容就是加机器删机器,实际远没有这么简单。分片迁移、副本、租约每一步出错,都可能造成业务抖动。
1、为什么我们需要集群弹性
业务流量不是恒定的,业务上涨,数据库压力打满;业务回落,资源白白浪费。
垂直扩展 Scale‑Up:升级单机硬件,简单但是有硬件上限,大多场景要停机。
水平扩展 Scale‑Out:新增节点分担压力,需要数据库支持分片。
KaiwuDB 最小分片单元叫 Range,分片多副本分散存储。新增节点触发 Rebalance 数据重分布,分片迁移完成扩容才真正生效。缩容不能直接关机,要走 decommission 退役流程,先迁移副本租约再移除节点。
踩坑提醒:迁移会吃带宽和磁盘 IO,务必业务低峰操作,磁盘占用会临时升高,预留磁盘空间。
2、扩缩容架构演进
单机架构:停机迁移,业务中断。
主备架构:新增备库需要全量拷贝预热,预热完成才能承接读流量。
分布式 Raft 多副本:在线迁移副本,业务读写不中断,KaiwuDB 多副本集群就是这套方案。
3、KaiwuDB 三种集群扩缩容能力

坑:扩缩容过程中,时序索引 DDL 容易超时,等操作结束重试即可;节点数不能超过 license 限制。
3.1 扩容实操
有两种方式:安装程序(cli/gui/interact)适合标准化交付;命令行适合自动化运维平台,自定义参数。 前置条件:集群正常运行,待扩容节点无 KaiwuDB 部署,节点数未达许可证上限。
命令行示例(非安全模式多副本)
ini
<kwbase_path>/kwbase start \
--insecure \
--store=/var/lib/kaiwudb \
--brpc-addr=:27257 \
--listen-addr=新节点IP:26257 \
--http-addr=新节点IP:8080 \
--join=集群已有节点地址 \
--background
执行完用kwbase node status确认节点入群,多副本集群自动触发重分布。
3.2 缩容实操(仅多副本、双副本集群)
健康检查,确认无不可用、副本不足分片
sql
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;
执行节点退役
css
<kwbase_path>/kwbase node decommission <node_id> --insecure --host=集群存活节点
观察退役进度,副本数降到 0 代表完成
css
<kwbase_path>/kwbase node status --insecure --decommission
校验集群节点列表确认结果。
缩容踩坑清单
-
三副本集群最小节点数 3,不能缩容到 3 以下;
-
zone 副本约束包含待退役节点,退役会卡住,先修改约束;
退役节点想要重新加入集群,必须清空数据目录,当作全新节点。
扩缩容本质是分片副本迁移再均衡,不是简单加减机器。KaiwuDB 已经把副本迁移、租约切换自动化,但运维前置校验必不可少。详情参考官方文档:www.kaiwudb.com/docs/#/db-o...