配置文件

Pigsty配置文件的结构,内容,合并与拆分方式。

Pigsty配置文件遵循Ansible规则,采用YAML格式,默认使用单一配置文件,参考范例

Pigsty的配置文件默认为 pigsty.yml ,配置文件需要与Ansible 配合使用,这是一个流行的DevOps工具。

用户可以在当前目录的 ansible.cfg 中指定默认配置文件路径,或在执行剧本时通过命令行参数:-i pigsty.yml 的方式显式指定配置文件路径。

配置文件结构

Pigsty的配置文件采用Ansible YAML Inventory格式,顶层结构如下:


all:                      # 顶层对象 all
  vars: <123 keys>        # 全局配置 all.vars
  children:               # 分组定义:all.children 每一个项目定义了一个数据库集群 
    meta: <2 keys>...
    pg-meta: <2 keys>...
    pg-test: <2 keys>...  # 一个具体的数据库集群 pg-test 的详细定义
...

每一个具体的数据库集群,以Ansible Group的形式存在,如下所示:

pg-test:                 # 数据库集群名称默认作为群组名称
  vars:                  # 数据库集群级别变量
    pg_cluster: pg-test  # 一个定义在集群级别的必选配置项,在整个pg-test中保持一致。 
  hosts:                 # 数据库集群成员
    10.10.10.11: {pg_seq: 1, pg_role: primary} # 数据库实例成员
    10.10.10.12: {pg_seq: 2, pg_role: replica} # 必须定义身份参数 pg_role 与 pg_seq
    10.10.10.13: {pg_seq: 3, pg_role: offline} # 可以在此指定实例级别的变量

配置项

在Pigsty的配置文件中,配置项 可以出现在三种位置:

层级 范围 优先级 说明 位置
Global 全局 在同一套部署环境内一致 all.vars.xxx
Cluster 集群 在同一套集群内保持一致 all.children.<cls>.vars.xxx
Instance 实例 最细粒度的配置层次 all.children.<cls>.hosts.<ins>.xxx

每一个配置项都由一对键值组成。键是配置项的名称,值是配置项的内容。值的类型各异,详情请参考 配置项

集群vars中定义的配置项会以同名键覆盖的方式覆盖全局配置项实例中定义的配置项又会覆盖集群配置项与全局配置项。因此用户可以有的放矢,可以在不同层次,不同粒度上针对具体集群与具体实例进行精细配置。

分立式配置文件

有时候用户希望采用每个数据库集群一个配置文件的方式使用Pigsty,而不是共用一个巨大的配置清单。

这样做的好处是如果发生误操作,影响范围会局限在这个集群中,避免全局恶性事件。例如,下线某个集群时,错误地指定执行范围,有可能产生误删整个环境中所有数据库。

用户可以使用任何满足Ansible规则与和Pigsty变量层次语义的配置方式,但Pigsty推荐采用以下形式的配置文件拆分规则:

  • group_vars/all.yml : 在这里定义所有全局变量
  • group_vars/<pg_cluster>.yml :在这里定义数据库集群<pg_cluster>的集群变量。
  • pgsql/<pg_cluster>.yml:在这里定义数据库集群<pg_cluster>的实例成员,以及实例变量。
  • host_vars/<pg_instance>.yml:如果单个实例的配置项非常复杂,可在此列为独立配置文件。

采用分立式配置文件的Pigsty沙箱目录结构如下所示:

pigsty
 |
 ^- group_vars               # 全局/集群 配置项定义 (此目录名称固定)
 |     ^------ all.yml       # 全局配置项
 |     ^------ meta.yml      # 元节点配置项
 |     ^------ pg-meta.yml   # pg-meta集群配置项     (覆盖全局定义)
 |     ^------ pg-test.yml   # pg-test集群配置项     (覆盖全局定义)
 |     ^------ <cluster>.yml # <pg_cluster>集群配置项(覆盖全局定义)
 |
 ^- host_vars                # 【可选】抽离实例级变量定义
 |.    ^------ 10.10.10.10.  # 定义了10.10.10.10的实例级配置项 (覆盖全局/集群配置项定义)
 |
 ^- pgsql                    # 集群成员定义/实例级配置项(此目录名称随意)
       ^------ pg-meta.yml   # pg-meta成员与实例配置项(覆盖全局/集群配置项定义)
       ^------ pg-test.yml   # pg-test成员与实例配置项(覆盖全局/集群配置项定义)
       ^------ <cluster>.yml # <pg_cluster>成员与实例配置项(覆盖全局/集群配置项定义)
最后修改 2021-03-17: v0.8 update (bf0ea3b)