Skip to content

Latest commit

 

History

History
80 lines (43 loc) · 3.57 KB

20210120_01.md

File metadata and controls

80 lines (43 loc) · 3.57 KB

PostgreSQL sharding 分库分表 插件 citus - 开源企业版功能 - cigration citus+migration - 扩容、缩容、替换节点

作者

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阶段。

1. 使用场景

Citus的分片表由CN上的一个逻辑表和分布在各个Worker上的若干分片组成,当进行集群扩缩容等操作时,可以通过迁移分片来实现。

pic

具体支持的场景和操作步骤如下

1.1 扩容

1、添加新的worker节点到Citus集群
2、从既有worker节点迁移部分分片到新worker节点,实现分片部署均衡

1.2 缩容

1、从将被缩容掉的Worker迁出分片
2、从Citus集群删除Worker

1.3 Worker节点替换

当需要用新机器替换掉某个Worker时,也可以通过迁移分片实现。比如某个Worker节点的机器故障频发需要替换。

1、添加新的worker节点到Citus集群
2、把准备下线的Worker节点上所有分片都迁移到新加入的Worker
3、从Citus集群删除准备下线的Worker

2. 技术原理

cigration的主要功能就是在Citus Worker节点间在线迁移分片,迁移过程中产生的更新通过逻辑订阅机制进行同步。单个分片的迁移过程如下

pic

为了确保迁移不破坏分片表的亲和关系,互相亲和的一组分片需要同时迁移。

另外,对一次扩容或者缩容作业,需要迁移大量分片,如果人工一个分片一个分片迁移是非常繁琐的,cigration简化了这些操作。迁移时首先会对一个扩容或者缩容作业生成所需的若干迁移任务,每个迁移任务是最小的分片迁移单位,包含一组互相亲和的分片。然后通过调度这些迁移任务最终完成扩容或者缩容作业。

迁移过程中,每个分片迁移任务的状态变化如下所示

pic

注:上图的sn_前缀实际应该是cigration_前缀

对于中途出错的任务,可以通过调用函数cigration_shard_migration_env_cleanup(),将其变回到初始的init状态,再继续执行。

您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.

digoal's wechat