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

pghoard Alternativy - PostgreSQL Backup Management s ClusterControl

Správa záloh může být složitý a riskantní úkol provádět ručně. Musíte vědět, že záloha funguje podle vašich zásad zálohování, protože nechcete být v situaci, kdy zálohu potřebujete a ona nefunguje nebo neexistuje. To bude určitě velký problém. Nejlepší je tedy použít bitvě otestovanou aplikaci pro správu zálohování, abyste se vyhnuli jakémukoli problému v případě selhání.

PGHoard je zálohovací démon a systém obnovy PostgreSQL, který ukládá záložní data do úložiště cloudových objektů. Podporuje PostgreSQL 9.3 nebo novější, až do PostgreSQL 11, nejnovější podporované verze právě teď. Aktuální verze PGHoard je 2.1.0, vydaná v květnu 2019 (před 1 rokem).

ClusterControl je software pro správu a automatizaci databázových clusterů bez agentů. Pomáhá nasazovat, monitorovat, spravovat a škálovat váš databázový server/klastr přímo z uživatelského rozhraní ClusterControl nebo pomocí rozhraní CLI ClusterControl. Zahrnuje funkce správy záloh a podporuje verze PostgreSQL 9.6, 10, 11 a 12. Aktuální verze ClusterControl je 1.7.6, vydaná minulý měsíc, v dubnu 2020.

V tomto blogu porovnáme PGHoard s funkcí ClusterControl Backup Management a uvidíme, jak oba systémy nainstalovat a používat. K tomu použijeme server Ubuntu 18.04 a PostgreSQL11 (protože je to nejnovější podporovaná verze pro použití PGHoard). Nainstalujeme PGHoard na stejný databázový server a importujeme jej do ClusterControl.

Porovnání funkcí správy záloh

PGHoard

Některé z nejdůležitějších funkcí PGHoard jsou:

  • Automatické pravidelné základní zálohy
  • Automatické zálohy protokolu transakcí
  • Podpora samostatného Hot Backup
  • Podpora cloudového úložiště objektů (AWS S3, Google Cloud, OpenStack Swift, Azure, Ceph)
  • Obnovení zálohy přímo z úložiště objektů, komprimované a zašifrované
  • Obnova bodu v čase (PITR)
  • Inicializovat nový pohotovostní režim ze záloh úložiště objektů, automaticky nakonfigurovaných jako replikující se hot-standby
  • Paralelní komprese a šifrování

Jedním ze způsobů použití je mít samostatný zálohovací stroj, takže se PGHoard může spojit s pg_receivexlog a přijímat soubory WAL z databáze. Dalším režimem je použití pghoard_postgres_command jako PostgreSQL archive_command. V obou případech PGHoard vytváří pravidelné základní zálohy pomocí pg_basebackup.

ClusterControl

Podívejme se také na některé z nejdůležitějších funkcí tohoto systému:

  • Uživatelsky přívětivé uživatelské rozhraní
  • Zálohování a obnovení (ve stejném uzlu nebo v samostatném uzlu)
  • Naplánovat zálohování
  • Vytvořte cluster ze zálohy
  • Automatické ověření zálohy
  • Komprese
  • Šifrování
  • Automatické nahrávání do cloudu
  • Obnova bodu v čase (PITR)
  • Různé metody zálohování (logické, fyzické, úplné, přírůstkové atd.)
  • Zálohování provozních zpráv

Vzhledem k tomu, že se nejedná pouze o systém pro správu zálohování, zmíníme také různé důležité funkce, nejen ty související se zálohováním:

  • Nasazení/import databází:samostatné, clustery/replikace, nástroje pro vyrovnávání zatížení
  • Škálování:Přidat/odebrat uzly, číst repliky, klonování klastrů, replikace z klastrů na klastr
  • Monitorování:Vlastní řídicí panely, Detekce chyb, Monitor dotazů, Poradci pro výkon, Alarmy a upozornění, Vývoj vlastních poradců
  • Automatické obnovení:Obnova uzlů a klastrů, převzetí služeb při selhání, prostředí s vysokou dostupností
  • Správa:Správa konfigurace, aktualizace oprav databáze, správa uživatelů databáze, integrace cloudu, sestavy operací, správa ProxySQL
  • Zabezpečení:správa klíčů, řízení přístupu na základě rolí, ověřování pomocí LDAP/Active Directory, šifrování SSL

Doporučená topologie je mít samostatný uzel pro spuštění ClusterControl, abyste se ujistili, že v případě selhání můžete využít funkce automatického obnovení a převzetí služeb při selhání ClusterControl (mimo jiné užitečné funkce) .

Systémové požadavky

PGHoard

Podle dokumentace může PGHoard zálohovat a obnovovat PostgreSQL verze 9.3 a vyšší. Démon je implementován v Pythonu a pracuje s CPythonem verze 3.5 nebo novější. V závislosti na požadavcích mohou být vyžadovány následující moduly Pythonu:

  • psychopg2 k vyhledání metadat protokolu transakcí
  • požadavky na interní architekturu klient-server
  • azure pro úložiště objektů Microsoft Azure
  • botocore pro úložiště objektů AWS S3 (nebo Ceph-S3)
  • google-api-client pro úložiště objektů Google Cloud
  • kryptografie pro šifrování a dešifrování záloh (vyžaduje se verze 0.8 nebo novější)
  • snappy pro kompresi a dekompresi Snappy
  • zstandard pro kompresi a dekompresi Zstandard (zstd)
  • systemd pro integraci systemd
  • swiftclient pro úložiště objektů OpenStack Swift
  • paramiko pro ukládání objektů sftp

Není zde žádná zmínka o podporovaném operačním systému, ale píše se, že byl testován na moderních systémech Linux x86-64, ale měl by fungovat na jiných platformách, které poskytují požadované moduly.

ClusterControl

Server ClusterControl vyžaduje následující software:

  • Server/klient MySQL
  • Webový server Apache (nebo nginx)
  • mod_rewrite
  • mod_ssl
  • povolit přepsání .htaccess
  • PHP (5.4 nebo novější)
  • RHEL:php, php-mysql, php-gd, php-ldap, php-curl
  • Debian:php5-common, php5-mysql, php5-gd, php5-ldap, php5-curl, php5-json
  • Linux Kernel Security (SElinux nebo AppArmor) – musí být deaktivováno nebo nastaveno na povolený režim
  • OpenSSH server/klient
  • BASH (doporučeno:verze 4 nebo novější)
  • Server NTP – Čas všech serverů musí být synchronizován v jednom časovém pásmu
  • socat nebo netcat – pro streamování záloh

A podporuje různé operační systémy:

  • Red Hat Enterprise Linux 6.x/7.x/8.x
  • CentOS 6.x/7.x/8.x
  • Ubuntu 12.04/14.04/16.04/18.04 LTS
  • Debian 7.x/8.x/9.x/10.x

Pokud je ClusterControl nainstalován prostřednictvím instalačního skriptu (install-cc) nebo správce balíčků (yum/apt), všechny závislosti budou automaticky splněny.

Pro PostgreSQL podporuje verze 9.6/10.x/11.x/12.x. Kompletní seznam podporovaných databází naleznete v dokumentaci.

Vyžaduje pouze přístup SSH bez hesla k uzlům databáze (pomocí soukromých a veřejných klíčů) a privilegovaného uživatele operačního systému (může to být uživatel root nebo sudo).

Instalační proces

Proces instalace PGHoard

Předpokládáme, že máte databázi PostgreSQL spuštěnou a spuštěnou, takže nainstalujte zbývající balíčky. PGHoard je balíček Pythonu, takže až budete mít nainstalované požadované balíčky, můžete jej nainstalovat pomocí příkazu pip:

$ apt install postgresql-server-dev-11 python3 python3-pip python3-snappy

$ pip3 install pghoard

V rámci tohoto instalačního procesu musíte připravit instanci PostgreSQL pro práci s tímto nástrojem. Za tímto účelem budete muset upravit postgresql.conf, aby povolil archiv WAL a zvýšil max_wal_senders:

wal_level = logical

max_wal_senders = 4

archive_mode = on

archive_command = pghoard_postgres_command --mode archive --site default --xlog %f

Tato změna bude vyžadovat restart databáze:

$ service postgresql restart

Nyní vytvoříme uživatele databáze pro PGHoard:

$ psql

CREATE USER pghoard PASSWORD 'Password' REPLICATION;

A do souboru pg_hba.conf přidejte následující řádek:

host    replication  pghoard  127.0.0.1/32/32  md5

Znovu načtěte databázovou službu:

$ service postgresql reload

Aby to fungovalo, budete muset vytvořit konfigurační soubor JSON pro PGHoard. To uvidíme v další části „Použití“.

Instalační proces ClusterControl

Existují různé způsoby instalace, jak je uvedeno v dokumentaci. V případě ruční instalace jsou požadované balíčky specifikovány ve stejné dokumentaci a pro celý proces existuje podrobný průvodce.

Podívejme se na příklad použití skriptu automatické instalace.

$ wget http://www.severalnines.com/downloads/cmon/install-cc

$ chmod +x install-cc

$ sudo ./install-cc   # omit sudo if you run as root

Instalační skript se pokusí zautomatizovat následující úlohy:

  • Nainstalujte a nakonfigurujte místní server MySQL (používá jej ClusterControl k ukládání monitorovacích dat)
  • Nainstalujte a nakonfigurujte balíček řadiče ClusterControl prostřednictvím správce balíčků
  • Instalujte závislosti ClusterControl prostřednictvím správce balíčků
  • Konfigurace Apache a SSL
  • Konfigurujte adresu URL a token rozhraní ClusterControl API
  • Nakonfigurujte ClusterControl Controller s minimálními možnostmi konfigurace
  • Povolte službu CMON při spouštění a spusťte ji

Po spuštění zmíněného skriptu obdržíte otázku ohledně odesílání diagnostických dat:

$ sudo ./install-cc

!!

Only RHEL/Centos 6.x|7.x|8.x, Debian 7.x|8.x|9.x|10.x, Ubuntu 14.04.x|16.04.x|18.04.x LTS versions are supported

Minimum system requirements: 2GB+ RAM, 2+ CPU cores

Server Memory: 1024M total, 922M free

MySQL innodb_buffer_pool_size set to 512M

Severalnines would like your help improving our installation process.

Information such as OS, memory and install success helps us improve how we onboard our users.

None of the collected information identifies you personally.

!!

=> Would you like to help us by sending diagnostics data for the installation? (Y/n):

Potom zahájí instalaci požadovaných balíčků. Další otázka se týká názvu hostitele, který bude použit:

=> The Controller hostname will be set to 192.168.100.116. Do you want to change it? (y/N):

Když je nainstalována místní databáze, instalační program ji zabezpečí vytvořením hesla uživatele root, které musíte zadat:

=> Starting database. This may take a couple of minutes. Do NOT press any key.

Redirecting to /bin/systemctl start mariadb.service

=> Securing the MySQL Server ...

=> !! In order to complete the installation you need to set a MySQL root password !!

=> Supported special password characters: [email protected]#$%^&*()_+{}<>?

=> Press any key to proceed ...

A uživatelské heslo CMON, které bude používat ClusterControl:

=> Set a password for ClusterControl's MySQL user (cmon) [cmon]

=> Supported special characters: [email protected]#$%^&*()_+{}<>?

=> Enter a CMON user password:

To je ono. Tímto způsobem budete mít vše na svém místě, aniž byste museli cokoliv instalovat nebo konfigurovat ručně.

=> ClusterControl installation completed!

Open your web browser to http://192.168.100.116/clustercontrol and enter an email address and new password for the default Admin User.

Determining network interfaces. This may take a couple of minutes. Do NOT press any key.

Public/external IP => http://10.10.10.10/clustercontrol

Installation successful. If you want to uninstall ClusterControl then run install-cc --uninstall.

Při prvním přístupu k uživatelskému rozhraní se budete muset zaregistrovat na 30denní bezplatné zkušební období.

Po skončení 30denní bezplatné zkušební verze se vaše instalace automaticky převede na komunitní vydání, pokud nemáte komerční licenci.

Využití správy záloh

Využití PGHoards

Po instalaci tohoto nástroje je třeba vytvořit soubor JSON (pghoard.json) s konfigurací PGHoard. Toto je příklad:

{

"backup_location": "/var/lib/pghoard",

"backup_sites": {

"default": {

"nodes": [

{

"host": "127.0.0.1",

"password": "Password",

"port": 5432,

"user": "pghoard"

}

],

"object_storage": {

"storage_type": "local",

"directory": "./backups"

},

"pg_data_directory": "/var/lib/postgresql/11/main/"

}

}

}

V tomto příkladu provedeme zálohu a uložíme ji lokálně, ale můžete také nakonfigurovat cloudový účet a uložit jej tam:

"object_storage": {

"aws_access_key_id": "AKIAQTUN************",

"aws_secret_access_key": "La8YZBvN********************************",

"bucket_name": "pghoard",

"region": "us-east-1",

"storage_type": "s3"

},

Další podrobnosti o konfiguraci naleznete v dokumentaci.

Nyní nechte spustit zálohu pomocí tohoto souboru JSON:

$ pghoard --short-log --config pghoard.json

INFO pghoard initialized, own_hostname: 'pg1', cwd: '/root'

INFO Creating a new basebackup for 'default' because there are currently none

INFO Started: ['/usr/lib/postgresql/11/bin/pg_receivewal', '--status-interval', '1', '--verbose', '--directory', '/var/lib/pghoard/default/xlog_incoming', '--dbname', "dbname='replication' host='127.0.0.1' port='5432' replication='true' user='pghoard'"], running as PID: 19057

INFO Started: ['/usr/lib/postgresql/11/bin/pg_basebackup', '--format', 'tar', '--label', 'pghoard_base_backup', '--verbose', '--pgdata', '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0', '--wal-method=none', '--progress', '--dbname', "dbname='replication' host='127.0.0.1' port='5432' replication='true' user='pghoard'"], running as PID: 19059, basebackup_location: '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0/base.tar'

INFO Compressed 83 byte open file '/var/lib/pghoard/default/xlog_incoming/00000003.history' to 76 bytes (92%), took: 0.001s

INFO 'UPLOAD' transfer of key: 'default/timeline/00000003.history', size: 76, origin: 'pg1' took 0.001s

INFO Compressed 16777216 byte open file '/var/lib/postgresql/11/main/pg_wal/000000030000000000000009' to 799625 bytes (5%), took: 0.175s

INFO 'UPLOAD' transfer of key: 'default/xlog/000000030000000000000009', size: 799625, origin: 'pg1' took 0.002s

127.0.0.1 - - [21/May/2020 13:13:31] "PUT /default/archive/000000030000000000000009 HTTP/1.1" 201 -

INFO Compressed 16777216 byte open file '/var/lib/pghoard/default/xlog_incoming/000000030000000000000009' to 799625 bytes (5%), took: 0.190s

INFO 'UPLOAD' transfer of key: 'default/xlog/000000030000000000000009', size: 799625, origin: 'pg1' took 0.028s

INFO Compressed 16777216 byte open file '/var/lib/pghoard/default/xlog_incoming/00000003000000000000000A' to 789927 bytes (5%), took: 0.109s

INFO 'UPLOAD' transfer of key: 'default/xlog/00000003000000000000000A', size: 789927, origin: 'pg1' took 0.002s

INFO Compressed 16777216 byte open file '/var/lib/postgresql/11/main/pg_wal/00000003000000000000000A' to 789927 bytes (5%), took: 0.114s

INFO 'UPLOAD' transfer of key: 'default/xlog/00000003000000000000000A', size: 789927, origin: 'pg1' took 0.002s

127.0.0.1 - - [21/May/2020 13:13:32] "PUT /default/archive/00000003000000000000000A HTTP/1.1" 201 -

INFO Ran: ['/usr/lib/postgresql/11/bin/pg_basebackup', '--format', 'tar', '--label', 'pghoard_base_backup', '--verbose', '--pgdata', '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0', '--wal-method=none', '--progress', '--dbname', "dbname='replication' host='127.0.0.1' port='5432' replication='true' user='pghoard'"], took: 1.940s to run, returncode: 0

INFO Compressed 24337408 byte open file '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0/base.tar' to 4892408 bytes (20%), took: 0.117s

INFO 'UPLOAD' transfer of key: 'default/basebackup/2020-05-21_13-13_0', size: 4892408, origin: 'pg1' took 0.008s

V adresáři „backup_location“ (v tomto případě /var/lib/pghoard) najdete soubor pghoard_state.json s aktuálním stavem:

$ ls -l /var/lib/pghoard

total 48

drwxr-xr-x 6 root root  4096 May 21 13:13 default

-rw------- 1 root root 42385 May 21 15:25 pghoard_state.json

A adresář webu (v tomto případě nazvaný „default/“) se zálohou:

$ ls -l /var/lib/pghoard/default/

total 16

drwxr-xr-x 2 root root 4096 May 21 13:13 basebackup

drwxr-xr-x 3 root root 4096 May 21 13:13 basebackup_incoming

drwxr-xr-x 2 root root 4096 May 21 13:13 xlog

drwxr-xr-x 2 root root 4096 May 21 13:13 xlog_incoming

Seznam záloh můžete zkontrolovat pomocí příkazu follogin:

$ pghoard_restore list-basebackups --config pghoard.json

Available 'default' basebackups:

Basebackup                                Backup size    Orig size  Start time

----------------------------------------  -----------  -----------  --------------------

default/basebackup/2020-05-21_13-13_0            4 MB        23 MB  2020-05-21T13:13:31Z

Použití ClusterControl

Předpokládáme, že máte svůj databázový cluster PostgreSQL importovaný do ClusterControl nebo jste jej nasadili pomocí tohoto systému.

V ClusterControl vyberte svůj cluster a přejděte do sekce „Záloha“ a poté vyberte „Vytvořit zálohu“.

V tomto příkladu použijeme možnost „Naplánovat zálohování“. Při plánování zálohování musíte kromě výběru běžných možností, jako je metoda nebo úložiště, určit také plán/frekvenci.

Musíte zvolit jednu metodu, server, ze kterého bude záloha převzata a kde jej chcete uložit. Zálohu můžete také nahrát do cloudu (AWS, Google nebo Azure) povolením odpovídajícího tlačítka.

Potom musíte určit použití komprese, šifrování a uchování vaší zálohy. V tomto kroku můžete také povolit funkci „Ověřit zálohu“, která vám umožní potvrdit, že záloha je použitelná jejím obnovením v jiném uzlu.

Pokud povolíte možnost „Nahrát zálohu do cloudu“, v části zadejte poskytovatele cloudu a přihlašovací údaje. Pokud jste svůj cloudový účet neintegrovali s ClusterControl, musíte přejít do ClusterControl -> Integrace -> Poskytovatelé cloudu a přidat jej.

V části zálohování můžete vidět průběh zálohování a informace, jako je metoda, velikost, umístění a další.

Příkazový řádek ClusterControl (s9s)

Pro skriptování a automatizaci úloh, nebo i když dáváte přednost příkazovému řádku, má ClusterControl nástroj s9s. Je to nástroj příkazového řádku pro správu databázového clusteru. Podívejme se na příklad, jak vytvořit a vypsat zálohy pomocí tohoto nástroje:

$ s9s backup --list --cluster-id=40 --long --human-readable
$ s9s backup --create --backup-method=pg_basebackup --cluster-id=40 --nodes=192.168.100.125 --backup-directory=/tmp --wait

Další příklady a informace naleznete v sekci dokumentace ClusterControl CLI.

Závěr

Na závěr porovnání těchto zmíněných systémů pro správu záloh lze říci, že PGHoard je bezplatné, ale komplexní řešení pro tento úkol. Budete potřebovat nějaký čas, abyste pochopili, jak to funguje a jak to nakonfigurovat, protože oficiální dokumentace je na to trochu chudá. Také to vypadá trochu zastarale, protože poslední vydání bylo před 1 rokem. ClusterControl je navíc systém správy vše v jednom se spoustou funkcí nejen pro správu zálohování, s uživatelsky přívětivým a snadno použitelným uživatelským rozhraním. Má komunitní (s omezenými dostupnými funkcemi) a placené verze s 30denním bezplatným zkušebním obdobím. Dokumentace je jasná a úplná, s příklady a podrobnými informacemi.

Doufáme, že vám tento blog pomůže učinit nejlepší rozhodnutí, jak uchovat svá data v bezpečí.


  1. PostgreSQL Connection Pooling:Část 1 – Klady a zápory

  2. Vysvětlení operátora Oracle UNION

  3. Jak FROM_DAYS() funguje v MariaDB

  4. SQL aktualizace polí jedné tabulky z polí jiné tabulky