
Pilguheit andmebaasi replikatsioonile suuremas mahus.. aga soodsalt. Spilo abil

Craig Nielsen
November 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:
— laeb kõik keskkonnamuutujad sellest kataloogistenvdir /run/etc/wal-e.d/env
— lükkab WAL-faili S3/MinIO-ssewal-g wal-push %p
— PostgreSQL asendab selle tegeliku WAL-faili teega%p
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:
— iga 10 minuti järel (sinu BACKUP_SCHEDULE-st)*/10 * * * *
— laeb keskkonnaenvdir /run/etc/wal-e.d/env
— loob täisvarukoopiawal-g backup-push
— PostgreSQL-i andmekataloog/home/postgres/pgdata/pgroot/data
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:
(kui varundamine on lubatud)archive_mode = onarchive_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 (
, WAL-G keskkonnafailid)patroni.yml - ✅ Seadistab PostgreSQL-i
vastavaltarchive_command'i
-ileUSE_WALG_BACKUP - ✅ 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.