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 分别绑定至每一个数据库集群上。如下所示:
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)
