Configuration
Describe database and infra as code.
Pigsty treats Infra & Database as Code. You can describe the infrastructure & database clusters through a declarative interface. All your essential work is to describe your need in the inventory, then materialize it with a simple idempotent playbook.
Inventory
Each pigsty deployment has a corresponding config inventory. It could be stored in a local git-managed file in YAML format or dynamically generated from CMDB or any ansible compatible format. Pigsty uses a monolith YAML config file as the default config inventory, which is pigsty.yml, located in the pigsty home directory.
The inventory consists of two parts: global vars & multiple group definitions. You can define new clusters with inventory groups: all.children[array]
. And describe infra and set global default parameters for clusters with global vars: all.vars[object]
. Which may look like this:
all: # Top-level object: all
vars: {...} # Global Parameters
children: # Group Definitions
infra: # Group Definition: 'infra'
hosts: {...} # Group Membership: 'infra'
vars: {...} # Group Parameters: 'infra'
etcd: {...} # Group Definition: 'etcd'
pg-meta: {...} # Group Definition: 'pg-meta'
pg-test: {...} # Group Definition: 'pg-test'
redis-test: {...} # Group Definition: 'redis-test'
# ...
Cluster
Each group may represent a cluster, which could be a Node cluster, PostgreSQL cluster, Redis cluster, Etcd cluster, or Minio cluster, etc… They all use the same format: group vars & hosts. You can define cluster members with all.children.<cls>.hosts[object]
and describe cluster with cluster parameters in all.children.<cls>.vars[object]
. Here is an example of 3 nodes PostgreSQL HA cluster named pg-test
:
pg-test: # Group Name
vars: # Group Vars (Cluster Parameters)
pg_cluster: pg-test
hosts: # Group Host (Cluster Membership)
10.10.10.11: { pg_seq: 1, pg_role: primary } # Host1
10.10.10.12: { pg_seq: 2, pg_role: replica } # Host2
10.10.10.13: { pg_seq: 3, pg_role: offline } # Host3
You can also define parameters for a specific host, as known as host vars. It will override group vars and global vars. Which is usually used for assigning identities to nodes & database instances.
Parameter
Global vars, Group vars, and Host vars are dict objects consisting of a series of K-V pairs. Each pair is a named Parameter consisting of a string name as the key and a value of one of five types: boolean, string, number, array, or object. Check parameter reference for detailed syntax & semantics.
Every parameter has a proper default value except for mandatory IDENTITY PARAMETERS; they are used as identifiers and must be set explicitly, such as pg_cluster, pg_role, and pg_seq.
Parameters can be specified & overridden with the following precedence.
Playbook Args > Host Vars > Group Vars > Global Vars > Defaults
For examples:
- Force removing existing databases with Playbook CLI Args
-e pg_clean=true
- Override an instance role with Instance Level Parameter
pg_role
on Host Vars - Override a cluster name with Cluster Level Parameter
pg_cluster
on Group Vars. - Specify global NTP servers with Global Parameter
node_ntp_servers
on Global Vars - If no
pg_version
is set, it will use the default value from role implementation
Reference
Pigsty have 260+ parameters, check Parameter for details.
Module | Section | Description | Count |
---|---|---|---|
INFRA | META | Pigsty Metadata | 4 |
INFRA | CA | Self-Signed CA | 3 |
INFRA | INFRA_ID | Infra Portals & Identity | 2 |
INFRA | REPO | Local Yum Repo | 8 |
INFRA | INFRA_PACKAGE | Infra Packages | 2 |
INFRA | NGINX | Nginx Web Server | 6 |
INFRA | DNS | DNSMASQ Nameserver | 3 |
INFRA | PROMETHEUS | Prometheus Stack | 16 |
INFRA | GRAFANA | Grafana Stack | 6 |
INFRA | LOKI | Loki Logging Service | 4 |
NODE | NODE_ID | Node Identity Parameters | 5 |
NODE | NODE_DNS | Node domain names & resolver | 5 |
NODE | NODE_PACKAGE | Node Repo & Packages | 5 |
NODE | NODE_TUNE | Node Tuning & Kernel features | 10 |
NODE | NODE_ADMIN | Admin User & Credentials | 7 |
NODE | NODE_TIME | Node Timezone, NTP, Crontabs | 5 |
NODE | HAPROXY | HAProxy the load balancer | 10 |
NODE | NODE_EXPORTER | Node Monitoring Agent | 3 |
NODE | PROMTAIL | Promtail logging Agent | 4 |
DOCKER | DOCKER | Docker Daemon | 4 |
ETCD | ETCD | ETCD DCS Cluster | 10 |
MINIO | MINIO | MINIO S3 Object Storage | 15 |
REDIS | REDIS | Redis the key-value NoSQL cache | 20 |
PGSQL | PG_ID | PG Identity Parameters | 11 |
PGSQL | PG_BUSINESS | PG Business Object Definition | 12 |
PGSQL | PG_INSTALL | Install PG Packages & Extensions | 10 |
PGSQL | PG_BOOTSTRAP | Init HA PG Cluster with Patroni | 39 |
PGSQL | PG_PROVISION | Create in-database objects | 9 |
PGSQL | PG_BACKUP | Set Backup Repo with pgBackRest | 5 |
PGSQL | PG_SERVICE | Exposing service, bind vip, dns | 9 |
PGSQL | PG_EXPORTER | PG Monitor agent for Prometheus | 15 |
Last modified 2023-02-27: add v2.0 images and docs (5b09f12)