
Pilguheit andmebaasi replikatsioonile suuremas mahus.. aga soodsalt. Spilo abil
April 20, 2025
Ülevaade sellest, kuidas ja miks Postgres andmebaasiklaster töötab, miks seda valida ning kuidas see võib säästa raha ja elusid.

Kuidas Spilo/Patroni seadistab PostgreSQL-i ja WAL-G-d
Ülevaade
Spilo on Docker'i tõmmis, mis pakendab kokku PostgreSQL + Patroni + WAL-G/WAL-E. Kui Spilo konteiner käivitub, läbib see kindla alglaadimisprotsessi, mis loeb keskkonnamuutujaid ja genereerib konfiguratsioonifailid.
Seadistamise voog
Konteineri käivitus
↓
Keskkonnamuutujad (ConfigMap'ist)
↓
Spilo alglaadimise skript (/launch.sh)
↓
├── Genereerib Patroni konfiguratsiooni (/run/etc/patroni.yml)
│ └── Sisaldab PostgreSQL-i seadeid
│ └── Sisaldab WAL-G seadeid
│ └── Sisaldab varundamise ajakavasid
│
├── Käivitab Patroni
│ └── Patroni haldab PostgreSQL-i
│ └── Kirjutab postgresql.conf
│ └── Seadistab archive_command'i
│ └── Seadistab restore_command'i
│
└── Seadistab Cron'i tööd (kui varundamine on lubatud)
└── Ajastab WAL-G varundamised
Samm-sammult: mis tegelikult toimub
1. Konteiner käivitub — alglaadimise skript käivitub
Spilo konteiner käivitab /launch.sh (või sarnase), mis on peamine alglaadimise skript.
Asukoht: Tavaliselt /scripts/configure_spilo.py või /launch.sh
Mida see teeb:
- Loeb KÕIK keskkonnamuutujad
- Valideerib nõutud seaded
- Teeb otsuseid nende keskkonnamuutujate põhjal
2. Genereerib Patroni konfiguratsiooni
Alglaadimise skript loob /run/etc/patroni.yml keskkonnamuutujate põhjal.
Näide genereeritud failist:
# /run/etc/patroni.yml
scope: acid-minimal-cluster
name: pod-name
postgresql:
listen: 0.0.0.0:5432
connect_address: pod-ip:5432
data_dir: /home/postgres/pgdata/pgroot/data
# Need tulevad keskkonnamuutujatest!
parameters:
archive_mode: "on" # Seatud kui USE_WALG_BACKUP=true
archive_timeout: 60s
wal_level: replica
# Kõige kriitilisem — archive_command genereeritakse keskkonnamuutujate põhjal:
archive_command: "envdir /run/etc/wal-e.d/env wal-g wal-push %p"
# Taastamiskäsk taastamiseks
recovery_conf:
restore_command: "envdir /run/etc/wal-e.d/env wal-g wal-fetch %f %p"
# Varundamise/WAL-G konfiguratsioon
postgresql:
create_replica_methods:
- basebackup_fast_xlog
basebackup_fast_xlog:
command: /scripts/basebackup.sh
retries: 2
3. Genereerib WAL-G keskkonnafailid
Spilo loob kataloogi WAL-G konfiguratsiooniga: /run/etc/wal-e.d/env/
Mis luuakse:
/run/etc/wal-e.d/env/
├── AWS_ACCESS_KEY_ID # Sisaldab: minio
├── AWS_SECRET_ACCESS_KEY # Sisaldab: minio123
├── AWS_ENDPOINT # Sisaldab: http://mys3-hl.mys3:9000
├── AWS_REGION # Sisaldab: de01
├── AWS_S3_FORCE_PATH_STYLE # Sisaldab: true
├── WALG_DISABLE_S3_SSE # Sisaldab: true
├── WALG_S3_PREFIX # Sisaldab: s3://postgresql/spilo/cluster-name/scope
└── WALE_S3_PREFIX # Sisaldab: s3://postgresql/spilo/cluster-name/scope (vanema WAL-E jaoks)
See on KRIITILINE! WALG_S3_PREFIX või WAL_S3_BUCKET määrab, kuhu varukoopiad lähevad.
4. Koostab arhiveerimiskäsu
Keskkonnamuutujate põhjal genereerib Spilo PostgreSQL-i archive_command'i:
Kui USE_WALG_BACKUP=true:
archive_command = 'envdir /run/etc/wal-e.d/env wal-g wal-push %p'
Mida see teeb:
envdir /run/etc/wal-e.d/env— laeb kõik keskkonnamuutujad sellest kataloogistwal-g wal-push %p— lükkab WAL-faili S3/MinIO-sse%p— PostgreSQL asendab selle tegeliku WAL-faili teega
Kui USE_WALG_BACKUP=false:
archive_command = '/bin/true' # Ei tee midagi, tagastab lihtsalt edu
5. Seadistab Cron'i tööd täisvarundamiseks
Kui USE_WALG_BACKUP=true ja BACKUP_SCHEDULE on seatud, loob Spilo cron'i töö:
Näide cron'i kirjest:
*/10 * * * * envdir /run/etc/wal-e.d/env wal-g backup-push /home/postgres/pgdata/pgroot/data
Selgitus:
*/10 * * * *— iga 10 minuti järel (sinu BACKUP_SCHEDULE-st)envdir /run/etc/wal-e.d/env— laeb keskkonnawal-g backup-push— loob täisvarukoopia/home/postgres/pgdata/pgroot/data— PostgreSQL-i andmekataloog
6. Käivitab Patroni
Seejärel Patroni:
- Loeb
/run/etc/patroni.yml - Käivitab PostgreSQL-i genereeritud konfiguratsiooniga
- Haldab pidevalt PostgreSQL-i (kõrgkäideldavus, tõrkesiire jne)
- Uuendab konfiguratsiooni vastusena muudatustele
7. PostgreSQL töötab genereeritud konfiguratsiooniga
PostgreSQL töötab nüüd järgmiste seadetega:
archive_mode = on(kui varundamine on lubatud)archive_command = 'envdir /run/etc/wal-e.d/env wal-g wal-push %p'- Iga kord, kui WAL-fail on täis, kutsub PostgreSQL selle käsu välja
- Käsk lükkab WAL-i MinIO-sse seadistatud lõpp-punktis
Mida Spilo tegelikult teeb:
- ✅ Loeb keskkonnamuutujaid käivitumisel
- ✅ Genereerib konfiguratsioonifailid (
patroni.yml, WAL-G keskkonnafailid) - ✅ Seadistab PostgreSQL-i
archive_command'ivastavaltUSE_WALG_BACKUP-ile - ✅ Loob cron'i tööd täisvarundamiseks, kui lubatud
- ✅ Käivitab Patroni, mis käivitab PostgreSQL-i
- ❌ EI laadi ConfigMap'i muudatusi dünaamiliselt uuesti (nõuab pod'i taaskäivitust)
WAL-failide tihendusformaadid
Spilo/WAL-G saab kasutada erinevaid tihendusformaate:
- .lzo — LZO (kiire, praegu kasutusel)
- .lz4 — LZ4 (väga kiire)
- .zst — Zstandard (parem tihendus)
- .br — Brotli (kõrge tihendus)
Praegu kasutan LZO tihendust, mis on hea tasakaal kiiruse ja tihendusastme vahel.