Citus集群部署

Pigsty可用于部署加装分布式数据库扩展插件Citus的分布式PostgreSQL集群

Citus是一个PostgreSQL生态的分布式扩展插件,默认情况下Pigsty安装Citus,但不启用。

pigsty-citus.yml 提供了一个部署Citus集群的配置文件案例。为了启用Citus,您需要修改以下参数:

  • max_prepared_transaction: 修改为一个大于max_connections的值,例如800。
  • pg_libs:必须包含citus,并放置在最前的位置。
  • 您需要在业务数据库中包含 citus 扩展插件(但您也可以事后手工通过CREATE EXTENSION自行安装)

配置样例

  1. #----------------------------------#
  2. # cluster: citus coordinator
  3. #----------------------------------#
  4. pg-meta:
  5. hosts:
  6. 10.10.10.10: { pg_seq: 1, pg_role: primary , pg_offline_query: true }
  7. vars:
  8. pg_cluster: pg-meta
  9. vip_address: 10.10.10.2
  10. pg_users: [ { name: citus , password: citus , pgbouncer: true , roles: [ dbrole_admin ] } ]
  11. pg_databases: [ { name: meta , owner: citus , extensions: [ { name: citus } ] } ]
  12. #----------------------------------#
  13. # cluster: citus data nodes
  14. #----------------------------------#
  15. pg-node1:
  16. hosts:
  17. 10.10.10.11: { pg_seq: 1, pg_role: primary }
  18. vars:
  19. pg_cluster: pg-node1
  20. vip_address: 10.10.10.3
  21. pg_users: [ { name: citus , password: citus , pgbouncer: true , roles: [ dbrole_admin ] } ]
  22. pg_databases: [ { name: meta , owner: citus , extensions: [ { name: citus } ] } ]
  23. pg-node2:
  24. hosts:
  25. 10.10.10.12: { pg_seq: 1, pg_role: primary , pg_offline_query: true }
  26. vars:
  27. pg_cluster: pg-node2
  28. vip_address: 10.10.10.4
  29. pg_users: [ { name: citus , password: citus , pgbouncer: true , roles: [ dbrole_admin ] } ]
  30. pg_databases: [ { name: meta , owner: citus , extensions: [ { name: citus } ] } ]
  31. pg-node3:
  32. hosts:
  33. 10.10.10.13: { pg_seq: 1, pg_role: primary , pg_offline_query: true }
  34. vars:
  35. pg_cluster: pg-node3
  36. vip_address: 10.10.10.5
  37. pg_users: [ { name: citus , password: citus , pgbouncer: true , roles: [ dbrole_admin ] } ]
  38. pg_databases: [ { name: meta , owner: citus , extensions: [ { name: citus } ] } ]

注册数据节点

接下来,您需要参照Citus多节点部署指南,在 Coordinator 节点上,执行以下命令以添加数据节点:

  1. sudo su - postgres; psql meta
  2. SELECT * from citus_add_node('10.10.10.11', 5432);
  3. SELECT * from citus_add_node('10.10.10.12', 5432);
  4. SELECT * from citus_add_node('10.10.10.13', 5432);
  1. SELECT * FROM citus_get_active_worker_nodes();
  2. node_name | node_port
  3. -------------+-----------
  4. 10.10.10.11 | 5432
  5. 10.10.10.13 | 5432
  6. 10.10.10.12 | 5432
  7. (3 rows)

成功添加数据节点后,您可以使用以下命令,在协调者上创建样例数据表,并将其分布到每个数据节点上。

  1. -- 声明一个分布式表
  2. CREATE TABLE github_events
  3. (
  4. event_id bigint,
  5. event_type text,
  6. event_public boolean,
  7. repo_id bigint,
  8. payload jsonb,
  9. repo jsonb,
  10. actor jsonb,
  11. org jsonb,
  12. created_at timestamp
  13. ) PARTITION BY RANGE (created_at);
  14. -- 创建分布式表
  15. SELECT create_distributed_table('github_events', 'repo_id');

更多Citus相关功能介绍,请参考Citus官方文档

最后修改 2022-06-05: add pgsql/deploy document (34a3325)