sql >> Databáze >  >> RDS >> PostgreSQL

Barman Cloud – Část 1:Archiv WAL

Preambule

Kolik současných uživatelů Barman přemýšlelo o ukládání záloh ve vzdáleném umístění v cloudu? Kolik lidí přemýšlelo o tom, že by tuto zálohu vzali přímo ze samotného serveru PostgreSQL?

Tedy od Barmana 2.10 to je nyní možné!
Jak?
Pojďme to společně zjistit v následujících článcích.

Požadavky

Následující dva články mají být praktickým úvodem do nového barman-cloud-wal-archive a barman-cloud-backup nástroje přidané v barman-cli balíček.
První část se bude týkat barman-cloud-wal-archive zatímco druhý bude pokrývat barman-cloud-backup
Čtenáři potřebují základní znalosti o metodách archivace a zálohování PostgreSQL WAL a Barman. Také se doporučuje, abyste znali cloudové technologie pro řešení úložiště, jako je Amazon S3.

Archiv WAL

Barman po mnoho let fungoval jako vzdálený archiv WAL a balíček Barman CLI byl navržen tak, aby rozšířil spolehlivost a robustnost archivace na straně PostgreSQL. Ve skutečnosti barman-cli poskytuje skripty jako barman-wal-restore umožňující pohotovostnímu uzlu chytře a bezpečně obnovit soubory WAL z archivu Barman pomocí příkazu restore_command parametr v postgresql.auto.conf (nebo recovery.conf do PostgreSQL 12) a barman-wal-archive k archivaci souborů WAL z hlavního uzlu do Barmana pomocí archive_command parametr nakonfigurovaný v postgresql.conf soubor.

Cloudový archiv WAL

Díky zpětné vazbě uživatelů představili vývojáři Barman dva nové nástroje ve verzi 2.10 :

  • barman-cloud-wal-archive
  • barman-cloud-backup

Verze 2.11 bude obsahovat dva další nástroje pro obnovu, nazvané barman-cloud-wal-restore a barman-cloud-restore .
Tento příspěvek je celý věnován barman-cloud-wal-archive , který dokáže ukládat soubory WAL v cloudu, umožňuje vícevrstvou archivaci s Barmanem a rozšiřuje zásady uchovávání záloh.
Vskutku, barman-cloud-wal-archive lze použít jako hákový skript konfigurující pre_archive_retry_script parametr v Barman, ke kopírování souborů WAL v nakonfigurovaném cloudovém úložišti, čímž se zvýší redundance archivu a umožní se zvolit delší politiku uchovávání než u Barman.

To není vše!

barman-cloud-wal-archive může nahradit barman-wal-archive v archive_command k přímé archivaci souborů WAL v cloudu namísto jejich kopírování na server Barman. Tímto způsobem se i cluster PostgreSQL, který nemá samostatný vyhrazený záložní server, může spoléhat na službu vzdáleného úložiště pro archivaci souborů WAL.

Jak to funguje?

Následující pokyny slouží pouze k instalaci a konfiguraci barman-cloud-wal-archive jako archive_command v PostgreSQL.
Nejprve se rozhodněte, kam chcete archivovat soubory WAL. V tomto článku budeme používat Amazon S3, který je v současné době jedinou podporovanou technologií. Přestože s knihovnou boto3 mohou pracovat i jiné technologie, které podporují API podobné S3 (Google Cloud, DigitalOcean, Microsoft Azure atd.), zatím nebyly testovány.

Požadavky

  1. barman-cli 2.10 (nebo vyšší)
  2. Účet Amazon AWS
  3. awscli
  4. kbelík S3
  5. Instance PostgreSQL

V tomto článku otestujeme Barman CLI ve virtuálním počítači s Debian Buster a PostgreSQL 12 který je již v provozu.

Instalace

    1. Nainstalujte veřejné úložiště 2ndQuadrant
    2. Nainstalujte balíček barman-cli
      [email protected]:~# apt [email protected]:~# apt install barman-cli
    3. Nainstalujte awscli
      [email protected]:~# apt install awscli

    Konfigurace a nastavení

    Pojďme si přečíst manuál:

    [email protected]:~$ man barman-cloud-wal-archive[...]SYNOPSE barman-cloud-wal-archive [MOŽNOSTI] DESTINATION_URL SERVER_NAME WAL_PATH[...]POZIČNÍ ARGUMENTY DESTINATION_URL URL  cloudu určení, jako je kbelík v AWS S3. Například:s3://BUCKET_NAME/path/to/folder (kde BUCKET_NAME je bucket, který jste vytvořili v AWS). SERVER_NAME název serveru podle konfigurace v Barman. WAL_PATH hodnota klíčového slova ,%p' (podle ,archive_command').[...]

    Abychom jej mohli správně používat, stačí nakonfigurovat přihlašovací údaje AWS pomocí awscli nástroj jako postgres uživatel zkopíruje přístupový klíč a tajný klíč dříve vytvořené v sekci IAM v konzole AWS:

    [email protected]:~$ aws configure --profile barman-cloudAWS ID přístupového klíče [Žádné]:AKI***************** Tajný přístupový klíč AWS [Žádné ]:*********************************************Výchozí název regionu [Žádný]:eu -west-1Výchozí výstupní formát [Žádný]:json

    Ujistěte se, že máte na AWS k dispozici kbelík S3. Rozhodl jsem se to nazvat barman-s3-test aby to bylo jasné.
    Nyní bychom měli být schopni otestovat barman-cloud-wal-archive příkaz:

    [email protected]:~$ barman-cloud-wal-archive -t -P barman-cloud s3://barman-s3-test/ pg12 /var/lib/postgresql/12/main/pg_wal/000000010000000000000001 příklad @sqldat.com:~$ echo $?0

    Stav ukončení potvrzuje, že příkaz byl úspěšný. Nyní můžeme přidat následující řádek na konec konfiguračního souboru PostgreSQL a restartovat instanci:
    archive_mode = on

    [email protected]:~# restart systemctl [email protected]

    Protože naše data budou zkopírována do vzdáleného úložiště, mimo naši kontrolu, je důležité, abychom je ukládali komprimovaná a šifrované . barman-cloud-wal-archive příkaz podporuje dvě různé metody komprese:

    [email protected]:~$ archiv barmana-cloud-wal --help[...] -z, --gzip            gzip-komprimujte WAL při nahrávání do cloudu -j, --bzip2           bzip2- komprimovat WAL při nahrávání do cloudu -e ŠIFROVÁNÍ, --šifrování ŠIFROVÁNÍ Povolí šifrování na straně serveru pro přenos. Povolené hodnoty:'AES256', 'aws:kms'[...]

    Možnost šifrování pouze informuje bucket S3, jakou metodu použít k uložení zašifrovaných dat. Šifrovaná data nemůže číst žádný jiný uživatel AWS kromě vlastníka bucketu. Barman cloud žádný objekt před odesláním do S3 nešifruje, pouze požádá bucket, aby je uložil zašifrovaný, pokud byl S3 správně nakonfigurován. Všechna připojení k S3 jsou však bezpečně navázána prostřednictvím https .

    Přidejte následující řádek na konec postgresql.conf soubor:

    archive_command = 'barman-cloud-wal-archive -P barman-cloud -e AES256 -j s3://barman-s3-test/ pg12 %p'

    Tentokrát stačí k použití nových změn pouze opětovné načtení konfigurace:

    [email protected]:~$ psql -c “SELECT pg_reload_conf()”

    Abychom otestovali, zda nový archive_command funguje, měl by PostgreSQL produkovat soubory WAL k archivaci, proto musíme provést nějaký provoz pomocí pgbench nástroj:

    [email protected]:~$ createdb [email protected]:~$ pgbench -i -s10 pg_bench_db[nějaký irelevantní výstup zde][email protected]:~$ pgbench -c 10 -j 2 -T 30 pg_bench_dbstarting vákuum...end.transaction type:škálovací faktor:10režim dotazu:jednoduchýpočet klientů:10počet vláken:2trvání:30 počet skutečně zpracovaných transakcí:84501průměrná latence =3,552 mstps =2815.224687 (včetně navazování připojení)tps =2815.427535 (kromě navazování připojení)

    V tomto okamžiku bychom měli vidět soubory WAL archivované v bucketu S3. Zkontrolujeme to a vytvoříme cílovou cestu s názvem serveru a cílovým adresářem WAL:

    [email protected]:~$ aws s3 --profil barman-cloud ls s3://barman-s3-test/pg12/wals/ PRE 0000000100000000/

    Pojďme se podívat do adresáře 0000000100000000:

    [email protected]:~$ aws s3 --profil barman-cloud ls s3://barman-s3-test/pg12/wals/0000000100000000/2020-01-08 08:20:54 00000000000000000000000000000000000000000000000000000000 -01-08 08:21:00 293422 000000010000000000000002.BZ22020-01-08 08:21:06 301934 0000000000000000000000000000010101010000000000000000000000000000000000000000000000000000000000000000000000000000000000010190000000000000000190000000000000000190000000000000019000000000000001900000000000000190000000000000000 .BZ22020-01-08 08:21:21 299348 0000000100000000000006.BZ22020-01-08 08:21:27 551249 0000000100000000000007.S. 4542104 00000001000000000000009.bz22020-01-08 08:21:46    5052693 00000001000000000000000A.bz2 

    Skvělé!

    Soubory WAL jsou před nahráním do bucketu S3 komprimovány a jsou uloženy zašifrované, což nám šetří místo (a peníze) a zvyšuje úroveň zabezpečení našich dat.

    Závěry

    barman-cloud-wal-archive příkaz je to, na co uživatelé dlouho čekali.

    Pokud jste jedním z těch, kteří použili pre_archive_retry_script implementovat vlastní skript pro nahrávání souborů WAL do bucketu S3, pak jej lze použít jako lepší náhradu, protože je vyvinut a spravován vývojáři Barman a je testován a dodáván systémem 2ndQuadrant Continuous Delivery.

    Pokud jste o tom ještě nepřemýšleli, otevírají se tím nové zásady uchovávání, které mohou být pro cloudové úložiště delší než ty místní Barman, čímž se zvyšuje stáří objektů v cloudu a zároveň se šetří místo na místním úložišti správným nastavením delší zásady uchovávání v konfiguraci bucketů S3.

    V opačném případě jej lze použít jako v tomto článku k archivaci souborů WAL přímo ze serveru PostgreSQL. Ačkoli to odstraní mezikrok, RPO zvyšuje ve srovnání s metodou streamování, protože PostgreSQL bude archivovat WAL soubor až po jeho zavření. Proto v případě problémů na PostgreSQL uzlu můžeme přijít o některé změny. Pokud je to možné, doporučujeme implementovat tuto metodu společně se streamováním na server Barman, aby bylo dosaženo RPO=0 (se synchronním streamováním).

    Nyní, když máme zaveden systém průběžné archivace, můžeme provést naši první cloudovou zálohu pomocí barman-cloud-backup nástroj.

    Uvidíme se v druhé části článku.


  1. CHYBA 1044 (42000):Přístup odepřen uživateli ''@'localhost' do databáze 'db'

  2. Audit dat v NHibernate a SqlServer

  3. Funkce LENGTH() v Oracle

  4. Oracle dynamic DESC a ASC v pořadí podle