citus
概览
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 2400 | citus | 否 | 是 | 是 | 是 | 否 | 否 | pg_catalog |
| 2401 | citus_columnar | 否 | 是 | 否 | 是 | 否 | 否 | pg_catalog |
| 相关扩展 | plproxy pgspider_ext postgres_fdw pg_partman timescaledb pg_ttl_index pgactive spock pg_fkpart db_migrator |
|---|---|
| 下游依赖 | cigration documentdb_distributed |
PIGSTY is the designated RPM and DEB maintainer even though PGDG also packages Citus; requires shared_preload_libraries=citus; conflicts with Hydra.
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 14.2.0 | 1817161514 | citus | - |
| RPM | PIGSTY | 14.2.0 | 1817161514 | citus_$v | - |
| DEB | PIGSTY | 14.2.0 | 1817161514 | postgresql-$v-citus | - |
构建
您可以使用 pig build 命令构建 citus 扩展的 RPM / DEB 包:
安装
您可以直接安装 citus 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
使用 pig 或者是 apt/yum/dnf 安装扩展:
预加载配置:
创建扩展:
用法
来源:
Citus 通过把表分片到工作节点,将 PostgreSQL 转换为分布式数据库,同时仍以 PostgreSQL SQL、索引、扩展、事务和运维工具作为面向用户的接口。它常用于多租户 SaaS 数据库、实时分析、时序/事件工作负载和分布式微服务模式。
本地 Pigsty 目录将 Citus 打包为 citus,并提供主扩展 citus;同一软件包还包含 citus_columnar。Citus 是预加载扩展,因此每个节点都必须在执行 CREATE EXTENSION 之前加载其库。
启用 Citus
在协调节点和工作节点上重启 PostgreSQL,然后在数据库中创建扩展:
在多节点集群中,从协调节点注册协调节点自身与各工作节点:
分布式表
按分片键分布表。分片键值相同的行会被共置在同一分片上,使限定租户的连接和点查询可以在本地完成。
分布该表,并显式调整分片数与共置设置:
显式选择分片数时,应使用 colocate_with := 'none' 启动新的共置组。要与现有分布式表共置,请指定该表的名称,并让它的分片数决定布局。
过滤分布列的查询可以路由到单个分片:
跨分片查询会被规划为分布式任务,并在工作节点上并行运行:
参考表
参考表会完整复制到所有工作节点。它们适用于需要与许多分布式表连接的小型查找表。
基于模式的分片
当每个租户或服务拥有独立模式时,基于模式的分片很有用。Citus 支持从任意节点执行模式分片 DDL,包括 CREATE SCHEMA、DROP SCHEMA、ALTER SCHEMA RENAME、ALTER SCHEMA OWNER,以及分布式模式上的表级 DDL。
共享表应使用基于行的分布,每租户模式布局应使用基于模式的分片;在未检查共置与 SQL 支持影响之前,不要随意混用这两种模型。
节点与分片操作
备份协调
Citus v14.1.0 新增了 UDF,可在制作协调一致的磁盘快照时阻止分布式 2PC 提交决策和模式/拓扑变更。只能在受控备份流程中使用这些函数,并且在完成快照步骤后必须解除集群阻塞。
应将这些函数与常规 PostgreSQL 备份规范配合使用:一致检查点、WAL 归档、跨节点快照顺序,以及经过测试的恢复流程。
版本 14.2 运维
Citus 14.2 新增了仅限超级用户使用的 citus_internal.distribute_object() 修复辅助函数,用于处理元数据未正确传播的受支持数据库对象。应将它视为针对性的恢复操作,而不是常规分布 API。
该版本还新增了 citus.allow_unsafe_insert_select_pushdown,用于显式选择在共置表上启用批量 INSERT ... SELECT 下推,并改进了单分片存储过程执行。除非已经依据发行说明中的限制检查工作负载,否则应保持关闭不安全下推设置。
注意事项
- Pigsty 本地元数据当前跟踪面向 PostgreSQL 16-18 的 Citus 14.x;Citus 14 已停止支持 PostgreSQL 15。
- 必须在创建扩展之前设置
shared_preload_libraries = 'citus'。在全新服务器上,仅执行CREATE EXTENSION citus并不充分。 - 应仔细选择分布列。分布式表上的主键和唯一约束通常需要包含分布列。
- 跨分片连接、重分区连接、分布式 DDL 和多分片写入功能强大,但其规划与锁行为不同于单节点 PostgreSQL。
- Citus 通过
citus_columnar提供自己的列存储接口;Pigsty 元数据将其标记为与 Hydracolumnar冲突。 - 集群变更阻塞函数是用于备份的运维工具。备份脚本失败后,不要让集群一直处于阻塞状态。