sql >> Database >  >> RDS >> PostgreSQL

Hoe u uw PostgreSQL-databases beheert vanuit de ClusterControl CLI

Wist u dat u naast de ClusterControl-webgebruikersinterface ook een opdrachtregelinterface kunt gebruiken om uw PostgreSQL-instanties te beheren?

ClusterControl ondersteunt PostgreSQL-streamingreplicatie (zowel asynchrone als synchrone replicatie) als zelfstandige PostgreSQL-instantie. We hebben ons best gedaan om de opdrachtregelinterface qua functionaliteit dicht bij de gebruikersinterface te maken.

Waarom zou je de CLI willen gebruiken?

Hiermee kunt u een volledige replicatie-installatie in één opdracht implementeren, een failover uitvoeren of nieuwe knooppunten aan de installatie toevoegen. Dit integreert zeer goed met uw bestaande automatiseringscode voor infrastructuur, geschreven in Ansible, Chef of Puppet.

In deze blogpost wordt uitgelegd hoe u een PostgreSQL-streamingreplicatiecluster kunt beheren met ClusterControl CLI of s9s.

Houd er rekening mee dat voor de meeste functionaliteiten die in deze blogpost worden getoond, ClusterControl moet zijn geïnstalleerd en actief moet zijn met een geldig abonnement, een commerciële licentie of een gratis proeflicentie (geldig tot 30 dagen na de installatie van ClusterControl).

Clusterimplementatie en import

Een nieuw cluster implementeren

Voordat u een nieuw cluster implementeert of een bestaand PostgreSQL-cluster importeert in ClusterControl, moet u ervoor zorgen dat SSH zonder wachtwoord van het ClusterControl-knooppunt naar alle databaseknooppunten vooraf is geconfigureerd. Stel dat we een nieuwe PostgreSQL-streamingreplicatie met drie knooppunten willen implementeren, voer dan de volgende opdrachten uit op het ClusterControl-knooppunt:

$ whoami
root
$ ssh-keygen -t rsa # if you haven't generated SSH key
$ ssh-copy-id 192.168.0.91 # PostgreSQL1
$ ssh-copy-id 192.168.0.92 # PostgreSQL2
$ ssh-copy-id 192.168.0.93 # PostgreSQL3

Controleer op het ClusterControl-knooppunt of u de volgende opdracht zonder wachtwoord kunt uitvoeren:

$ ssh 192.168.0.91 "ls /root"

Als u de inhoud van de map kunt zien, bent u in een goede vorm. Gebruik vervolgens ClusterControl CLI met --create vlag om het cluster te implementeren:

$ s9s cluster \
--create \
--cluster-type=postgresql \
--nodes="192.168.0.91?master;192.168.0.92?slave;192.168.0.93?slave" \
--provider-version='11' \
--db-admin='postgres' \
--db-admin-passwd='s3cr3tP455' \
--os-user=root \
--os-key-file=/root/.ssh/id_rsa \
--cluster-name='PostgreSQL 11 Streaming Replication' \
--wait
Creating PostgreSQL Cluster
\ Job 259 RUNNING    [█▋        ]  15% Installing helper packages

We hebben het eerste knooppunt, 192.168.0.91, gespecificeerd als de master en de rest zijn slaves. Omdat we SSH zonder wachtwoord al via root-gebruiker hebben geconfigureerd, hebben we de OS-gebruiker gespecificeerd als "root" samen met het bijbehorende SSH-sleutelbestand met de vlag --os-key-file. De vlag --wait betekent dat de taak wacht en de voortgang rapporteert totdat deze is voltooid.

U kunt de voortgang van de implementatie ook volgen vanuit de gebruikersinterface van ClusterControl onder Activiteit> Taken> PostgreSQL-cluster maken :

Zodra de implementatie is voltooid, kunnen we de samenvatting van het actieve cluster zien door de --stat-vlag te gebruiken:

$ s9s cluster --stat

Een bestaand cluster importeren

Als u bijvoorbeeld al een PostgreSQL-streamingreplicatiecluster handmatig hebt geïmplementeerd, kunt u deze in ClusterControl importeren met behulp van de --register-vlag zoals weergegeven in de volgende opdracht:

$ s9s cluster \
--register \
--cluster-type=postgresql \
--nodes="192.168.0.91;192.168.0.92;192.168.0.93" \
--provider-version='11' \
--db-admin='postgres' \
--db-admin-passwd='s3cr3tP455' \
--os-user=root \
--os-key-file=/root/.ssh/id_rsa \
--cluster-name="PostgreSQL 11" \
--wait
Register PostgreSQL
- Job 263 RUNNING    [        █ ] ---% Importing Cluster

ClusterControl maakt vervolgens verbinding met de opgegeven knooppunten, ontdekt de topologie en registreert het cluster in ClusterControl. U kunt verifiëren met de opdracht 's9s cluster --stat' zoals hierboven weergegeven.

Knooppunt- en clusterbeheer

Servicecontrole

Om een ​​rollende herstart van een cluster uit te voeren, specificeert u de cluster-ID en gebruikt u --rolling-restart vlag:

$ s9s cluster --rolling-restart --cluster-id=8 --wait
Rolling Restart
- Job 264 RUNNING    [██▊       ]  27% Waiting for 192.168.0.91

Gebruik de --stop vlag voor component "cluster" om een ​​cluster te stoppen. Om de taakuitvoer te zien in plaats van de voortgangsbalk, kunnen we in plaats daarvan --log flag gebruiken:

$ s9s cluster --stop --cluster-id=8 --log
This is an RPC V2 job (a job created through RPC V2).
The job owner is 'admin'.
Accessing '/.runtime/jobs/jobExecutor' to execute...
Access ok.
Setting cluster to 'SHUTTING_DOWN' state.
192.168.0.91:5432: Stopping PostgreSQL service.
192.168.0.91:5432: Waiting PostgreSQL top stop.
192.168.0.92:5432: Stopping PostgreSQL service.
192.168.0.92:5432: Waiting PostgreSQL top stop.
192.168.0.93:5432: Stopping PostgreSQL service.
192.168.0.93:5432: Waiting PostgreSQL top stop.
Setting cluster to 'STOPPED' state.

Het rapporteert dezelfde taakberichten als de web-UI. Vergelijkbaar met het bovenstaande, om een ​​cluster te starten, gebruikt u gewoon de --start-vlag (we gebruiken in plaats daarvan --wait-vlag om de voortgang te zien in plaats van de taaklogboeken):

$ s9s cluster --start --cluster-id=8 --wait
Starting Cluster
\ Job 272 RUNNING    [     █    ] ---% Start Cluster

Om de PostgreSQL-service op een databaseknooppunt opnieuw te starten, gebruiken we de component "node" en --restart-vlag:

$ s9s node \
--restart \
--cluster-id=8 \
--nodes=192.168.0.92 \
--log
Preparing to restart host.
192.168.0.92:5432: Stopping PostgreSQL service.
192.168.0.92:5432: Waiting to stop.
192.168.0.92:5432: Starting PostgreSQL.
192.168.0.92:5432: The postgresql service was started.
192.168.0.92:5432: Waiting to start.

Om een ​​PostgreSQL-knooppunt te stoppen en te starten, past u gewoon hetzelfde commando toe met --stop of --start flag, zoals hieronder getoond:

$ s9s node --stop --cluster-id=8 --nodes=192.168.0.92
$ s9s node --start --cluster-id=8 --nodes=192.168.0.92

Houd er rekening mee dat deze acties het systeem niet opnieuw opstarten.

Schaalknooppunt

Om een ​​knoop uit een cluster te verwijderen, gebruikt u de --remove-node vlag:

$ s9s cluster \
--remove-node \
--nodes=192.168.0.93 \
--cluster-id=8 \
--log
Removing node 192.168.0.93: checking job parameters.
192.168.0.93:5432: Stopping PostgreSQL service.
192.168.0.93:5432: Waiting to stop.
192.168.0.93:5432: removed PostgreSQL Server
Updating load balancers.

Het toevoegen van een nieuw knooppunt werkt op dezelfde manier, maar u moet ervoor zorgen dat het knooppunt vooraf toegankelijk is via SSH zonder wachtwoord. Configureer het eerst en voeg vervolgens het knooppunt toe met behulp van de --add-node-vlag:

$ s9s cluster \
--add-node \
--nodes=192.168.0.93 \
--cluster-id=8 \
--log
addNode: Verifying job parameters.
Found a master candidate: 192.168.0.91:5432, adding 192.168.0.93:5432 as a slave.
Verifying job parameters.
192.168.0.93:5432: Disabling SELinux/Apparmor.
192.168.0.93: Checking firewall.
192.168.0.93: Disabling firewalld.
192.168.0.93: Flushing iptables.
192.168.0.93:5432: Installing new node.
192.168.0.93:5432: Using the master's data directory '/var/lib/pgsql/11/data'.
192.168.0.91: Checking size of '/var/lib/pgsql/11/data'.
192.168.0.91: /var/lib/pgsql/11/data size is 103.00 MiB.
192.168.0.93: Checking free space in '/var/lib/pgsql/11/data'.
192.168.0.93: /var/lib/pgsql/11/data has 34.19 GiB free space.
192.168.0.93:5432: Setting SELinux in permissive mode.
192.168.0.93:5432: Disabling firewall.
192.168.0.93:5432: Tuning OS parameters.
192.168.0.93:5432: Setting vm.swappiness = 1.
192.168.0.93:5432: Installing helper packages.
192.168.0.93: Upgrading nss.
192.168.0.93: Upgrading ca-certificates.
192.168.0.93: Installing net-tools.
192.168.0.93: Installing netcat.
192.168.0.93: Installing nc.
192.168.0.93: Installing socat.
192.168.0.93: Installing perl-Data-Dumper.
192.168.0.93: Installing which.
192.168.0.93: Installing perl-Data-Dumper-Names.
192.168.0.93: Installing psmisc.
192.168.0.93: Installing rsync.
192.168.0.93: Installing libaio.
192.168.0.93: Installing libevent.
192.168.0.93: Installing wget.
192.168.0.93: Installing curl.
192.168.0.93: Installing gnupg2.
192.168.0.93: Installing pigz.
192.168.0.93: Installing bzip2.
192.168.0.93: Installing iproute2.
192.168.0.93: Installing tar.
192.168.0.93: Installing openssl.
192.168.0.93: Upgrading openssl openssl-libs.
192.168.0.93: Finished with helper packages.
192.168.0.93:5432: Using External repositories.
192.168.0.93:5432: Setting up PostgreSQL repositories.
192.168.0.93:5432: Uninstalling old PostgreSQL packages.
192.168.0.93:5432: Installing PostgreSQL 11 packages (centos-7).
192.168.0.93:5432: PostgreSQL installed, init-name: postgresql-11.
192.168.0.93: Updating PostgreSQL port (5432) and directory.
192.168.0.93:5432: Granting remote access to PostgreSQL server.
192.168.0.93:5432: Granting controller (10.0.2.15,192.168.0.19).
192.168.0.93:5432: Updating configuration.
192.168.0.93:5432: Enabling stat_statements plugin.
192.168.0.93:5432: Setting wal options.
192.168.0.93:5432: Performance tuning.
192.168.0.93:5432: Selected workload type: mixed
Detected system memory: 991.18 MiB
Using the following fine-tuning options:
  checkpoint_completion_target: 0.9
  effective_cache_size: 761229kB
  maintenance_work_mem: 63435kB
  max_connections: 100
  shared_buffers: 253743kB
  wal_keep_segments: 32
  work_mem: 5074kB
Writing file '192.168.0.93:/var/lib/pgsql/11/data/postgresql.conf'.
192.168.0.93:5432: Restarting PostgreSQL service
192.168.0.93:5432: Testing connection (attempt #1).
192.168.0.93:5432: Connected ok.
192.168.0.93:5432: Using the master's data directory '/var/lib/pgsql/11/data'.
192.168.0.91:5432(master): Verifying PostgreSQL version.
Setting up replication 192.168.0.91:5432->192.168.0.93:5432
Collecting server variables.
192.168.0.91:5432: Using the pg_hba.conf contents for the slave.
192.168.0.93:5432: Updating slave configuration.
Writing file '192.168.0.93:/var/lib/pgsql/11/data/postgresql.conf'.
192.168.0.93:5432: GRANT new node on members to do pg_basebackup.
192.168.0.91:5432: granting 192.168.0.93:5432.
192.168.0.93:5432: Stopping slave.
192.168.0.93:5432: Cleaning up slave data directory: /var/lib/pgsql/11/data
192.168.0.93:5432: detected version: 11.1
192.168.0.93:5432: Doing initial sync (pg_basebackup) from 192.168.0.91:5432.
192.168.0.93:5432: Synchronizing pg_hba.conf from master.
Writing file '192.168.0.93:/var/lib/pgsql/11/data/postgresql.conf'.
192.168.0.93:5432: Creating '/var/lib/pgsql/11/data/recovery.conf': Setting 192.168.0.91:5432 as master.
192.168.0.93:5432: Successfully created '/var/lib/pgsql/11/data/recovery.conf'.
192.168.0.93:5432: Restarting PostgreSQL
192.168.0.93:5432: Grant cluster members on the new node (for failover).
Grant connect access for new host in cluster.
Adding grant on 192.168.0.91:5432.
Adding grant on 192.168.0.92:5432.
192.168.0.93:5432: Waiting until service starts.
192.168.0.93:5432: Registering node.
192.168.0.93:5432: Verifying configuration.
192.168.0.93:5432: Checking 'listen_addresses'.
192.168.0.93:5432: Checking variables.
192.168.0.93:5432: Detected PostgreSQL 11.1.
192.168.0.93:5432: Registering host with host manager.
192.168.0.93:5432: Added host to cluster.
Replication slave job finished.
192.168.0.93: Installing cronie.
192.168.0.91:5432: [postgres] Pulling '/var/lib/pgsql/11/data/postgresql.conf'.
192.168.0.92:5432: [postgres] Pulling '/var/lib/pgsql/11/data/postgresql.conf'.
192.168.0.93:5432: [postgres] Pulling '/var/lib/pgsql/11/data/postgresql.conf'.

Uit de taaklogboeken kunnen we zien dat, aangezien het cluster al een master heeft (192.168.0.91), het nieuwe knooppunt zal worden geïmplementeerd als een slaaf van de master. ClusterControl zal dan alle noodzakelijke acties uitvoeren en de nieuwe node dienovereenkomstig voorbereiden als de gegeven rol.

Overschakelen naar een nieuwe Master

Om de omschakeling uit te voeren, kiest u een van de slaven om de nieuwe master te worden met --promote-slave flag:

$ s9s cluster \
--promote-slave \
--nodes=192.168.0.92 \
--cluster-id=8 \
--log
192.168.0.92:5432: Promoting server to master.
192.168.0.92:5432: Current master is 192.168.0.91:5432.

SERVER           HOST_STATUS            STATUS            ROLE RECEIVE/REPLAY
192.168.0.91     CmonHostOnline   NODE_CONNECTED         master 0/9000EF0; 0/9000EF0
192.168.0.92     CmonHostOnline   NODE_CONNECTED         slave  0/9000EF0; 0/9000EF0
192.168.0.93     CmonHostOnline   NODE_CONNECTED         slave  0/9000EF0; 0/9000EF0

Switching over to 192.168.0.92:5432 (previous master is 192.168.0.91:5432)
192.168.0.91:5432: Stopping the current master.
192.168.0.91:5432: Stopping PostgreSQL service.
192.168.0.91:5432: Waiting to stop.
192.168.0.92:5432: Failover, using file.
192.168.0.92:5432: Waiting to become a master.
192.168.0.92:5432: Became master, ok.
Switching slaves to the new master.
192.168.0.93:5432: Stopping PostgreSQL service.
192.168.0.93:5432: Waiting to stop.
192.168.0.92:5432: Granting host (192.168.0.93:5432).
Running /usr/pgsql-11/bin/pg_rewind --target-pgdata=/var/lib/pgsql/11/data --source-server="host=192.168.0.92 port=5432 user=cmon password=***** dbname=postgres"
192.168.0.93: servers diverged at WAL location 0/9000F60 on timeline 1
no rewind required
192.168.0.93:5432: Creating '/var/lib/pgsql/11/data/recovery.conf': Setting 192.168.0.92:5432 as master.
192.168.0.93:5432: Successfully created '/var/lib/pgsql/11/data/recovery.conf'.
192.168.0.93:5432: Starting PostgreSQL.
192.168.0.93:5432: The postgresql service was started.
192.168.0.93:5432: Waiting to start.
192.168.0.93:5432: Restarted with new master.
192.168.0.91:5432: Stopping PostgreSQL service.
192.168.0.91:5432: Waiting to stop.
192.168.0.92:5432: Granting host (192.168.0.91:5432).
Running /usr/pgsql-11/bin/pg_rewind --target-pgdata=/var/lib/pgsql/11/data --source-server="host=192.168.0.92 port=5432 user=cmon password=***** dbname=postgres"
192.168.0.91: servers diverged at WAL location 0/9000F60 on timeline 1
no rewind required
192.168.0.91:5432: Creating '/var/lib/pgsql/11/data/recovery.conf': Setting 192.168.0.92:5432 as master.
192.168.0.91:5432: Successfully created '/var/lib/pgsql/11/data/recovery.conf'.
192.168.0.91:5432: Starting PostgreSQL.
192.168.0.91:5432: The postgresql service was started.
192.168.0.91:5432: Waiting to start.
192.168.0.91:5432: Restarted with new master.
Servers after promote:
SERVER           HOST_STATUS            STATUS            ROLE RECEIVE/REPLAY
192.168.0.91     CmonHostOnline   NODE_CONNECTED         slave  0/9001F90; 0/9001F90
192.168.0.92     CmonHostOnline   NODE_CONNECTED         master 0/9001F90; 0/9001F90
192.168.0.93     CmonHostOnline   NODE_CONNECTED         slave  0/9001F90; 0/9001F90

192.168.0.92:5432: promote finished (this is the new master).
Successfully promoted a new master.

De taakberichten laten zien dat ClusterControl eerst de huidige topologie zal ontdekken en alle knooppunten in het cluster zal stoppen. Vervolgens configureert het de nieuwe master en zorgt ervoor dat de andere knooppunten ervan repliceren. Het zal ook proberen om pg_rewind . uit te voeren om de PGDATA van de gedegradeerde master opnieuw te synchroniseren met een nieuwe basisback-up. Aan het einde van de taak rapporteert ClusterControl de huidige topologie en de status van de promotie.

We kunnen dan verifiëren door alle knooppunten voor cluster-ID 8 op te sommen:

$ s9s node --list --cluster-id=8 --long
STAT VERSION    CID CLUSTER       HOST         PORT COMMENT
coC- 1.7.1.2985   8 PostgreSQL 11 192.168.0.19 9500 Up and running.
poS- 11.1         8 PostgreSQL 11 192.168.0.91 5432 Up and running.
poM- 11.1         8 PostgreSQL 11 192.168.0.92 5432 Up and running.
poS- 11.1         8 PostgreSQL 11 192.168.0.93 5432 Up and running.

De status "poM-" in de meest linkse kolom heeft de volgende betekenis:

  • p - PostgreSQL-knooppunt
  • o - online
  • M - meester

Databasebeheer

Gebruik de --list-database vlag op componentcluster om een ​​lijst te maken van alle databases gevonden op het cluster:

$ s9s cluster \
--list-database \
--long \
--cluster-id=8
SIZE      #TBL #ROWS   OWNER  GROUP  CLUSTER                          DATABASE
  7340032    0       0 system admins PostgreSQL Streaming Replication postgres
  7340032    0       0 system admins PostgreSQL Streaming Replication template1
  7340032    0       0 system admins PostgreSQL Streaming Replication template0
382730240   12 1156642 system admins PostgreSQL Streaming Replication sbtest

Houd er rekening mee dat als het cluster veel databases heeft, deze optie sommige ervan mogelijk niet weergeeft. Het bemonsteren van een groot aantal databases zou een hoge belasting genereren en daarom heeft de controller een bovengrens ingebouwd.

Als u een nieuwe database voor het cluster wilt maken, doet u gewoon:

$ s9s cluster \
--create-database \
--cluster-id=8 \
--db-name=my_shopping_db

Om een ​​nieuwe databasegebruiker aan te maken, samen met een bijbehorende database (met dezelfde databasenaam), gebruikt u de --create-account met --with-database vlag:

$ s9s cluster \
--create-account \
--cluster-id=1 \
--account=mysystem:[email protected] \
--with-database
Account 'mysystem' created.
192.168.0.91:5432: Allowing connections from 192.168.0.15.
192.168.0.92:5432: Allowing connections from 192.168.0.15.
192.168.0.93:5432: Allowing connections from 192.168.0.15.
Database 'mysystem' created.
Access for 'mysystem' to 'mysystem' granted.

ClusterControl zal de nodige acties uitvoeren om de database en het gebruikersaccount met de juiste privileges aan te maken en deze op alle databaseknooppunten toe te staan.

Back-upbeheer

ClusterControl ondersteunt twee back-upmethoden voor PostgreSQL:

  • pgdump - Alias ​​naar pg_dumpall, een hulpprogramma voor het wegschrijven van alle PostgreSQL-databases van een cluster in één scriptbestand.
  • pg_basebackup - Een hulpprogramma om een ​​volledige back-up op bestandssysteemniveau van een PostgreSQL-database te maken.

Een back-up maken

Om een ​​nieuwe back-up te maken met pg_dumpall, kiest u een databaseknooppunt en specificeert u "pgdump" in de --backup-method-vlag:

$ s9s backup \
--create \
--backup-method=pgdump \
--cluster-id=8 \
--nodes=192.168.0.92 \
--backup-directory=/storage/backups \
    --on-controller

De vlag --on-controller geeft aan dat we willen dat de gemaakte back-up wordt opgeslagen in de map /storage/backups op het ClusterControl-knooppunt. Laat de vlag weg als u deze op het databaseknooppunt zelf wilt opslaan. Dezelfde opdracht kan worden toegepast om een ​​pg_basebackup-back-up te maken. Gewoon "pgdump" vervangen door "pg_basebackup" zou voldoende zijn.

Om de back-up weer te geven, gebruikt u gewoon de --list en --cluster-id vlaggen:

$ s9s backup --list --long --cluster-id=8
ID PI CID V I STATE     OWNER          HOSTNAME     CREATED  SIZE    TITLE
 8  -   8 - F COMPLETED admin          192.168.0.92 08:42:47    1204 Untitled Backup Record
 9  -   8 - F COMPLETED admin          192.168.0.92 08:45:52 3865462 Untitled Backup Record

Een back-up plannen

Het plannen van een back-up is vergelijkbaar met het commando dat we gebruikten om een ​​back-up te maken, met de extra --recurrence-vlag:

$ s9s backup \
--create \
--backup-method=pg_basebackup \
--cluster-id=8 \
--nodes=192.168.0.92 \
--backup-directory=/storage/backups \
--on-controller \
--recurrence='30 0 * * *'

De waarde van herhaling moet tussen aanhalingstekens en in crontab-formaat worden geplaatst.

Een back-up herstellen

Om een ​​back-up naar een cluster te herstellen, gebruikt u de --restore vlag en wijst u de back-up-ID aan die u wilt gebruiken:

$ s9s backup \
--restore \
--cluster-id=8 \
--backup-id=9 \
--log
192.168.0.19: Checking 'socat' availability.
Stop slaves as restoring offline backup to master.
192.168.0.91:5432: Stopping PostgreSQL service.
192.168.0.91:5432: Waiting to stop.
192.168.0.93:5432: Stopping PostgreSQL service.
192.168.0.93:5432: Waiting to stop.
192.168.0.92:5432: Stopping node for restoring a base-backup.
192.168.0.92:5432: Stopping PostgreSQL service.
192.168.0.92:5432: Waiting to stop.
192.168.0.92:5432: Backing up the current datadir.
192.168.0.92: Mount point of '/var/lib/pgsql/11/data': '/'
192.168.0.92: Creating copy of datadir (using 'mv'): /var/lib/pgsql/11/data_bak
192.168.0.92: Checking 'socat' availability.
192.168.0.92: Starting: su - postgres -c 'socat -u tcp-listen:9999,reuseaddr stdout | tar -C/var/lib/pgsql/11/data -xzf-' 2>&1 > /tmp/netcat.pg.log
192.168.0.92: socat/nc is started.
192.168.0.92: Restoring from '192.168.0.19':'/storage/backups/BACKUP-9/base.tar.gz'
192.168.0.92:5432: Starting node after restored a base-backup.
192.168.0.92:5432: Starting PostgreSQL.
192.168.0.92:5432: The postgresql service was started.
192.168.0.92:5432: Waiting to start.
You may now rebuild your slaves.
Finished restoring.
Checking the cluster.
Setting cluster to 'STARTING' state.
192.168.0.91:5432: Starting PostgreSQL.
192.168.0.91:5432: The postgresql service was started.
192.168.0.93:5432: Starting PostgreSQL.
192.168.0.93:5432: The postgresql service was started.
Cluster is successfully started.
Cluster status is STARTED.

Houd er rekening mee dat voor de back-up van pg_basebackup de herstelbewerking een database-downtime vereist. Alle PostgreSQL-knooppunten worden voorafgaand aan het herstel gestopt en het herstel vindt plaats op de laatst bekende master. Deze master wordt als eerste naar voren gebracht (gevolgd door alle slaves) nadat het herstel is voltooid.

Een back-up verifiëren

Om de back-up te herstellen en te verifiëren, gebruikt u --verify flag en specificeert u de doelserver met de --test-server flag:

$ s9s backup \
--verify \
--cluster-id=8 \
--backup-id=9 \
--test-server=192.168.0.99 \
--log

De testserver mag geen deel uitmaken van het cluster en moet toegankelijk zijn via SSH zonder wachtwoord vanaf het ClusterControl-knooppunt. ClusterControl installeert eerst de doelserver met dezelfde PostgreSQL-versie, streamt en herstelt de back-up op dat knooppunt. De back-upverificatie zoekt naar de laatste afsluitcode na herstel. Als de back-up herstelbaar is, stopt ClusterControl de testserver en verwijdert deze uit ClusterControl (maar ClusterControl sluit hem niet af). U zou het volgende moeten zien zodra de taak is voltooid:

Backup 9 was successfully verified.

Cluster maken van back-up

ClusterControl heeft een nieuwe functie geïntroduceerd in v1.7.1, waarbij men een nieuw cluster kan maken op basis van een back-up gemaakt door een bestaand cluster. Dit kan erg handig zijn om uw database uit te testen op een ander platform of andere databaseversie. In dit voorbeeld willen we een PostgreSQL 9.6-cluster met twee knooppunten implementeren op basis van back-up-ID 214:

$ s9s cluster \
--create \
--cluster-type=postgresql \
--nodes="192.168.0.101?master;192.168.0.102?slave" \
--provider-version=9.6 \
--db-admin=postgres \
--db-admin-passwd='s3cr3tP455' \
--os-user=root \
--os-key-file=/root/.ssh/id_rsa \
--cluster-name="PostgreSQL 9.6 - Test"
--backup-id=214 \
--wait

Houd er rekening mee dat het beheerderswachtwoord voor het nieuwe cluster identiek moet zijn aan het PostgreSQL-beheerderswachtwoord zoals opgenomen in de back-up. In principe voert ClusterControl de implementatietaak uit in de volgende volgorde:

  1. Installeer de benodigde software en afhankelijkheden op alle PostgreSQL-knooppunten.
  2. Start het eerste knooppunt.
  3. Stream en herstel back-up op het eerste knooppunt (met vlag voor automatisch herstarten).
  4. Configureer en voeg de rest van de knooppunten toe.

U kunt de clusterlijst vervolgens verifiëren met de volgende opdracht:

$ s9s cluster --stat

Configuratiebeheer

Om de PostgreSQL-configuratie van een knooppunt op te sommen, gebruikt u de --list-config-vlag:

$ s9s node --list-config --cluster-id=8 --nodes=192.168.0.92
GROUP OPTION NAME                  VALUE
-     data_directory               '/var/lib/pgsql/11/data'
-     listen_addresses             '*'
-     port                         5432
-     max_connections              100
-     shared_buffers               253743kB
-     work_mem                     5074kB
-     maintenance_work_mem         63435kB
-     dynamic_shared_memory_type   posix
-     wal_level                    hot_standby
-     full_page_writes             on
-     wal_log_hints                on
-     max_wal_size                 1GB
-     min_wal_size                 80MB
-     checkpoint_completion_target 0.9
-     max_wal_senders              16
-     wal_keep_segments            32
-     hot_standby                  on
-     effective_cache_size         761229kB
-     log_destination              'stderr'
-     logging_collector            on
-     log_directory                'log'
-     log_filename                 'postgresql-%a.log'
-     log_truncate_on_rotation     on
-     log_rotation_age             1d
-     log_rotation_size            0
-     log_line_prefix              '%m [%p] '
-     log_timezone                 'UTC'
-     track_activity_query_size    2048
-     datestyle                    'iso, mdy'
-     timezone                     'UTC'
-     lc_messages                  'en_US.UTF-8'
-     lc_monetary                  'en_US.UTF-8'
-     lc_numeric                   'en_US.UTF-8'
-     lc_time                      'en_US.UTF-8'
-     default_text_search_config   'pg_catalog.english'
-     shared_preload_libraries     'pg_stat_statements'
-     pg_stat_statements.track     all

ClusterControl retourneert de uitvoer van OPTIE NAAM en WAARDE dienovereenkomstig. De GROUP-kolom is niet van toepassing in PostgreSQL, dus u zou de '-'-waarde moeten zien.

Om een ​​configuratieoptie te wijzigen, gebruikt u --change-config flag en specificeert u de parameter en waarde met respectievelijk --opt-name en --opt-value:

$ s9s node \
--change-config \
--nodes=192.168.0.92 \
--opt-name=min_wal_size \
--opt-value='100MB'
192.168.0.92:5432: Changed a read-only parameter. Node restart is required for change to take effect.

U zou ClusterControl de status van de configuratiewijziging moeten zien retourneren en de vervolgprocedure adviseren om ervoor te zorgen dat de configuratiewijziging van kracht wordt. U kunt dan de opdracht "s9s node --restart" gebruiken om het specifieke knooppunt opnieuw te starten.

Laatste gedachten

ClusterControl biedt grote flexibiliteit als het gaat om het beheren en bewaken van uw PostgreSQL-databasecluster. U hebt de keuze uit een web-UI, die vrij eenvoudig en duidelijk is, plus een opdrachtregelinterface, waarmee u volledige database-automatisering kunt bereiken via scripting. Veel succes met beheren!


  1. Wat is het verschil tussen MySQL, MySQLi en PDO?

  2. MySQL opgeslagen procedure met parameters

  3. Hiërarchische query's in SQL Server 2005

  4. Opnieuw ordenen/reset auto increment primaire sleutel