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.