observability.svc.plus/pgsql.yml
2026-02-01 20:53:55 +08:00

133 lines
6.5 KiB
YAML
Executable File

#!/usr/bin/env ansible-playbook
---
#==============================================================#
# File : pgsql.yml
# Desc : init postgres cluster/instance
# Ctime : 2020-05-12
# Mtime : 2026-01-14
# Path : pgsql.yml
# Docs : https://pigsty.io/docs/pgsql/playbook#pgsqlyml
# License : Apache-2.0 @ https://pigsty.io/docs/about/license/
# Copyright : 2018-2026 Ruohang Feng / Vonng (rh@vonng.com)
#==============================================================#
- name: PGSQL
become: true
hosts: all
gather_facts: no
roles:
- { role: node_id ,tags: [id,node-id] } # get node identity (always)
- { role: pg_id ,tags: [id,pg-id] } # get pgsql identity (always)
- { role: pgsql ,tags: pgsql } # init postgres cluster/instance
- { role: pg_monitor ,tags: monitor } # init postgres monitoring
#--------------------------------------------------------------#
# Usage
#--------------------------------------------------------------#
# You have to pgsql-rm before running this on initialized hosts
#
# Init a cluster (e.g. pg-meta)
# ./pgsql.yml -l pg-meta
#
# Add/ReInit a replica to cluster (e.g. add 10.10.10.13 of pg-test)
# ./pgsql.yml -l 10.10.10.13 # refresh pg_services after expansion
# ./pgsql.yml -l 'pg-test,!10.10.10.13' -t pg_service
#
# Refresh Postgres Cluster Service (e.g. pg-test)
# ./pgsql.yml -l pg-test --tags=pg_service
#
# Reload Postgres/Pgbouncer HBA Rules (e.g. pg-test)
# ./pgsql.yml -l pg-test --tags=pg_hba,pgbouncer_hba,pgbouncer_reload -e pg_reload=true
#
#--------------------------------------------------------------#
# Utils
#--------------------------------------------------------------#
#
# bin/pgsql-add pg-meta # init pgsql cluster pg-meta
# bin/pgsql-add 10.10.10.10 # init pgsql instance 10.10.10.10
# bin/pgsql-add pg-test 10.10.10.13 # add 10.10.10.13 to cluster pg-test (with service refresh)
# bin/pgsql-svc pg-test # refresh haproxy service of pg-test (when membership changed)
# bin/pgsql-hba pg-test # reload pg/pgb hba rules of pg-test (when role/hba changed)
#
#--------------------------------------------------------------#
# Tasks
#--------------------------------------------------------------#
# pg_install : install postgres packages & extensions
# - pg_dbsu : setup os user sudo for postgres dbsu
# - pg_dbsu_create : exchange dbsu ssh keys
# - pg_dbsu_sudo : exchange dbsu ssh keys
# - pg_ssh : exchange dbsu ssh keys
# - pg_pkg : install postgres packages
# - pg_pre : pre-install task
# - pg_ext : install postgres extension packages
# - pg_post : post-install task
# - pg_link : link pgsql version bin to /usr/pgsql
# - pg_path : add pgsql bin to system path
# - pg_dir : create postgres directories and setup fhs
# - pg_bin : sync /pg/bin scripts
# - pg_alias : write pgsql/psql alias
# - pg_dummy : create dummy placeholder file
#
# pg_bootstrap : bootstrap postgres cluster
# - pg_config : generate postgres config
# - pg_conf : generate patroni config
# - pg_key : generate pgsodium key
# - pg_cert : issues certificates for postgres
# - pg_cert_private : check pg private key existence
# - pg_cert_issue : signing pg server certs
# - pg_cert_copy : copy key & certs to pg node
# - pg_launch : launch patroni primary & replicas (patroni)
# - pg_watchdog : grant watchdog permission to postgres
# - pg_primary : launch patroni/postgres primary
# - pg_init : init pg cluster with roles/templates
# - pg_pass : write .pgpass file to pg home
# - pg_replica : launch patroni/postgres replicas
# - pg_hba : generate pg HBA rules
# - patroni_reload : reload patroni config
# - pg_patroni : pause or remove patroni if necessary
#
# pg_provision : provision postgres business users & databases
# - pg_user : provision postgres business users
# - pg_user_config : render create user sql
# - pg_user_create : create user on postgres
# - pg_db : provision postgres business databases
# - pg_db_drop : drop database on postgres (state=absent/recreate)
# - pg_db_config : render create database sql
# - pg_db_create : create database on postgres
#
# pg_backup : init postgres PITR backup
# - pgbackrest : setup pgbackrest for backup
# - pgbackrest_config : generate pgbackrest config
# - pgbackrest_init : init pgbackrest repo
# - pgbackrest_backup : make a initial backup after bootstrap
#
# pg_crontab : setup postgres dbsu crontab
#
# pg_access : init postgres service access, pool, dns, vip, svc
# - pgbouncer : deploy a pgbouncer sidecar with postgres
# - pgbouncer_dir : create pgbouncer directories
# - pgbouncer_config : generate pgbouncer config
# - pgbouncer_hba : generate pgbouncer hba config
# - pgbouncer_user : generate pgbouncer userlist
# - pgbouncer_launch : launch pgbouncer pooling service
# - pgbouncer_reload : reload pgbouncer config
# - pg_vip : bind vip to pgsql primary with vip-manager
# - pg_vip_config : generate config for vip-manager
# - pg_vip_launch : launch vip-manager to bind vip
# - pg_dns : register dns name to infra dnsmasq
# - pg_dns_ins : register pg instance name
# - pg_dns_cls : register pg cluster name
# - pg_service : expose pgsql service with haproxy
# - pg_service_config : generate local haproxy config for pg services
# - pg_service_reload : expose postgres services with haproxy
#
# pg_monitor : setup pgsql monitor and register to infra
# - pg_exporter : config & launch pg_exporter
# - pgbouncer_exporter : config & launch pgbouncer_exporter
# - pgbackrest_exporter : config & launch pgbackrest_exporter
# - pg_register : register pgsql to monitoring/logging/datasource
# - add_metrics : register pg as victoria monitor targets
# - add_logs : register pg as vector logging source
# - add_ds : register pg database as grafana datasource
#--------------------------------------------------------------#
...