PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Pghoard Alternative - Gestione del backup PostgreSQL con ClusterControl

La gestione dei backup potrebbe essere un'attività complessa e rischiosa da eseguire manualmente. Devi sapere che il backup funziona in base alla tua politica di backup poiché non vuoi trovarti nella situazione in cui hai bisogno del backup e non funziona o non esiste. Sarà sicuramente un grosso problema. Quindi, la cosa migliore qui è utilizzare un'applicazione di gestione del backup testata in battaglia, per evitare qualsiasi problema in caso di errore.

PGHoard è un sistema di backup e ripristino PostgreSQL che archivia i dati di backup negli archivi di oggetti cloud. Supporta PostgreSQL 9.3 o successivo, fino a PostgreSQL 11, l'ultima versione supportata al momento. L'attuale versione di PGHoard è la 2.1.0, rilasciata a maggio 2019 (1 anno fa).

ClusterControl è un software di gestione e automazione senza agenti per cluster di database. Aiuta a distribuire, monitorare, gestire e ridimensionare il server/cluster di database direttamente dall'interfaccia utente di ClusterControl o utilizzando ClusterControl CLI. Include funzionalità di gestione del backup e supporta le versioni PostgreSQL 9.6, 10, 11 e 12. L'attuale versione di ClusterControl è la 1.7.6, rilasciata il mese scorso, ad aprile 2020.

In questo blog confronteremo PGHoard con la funzionalità ClusterControl Backup Management e vedremo come installare e utilizzare entrambi i sistemi. Per questo, utilizzeremo un server Ubuntu 18.04 e PostgreSQL11 (poiché è l'ultima versione supportata per l'utilizzo di PGHoard). Installeremo PGHoard nello stesso server di database e lo importeremo in ClusterControl.

Confronto delle funzioni di gestione dei backup

PGHoard

Alcune delle caratteristiche più importanti di PGHoard sono:

  • Backup di base periodici automatici
  • Backup automatici del registro delle transazioni
  • Supporto di Hot Backup autonomo
  • Supporto per l'archiviazione di oggetti nel cloud (AWS S3, Google Cloud, OpenStack Swift, Azure, Ceph)
  • Ripristino del backup direttamente dall'archivio oggetti, compresso e crittografato
  • Recupero point-in-time (PITR)
  • Inizia un nuovo standby dai backup dello storage di oggetti, configurato automaticamente come hot-standby replicante
  • Compressione e crittografia parallele

Uno dei modi per usarlo è avere una macchina di backup separata, in modo che PGHoard possa connettersi con pg_receivexlog per ricevere i file WAL dal database. Un'altra modalità consiste nell'usare pghoard_postgres_command come archive_command PostgreSQL. In entrambi i casi, PGHoard crea backup di base periodici utilizzando pg_basebackup.

Controllo cluster

Vediamo anche alcune delle caratteristiche più importanti di questo sistema:

  • Interfaccia utente intuitiva
  • Backup e ripristino (nello stesso nodo o in uno separato)
  • Programma backup
  • Crea un cluster da Backup
  • Verifica automatica del backup
  • Compressione
  • Crittografia
  • Caricamento automatico sul cloud
  • Recupero point-in-time (PITR)
  • Diversi metodi di backup (logico, fisico, completo, incrementale, ecc.)
  • Backup dei rapporti operativi

Poiché questo non è solo un sistema di gestione del backup, menzioneremo anche diverse funzionalità importanti non solo quelle relative al backup:

  • Distribuisci/importa database:standalone, cluster/replica, bilanciatori di carico
  • Ridimensionamento:aggiunta/rimozione di nodi, repliche di lettura, clonazione di cluster, replica da cluster a cluster
  • Monitoraggio:dashboard personalizzati, rilevamento dei guasti, monitoraggio delle query, consulenti sulle prestazioni, allarmi e notifiche, sviluppo di consulenti personalizzati
  • Ripristino automatico:ripristino di nodi e cluster, failover, ambienti ad alta disponibilità
  • Gestione:gestione della configurazione, aggiornamenti delle patch del database, gestione degli utenti del database, integrazione nel cloud, report operativi, gestione di ProxySQL
  • Sicurezza:gestione delle chiavi, controllo degli accessi in base al ruolo, autenticazione tramite LDAP/Active Directory, crittografia SSL

La topologia consigliata consiste nell'avere un nodo separato per eseguire ClusterControl, per assicurarsi che, in caso di errore, sia possibile sfruttare le funzionalità di ripristino automatico e failover di ClusterControl (tra le altre utili funzionalità) .

Requisiti di sistema

PGHoard

Secondo la documentazione, PGHoard può eseguire il backup e il ripristino di PostgreSQL versioni 9.3 e successive. Il demone è implementato in Python e funziona con CPython versione 3.5 o successive. I seguenti moduli Python potrebbero essere richiesti a seconda dei requisiti:

  • psycopg2 per cercare i metadati del registro delle transazioni
  • richieste per l'architettura client-server interna
  • azure per archiviazione oggetti di Microsoft Azure
  • botocore per lo storage di oggetti AWS S3 (o Ceph-S3)
  • client google-api per l'archiviazione di oggetti Google Cloud
  • crittografia per la crittografia e la decrittografia del backup (è richiesta la versione 0.8 o successiva)
  • scattante per compressione e decompressione Snappy
  • zstandard per compressione e decompressione Zstandard (zstd)
  • systemd per l'integrazione di systemd
  • swiftclient per l'archiviazione di oggetti Swift OpenStack
  • paramiko per l'archiviazione di oggetti sftp

Non si fa menzione del sistema operativo supportato, ma dice che è stato testato sui moderni sistemi Linux x86-64, ma dovrebbe funzionare su altre piattaforme che forniscono i moduli richiesti.

Controllo cluster

Il seguente software è richiesto dal server ClusterControl:

  • Server/client MySQL
  • Server web Apache (o nginx)
  • mod_rewrite
  • mod_ssl
  • consenti l'override di .htaccess
  • PHP (5.4 o successivo)
  • RHEL:php, php-mysql, php-gd, php-ldap, php-curl
  • Debian:php5-common, php5-mysql, php5-gd, php5-ldap, php5-curl, php5-json
  • Sicurezza del kernel Linux (SElinux o AppArmor):deve essere disabilitata o impostata in modalità permissiva
  • Server/client OpenSSH
  • BASH (consigliato:versione 4 o successive)
  • Server NTP:l'ora di tutti i server deve essere sincronizzata con un fuso orario
  • socat o netcat - per backup in streaming

E supporta diversi sistemi operativi:

  • 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

Se ClusterControl viene installato tramite lo script di installazione (install-cc) o il gestore di pacchetti (yum/apt), tutte le dipendenze verranno automaticamente soddisfatte.

Per PostgreSQL, supporta le versioni 9.6/10.x/11.x/12.x. Puoi trovare un elenco completo dei database supportati nella documentazione.

Richiede solo l'accesso SSH senza password ai nodi del database (utilizzando chiavi private e pubbliche) e un utente del sistema operativo privilegiato (potrebbe essere utente root o sudo).

Il processo di installazione

Processo di installazione di PGHoard

Supponiamo che tu abbia il tuo database PostgreSQL attivo e funzionante, quindi installiamo i pacchetti rimanenti. PGHoard è un pacchetto Python, quindi dopo aver installato i pacchetti richiesti, puoi installarlo usando il comando pip:

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

$ pip3 install pghoard

Come parte di questo processo di installazione, devi preparare l'istanza PostgreSQL per lavorare con questo strumento. Per questo, dovrai modificare postgresql.conf per consentire l'archivio WAL e aumentare 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

Questa modifica richiede il riavvio del database:

$ service postgresql restart

Ora creiamo un utente di database per PGHoard:

$ psql

CREATE USER pghoard PASSWORD 'Password' REPLICATION;

E aggiungi la seguente riga nel file pg_hba.conf:

host    replication  pghoard  127.0.0.1/32/32  md5

Ricarica il servizio database:

$ service postgresql reload

Per farlo funzionare, dovrai creare un file di configurazione JSON per PGHoard. Lo vedremo nella prossima sezione "Utilizzo".

Processo di installazione di ClusterControl

Esistono diversi metodi di installazione come indicato nella documentazione. In caso di installazione manuale, i pacchetti richiesti sono specificati nella stessa documentazione e c'è una guida passo passo per tutto il processo.

Vediamo un esempio utilizzando lo script di installazione automatica.

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

$ chmod +x install-cc

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

Lo script di installazione tenterà di automatizzare le seguenti attività:

  • Installa e configura un server MySQL locale (utilizzato da ClusterControl per archiviare i dati di monitoraggio)
  • Installa e configura il pacchetto del controller ClusterControl tramite il gestore pacchetti
  • Installa le dipendenze ClusterControl tramite il gestore pacchetti
  • Configura Apache e SSL
  • Configura l'URL e il token dell'API ClusterControl
  • Configura ClusterControl Controller con opzioni di configurazione minime
  • Abilita il servizio CMON all'avvio e avvialo

Eseguendo lo script menzionato, riceverai una domanda sull'invio di dati diagnostici:

$ 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):

Quindi, inizierà a installare i pacchetti richiesti. La prossima domanda riguarda il nome host che verrà utilizzato:

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

Quando il database locale è installato, il programma di installazione lo proteggerà creando una password di root che devi inserire:

=> 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 ...

E una password utente CMON, che verrà utilizzata da ClusterControl:

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

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

=> Enter a CMON user password:

Ecco fatto. In questo modo, avrai tutto a posto senza installare o configurare nulla manualmente.

=> 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.

La prima volta che accedi all'interfaccia utente, dovrai registrarti per il periodo di prova gratuito di 30 giorni.

Al termine della prova gratuita di 30 giorni, l'installazione verrà automaticamente convertita in l'edizione community a meno che tu non abbia una licenza commerciale.

Utilizzo della gestione dei backup

Utilizzo di PGHoard

Dopo aver installato questo strumento, devi creare un file JSON (pghoard.json) con la configurazione PGHoard. Questo è un esempio:

{

"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/"

}

}

}

In questo esempio, faremo un backup e lo memorizzeremo localmente, ma puoi anche configurare un account cloud e archiviarlo lì:

"object_storage": {

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

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

"bucket_name": "pghoard",

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

"storage_type": "s3"

},

Puoi trovare maggiori dettagli sulla configurazione nella documentazione.

Ora, esegui il backup utilizzando questo file 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

Nella directory "backup_location" (in questo caso /var/lib/pghoard), troverai un file pghoard_state.json con lo stato corrente:

$ 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

E una directory del sito (in questo caso denominata "default/") con il backup:

$ 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

Puoi controllare l'elenco di backup usando il comando 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

Utilizzo di ClusterControl

Per questo, assumiamo che tu abbia il tuo cluster di database PostgreSQL importato in ClusterControl o che tu lo abbia distribuito utilizzando questo sistema.

In ClusterControl, seleziona il tuo cluster e vai alla sezione "Backup", quindi seleziona "Crea backup".

Per questo esempio, utilizzeremo l'opzione "Pianifica backup". Quando si pianifica un backup, oltre a selezionare le opzioni comuni come il metodo o l'archiviazione, è necessario specificare anche la pianificazione/frequenza.

Devi scegliere un metodo, il server da cui verrà eseguito il backup e dove vuoi salvarlo. Puoi anche caricare il tuo backup nel cloud (AWS, Google o Azure) abilitando il pulsante corrispondente.

Quindi devi specificare l'uso di compressione, crittografia e conservazione del tuo backup. In questo passaggio, puoi anche abilitare la funzione "Verifica backup" che ti consente di confermare che il backup è utilizzabile ripristinandolo in un nodo diverso.

Se abiliti l'opzione "Carica backup nel cloud", lo farai vedere una sezione per specificare il provider cloud e le credenziali. Se non hai integrato il tuo account cloud con ClusterControl devi andare su ClusterControl -> Integrazioni -> Cloud Provider per aggiungerlo.

Nella sezione backup, puoi vedere lo stato di avanzamento del backup e informazioni come il metodo, le dimensioni, la posizione e altro.

Riga di comando ClusterControl (s9s)

Per lo scripting e l'automazione delle attività, o anche se preferisci semplicemente la riga di comando, ClusterControl ha lo strumento s9s. È uno strumento da riga di comando per la gestione del cluster di database. Vediamo un esempio di come creare ed elencare i backup utilizzando questo strumento:

$ 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

Puoi trovare altri esempi e informazioni nella sezione della documentazione della CLI ClusterControl.

Conclusione

Come conclusione del confronto di questi sistemi di gestione dei backup citati, possiamo dire che PGHoard è una soluzione gratuita ma complessa per questo compito. Avrai bisogno di un po' di tempo per capire come funziona e come configurarlo, dato che la documentazione ufficiale è un po' scarsa al riguardo. Inoltre, sembra un po 'datato, poiché l'ultima versione è stata 1 anno fa. Inoltre, ClusterControl è un sistema di gestione all-in-one con molte funzionalità non solo la gestione del backup, con un'interfaccia utente intuitiva e facile da usare. Ha una community (con funzionalità disponibili limitate) e versioni a pagamento con un periodo di prova gratuito di 30 giorni. La documentazione è chiara e completa, con esempi e informazioni dettagliate.

Ci auguriamo che questo blog ti aiuti a prendere la decisione migliore per proteggere i tuoi dati.