digoal
2021-01-20
PostgreSQL , sharding , citus , migration , 扩容 , 缩容 , 替换节点
感谢sn
https://github.com/cloud-sn2/cigration
https://github.com/citusdata/citus
cigration是一个由一系列工具函数组成的PostgreSQL扩展,主要用于执行Citus的在线分片迁移,可用于Citus集群扩容和缩容场景。cigration是Citus + migration的拼写。当前cigration处于beta阶段。
Citus的分片表由CN上的一个逻辑表和分布在各个Worker上的若干分片组成,当进行集群扩缩容等操作时,可以通过迁移分片来实现。
具体支持的场景和操作步骤如下
1、添加新的worker节点到Citus集群
2、从既有worker节点迁移部分分片到新worker节点,实现分片部署均衡
1、从将被缩容掉的Worker迁出分片
2、从Citus集群删除Worker
当需要用新机器替换掉某个Worker时,也可以通过迁移分片实现。比如某个Worker节点的机器故障频发需要替换。
1、添加新的worker节点到Citus集群
2、把准备下线的Worker节点上所有分片都迁移到新加入的Worker
3、从Citus集群删除准备下线的Worker
cigration的主要功能就是在Citus Worker节点间在线迁移分片,迁移过程中产生的更新通过逻辑订阅机制进行同步。单个分片的迁移过程如下
为了确保迁移不破坏分片表的亲和关系,互相亲和的一组分片需要同时迁移。
另外,对一次扩容或者缩容作业,需要迁移大量分片,如果人工一个分片一个分片迁移是非常繁琐的,cigration简化了这些操作。迁移时首先会对一个扩容或者缩容作业生成所需的若干迁移任务,每个迁移任务是最小的分片迁移单位,包含一组互相亲和的分片。然后通过调度这些迁移任务最终完成扩容或者缩容作业。
迁移过程中,每个分片迁移任务的状态变化如下所示
注:上图的sn_前缀实际应该是cigration_前缀
对于中途出错的任务,可以通过调用函数cigration_shard_migration_env_cleanup(),将其变回到初始的init状态,再继续执行。
您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.