citus

Citus 分布式 PostgreSQL 集群,提供水平扩展与分片能力

citus 配置模板使用 Citus 扩展部署分布式 PostgreSQL 集群,提供透明的水平扩展与数据分片能力。


配置概览

  • 配置名称: citus
  • 节点数量: 五节点(1 协调节点 + 4 数据节点)
  • 配置说明:Citus 分布式 PostgreSQL 集群
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64
  • 相关配置:meta

启用方式:

./configure -c citus [-i <primary_ip>]

配置内容

源文件地址:pigsty/conf/citus.yml

all:
  children:
    infra: { hosts: { 10.10.10.10: { infra_seq: 1 }} ,vars: { repo_enabled: false }}
    etcd:  { hosts: { 10.10.10.10: { etcd_seq: 1  }} ,vars: { etcd_cluster: etcd  }}

    #----------------------------------------------#
    # Citus 协调节点
    #----------------------------------------------#
    pg-citus0:
      hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
      vars:
        pg_cluster: pg-citus0
        pg_group: 0                       # Citus 协调节点组 ID
        pg_users: [{ name: dbuser_citus ,password: DBUser.Citus ,pgbouncer: true ,roles: [dbrole_admin] }]
        pg_databases: [{ name: citus, owner: dbuser_citus ,extensions: [{ name: citus }] }]

    #----------------------------------------------#
    # Citus 数据节点 1
    #----------------------------------------------#
    pg-citus1:
      hosts: { 10.10.10.11: { pg_seq: 1, pg_role: primary } }
      vars: { pg_cluster: pg-citus1, pg_group: 1 }

    #----------------------------------------------#
    # Citus 数据节点 2
    #----------------------------------------------#
    pg-citus2:
      hosts: { 10.10.10.12: { pg_seq: 1, pg_role: primary } }
      vars: { pg_cluster: pg-citus2, pg_group: 2 }

    #----------------------------------------------#
    # Citus 数据节点 3
    #----------------------------------------------#
    pg-citus3:
      hosts: { 10.10.10.13: { pg_seq: 1, pg_role: primary } }
      vars: { pg_cluster: pg-citus3, pg_group: 3 }

  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    infra_portal:
      home : { domain: i.pigsty }

    nodename_overwrite: false
    node_repo_modules: node,infra,pgsql
    node_tune: oltp

    pg_version: 17                      # Citus 支持 PG 14~17
    pg_conf: oltp.yml

    # Citus 专用配置
    pg_mode: citus
    pg_shard: pg-citus                  # Citus 集群名称
    pg_primary_db: citus                # Citus 主数据库
    pg_extensions: [ citus, postgis, pgvector ]
    pg_libs: 'citus, pg_stat_statements, auto_explain'
    pg_users: [{ name: dbuser_citus ,password: DBUser.Citus ,pgbouncer: true ,roles: [dbrole_admin] }]
    pg_databases: [{ name: citus, owner: dbuser_citus ,extensions: [{ name: citus }] }]
    pg_hba_rules:
      - { user: 'all' ,db: 'all' ,addr: '10.10.10.0/24' ,auth: ssl ,title: 'trust citus cluster members' }

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    grafana_admin_password: pigsty
    grafana_view_password: DBUser.Viewer
    pg_admin_password: DBUser.DBA
    pg_monitor_password: DBUser.Monitor
    pg_replication_password: DBUser.Replicator
    patroni_password: Patroni.API
    haproxy_admin_password: pigsty
    minio_secret_key: S3User.MinIO
    etcd_root_password: Etcd.Root

配置解读

citus 模板部署 Citus 分布式 PostgreSQL 集群,适合需要水平扩展的大规模数据场景。

关键特性

  • 透明数据分片,自动分布数据到多个节点
  • 并行查询执行,聚合多节点结果
  • 支持分布式事务(2PC)
  • 保持 PostgreSQL SQL 兼容性

架构说明

  • 协调节点 (pg-citus0):接收查询,路由到数据节点
  • 数据节点 (pg-citus1~3):存储分片数据

适用场景

  • 单表数据量超过单机容量
  • 需要水平扩展写入和查询性能
  • 多租户 SaaS 应用
  • 实时分析型工作负载

注意事项

  • Citus 支持 PostgreSQL 14~17
  • 分布式表需要指定分布列
  • 部分 PostgreSQL 特性可能受限(如外键跨分片)
  • 不支持 ARM64 架构

最后修改 2025-12-21: udpate conf structure (2cd7d6e)