PostgreSQL 身份参数
如何为Pigsty中的PostgreSQL数据库分配标识符,指定身份参数。
核心身份参数是定义 PostgreSQL 数据库集群时必须提供的信息,包括:
名称 | 属性 | 说明 | 例子 |
---|---|---|---|
pg_cluster | 必选,集群级别 | 集群名 | pg-test |
pg_role | 必选,实例级别 | 实例角色 | primary , replica |
pg_seq | 必选,实例级别 | 实例序号 | 1 , 2 , 3 ,… |
身份参数的内容遵循 实体命名规则 。其中 pg_cluster ,pg_role,pg_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_shard
与pg_sindex
用于定义特殊的分片数据库集簇,是可选的身份参数,目前为Citus与Greenplum保留。
假设用户有一个水平分片的 分片数据库集簇(Shard) ,名称为test
。这个集簇由四个独立的集群组成:pg-test1
, pg-test2
,pg-test3
,pg-test-4
。则用户可以将 pg_shard: test
的身份绑定至每一个数据库集群,将pg_sindex: 1|2|3|4
分别绑定至每一个数据库集群上。如下所示:
pg-test1:
vars: {pg_cluster: pg-test1, pg_shard: test, pg_sindex: 1}
hosts: {10.10.10.10: {pg_seq: 1, pg_role: primary}}
pg-test2:
vars: {pg_cluster: pg-test1, pg_shard: test, pg_sindex: 2}
hosts: {10.10.10.11: {pg_seq: 1, pg_role: primary}}
pg-test3:
vars: {pg_cluster: pg-test1, pg_shard: test, pg_sindex: 3}
hosts: {10.10.10.12: {pg_seq: 1, pg_role: primary}}
pg-test4:
vars: {pg_cluster: pg-test1, pg_shard: test, pg_sindex: 4}
hosts: {10.10.10.13: {pg_seq: 1, pg_role: primary}}
通过这样的定义,您可以方便地从 PGSQL Shard 监控面板中,观察到这四个水平分片集群的横向指标对比。同样的功能对于 Citus 与 MatrixDB集群同样有效。
最后修改 2022-05-27: init commit (1e3e284)