# 扩缩容
Bitalostored扩缩容方式:
- 节点扩缩容:增加/减少分片内节点数
- 分片扩缩容:增加/减少分片数
Bitalosproxy扩缩容方式:
- 增加/减少proxy节点数
# Bitalostored
# 节点扩缩容
分片内单节点读流量过高,导致CPU或IO压力过大;考虑进行节点扩容。
扩容操作,参考:节点扩容
缩容操作,参考:节点缩容
# 分片扩缩容
分片内单节点数据量过大,或 单分片的写流量过高,导致CPU、内存或IO压力过大;考虑进行分片扩容。
分片扩缩容,通过在不同分片间迁移slot数据完成;Bitalostored的slot数量为1024,slotId取值范围:0-1023。
扩容示例:
当前只有1分片(slotId 0-1023的数据均在该分片上);扩成2分片,先新建1个分片2,将slotId 511-1023迁移到分片2。
缩容示例:
当前有2分片:分片1(0-511)、分片2(512-1023);缩为1分片,保留分片1,将slotId 511-1023迁移到分片1,并将分片1及其节点从Raft集群&Dashboard移除。
# Slot迁移命令
# migrateslots(开始迁移)
> migrateslots [tohost] [toport] [slotId]
tohost为目标节点ip,toport为目标节点port
slotId取值范围:0-1023
例:分片1的某个slot迁移到分片2,该命令需要运行在分片1主节点上,该命令会立即返回,迁移任务会在后台启动。
# migratestatus(迁移进度查询)
> migratestatus [slotId]
返回当前slotId的迁移状态
unixtime,开始时间
from,源节点
to,目标节点
costs,总耗时
status,迁移状态(1=进行中 2=成功 3=错误)
total,迁移key数量
fails,迁移失败key数量
# migrateend(迁移完成命令)
> migrateend [slotId]
源分片主节点执行该命令,节点会重置迁移信息
# Slot迁移操作
Slot迁移操作在管理平台overview,Slot迁移支持两种方式
- MigrateRange:迁移某区间内的slot至目标分片
- MigrateSome:迁移某个分片的slot区间至目标分片
MigrateRange参数
From: slot段起始值
To: slot段结束值
Group: 目标分片ID
迁移数据: 是否迁移数据;大部分场景需要迁移数据,迁移耗时与key数量正相关;如不迁移数据,基本用于缓存类场景的紧急扩容
MigrateSome参数
NumberOfSlots: 需要迁移slot个数
FromGroup: 源分片ID
ToGroup: 目标分片ID
迁移操作页面如下。

以上两种迁移操作,均会按slot生成多个迁移任务。
单个slot迁移步骤(从分片1迁移到分片2):
- Bitalosdashboard向分片1的主节点发送迁移任务(migrateslots),目标是分片2的主节点
- 分片1的主节点开始迁移对应slot数据到分片2的主节点
- Bitalosdashboard定期检查当前slot的迁移状态(migratestatus),直到迁移状态变成: 成功/错误
- 如迁移错误(如分片1切主),则Bitalosdashboard会重新发送迁移任务,继续迁移并直至成功
- 如迁移成功,Bitalosdashboard会修改当前slot的路由到分片2,并通知所有的Bitalosproxy节点修改路由,最终向分片1的主节点发送迁移结束指令(migrateend)
# Slot迁移细节
# 迁移中的流量
如slot-10从分片1迁移到分片2
slot-10的请求仍会路由到分片1
分片1节点会检查当前key是否存在
- key存在,则在分片1节点执行
- key不存在,由分片1节点请求分片2节点,再返回结果
# 并行迁移
Bitalosdashboard调度处理以分片为维度。
- 单分片slot顺序迁移
- 多个分片slot并行迁移
# 迁移中断
- 当前迁移slot不可中断
- 多个slot顺序迁移,会中断下一个slot迁移
# Bitalosproxy
Bitalosproxy节点是无状态的,添加和减少节点无需额外操作。
增加Bitalosproxy节点,参考:新增代理节点
减少Bitalosproxy节点,参考:移除代理节点