配置身份信息
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中。
接下来
完成身份参数配置后,用户可以对数据库集群进行进一步定制。