# 扩缩容

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

迁移操作页面如下。

migrate

以上两种迁移操作,均会按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节点,参考:移除代理节点

ZUOYEBANG