Files
PostgreSQL-Ansible/INSTALL.md
2026-01-29 12:55:01 +01:00

2.5 KiB

PostgreSQL Production Deployment Guide via Ansible

1. Instalacja serwerów

Dwa serwery Debian 12:

Serwer Rola IP
pg-1 Primary 10.0.0.1
pg-2 Replica 10.0.0.2

Na każdym serwerze wykonaj:

sudo apt update
sudo apt upgrade -y
sudo apt install -y sudo vim curl gnupg rsync unzip

Opcjonalnie utwórz konto do Ansible:

sudo adduser ansible
sudo usermod -aG sudo ansible

2. Konfiguracja IP i DNS

Edytuj /etc/hosts na obu serwerach:

pg-1 (/etc/hosts)

10.0.0.1 pg1
10.0.0.2 pg2

pg-2 (/etc/hosts)

10.0.0.1 pg1
10.0.0.2 pg2

Upewnij się, że hostnames pg1 i pg2 są rozpoznawane w sieci.


3. Przygotowanie repozytorium Ansible na pg-1

Skopiuj paczkę Ansible na pg-1:

scp postgres_ansible_prod_full.zip user@pg-1:/home/user/
ssh pg-1
unzip postgres_ansible_prod_full.zip -d ~/postgres_ansible_prod
cd ~/postgres_ansible_prod

Edytuj inventory.ini, jeśli IP lub hostnames są inne:

[primary]
pg1 ansible_host=10.0.0.1

[replica]
pg2 ansible_host=10.0.0.2

[all:vars]
ansible_user=root
pg_version=16
pg_cluster=main
pg_data=/var/lib/postgresql/16/main

Ustaw hasła w group_vars/all/secrets.yml:

replicator_password: "SILNE_HASLO_REPL"
mailuser_password: "SILNE_HASLO_DB"

Opcjonalnie zaszyfruj je Ansible Vault:

ansible-vault encrypt group_vars/all/secrets.yml

4. Uruchomienie playbooka

Zainstaluj Ansible na pg-1:

sudo apt install -y ansible
ansible --version

Test połączenia z pg-2:

ansible -i inventory.ini all -m ping

Uruchomienie wdrożenia:

ansible-playbook -i inventory.ini site.yml

Playbook automatycznie:

  • Instaluje PostgreSQL 16 na obu serwerach
  • Konfiguruje primary i replica
  • Tworzy użytkownika mailuser i bazę mailarchiver
  • Ustawia pgBackRest i cron backupów (full i incremental)

5. Test działania

Na pg-1:

sudo -u postgres psql -c "\l"
sudo -u postgres psql -c "\du"

Sprawdź replikację:

sudo -u postgres psql -c "SELECT * FROM pg_stat_replication;"

Test backupów (pgBackRest):

sudo -u postgres pgbackrest --stanza=main info

6. Przywracanie w razie awarii

Jeśli pg-1 padnie, przywracasz z pg-2:

ansible-playbook -i inventory.ini restore_primary.yml

Ręczny failover (promowanie pg-2 na primary):

sudo -u postgres pg_ctl promote

Następnie zmień DNS lub connection string w aplikacji, aby wskazywał nowy primary.