Assign Identity
Pigsty基于 身份标识(Identity) 管理数据库对象。
身份参数
身份参数是定义数据库集群时必须提供的信息,包括:
名称 | 属性 | 说明 | 例子 |
---|---|---|---|
pg_cluster |
必选,集群级别 | 集群名 | pg-test |
pg_role |
必选,实例级别 | 实例角色 | primary , replica |
pg_seq |
必选,实例级别 | 实例序号 | 1 , 2 , 3 ,... |
pg_shard |
可选,集群级别 | 分片集群名 | test |
pg_sindex |
可选,集群级别 | 分片集群号 | 1 |
身份参数的内容遵循 Pigsty命名原则 。其中 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-test
的集群。集群中包含三个实例:pg-test-1
, pg-test-2
,pg-test-3
,分别为主库,从库,离线库。该配置是一个集群定义所需的最小配置。
pg-test:
vars: { pg_cluster: pg-test }
hosts:
10.10.10.11: {pg_seq: 1, pg_role: primary}
10.10.10.12: {pg_seq: 2, pg_role: replica}
10.10.10.13: {pg_seq: 3, pg_role: offline}
pg_cluster
,pg_role
,pg_seq
属于 身份参数
除了IP地址外,这三个参数是定义一套新的数据库集群的最小必须参数集,如下面的配置所示。
其他参数都可以继承自全局配置或默认配置,但身份参数必须显式指定,手工分配。
pg_cluster
标识了集群的名称,在集群层面进行配置。pg_role
在实例层面进行配置,标识了实例的角色,只有primary
角色会进行特殊处理,如果不填,默认为replica
角色,此外,还有特殊的delayed
与offline
角色。pg_seq
用于在集群内标识实例,通常采用从0或1开始递增的整数,一旦分配不再更改。{{ pg_cluster }}-{{ pg_seq }}
被用于唯一标识实例,即pg_instance
{{ pg_cluster }}-{{ pg_role }}
用于标识集群内的服务,即pg_service
定义水平分片数据库集簇
pg_shard
与 pg_sindex
用于定义特殊的分片数据库集簇,是可选的身份参数。
假设用户有一个水平分片的 分片数据库集簇(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}}
数据库节点与数据库实例
数据库集群需要部署在数据库节点上,Pigsty使用数据库节点与数据库实例一一对应的部署模式。
数据库节点使用IP地址作为标识符,数据库实例使用形如pg-test-1
的标识符。 数据库节点(Node) 与 数据库实例(Instance) 的标识符可以相互对应,相互转换。
连接信息
如果说身份参数是数据库集群的标识,那么连接信息就是数据库节点的标识。
例如在 定义数据库集群 的例子中,数据库集群pg_cluster = pg-test
中 pg_seq = 1
的数据库实例(pg-test-1
)部署在IP地址为10.10.10.11
的数据库节点上。这里的IP地址10.10.10.11
就是连接信息。
Pigsty使用IP地址作为数据库节点的唯一标识,该IP地址必须是数据库实例监听并对外提供服务的IP地址。
这一点非常重要,即使您是通过跳板机或SSH代理访问该数据库节点,也应当在配置时保证这一点。
其他连接方式
如果您的目标机器藏在SSH跳板机之后,或者无法通过ssh ip
的方式直接方案,则可以考虑使用Ansible提供的连接参数。
例如下面的例子中,ansible_host
通过SSH别名的方式告知Pigsty通过ssh node-1
的方式而不是ssh 10.10.10.11
的方式访问目标数据库节点。
pg-test:
vars: { pg_cluster: pg-test }
hosts:
10.10.10.11: {pg_seq: 1, pg_role: primary, ansible_host: node-1}
10.10.10.12: {pg_seq: 2, pg_role: replica, ansible_host: node-2}
10.10.10.13: {pg_seq: 3, pg_role: offline, ansible_host: node-3}
通过这种方式,用户可以自由指定数据库节点的连接方式,并将连接配置保存在管理用户的~/.ssh/config
中。
接下来
完成身份参数配置后,用户可以对数据库集群进行进一步定制。