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

pghoard Alternativer - PostgreSQL Backup Management med ClusterControl

Administration af sikkerhedskopier kan være en kompleks og risikabel opgave at udføre på en manuel måde. Du skal vide, at sikkerhedskopien fungerer i henhold til din sikkerhedskopieringspolitik, da du ikke ønsker at være i den situation, at du har brug for sikkerhedskopien, og den virker ikke, eller den eksisterer ikke. Det vil helt sikkert være et stort problem. Så det bedste her er at bruge en kamptestet backup-administrationsapplikation for at undgå problemer i tilfælde af fejl.

PGHoard er et PostgreSQL backup-dæmon og gendannelsessystem, der gemmer backup-data i skyobjektlagre. Det understøtter PostgreSQL 9.3 eller nyere, indtil PostgreSQL 11, den seneste understøttede version lige nu. Den nuværende PGHoard-version er 2.1.0, udgivet i maj 2019 (1 år siden).

ClusterControl er en agentfri administrations- og automatiseringssoftware til databaseklynger. Det hjælper med at implementere, overvåge, administrere og skalere din databaseserver/klynge direkte fra ClusterControl UI eller ved at bruge ClusterControl CLI. Det inkluderer funktioner til sikkerhedskopiering og understøtter PostgreSQL 9.6, 10, 11 og 12 versioner. Den nuværende ClusterControl-version er 1.7.6, udgivet i sidste måned i april 2020.

I denne blog sammenligner vi PGHoard med ClusterControl Backup Management-funktionen, og vi vil se, hvordan man installerer og bruger begge systemer. Til dette bruger vi en Ubuntu 18.04-server og PostgreSQL11 (da det er den seneste understøttede version til brug af PGHoard). Vi installerer PGHoard i den samme databaseserver og importerer den til ClusterControl.

Sammenligning af sikkerhedskopieringsstyringsfunktioner

PGHoard

Nogle af de vigtigste PGHoard-funktioner er:

  • Automatiske periodiske basissikkerhedskopier
  • Automatisk sikkerhedskopiering af transaktionslogfiler
  • Understøttelse af selvstændig Hot Backup
  • Cloud-objektlagringsunderstøttelse (AWS S3, Google Cloud, OpenStack Swift, Azure, Ceph)
  • Backupgendannelse direkte fra objektlager, komprimeret og krypteret
  • Point-in-time-recovery (PITR)
  • Initialiser en ny standby fra sikkerhedskopiering af objektlager, automatisk konfigureret som en replikerende hot-standby
  • Parallel komprimering og kryptering

En af måderne at bruge det på er at have en separat backup-maskine, så PGHoard kan oprette forbindelse til pg_receivexlog for at modtage WAL-filer fra databasen. En anden tilstand er at bruge pghoard_postgres_command som en PostgreSQL archive_command. I begge tilfælde opretter PGHoard periodiske basebackups ved hjælp af pg_basebackup.

ClusterControl

Lad os også se nogle af de vigtigste funktioner i dette system:

  • Brugervenlig brugergrænseflade
  • Sikkerhedskopiering og gendannelse (i samme node eller i en separat)
  • Planlæg sikkerhedskopiering
  • Opret en klynge fra Backup
  • Automatisk sikkerhedskopiering
  • Kompression
  • Kryptering
  • Automatisk cloud-upload
  • Point-in-time-recovery (PITR)
  • Forskellige sikkerhedskopieringsmetoder (logisk, fysisk, fuld, inkrementel osv.)
  • Sikkerhedskopiering af driftsrapporter

Da dette ikke kun er et sikkerhedskopieringsstyringssystem, vil vi også nævne forskellige vigtige funktioner, ikke kun de sikkerhedskopieringsrelaterede:

  • Implementer/importer databaser:Standalone, Cluster/Replication, Load Balancers
  • Skalering:Tilføj/fjern noder, læsereplikaer, klyngekloning, klynge-til-klynge-replikering
  • Overvågning:Tilpassede dashboards, fejldetektion, forespørgselsmonitor, ydeevnerådgivere, alarmer og meddelelser, udvikle tilpassede rådgivere
  • Automatisk gendannelse:Node- og klyngendannelse, failover, miljøer med høj tilgængelighed
  • Administration:Konfigurationsstyring, Database Patch-opgraderinger, Database User Management, Cloud Integration, Ops Reports, ProxySQL Management
  • Sikkerhed:Nøglestyring, rollebaseret adgangskontrol, godkendelse ved hjælp af LDAP/Active Directory, SSL-kryptering

Den anbefalede topologi er at have en separat node til at køre ClusterControl, for at sikre, at du, i tilfælde af fejl, kan drage fordel af automatisk gendannelse og failover ClusterControl-funktioner (blandt andre nyttige funktioner) .

Systemkrav

PGHoard

Ifølge dokumentationen kan PGHoard sikkerhedskopiere og gendanne PostgreSQL version 9.3 og nyere. Dæmonen er implementeret i Python og fungerer med CPython version 3.5 eller nyere. Følgende Python-moduler kan være nødvendige, afhænger af kravene:

  • psycopg2 for at finde metadata for transaktionslog
  • anmodninger om den interne klient-server-arkitektur
  • azure til Microsoft Azure-objektlagring
  • botocore til AWS S3 (eller Ceph-S3) objektlagring
  • google-api-client til Google Cloud-objektlagring
  • kryptering til backupkryptering og dekryptering (version 0.8 eller nyere påkrævet)
  • snappy til Snappy komprimering og dekompression
  • zstandard for Zstandard (zstd) komprimering og dekompression
  • systemd for systemd integration
  • swiftclient til OpenStack Swift-objektlagring
  • paramiko til sftp-objektlagring

Der er ingen omtale af det understøttede operativsystem, men det siger, at det blev testet på moderne Linux x86-64-systemer, men skulle fungere på andre platforme, der leverer de nødvendige moduler.

ClusterControl

Følgende software kræves af ClusterControl-serveren:

  • MySQL-server/klient
  • Apache-webserver (eller nginx)
  • mod_rewrite
  • mod_ssl
  • tillad .htaccess-tilsidesættelse
  • PHP (5.4 eller nyere)
  • 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) - skal være deaktiveret eller indstillet til permissive mode
  • OpenSSH-server/klient
  • BASH (anbefalet:version 4 eller nyere)
  • NTP-server - Alle serveres tid skal synkroniseres under én tidszone
  • socat eller netcat - til streaming backup

Og det understøtter forskellige operativsystemer:

  • 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

Hvis ClusterControl installeres via installationsscript (install-cc) eller pakkehåndtering (yum/apt), vil alle afhængigheder automatisk blive opfyldt.

For PostgreSQL understøtter den 9.6/10.x/11.x/12.x versioner. Du kan finde en komplet liste over de understøttede databaser i dokumentationen.

Det kræver blot adgangskodefri SSH-adgang til databasenoderne (ved hjælp af private og offentlige nøgler) og en privilegeret OS-bruger (det kan være root- eller sudo-bruger).

Installationsprocessen

PGHoard installationsproces

Vi antager, at du har din PostgreSQL-database oppe at køre, så lad os installere de resterende pakker. PGHoard er en Python-pakke, så efter at du har de nødvendige pakker installeret, kan du installere den ved at bruge pip-kommandoen:

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

$ pip3 install pghoard

Som en del af denne installationsproces skal du forberede PostgreSQL-instansen til at arbejde med dette værktøj. Til dette skal du redigere postgresql.conf for at tillade WAL-arkiv og øge max_wal_senders:

wal_level = logical

max_wal_senders = 4

archive_mode = on

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

Denne ændring kræver en databasegenstart:

$ service postgresql restart

Lad os nu oprette en databasebruger til PGHoard:

$ psql

CREATE USER pghoard PASSWORD 'Password' REPLICATION;

Og tilføj følgende linje i filen pg_hba.conf:

host    replication  pghoard  127.0.0.1/32/32  md5

Genindlæs databasetjenesten:

$ service postgresql reload

For at få det til at fungere, skal du oprette en JSON-konfigurationsfil til PGHoard. Vi vil se dette i næste afsnit "Brug".

ClusterControl installationsproces

Der er forskellige installationsmetoder, som det er nævnt i dokumentationen. I tilfælde af manuel installation er de nødvendige pakker specificeret i den samme dokumentation, og der er en trin-for-trin guide til hele processen.

Lad os se et eksempel med det automatiske installationsscript.

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

$ chmod +x install-cc

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

Installationsscriptet vil forsøge at automatisere følgende opgaver:

  • Installer og konfigurer en lokal MySQL-server (bruges af ClusterControl til at gemme overvågningsdata)
  • Installer og konfigurer ClusterControl-controllerpakken via pakkehåndtering
  • Installer ClusterControl-afhængigheder via pakkehåndtering
  • Konfigurer Apache og SSL
  • Konfigurer ClusterControl API URL og token
  • Konfigurer ClusterControl Controller med minimale konfigurationsmuligheder
  • Aktiver CMON-tjenesten ved opstart, og start den op

Når du kører det nævnte script, vil du modtage et spørgsmål om afsendelse af diagnostiske 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):

Derefter begynder den at installere de nødvendige pakker. Det næste spørgsmål handler om det værtsnavn, der vil blive brugt:

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

Når den lokale database er installeret, vil installationsprogrammet sikre den og skabe en root-adgangskode, som du skal indtaste:

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

Og en CMON-brugeradgangskode, som vil blive brugt af ClusterControl:

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

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

=> Enter a CMON user password:

Det er det. På denne måde har du alt på plads uden at installere eller konfigurere noget manuelt.

=> 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ørste gang du får adgang til brugergrænsefladen, skal du tilmelde dig den 30-dages gratis prøveperiode.

Når din 30-dages gratis prøveperiode slutter, konverteres din installation automatisk til fællesskabsudgaven, medmindre du har en kommerciel licens.

Brug af sikkerhedskopiering

PGHoards-brug

Når dette værktøj er installeret, skal du oprette en JSON-fil (pghoard.json) med PGHoard-konfigurationen. Dette er et eksempel:

{

"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 dette eksempel tager vi en sikkerhedskopi og gemmer den lokalt, men du kan også konfigurere en skykonto og gemme den der:

"object_storage": {

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

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

"bucket_name": "pghoard",

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

"storage_type": "s3"

},

Du kan finde flere detaljer om konfigurationen i dokumentationen.

Lad nu sikkerhedskopien køre med denne JSON-fil:

$ 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 mappen "backup_location" (i dette tilfælde /var/lib/pghoard) finder du en pghoard_state.json-fil med den aktuelle tilstand:

$ 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

Og en webstedsmappe (i dette tilfælde kaldet "default/") med sikkerhedskopien:

$ 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 tjekke backuplisten ved at bruge follogin-kommandoen:

$ 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-brug

Til dette antager vi, at du har din PostgreSQL-databaseklynge importeret i ClusterControl, eller du har implementeret den ved hjælp af dette system.

I ClusterControl skal du vælge din klynge og gå til sektionen "Backup", og derefter vælge "Opret sikkerhedskopi".

I dette eksempel bruger vi muligheden "Schedule Backup". Når du planlægger en sikkerhedskopiering, skal du ud over at vælge de almindelige muligheder som metode eller lagring også angive tidsplan/hyppighed.

Du skal vælge én metode, den server, som sikkerhedskopieringen tages fra , og hvor du vil opbevare det. Du kan også uploade din sikkerhedskopi til skyen (AWS, Google eller Azure) ved at aktivere den tilsvarende knap.

Så skal du angive brugen af ​​komprimering, kryptering og opbevaring af din backup. I dette trin kan du også aktivere funktionen "Bekræft sikkerhedskopiering", som giver dig mulighed for at bekræfte, at sikkerhedskopien er brugbar ved at gendanne den i en anden node.

Hvis du aktiverer "Upload backup til skyen", vil du se et afsnit for at angive cloud-udbyderen og legitimationsoplysningerne. Hvis du ikke har integreret din cloud-konto med ClusterControl, skal du gå til ClusterControl -> Integrationer -> Cloud Providers for at tilføje den.

På sikkerhedskopieringssektionen kan du se sikkerhedskopieringens fremskridt, og oplysninger som metode, størrelse, placering og mere.

ClusterControl-kommandolinje (s9s)

Til scripting og automatisering af opgaver, eller selvom du bare foretrækker kommandolinjen, har ClusterControl værktøjet s9s. Det er et kommandolinjeværktøj til at administrere din databaseklynge. Lad os se et eksempel på, hvordan du opretter og viser sikkerhedskopier ved hjælp af dette værktøj:

$ 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 finde flere eksempler og oplysninger i ClusterControl CLI-dokumentationsafsnittet.

Konklusion

Som en konklusion på at sammenligne disse nævnte sikkerhedskopieringsstyringssystemer kan vi sige, at PGHoard er en gratis, men kompleks løsning til denne opgave. Du skal bruge lidt tid til at forstå, hvordan det virker, og hvordan du konfigurerer det, da den officielle dokumentation er lidt dårlig på det. Desuden ser det lidt forældet ud, da den seneste udgivelse var for 1 år siden. Desuden er ClusterControl et alt-i-et-administrationssystem med en masse funktioner, ikke kun backup-styring, med en brugervenlig og brugervenlig brugergrænseflade. Det har fællesskab (med begrænsede tilgængelige funktioner) og betalte versioner med en 30-dages gratis prøveperiode. Dokumentationen er klar og komplet med eksempler og detaljerede oplysninger.

Vi håber, at denne blog hjælper dig med at træffe den bedste beslutning for at holde dine data sikre.


  1. Hvad er STATISTICS PROFIL i SQL Server?

  2. Crystal Reports vs. Microsoft SQL Server Reporting Services

  3. Guide til design af database til meddelelser i MySQL

  4. Forbindelsespooling i .NET/SQL-server?