Hantera säkerhetskopior kan vara en komplex och riskabel uppgift att göra på ett manuellt sätt. Du måste veta att säkerhetskopieringen fungerar enligt din säkerhetskopieringspolicy eftersom du inte vill vara i situationen att du behöver säkerhetskopieringen och den fungerar inte eller så finns den inte. Det kommer säkert att bli ett stort problem. Så, det bästa här är att använda en stridstestad applikation för säkerhetskopiering, för att undvika problem i händelse av misslyckande.
PGHoard är ett PostgreSQL backup-demon och återställningssystem som lagrar backupdata i molnobjektlager. Den stöder PostgreSQL 9.3 eller senare, fram till PostgreSQL 11, den senaste versionen som stöds just nu. Den nuvarande versionen av PGHoard är 2.1.0, släppt i maj 2019 (1 år sedan).
ClusterControl är en agentfri hanterings- och automatiseringsprogramvara för databaskluster. Det hjälper till att distribuera, övervaka, hantera och skala din databasserver/-kluster direkt från ClusterControl-gränssnittet eller genom att använda ClusterControl CLI. Den innehåller funktioner för säkerhetskopiering och stöder PostgreSQL 9.6, 10, 11 och 12 versioner. Den nuvarande ClusterControl-versionen är 1.7.6, släpptes förra månaden, i april 2020.
I den här bloggen kommer vi att jämföra PGHoard med funktionen ClusterControl Backup Management och vi kommer att se hur man installerar och använder båda systemen. För detta kommer vi att använda en Ubuntu 18.04-server och PostgreSQL11 (eftersom det är den senaste versionen som stöds för att använda PGHoard). Vi installerar PGHoard i samma databasserver och importerar den till ClusterControl.
Jämförelse av funktioner för säkerhetskopieringhantering
PGHoard
Några av de viktigaste PGHoard-funktionerna är:
- Automatiska periodiska säkerhetskopieringar
- Automatisk säkerhetskopiering av transaktionsloggar
- Stöd för fristående Hot Backup
- Stöd för lagring av molnobjekt (AWS S3, Google Cloud, OpenStack Swift, Azure, Ceph)
- Återställning av säkerhetskopiering direkt från objektlagring, komprimerad och krypterad
- Point-in-time-recovery (PITR)
- Initiera ett nytt vänteläge från säkerhetskopior av objektlagring, automatiskt konfigurerat som ett replikerande hot-standbyläge
- Parallell komprimering och kryptering
Ett av sätten att använda det är att ha en separat säkerhetskopieringsmaskin, så att PGHoard kan ansluta till pg_receivexlog för att ta emot WAL-filer från databasen. Ett annat läge är att använda pghoard_postgres_command som ett PostgreSQL archive_command. I båda fallen skapar PGHoard periodiska basbackuper med hjälp av pg_basebackup.
ClusterControl
Låt oss också se några av de viktigaste funktionerna i detta system:
- Användarvänligt gränssnitt
- Säkerhetskopiera och återställa (i samma nod eller i en separat)
- Schemalägg säkerhetskopieringar
- Skapa ett kluster från Backup
- Automatisk säkerhetskopiering
- Kompression
- Kryptering
- Automatisk molnuppladdning
- Point-in-time-recovery (PITR)
- Olika säkerhetskopieringsmetoder (logisk, fysisk, fullständig, inkrementell, etc)
- Säkerhetskopiera verksamhetsrapporter
Eftersom detta inte bara är ett säkerhetskopieringshanteringssystem kommer vi också att nämna olika viktiga funktioner, inte bara de som är relaterade till säkerhetskopiering:
- Distribuera/importera databaser:Fristående, kluster/replikering, lastbalanserare
- Skalning:Lägg till/ta bort noder, läsrepliker, klusterkloning, kluster-till-klusterreplikering
- Övervakning:anpassade instrumentpaneler, feldetektering, frågeövervakare, prestandarådgivare, larm och aviseringar, utveckla anpassade rådgivare
- Automatisk återställning:Nod- och klusteråterställning, failover, miljöer med hög tillgänglighet
- Hantering:konfigurationshantering, uppgraderingar av databaspatch, databasanvändarhantering, molnintegrering, operationsrapporter, ProxySQL-hantering
- Säkerhet:Nyckelhantering, rollbaserad åtkomstkontroll, autentisering med LDAP/Active Directory, SSL-kryptering
Den rekommenderade topologin är att ha en separat nod för att köra ClusterControl, för att säkerställa att du, i händelse av fel, kan dra fördel av funktionerna för automatisk återställning och failover ClusterControl (bland andra användbara funktioner) .
Systemkrav
PGHoard
Enligt dokumentationen kan PGHoard säkerhetskopiera och återställa PostgreSQL version 9.3 och högre. Demonen är implementerad i Python och fungerar med CPython version 3.5 eller senare. Följande Python-moduler kan krävas beroende på kraven:
- psycopg2 för att slå upp transaktionsloggmetadata
- förfrågningar om den interna klient-server-arkitekturen
- azure för Microsoft Azure-objektlagring
- botocore för AWS S3 (eller Ceph-S3) objektlagring
- google-api-client för Google Cloud-objektlagring
- kryptering för säkerhetskopiering och dekryptering (version 0.8 eller senare krävs)
- snappy för Snappy komprimering och dekompression
- zstandard för Zstandard (zstd) komprimering och dekompression
- systemd för systemd integrering
- swiftclient för OpenStack Swift-objektlagring
- paramiko för sftp-objektlagring
Det nämns inget om operativsystemet som stöds, men det står att det testades på moderna Linux x86-64-system, men borde fungera på andra plattformar som tillhandahåller de nödvändiga modulerna.
ClusterControl
Följande programvara krävs av ClusterControl-servern:
- MySQL-server/klient
- Apache-webbserver (eller nginx)
- mod_rewrite
- mod_ssl
- tillåt åsidosättande av .htaccess
- PHP (5.4 eller senare)
- 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 eller AppArmor) - måste inaktiveras eller ställas in på tillåtande läge
- OpenSSH-server/klient
- BASH (rekommenderas:version 4 eller senare)
- NTP-server - Alla servrars tid måste synkroniseras under en tidszon
- socat eller netcat - för strömmande säkerhetskopior
Och den stöder olika operativsystem:
- 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
Om ClusterControl installeras via installationsskript (install-cc) eller pakethanterare (yum/apt), kommer alla beroenden att uppfyllas automatiskt.
För PostgreSQL stöder den versioner 9.6/10.x/11.x/12.x. Du kan hitta en komplett lista över de databaser som stöds i dokumentationen.
Det kräver bara lösenordslös SSH-åtkomst till databasnoderna (med privata och offentliga nycklar) och en privilegierad OS-användare (det kan vara root- eller sudo-användare).
Installationsprocessen
PGHoard installationsprocess
Vi antar att du har din PostgreSQL-databas igång, så låt oss installera de återstående paketen. PGHoard är ett Python-paket, så efter att du har installerat de nödvändiga paketen kan du installera det med pip-kommandot:
$ apt install postgresql-server-dev-11 python3 python3-pip python3-snappy
$ pip3 install pghoard
Som en del av den här installationsprocessen måste du förbereda PostgreSQL-instansen för att fungera med det här verktyget. För detta måste du redigera postgresql.conf för att tillåta WAL-arkiv och öka antalet max_wal_sendere:
wal_level = logical
max_wal_senders = 4
archive_mode = on
archive_command = pghoard_postgres_command --mode archive --site default --xlog %f
Denna ändring kräver en omstart av databasen:
$ service postgresql restart
Låt oss nu skapa en databasanvändare för PGHoard:
$ psql
CREATE USER pghoard PASSWORD 'Password' REPLICATION;
Och lägg till följande rad i filen pg_hba.conf:
host replication pghoard 127.0.0.1/32/32 md5
Ladda om databastjänsten:
$ service postgresql reload
För att få det att fungera måste du skapa en JSON-konfigurationsfil för PGHoard. Vi kommer att se detta i nästa avsnitt "Användning".
ClusterControl installationsprocess
Det finns olika installationsmetoder som det nämns i dokumentationen. Vid manuell installation anges de nödvändiga paketen i samma dokumentation och det finns en steg-för-steg-guide för hela processen.
Låt oss se ett exempel med det automatiska installationsskriptet.
$ wget http://www.severalnines.com/downloads/cmon/install-cc
$ chmod +x install-cc
$ sudo ./install-cc # omit sudo if you run as root
Installationsskriptet kommer att försöka automatisera följande uppgifter:
- Installera och konfigurera en lokal MySQL-server (används av ClusterControl för att lagra övervakningsdata)
- Installera och konfigurera ClusterControl-kontrollerpaketet via pakethanteraren
- Installera ClusterControl-beroenden via pakethanteraren
- Konfigurera Apache och SSL
- Konfigurera ClusterControl API URL och token
- Konfigurera ClusterControl Controller med minimala konfigurationsalternativ
- Aktivera CMON-tjänsten vid uppstart och starta den
När du kör det nämnda skriptet får du en fråga om att skicka diagnostisk data:
$ 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):
Då börjar den installera de nödvändiga paketen. Nästa fråga handlar om värdnamnet som kommer att användas:
=> The Controller hostname will be set to 192.168.100.116. Do you want to change it? (y/N):
När den lokala databasen är installerad kommer installationsprogrammet att säkra den och skapa ett root-lösenord som du måste ange:
=> 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 ...
Och ett CMON-användarlösenord, som kommer att användas av ClusterControl:
=> Set a password for ClusterControl's MySQL user (cmon) [cmon]
=> Supported special characters: [email protected]#$%^&*()_+{}<>?
=> Enter a CMON user password:
Det är allt. På detta sätt kommer du att ha allt på plats utan att installera eller konfigurera något manuellt.
=> 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.
Första gången du öppnar användargränssnittet måste du registrera dig för den 30-dagars kostnadsfria provperioden.
När din 30-dagars gratis provperiod slutar konverteras din installation automatiskt till community-utgåvan om du inte har en kommersiell licens.
Användning av säkerhetskopiering
PGHoards-användning
När det här verktyget har installerats måste du skapa en JSON-fil (pghoard.json) med PGHoard-konfigurationen. Det här är ett exempel:
{
"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/"
}
}
}
I det här exemplet tar vi en säkerhetskopia och lagrar den lokalt, men du kan också konfigurera ett molnkonto och lagra det där:
"object_storage": {
"aws_access_key_id": "AKIAQTUN************",
"aws_secret_access_key": "La8YZBvN********************************",
"bucket_name": "pghoard",
"region": "us-east-1",
"storage_type": "s3"
},
Du kan hitta mer information om konfigurationen i dokumentationen.
Låt nu köra säkerhetskopieringen med den här JSON-filen:
$ 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
I katalogen "backup_location" (i det här fallet /var/lib/pghoard) hittar du en pghoard_state.json-fil med det aktuella tillståndet:
$ 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
Och en webbplatskatalog (i detta fall kallad "default/") med säkerhetskopian:
$ 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
Du kan kontrollera säkerhetskopieringslistan med kommandot 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
Användning av ClusterControl
För detta antar vi att du har ditt PostgreSQL-databaskluster importerat i ClusterControl eller så har du distribuerat det med detta system.
I ClusterControl, välj ditt kluster och gå till avsnittet "Säkerhetskopiering", välj sedan "Skapa säkerhetskopia".
I det här exemplet använder vi alternativet "Schemalägg säkerhetskopiering". När du schemalägger en säkerhetskopiering måste du, förutom att välja de vanliga alternativen som metod eller lagring, även ange schema/frekvens.
Du måste välja en metod, den server från vilken säkerhetskopieringen ska tas och var du vill lagra den. Du kan också ladda upp din säkerhetskopia till molnet (AWS, Google eller Azure) genom att aktivera motsvarande knapp.
Då måste du specificera användningen av komprimering, kryptering och kvarhållande av din säkerhetskopia. I det här steget kan du även aktivera funktionen "Verifiera säkerhetskopiering" som låter dig bekräfta att säkerhetskopian är användbar genom att återställa den i en annan nod.
Om du aktiverar alternativet "Ladda upp säkerhetskopia till molnet", kommer du att se ett avsnitt för att ange molnleverantören och autentiseringsuppgifterna. Om du inte har integrerat ditt molnkonto med ClusterControl måste du gå till ClusterControl -> Integrationer -> Molnleverantörer för att lägga till det.
På avsnittet för säkerhetskopiering kan du se förloppet för säkerhetskopieringen och information som metod, storlek, plats och mer.
ClusterControl Kommandorad (s9s)
För skript- och automatiseringsuppgifter, eller även om du bara föredrar kommandoraden, har ClusterControl verktyget s9s. Det är ett kommandoradsverktyg för att hantera ditt databaskluster. Låt oss se ett exempel på hur man skapar och listar säkerhetskopior med det här verktyget:
$ 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
Du kan hitta fler exempel och information i ClusterControl CLI-dokumentationsavsnittet.
Slutsats
Som en slutsats av att jämföra dessa nämnda säkerhetskopieringshanteringssystem kan vi säga att PGHoard är en gratis men komplex lösning för denna uppgift. Du behöver lite tid för att förstå hur det fungerar och hur du konfigurerar det, eftersom den officiella dokumentationen är lite dålig på det. Dessutom ser det lite inaktuellt ut, eftersom den senaste utgåvan var för ett år sedan. Dessutom är ClusterControl ett allt-i-ett-hanteringssystem med många funktioner, inte bara säkerhetskopieringshantering, med ett användarvänligt och lättanvänt användargränssnitt. Den har community (med begränsade tillgängliga funktioner) och betalversioner med en 30-dagars gratis provperiod. Dokumentationen är tydlig och komplett, med exempel och detaljerad information.
Vi hoppas att den här bloggen hjälper dig att fatta det bästa beslutet för att hålla din data säker.