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

Funkce zálohovací metody PostgreSQL v AWS S3

Amazon vydal S3 na začátku roku 2006 a první nástroj umožňující zálohovacím skriptům PostgreSQL nahrávat data do cloudu – s3cmd – se zrodil jen o rok později. Do roku 2010 (podle mých schopností vyhledávání Google) Otevřít o tom blogy BI. Dá se tedy s jistotou říci, že někteří z PostgreSQL DBA zálohují data do AWS S3 již 9 let. Ale jak? A co se za tu dobu změnilo? Zatímco na s3cmd někteří stále odkazují v souvislosti se známými zálohovacími nástroji PostgreSQL, metody zaznamenaly změny umožňující lepší integraci buď se souborovým systémem nebo nativními možnostmi zálohování PostgreSQL, aby bylo dosaženo požadovaných cílů obnovy RTO a RPO.

Proč Amazon S3

Jak je zdůrazněno v celé dokumentaci Amazon S3 (časté dotazy k S3 jsou velmi dobrým výchozím bodem), výhody používání služby S3 jsou:

  • Trvanlivost 99,999999999 (jedenáct devítek)
  • neomezené úložiště dat
  • nízké náklady (ještě nižší v kombinaci s BitTorrentem)
  • bezplatný příchozí síťový provoz
  • účtuje se pouze odchozí síťový provoz

AWS S3 CLI Gotchas

Sada nástrojů AWS S3 CLI poskytuje všechny nástroje potřebné pro přenos dat do az úložiště S3, tak proč tyto nástroje nepoužít? Odpověď spočívá v detailech implementace Amazon S3, které zahrnují opatření pro řešení omezení a omezení souvisejících s ukládáním objektů:

  • Maximální velikost 5 TB na uložený objekt
  • Maximální velikost objektu PUT 5 GB
  • pro objekty větší než 100 MB se doporučuje nahrát více částí
  • vyberte vhodnou třídu úložiště v souladu s grafem výkonu S3
  • Využijte výhody životního cyklu S3
  • Model konzistence dat S3

Jako příklad naleznete na stránce nápovědy aws s3 cp:

--expected-size (řetězec) Tento argument určuje očekávanou velikost proudu v bytech. Všimněte si, že tento argument je potřeba pouze v případě, že se stream nahrává do s3 a jeho velikost je větší než 5 GB. Neuvedení tohoto argumentu za těchto podmínek může mít za následek neúspěšné nahrání kvůli příliš velkému počtu nahrávek.

Vyhnutí se těmto nástrahám vyžaduje důkladnou znalost ekosystému S3, čehož se snaží dosáhnout účelové nástroje pro zálohování PostgreSQL a S3.

Nástroje nativního zálohování PostgreSQL s podporou Amazon S3

Integraci S3 zajišťují některé ze známých nástrojů pro zálohování, které implementují funkce nativního zálohování PostgreSQL.

BarmanS3

BarmanS3 je implementován jako Barman Hook Scripts. Spoléhá na AWS CLI, aniž by se zabýval výše uvedenými doporučeními a omezeními. Díky jednoduchému nastavení je vhodným kandidátem pro malé instalace. Vývoj se poněkud zastavil, poslední aktualizace asi před rokem, takže tento produkt je volbou pro ty, kteří již Barman ve svém prostředí používají.

Výpisy S3

S3dumps je aktivní projekt implementovaný pomocí knihovny Amazon Python Boto3. Instalace se snadno provádí pomocí pip. Ačkoli se spoléhá na sadu Amazon S3 Python SDK, vyhledávání ve zdrojovém kódu pro klíčová slova regulárního výrazu, jako je multi.*part nebo storage.*class, neodhalí žádné pokročilé funkce S3, jako jsou například přenosy z více částí.

pgBackRest

pgBackRest implementuje S3 jako možnost úložiště. Jedná se o jeden ze známých zálohovacích nástrojů PostgreSQL, který poskytuje funkčně bohatou sadu možností zálohování, jako je paralelní zálohování a obnova, šifrování a podpora tabulkových prostorů. Je to většinou kód C, který poskytuje rychlost a propustnost, kterou hledáme, nicméně pokud jde o interakci s AWS S3 API, jde o cenu dodatečné práce potřebné pro implementaci funkcí úložiště S3. Nejnovější verze implementuje vícedílné nahrávání S3.

WAL-G

WAL-G oznámené před 2 lety je aktivně udržováno. Tento spolehlivý nástroj pro zálohování PostgreSQL implementuje třídy úložiště, ale ne vícedílné nahrávání (hledání kódu CreateMultipartUpload nenalezlo žádný výskyt).

PGHoard

pghoard byl vydán asi před 3 lety. Je to výkonný a na funkce bohatý zálohovací nástroj PostgreSQL s podporou vícedílných přenosů S3. Nenabízí žádné další funkce S3, jako je správa třídy úložiště a životního cyklu objektů.

S3 jako místní souborový systém

Možnost přístupu k úložišti S3 jako k místnímu souborovému systému je velmi žádanou funkcí, protože otevírá možnost použití nativních nástrojů pro zálohování PostgreSQL.

Pro prostředí Linux nabízí Amazon dvě možnosti:NFS a iSCSI. Využívají AWS Storage Gateway.

NFS

Místně připojené sdílení NFS poskytuje služba AWS Storage Gateway File. Podle odkazu musíme vytvořit File Gateway.

Na obrazovce Vybrat hostitelskou platformu vyberte Amazon EC2 a klikněte na tlačítko Spustit instanci spustíte průvodce EC2 pro vytvoření instance.

Nyní, jen ze zvědavosti tohoto Sysadmina, pojďme prozkoumat AMI používané průvodcem, protože nám poskytuje zajímavý pohled na některé interní části AWS. Se známým ID obrázku ami-0bab9d6dffb52fef5 se podívejme na podrobnosti:

Jak je uvedeno výše, název AMI je aws-thinstaller – co tedy je "thinstaller"? Vyhledávání na internetu odhalilo, že Thinstaller je nástroj pro správu konfigurace softwaru IBM Lenovo pro produkty Microsoft a je zmiňován nejprve v tomto blogu z roku 2008 a později v tomto příspěvku na fóru Lenovo a v této žádosti školní čtvrti o službu. Neměl jsem to jak vědět, protože moje práce správce systému Windows skončila o 3 roky dříve. Tak bylo toto AMI postaveno s produktem Thinstaller Aby to bylo ještě více matoucí, operační systém AMI je uveden jako „Jiný Linux“, což lze potvrdit pomocí SSH-ing do systému jako správce.

Šikovný průvodce:navzdory pokynům k nastavení brány firewall EC2 můj prohlížeč při připojování k bráně úložiště vypršel. Povolení portu 80 je zdokumentováno v požadavcích na port – mohli bychom tvrdit, že průvodce by měl buď uvést všechny požadované porty, nebo odkazovat na dokumentaci, avšak v duchu cloudu je odpověď „automatizovat“ pomocí nástrojů, jako je CloudFormation.

Průvodce také doporučuje začít s instancí velikosti xlarge.

Jakmile bude brána úložiště připravena, nakonfigurujte sdílení NFS kliknutím na tlačítko Vytvořit tlačítko sdílení souborů v nabídce Brána:

Jakmile bude sdílení NFS připraveno, postupujte podle pokynů pro připojení souborového systému:

Všimněte si, že na výše uvedeném snímku obrazovky příkaz mount odkazuje na soukromou IP adresu instance adresa. Pro připojení z veřejného hostitele stačí použít veřejnou adresu instance, jak je uvedeno v podrobnostech instance EC2 výše.

Průvodce se nezablokuje, pokud segment S3 v době vytváření sdílení souborů neexistuje, jakmile je však segment S3 vytvořen, musíme instanci restartovat, jinak příkaz mount selže s:

[[email protected] ~]# mount -t nfs -o nolock,hard 34.207.216.29:/s9s-postgresql-backup /mnt

mount.nfs: mounting 34.207.216.29:/s9s-postgresql-backup failed, reason given by server: No such file or directory

Ověřte, že sdílení bylo zpřístupněno:

[[email protected] ~]# df -h /mnt

Filesystem                            Size Used Avail Use% Mounted on

34.207.216.29:/s9s-postgresql-backup  8.0E 0 8.0E 0% /mnt

Nyní provedeme rychlý test:

[email protected][local]:54311 postgres# \l+ test

                                                List of databases

Name |  Owner | Encoding |   Collate | Ctype | Access privileges |  Size | Tablespace | Description

------+----------+----------+-------------+-------------+-------------------+---------+------------+-------------

test | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                   | 2763 MB | pg_default |

(1 row)

[[email protected] ~]# date ; time pg_dump -d test | gzip -c >/mnt/test.pg_dump.gz ; date

Sun 27 Oct 2019 06:06:24 PM PDT



real    0m29.807s

user    0m15.909s

sys     0m2.040s

Sun 27 Oct 2019 06:06:54 PM PDT

Všimněte si, že časové razítko Poslední úpravy na bloku S3 je asi o minutu později, což, jak již bylo zmíněno dříve, u modelu konzistence dat Amazon S3 musí platit.

Zde je podrobnější test:

~ $ for q in {0..20} ; do touch /mnt/touched-at-$(date +%Y%m%d%H%M%S) ;

sleep 1 ; done



~ $ aws s3 ls s3://s9s-postgresql-backup | nl

    1      2019-10-27 19:50:40          0 touched-at-20191027194957

    2      2019-10-27 19:50:40          0 touched-at-20191027194958

    3      2019-10-27 19:50:40          0 touched-at-20191027195000

    4      2019-10-27 19:50:40          0 touched-at-20191027195001

    5      2019-10-27 19:50:40          0 touched-at-20191027195002

    6      2019-10-27 19:50:40          0 touched-at-20191027195004

    7      2019-10-27 19:50:40          0 touched-at-20191027195005

    8      2019-10-27 19:50:40          0 touched-at-20191027195007

    9      2019-10-27 19:50:40          0 touched-at-20191027195008

   10      2019-10-27 19:51:10          0 touched-at-20191027195009

   11      2019-10-27 19:51:10          0 touched-at-20191027195011

   12      2019-10-27 19:51:10          0 touched-at-20191027195012

   13      2019-10-27 19:51:10          0 touched-at-20191027195013

   14      2019-10-27 19:51:10          0 touched-at-20191027195014

   15      2019-10-27 19:51:10          0 touched-at-20191027195016

   16      2019-10-27 19:51:10          0 touched-at-20191027195017

   17      2019-10-27 19:51:10          0 touched-at-20191027195018

   18      2019-10-27 19:51:10          0 touched-at-20191027195020

   19      2019-10-27 19:51:10          0 touched-at-20191027195021

   20      2019-10-27 19:51:10          0 touched-at-20191027195022

   21      2019-10-27 19:51:10          0 touched-at-20191027195024

Další problém, který stojí za zmínku:po hraní si s různými konfiguracemi, vytváření a ničení bran a sdílených složek se mi v určitém okamžiku při pokusu o aktivaci brány souborů objevila vnitřní chyba:

Příkazový řádek poskytuje některé další podrobnosti, i když neukazuje na žádný problém:

~$ curl -sv "http://107.22.30.30/?gatewayType=FILE_S3&activationRegion=us-east-1"

*   Trying 107.22.30.30:80...

* TCP_NODELAY set

* Connected to 107.22.30.30 (107.22.30.30) port 80 (#0)

> GET /?gatewayType=FILE_S3&activationRegion=us-east-1 HTTP/1.1

> Host: 107.22.30.30

> User-Agent: curl/7.65.3

> Accept: */*

>

* Mark bundle as not supporting multiuse

< HTTP/1.1 500 Internal Server Error

< Date: Mon, 28 Oct 2019 06:33:30 GMT

< Content-type: text/html

< Content-length: 14

<

* Connection #0 to host 107.22.30.30 left intact

Internal Error~ $

Tento příspěvek na fóru poukázal na to, že můj problém může mít něco společného s koncovým bodem VPC, který jsem vytvořil. Moje oprava spočívala v odstranění koncového bodu VPC, který jsem nastavil během různých zkušebních a chybových běhů iSCSI.

Zatímco S3 šifruje data v klidu, datový provoz NFS je prostý text. Abychom to pochopili, zde je výpis paketů tcpdump:

23:47:12.225273 IP 192.168.0.11.936 > 107.22.30.30.2049: Flags [P.], seq 2665:3377, ack 2929, win 501, options [nop,nop,TS val 1899459538 ecr 38013066], length 712: NFS request xid 3511704119 708 getattr fh 0,2/53

[email protected]@.......k.......        ...c..............

q7s..D.......PZ7...........................4........omiday.can.local...................................................5.......]...........!....................C...

..............&...........]....................# inittab is no longer used.

#

# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.

#

# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target

#

# systemd uses 'targets' instead of runlevels. By default, there are two main targets:

#

# multi-user.target: analogous to runlevel 3

# graphical.target: analogous to runlevel 5

#

# To view current default target, run:

# systemctl get-default

#

# To set a default target, run:

# systemctl set-default TARGET.target

.....   .........0..

23:47:12.331592 IP 107.22.30.30.2049 > 192.168.0.11.936: Flags [P.], seq 2929:3109, ack 3377, win 514, options [nop,nop,TS val 38013174 ecr 1899459538], length 180: NFS reply xid 3511704119 reply ok 176 getattr NON 4 ids 0/33554432 sz -2138196387

Dokud nebude tento koncept IEE schválen, jedinou bezpečnou možností pro připojení zvenčí AWS je použití tunelu VPN. To komplikuje nastavení, takže místní možnost NFS je méně přitažlivá než nástroje založené na FUSE, o kterých budu diskutovat o něco později.

iSCSI

Tuto možnost poskytuje služba AWS Storage Gateway Volume. Jakmile je služba nakonfigurována, přejděte do části nastavení klienta Linux iSCSI.

Výhoda použití iSCSI oproti NFS spočívá ve schopnosti využívat nativní zálohovací, klonovací a snapshot služby Amazon cloud. Podrobnosti a pokyny krok za krokem získáte pomocí odkazů na Zálohování AWS, klonování svazků a snímky EBS

I když existuje spousta výhod, existuje důležité omezení, které pravděpodobně mnoho uživatelů odrazí:není možné přistupovat k bráně přes její veřejnou IP adresu. Takže, stejně jako možnost NFS, tento požadavek zvyšuje složitost nastavení.

Navzdory jasnému omezení a přesvědčení, že toto nastavení nebudu moci dokončit, jsem chtěl získat pocit, jak se to dělá. Průvodce se přesměruje na konfigurační obrazovku AWS Marketplace.

Všimněte si, že průvodce Marketplace vytvoří sekundární disk, který však není dostatečně velký velikost, a proto stále musíme přidat dva požadované svazky, jak je uvedeno v pokynech pro nastavení hostitele. Pokud nejsou požadavky na úložiště splněny, průvodce se zablokuje na obrazovce konfigurace místních disků:

Zde je pohled na konfigurační obrazovku Amazon Marketplace:

Existuje textové rozhraní přístupné přes SSH (přihlaste se jako uživatel sguser) který poskytuje základní nástroje pro odstraňování problémů se sítí a další možnosti konfigurace, které nelze provést prostřednictvím webového grafického rozhraní:

~ $ ssh [email protected]

Warning: Permanently added 'ec2-3-231-96-109.compute-1.amazonaws.com,3.231.96.109' (ECDSA) to the list of known hosts.

'screen.xterm-256color': unknown terminal type.




      AWS Storage Gateway Configuration



      #######################################################################

      ##  Currently connected network adapters:

      ##

      ##  eth0: 172.31.1.185

      #######################################################################



      1: SOCKS Proxy Configuration

      2: Test Network Connectivity

      3: Gateway Console

      4: View System Resource Check (0 Errors)



      0: Stop AWS Storage Gateway



      Press "x" to exit session



      Enter command:

A několik dalších důležitých bodů:

  • Na rozdíl od nastavení NFS neexistuje přímý přístup k úložišti S3, jak je uvedeno v sekci Časté dotazy k Volume Gateway.
  • Dokumentace AWS trvá na přizpůsobení nastavení iSCSI za účelem zlepšení výkonu a zabezpečení připojení.

FUSE

V této kategorii jsem uvedl nástroje založené na FUSE, které poskytují úplnější kompatibilitu S3 ve srovnání se zálohovacími nástroji PostgreSQL a na rozdíl od Amazon Storage Gateway umožňují přenos dat z místního hostitele na Amazon S3 bez další konfigurace. Takové nastavení by mohlo poskytnout úložiště S3 jako místní souborový systém, který mohou používat nástroje pro zálohování PostgreSQL, aby mohly využívat funkce, jako je paralelní pg_dump.

pojistka s3fs

s3fs-fuse je napsán v C++, což je jazyk podporovaný sadou nástrojů Amazon S3 SDK, a jako takový je vhodný pro implementaci pokročilých funkcí S3, jako jsou vícedílné nahrávání, ukládání do mezipaměti, třída úložiště S3, server- boční šifrování a výběr regionu. Je také vysoce kompatibilní s POSIX.

Aplikace je součástí mé Fedory 30, takže instalace je snadná.

Testování:

~/mnt/s9s $ time pg_dump -d test | gzip -c >test.pg_dump-$(date +%Y%m%d-%H%M%S).gz

real    0m35.761s

user    0m16.122s

sys     0m2.228s

~/mnt/s9s $ aws s3 ls s3://s9s-postgresql-backup

2019-10-28 03:16:03   79110010 test.pg_dump-20191028-031535.gz

Všimněte si, že rychlost je poněkud nižší než při použití brány Amazon Storage Gateway s možností NFS. Nižší výkon kompenzuje poskytováním souborového systému vysoce kompatibilního s POSIX.

S3QL

S3QL poskytuje funkce S3, jako je třída úložiště a šifrování na straně serveru. Mnoho funkcí je popsáno v vyčerpávající dokumentaci S3QL, nicméně pokud hledáte vícedílný upload, není to nikde zmíněno. Je to proto, že S3QL implementuje svůj vlastní algoritmus dělení souborů, aby zajistil funkci deduplikace. Všechny soubory jsou rozděleny do 10 MB bloků.

Instalace na systému založeném na Red Hatu je přímočará:nainstalujte požadované závislosti RPM pomocí yum:

sqlite-devel-3.7.17-8.14.amzn1.x86_64

fuse-devel-2.9.4-1.18.amzn1.x86_64

fuse-2.9.4-1.18.amzn1.x86_64

system-rpm-config-9.0.3-42.28.amzn1.noarch

python36-devel-3.6.8-1.14.amzn1.x86_64

kernel-headers-4.14.146-93.123.amzn1.x86_64

glibc-headers-2.17-260.175.amzn1.x86_64

glibc-devel-2.17-260.175.amzn1.x86_64

gcc-4.8.5-1.22.amzn1.noarch

gcc48-4.8.5-28.142.amzn1.x86_64

mpfr-3.1.1-4.14.amzn1.x86_64

libmpc-1.0.1-3.3.amzn1.x86_64

libgomp-6.4.1-1.45.amzn1.x86_64

libgcc48-4.8.5-28.142.amzn1.x86_64

cpp48-4.8.5-28.142.amzn1.x86_64

python36-pip-9.0.3-1.26.amzn1.noarch

python36-libs-3.6.8-1.14.amzn1.x86_64

python36-3.6.8-1.14.amzn1.x86_64

python36-setuptools-36.2.7-1.33.amzn1.noarch

Potom nainstalujte závislosti Pythonu pomocí pip3:

pip-3.6 install setuptools cryptography defusedxml apsw dugong pytest requests llfuse==1.3.6

Významnou charakteristikou tohoto nástroje je souborový systém S3QL vytvořený nad bucketem S3.

Pravý

goofys je možnost, když výkon převáží soulad s POSIX. Jeho cíle jsou opakem s3fs-fuse. Zaměření na rychlost se odráží i v distribučním modelu. Pro Linux existují předpřipravené binární soubory. Po stažení spusťte:

~/temp/goofys $ ./goofys s9s-postgresql-backup ~/mnt/s9s/

A záloha:

~/mnt/s9s $ time pg_dump -d test | gzip -c >test.pg_dump-$(date +%Y%m%d-%H%M%S).gz



real    0m27.427s

user    0m15.962s

sys     0m2.169s



~/mnt/s9s $ aws s3 ls s3://s9s-postgresql-backup

2019-10-28 04:29:05   79110010 test.pg_dump-20191028-042902.gz

Všimněte si, že čas vytvoření objektu na S3 je pouze 3 sekundy od časového razítka souboru.

ObjectFS

ObjectFS se zdá být udržován asi před 6 měsíci. Kontrola vícedílného nahrání ukazuje, že není implementován. Z výzkumného článku autora se dozvídáme, že systém je stále ve vývoji, a protože článek byl vydán v roce 2019, myslel jsem si, že by stálo za to ho zmínit.

Klienti S3

Jak již bylo zmíněno dříve, abychom mohli používat AWS S3 CLI, musíme vzít v úvahu několik aspektů specifických pro úložiště objektů obecně, a konkrétně pro Amazon S3. Pokud je jediným požadavkem schopnost přenášet data do az úložiště S3, pak tuto práci zvládne nástroj, který přesně dodržuje doporučení Amazon S3.

s3cmd je jedním z nástrojů, který obstál ve zkoušce časem. Tento blog Open BI z roku 2010 o tom mluví, v době, kdy byl S3 novým dítětem v bloku.

Významné vlastnosti:

  • šifrování na straně serveru
  • automatické nahrávání více částí
  • omezení šířky pásma

Více informací naleznete na stránce S3cmd:FAQ a Knowledge Base.

Závěr

Možnosti dostupné pro zálohování clusteru PostgreSQL na Amazon S3 se liší v metodách přenosu dat a v tom, jak jsou v souladu se strategiemi Amazon S3.

AWS Storage Gateway doplňuje úložiště objektů S3 od Amazonu, a to za cenu vyšší složitosti spolu s dalšími znalostmi, které jsou nutné k tomu, abyste z této služby mohli vytěžit maximum. Například výběr správného počtu disků vyžaduje pečlivé plánování a dobrá znalost nákladů Amazon souvisejících s S3 je nutností, aby se minimalizovaly provozní náklady.

Ačkoli lze použít pro jakékoli cloudové úložiště nejen pro Amazon S3, rozhodnutí uložit data ve veřejném cloudu má bezpečnostní důsledky. Amazon S3 poskytuje šifrování pro data v klidu a data při přenosu bez záruky nulových znalostí nebo žádných důkazů znalostí. Organizace, které chtějí mít plnou kontrolu nad svými daty, by měly implementovat šifrování na straně klienta a ukládat šifrovací klíče mimo svou infrastrukturu AWS.

Pro komerční alternativy k mapování S3 na místní souborový systém se vyplatí vyzkoušet produkty od ObjectiveFS nebo NetApp.

A konečně, organizace, které chtějí vyvinout své vlastní nástroje pro zálohování, ať už vycházejí ze základů poskytovaných mnoha open source aplikacemi, nebo začínají od nuly, by měly zvážit použití testu kompatibility S3, který je k dispozici v rámci projektu Ceph.


  1. Nainstalujte pdo pro postgres Ubuntu

  2. ROW_NUMBER() v MySQL

  3. Oracle JDBC ojdbc6 Jar jako Maven Dependency

  4. Několik nápadů o nízkoúrovňovém sdružování zdrojů v PostgreSQL