拆分配置
Pigsty采用遵循Ansible规则的配置文件,默认使用单个YAML文件 pigsty.yml
进行配置。
用户可以使用任何符合Ansible规则的配置管理方式。详情请参考:拆分单一配置文件。
建议在调整配置组织方式前,首先熟悉Ansible的Inventory组织模式。
定制方式
一种典型的配置拆分方式是,按照数据库集群进行拆分。即,每一个数据库集群的定义有一个单独的配置清单。
这样做的好处是如果发生误操作,影响范围会局限在这个集群中。
试想一下如果有用户绕过重重阻挠执行数据库清除操作,本想清理一个集群,结果把整个生产环境的所有数据库都抹掉了,这肯定令人无法接受。
在这种要求下,我们会将全局变量与集群定义相剥离。
group_vars/all.yml
包含所有全局变量部分pgsql/<cluster>.yml
包含<cluster>
数据库集群的定义
那么使用时,您必须通过-i pgsql/<cluster>.yml
显式指明需要操作的集群。而不再是使用-l <cluster>
筛选目标集群。
处理方式
以Pigsty沙箱配置文件为例:
pigsty
|
^- group_vars # group variables definition
| ^------ all.yml # global variablies
|
^- pgsql
^------ meta.yml # meta node definition
^------ pg-meta.yml # pg-meta database cluster definition
^------ pg-test.yml # pg-test database cluster definition
^------ <cluster>.yml # <cluster> database cluster definition
全局变量
group_vars/all.yml
包含了原pigsty.yml
中all.vars
中对应的内容,形如:
#!/usr/bin/env ansible-playbook
---
#==============================================================#
# File : group_vars/all.yml
# Ctime : 2020-11-24
# Mtime : 2021-02-22
# Desc : PostgreSQL Inventory Global Vars
# Path : group_vars/all.yml
# Maintainer : Ruohang Feng
# Copyright (C) 2019-2021 Ruohang Feng
#==============================================================#
#-----------------------------
# CONNECTION PARAMETERS
#-----------------------------
# ansible_user: admin # admin user with ssh access and sudo privilege
# proxy_env: {}
proxy_env: # global proxy env when downloadinidg packages
no_proxy: "localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16,*.pigsty,*.aliyun.com"
#-----------------------------
# REPO PROVISION
#-----------------------------
# this section defines how to build a local repo
repo_enabled: true # build local yum repo on meta nodes?
repo_name: pgsql-el7 # local repo name
...
注意这里所有的全局变量都是顶层键值。
集群定义
每一个集群都使用独立的清单文件定义。
即,原本pigsty.yml
中all.children
中的每一个配置项(集群定义),都被单独拆分为位于pgsql/<cluster_name>.yml
中的一个文件。文件的内容都是all.children.<cluster>
对应的配置项,但需要保留顶层的all.children
结构。
例如,pg-test
集群的分立定义文件如下所示:
all:
children:
#-----------------------------
# cluster: pg-test
#-----------------------------
pg-test: # define cluster named 'pg-test'
# - cluster members - #
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: replica, ansible_host: node-3, pg_offline_query: true}
# - cluster configs - #
vars:
# basic settings
pg_cluster: pg-test # define actual cluster name
pg_version: 13 # define installed pgsql version
node_tune: tiny # tune node into oltp|olap|crit|tiny mode
pg_conf: tiny.yml # tune pgsql into oltp/olap/crit/tiny mode
# business users, adjust on your own needs
pg_users:
- username: test # example production user have read-write access
password: test # example user's password
groups: [ dbrole_readwrite ] # dborole_admin|dbrole_readwrite|dbrole_readonly
comment: default test user for production usage
- username: dbuser_vonng # personal user example which only have limited access to offline instance
password: DBUser.Vonng # or instance with explict mark `pg_offline_query = true`
groups: [ dbrole_offline ] # personal/stats/ETL user should be grant with dbrole_offline
pgbouncer: false # personal user should not be allowed to login with pgbouncer
comment: example personal user for interactive queries
pg_databases: # create a business database 'test'
- name: test
extensions: # create extra extension postgis under schema 'public'
- {name: postgis, schmea: public}
parameters: # overwrite database test's default search_path parameter
search_path: public,monitor
pg_default_database: test # default database will be used as primary monitor target
# proxy settings
vip_enabled: true # enable/disable vip (require members in same LAN)
vip_address: 10.10.10.3 # virtual ip address
vip_cidrmask: 8 # cidr network mask length
vip_interface: eth1 # interface to add virtual ip
编辑与使用
进行拆分后,您需要显式指定需要操作的集群。如:
./pgsql -i pgsql/pg-test.yml
另外,一些基于完整全量Inventory的功能,目前仍然需要完整的全量Inventory,例如,生成所有Haproxy实例的导航界面,生成所有Prometheus的静态监控对象清单。