PostgreSQL 身份参数

如何为Pigsty中的PostgreSQL数据库分配标识符,指定身份参数。

核心身份参数是定义 PostgreSQL 数据库集群时必须提供的信息,包括:

名称属性说明例子
pg_cluster必选,集群级别集群名pg-test
pg_role必选,实例级别实例角色primary, replica
pg_seq必选,实例级别实例序号1, 2, 3,

身份参数的内容遵循 实体命名规则 。其中 pg_clusterpg_rolepg_seq 属于核心身份参数,是定义数据库集群所需的最小必须参数集,核心身份参数必须显式指定,不可忽略。

  • pg_cluster 标识了集群的名称,在集群层面进行配置,作为集群资源的顶层命名空间。
  • pg_role标识了实例在集群中扮演的角色,在实例层面进行配置,可选值包括:
    • primary:集群中的唯一主库,集群领导者,提供写入服务。
    • replica:集群中的普通从库,承接常规生产只读流量。
    • offline:集群中的离线从库,承接ETL/SAGA/个人用户/交互式/分析型查询。
    • standby:集群中的同步从库,采用同步复制,没有复制延迟(保留)。
    • delayed:集群中的延迟从库,显式指定复制延迟,用于执行回溯查询与数据抢救(保留)。
  • pg_seq 用于在集群内标识实例,通常采用从0或1开始递增的整数,一旦分配不再更改。

其他身份参数

  • pg_shard 用于标识集群所属的上层 分片集簇,只有当集群是水平分片集簇的一员时需要设置。

  • pg_sindex 用于标识集群的分片集簇编号,只有当集群是水平分片集簇的一员时需要设置。

  • pg_instance衍生身份参数,用于唯一标识一个数据库实例,其构成规则为

    {{ pg_cluster }}-{{ pg_seq }}。 因为pg_seq是集群内唯一的,因此该标识符全局唯一。

水平分片集簇

pg_shardpg_sindex 用于定义特殊的分片数据库集簇,是可选的身份参数,目前为Citus与Greenplum保留。

假设用户有一个水平分片的 分片数据库集簇(Shard) ,名称为test。这个集簇由四个独立的集群组成:pg-test1, pg-test2pg-test3pg-test-4。则用户可以将 pg_shard: test 的身份绑定至每一个数据库集群,将pg_sindex: 1|2|3|4 分别绑定至每一个数据库集群上。如下所示:

  1. pg-test1:
  2. vars: {pg_cluster: pg-test1, pg_shard: test, pg_sindex: 1}
  3. hosts: {10.10.10.10: {pg_seq: 1, pg_role: primary}}
  4. pg-test2:
  5. vars: {pg_cluster: pg-test1, pg_shard: test, pg_sindex: 2}
  6. hosts: {10.10.10.11: {pg_seq: 1, pg_role: primary}}
  7. pg-test3:
  8. vars: {pg_cluster: pg-test1, pg_shard: test, pg_sindex: 3}
  9. hosts: {10.10.10.12: {pg_seq: 1, pg_role: primary}}
  10. pg-test4:
  11. vars: {pg_cluster: pg-test1, pg_shard: test, pg_sindex: 4}
  12. hosts: {10.10.10.13: {pg_seq: 1, pg_role: primary}}

通过这样的定义,您可以方便地从 PGSQL Shard 监控面板中,观察到这四个水平分片集群的横向指标对比。同样的功能对于 Citus 与 MatrixDB集群同样有效。

最后修改 2022-05-27: init commit (1e3e284)