Het beheren van back-ups kan een complexe en risicovolle taak zijn om handmatig uit te voeren. U moet weten dat de back-up werkt volgens uw back-upbeleid, omdat u niet in de situatie wilt verkeren dat u de back-up nodig heeft en deze niet werkt of niet bestaat. Dat wordt zeker een groot probleem. Het beste is dus om een beproefde back-upbeheertoepassing te gebruiken om problemen in geval van storing te voorkomen.
PGHoard is een PostgreSQL-back-updaemon en herstelsysteem dat back-upgegevens opslaat in cloudobject-stores. Het ondersteunt PostgreSQL 9.3 of hoger, tot en met PostgreSQL 11, de meest recente ondersteunde versie op dit moment. De huidige PGHoard-versie is 2.1.0, uitgebracht in mei 2019 (1 jaar geleden).
ClusterControl is agentless beheer- en automatiseringssoftware voor databaseclusters. Het helpt bij het implementeren, bewaken, beheren en schalen van uw databaseserver/cluster rechtstreeks vanuit de ClusterControl-gebruikersinterface of met behulp van de ClusterControl CLI. Het bevat functies voor back-upbeheer en ondersteunt PostgreSQL 9.6, 10, 11 en 12 versies. De huidige ClusterControl-versie is 1.7.6, vorige maand uitgebracht, in april 2020.
In deze blog vergelijken we PGHoard met de ClusterControl Backup Management-functie en zien we hoe we beide systemen kunnen installeren en gebruiken. Hiervoor gebruiken we een Ubuntu 18.04-server en PostgreSQL11 (omdat dit de nieuwste ondersteunde versie is voor het gebruik van PGHoard). We installeren PGHoard op dezelfde databaseserver en importeren het in ClusterControl.
Back-ups Beheer Functies Vergelijking
PGHoard
Enkele van de belangrijkste PGHoard-functies zijn:
- Automatische periodieke basisback-ups
- Automatische back-ups van transactielogboeken
- Standalone Hot Backup-ondersteuning
- Ondersteuning voor opslag van cloudobjecten (AWS S3, Google Cloud, OpenStack Swift, Azure, Ceph)
- Back-upherstel rechtstreeks vanuit objectopslag, gecomprimeerd en versleuteld
- Point-in-time-recovery (PITR)
- Initialiseer een nieuwe stand-by van objectopslagback-ups, automatisch geconfigureerd als een replicerende hot-standby
- Parallelle compressie en codering
Een van de manieren om het te gebruiken is om een aparte back-upmachine te hebben, zodat PGHoard verbinding kan maken met pg_receivexlog om WAL-bestanden uit de database te ontvangen. Een andere modus is om pghoard_postgres_command te gebruiken als een PostgreSQL archive_command. In beide gevallen maakt PGHoard periodieke basisback-ups met pg_basebackup.
ClusterControl
Laten we ook enkele van de belangrijkste kenmerken van dit systeem bekijken:
- Gebruiksvriendelijke gebruikersinterface
- Back-up maken en terugzetten (in hetzelfde knooppunt of in een apart knooppunt)
- Back-ups plannen
- Een cluster maken vanuit Back-up
- Automatische back-upverificatie
- Compressie
- Encryptie
- Automatisch uploaden naar de cloud
- Point-in-time-recovery (PITR)
- Verschillende back-upmethoden (logisch, fysiek, volledig, incrementeel, enz.)
- Backup operationele rapporten
Omdat dit niet alleen een back-upbeheersysteem is, zullen we ook verschillende belangrijke functies noemen, niet alleen de back-upgerelateerde:
- Databases implementeren/importeren:standalone, cluster/replicatie, load balancers
- Scaling:knooppunten toevoegen/verwijderen, replica's lezen, clusterklonen, replicatie van cluster naar cluster
- Monitoring:aangepaste dashboards, foutdetectie, querymonitor, prestatieadviseurs, alarmen en meldingen, aangepaste adviseurs ontwikkelen
- Automatisch herstel:knooppunt- en clusterherstel, failover, omgevingen met hoge beschikbaarheid
- Beheer:configuratiebeheer, upgrades van databasepatches, databasegebruikersbeheer, cloudintegratie, operationele rapporten, proxySQL-beheer
- Beveiliging:sleutelbeheer, op rollen gebaseerd toegangscontrole, authenticatie met LDAP/Active Directory, SSL-codering
De aanbevolen topologie is om een apart knooppunt te hebben om ClusterControl uit te voeren, om ervoor te zorgen dat u in geval van storing kunt profiteren van de automatische herstel- en failover-functies van ClusterControl (en andere handige functies) .
Systeemvereisten
PGHoard
Volgens de documentatie kan PGHoard een back-up maken van PostgreSQL-versies 9.3 en hoger en deze herstellen. De daemon is geïmplementeerd in Python en werkt met CPython versie 3.5 of nieuwer. De volgende Python-modules kunnen nodig zijn, afhankelijk van de vereisten:
- psycopg2 om metadata van transactielogboeken op te zoeken
- verzoeken voor de interne client-server-architectuur
- azure voor Microsoft Azure-objectopslag
- botocore voor AWS S3 (of Ceph-S3) objectopslag
- google-api-client voor objectopslag in Google Cloud
- cryptografie voor back-up encryptie en decryptie (versie 0.8 of nieuwer vereist)
- snappy voor Snappy compressie en decompressie
- zstandard voor Zstandard (zstd) compressie en decompressie
- systemd voor systeemintegratie
- swiftclient voor OpenStack Swift-objectopslag
- paramiko voor opslag van sftp-objecten
Er is geen melding gemaakt van het ondersteunde besturingssysteem, maar er staat dat het is getest op moderne Linux x86-64-systemen, maar zou moeten werken op andere platforms die de vereiste modules bieden.
ClusterControl
De volgende software is vereist voor de ClusterControl-server:
- MySQL-server/client
- Apache-webserver (of nginx)
- mod_rewrite
- mod_ssl
- overschrijven .htaccess toestaan
- PHP (5.4 of hoger)
- RHEL:php, php-mysql, php-gd, php-ldap, php-curl
- Debian:php5-common, php5-mysql, php5-gd, php5-ldap, php5-curl, php5-json
- Linux-kernelbeveiliging (SElinux of AppArmor) - moet worden uitgeschakeld of in de permissieve modus worden gezet
- OpenSSH-server/client
- BASH (aanbevolen:versie 4 of hoger)
- NTP-server - De tijd van alle servers moet onder één tijdzone worden gesynchroniseerd
- socat of netcat - voor het streamen van back-ups
En het ondersteunt verschillende besturingssystemen:
- 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
Als ClusterControl wordt geïnstalleerd via installatiescript (install-cc) of pakketbeheerder (yum/apt), wordt automatisch aan alle afhankelijkheden voldaan.
Voor PostgreSQL ondersteunt het 9.6/10.x/11.x/12.x-versies. U vindt een volledige lijst van de ondersteunde databases in de documentatie.
Het vereist alleen wachtwoordloze SSH-toegang tot de databaseknooppunten (met behulp van privé- en openbare sleutels) en een bevoorrechte OS-gebruiker (dit kan een root- of sudo-gebruiker zijn).
Het installatieproces
PGHoard-installatieproces
We gaan ervan uit dat u uw PostgreSQL-database in gebruik heeft, dus laten we de resterende pakketten installeren. PGHoard is een Python-pakket, dus nadat je de vereiste pakketten hebt geïnstalleerd, kun je het installeren met het pip-commando:
$ apt install postgresql-server-dev-11 python3 python3-pip python3-snappy
$ pip3 install pghoard
Als onderdeel van dit installatieproces moet je de PostgreSQL-instantie voorbereiden om met deze tool te werken. Hiervoor moet je de postgresql.conf bewerken om WAL-archief toe te staan en de max_wal_senders verhogen:
wal_level = logical
max_wal_senders = 4
archive_mode = on
archive_command = pghoard_postgres_command --mode archive --site default --xlog %f
Voor deze wijziging moet de database opnieuw worden opgestart:
$ service postgresql restart
Laten we nu een databasegebruiker maken voor PGHoard:
$ psql
CREATE USER pghoard PASSWORD 'Password' REPLICATION;
En voeg de volgende regel toe aan het bestand pg_hba.conf:
host replication pghoard 127.0.0.1/32/32 md5
Laad de databaseservice opnieuw:
$ service postgresql reload
Om het te laten werken, moet je een JSON-configuratiebestand voor PGHoard maken. We zullen dit zien in het volgende gedeelte 'Gebruik'.
ClusterControl-installatieproces
Er zijn verschillende installatiemethoden zoals vermeld in de documentatie. In het geval van handmatige installatie worden de vereiste pakketten gespecificeerd in dezelfde documentatie en is er een stapsgewijze handleiding voor het hele proces.
Laten we een voorbeeld bekijken met het automatische installatiescript.
$ wget http://www.severalnines.com/downloads/cmon/install-cc
$ chmod +x install-cc
$ sudo ./install-cc # omit sudo if you run as root
Het installatiescript zal proberen de volgende taken te automatiseren:
- Installeer en configureer een lokale MySQL-server (gebruikt door ClusterControl om monitoringgegevens op te slaan)
- Installeer en configureer het ClusterControl-controllerpakket via pakketbeheerder
- ClusterControl-afhankelijkheden installeren via pakketbeheerder
- Apache en SSL configureren
- ClusterControl API-URL en token configureren
- Configureer ClusterControl Controller met minimale configuratie-opties
- Schakel de CMON-service in bij het opstarten en start het op
Als u het genoemde script uitvoert, ontvangt u een vraag over het verzenden van diagnostische gegevens:
$ 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):
Vervolgens begint het met het installeren van de vereiste pakketten. De volgende vraag gaat over de hostnaam die zal worden gebruikt:
=> The Controller hostname will be set to 192.168.100.116. Do you want to change it? (y/N):
Wanneer de lokale database is geïnstalleerd, zal het installatieprogramma deze beveiligen door een root-wachtwoord aan te maken dat u moet invoeren:
=> 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 ...
En een CMON-gebruikerswachtwoord, dat door ClusterControl zal worden gebruikt:
=> Set a password for ClusterControl's MySQL user (cmon) [cmon]
=> Supported special characters: [email protected]#$%^&*()_+{}<>?
=> Enter a CMON user password:
Dat is het. Op deze manier heb je alles op zijn plaats zonder iets handmatig te installeren of te configureren.
=> 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.
De eerste keer dat u de gebruikersinterface opent, moet u zich registreren voor de gratis proefperiode van 30 dagen.
Nadat uw gratis proefperiode van 30 dagen is afgelopen, wordt uw installatie automatisch omgezet in de community-editie, tenzij je een commerciële licentie hebt.
Gebruik van back-upsbeheer
PGHoards-gebruik
Nadat deze tool is geïnstalleerd, moet je een JSON-bestand (pghoard.json) maken met de PGHoard-configuratie. Dit is een voorbeeld:
{
"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 dit voorbeeld nemen we een back-up en slaan we deze lokaal op, maar u kunt ook een cloudaccount configureren en daar opslaan:
"object_storage": {
"aws_access_key_id": "AKIAQTUN************",
"aws_secret_access_key": "La8YZBvN********************************",
"bucket_name": "pghoard",
"region": "us-east-1",
"storage_type": "s3"
},
Meer details over de configuratie vindt u in de documentatie.
Laten we nu de back-up uitvoeren met dit JSON-bestand:
$ 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
In de map "backup_location" (in dit geval /var/lib/pghoard), vindt u een pghoard_state.json-bestand met de huidige status:
$ 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
En een sitemap (in dit geval "default/" genoemd) met de back-up:
$ 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
U kunt de back-uplijst controleren met het volgende commando:
$ 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
ClusterControl-gebruik
Hiervoor gaan we ervan uit dat u uw PostgreSQL-databasecluster hebt geïmporteerd in ClusterControl of dat u deze met dit systeem hebt geïmplementeerd.
Selecteer in ClusterControl uw cluster en ga naar het gedeelte "Back-up" en selecteer vervolgens "Back-up maken".
Voor dit voorbeeld gebruiken we de optie "Back-up plannen". Wanneer u een back-up plant, moet u naast het selecteren van de algemene opties zoals methode of opslag ook de planning/frequentie specificeren.
U moet één methode kiezen, de server waarvan de back-up wordt genomen , en waar u het wilt opslaan. U kunt uw back-up ook uploaden naar de cloud (AWS, Google of Azure) door de bijbehorende knop in te schakelen.
Vervolgens moet u het gebruik van compressie, codering en de retentie specificeren van uw back-up. In deze stap kunt u ook de functie "Back-up verifiëren" inschakelen, waarmee u kunt bevestigen dat de back-up bruikbaar is door deze in een ander knooppunt te herstellen.
Als u de optie "Upload back-up naar de cloud" inschakelt, zie een sectie om de cloudprovider en de referenties op te geven. Als u uw cloudaccount niet met ClusterControl hebt geïntegreerd, moet u naar ClusterControl -> Integraties -> Cloud Providers gaan om het toe te voegen.
In de back-upsectie kunt u de voortgang van de back-up zien, en informatie zoals de methode, grootte, locatie en meer.
ClusterControl-opdrachtregel (s9s)
Voor het scripten en automatiseren van taken, of zelfs als je gewoon de voorkeur geeft aan de opdrachtregel, heeft ClusterControl de s9s-tool. Het is een opdrachtregelprogramma voor het beheren van uw databasecluster. Laten we een voorbeeld bekijken van het maken en weergeven van back-ups met deze tool:
$ 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
U kunt meer voorbeelden en informatie vinden in de documentatiesectie van ClusterControl CLI.
Conclusie
Als conclusie van het vergelijken van deze genoemde back-upbeheersystemen kunnen we stellen dat PGHoard een gratis maar complexe oplossing is voor deze taak. Je hebt wat tijd nodig om te begrijpen hoe het werkt en hoe je het moet configureren, omdat de officiële documentatie daar een beetje slecht over is. Het ziet er ook een beetje verouderd uit, aangezien de laatste release 1 jaar geleden was. Bovendien is ClusterControl een alles-in-één beheersysteem met veel functies, niet alleen back-upbeheer, met een gebruiksvriendelijke en gebruiksvriendelijke gebruikersinterface. Het heeft een community (met beperkte beschikbare functies) en betaalde versies met een gratis proefperiode van 30 dagen. De documentatie is duidelijk en volledig, met voorbeelden en gedetailleerde informatie.
We hopen dat deze blog je helpt om de beste beslissing te nemen om je gegevens veilig te houden.