2.5 KiB
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
mailuseri 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.