sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur du hanterar dina PostgreSQL-databaser från ClusterControl CLI

Visste du att förutom ClusterControl webbgränssnitt kan du också använda ett kommandoradsgränssnitt för att hantera dina PostgreSQL-instanser?

ClusterControl stöder PostgreSQL strömmande replikering (både asynkron och synkron replikering) samt fristående PostgreSQL-instanser. Vi har gjort vårt bästa för att få kommandoradsgränssnittet att vara nära gränssnittet när det gäller tillgängliga funktioner.

Varför skulle du vilja använda CLI?

Det låter dig distribuera en hel replikeringsinställning i ett kommando, eller utföra en failover, eller lägga till nya noder till installationen. Detta integrerar mycket väl med din befintliga infrastrukturautomationskod skriven i Ansible, Chef eller Puppet.

Det här blogginlägget ger en genomgång av hur man hanterar ett PostgreSQL-strömmande replikeringskluster med ClusterControl CLI eller s9s.

Observera att de flesta av funktionerna som visas i det här blogginlägget kräver att du har ClusterControl installerad och kör med en giltig prenumeration, antingen kommersiell licens eller gratis testlicens (giltig upp till 30 dagar efter installationen av ClusterControl).

Klusterdistribution och import

Distribuera ett nytt kluster

Innan du distribuerar ett nytt kluster eller importerar ett befintligt PostgreSQL-kluster till ClusterControl, se till att lösenordslös SSH från ClusterControl-noden till alla databasnoder är konfigurerad i förväg. Om vi ​​skulle vilja distribuera en ny PostgreSQL-strömningsreplikering med tre noder, kör följande kommandon på ClusterControl-noden:

$ 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

På ClusterControl-noden, kontrollera om du kan följande kommando utan lösenord:

$ ssh 192.168.0.91 "ls /root"

Om du kan se kataloginnehållet är du i bra form. Använd sedan ClusterControl CLI med flaggan --create för att distribuera klustret:

$ 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

Vi specificerade den första noden, 192.168.0.91 som master och resten är slavar. Eftersom vi redan konfigurerat lösenordslös SSH via root-användare, angav vi OS-användaren som "root" tillsammans med motsvarande SSH-nyckelfil med --os-key-file-flaggan. --wait-flaggan betyder att jobbet väntar och rapporterar förloppet tills det är klart.

Du kan också övervaka distributionsförloppet från ClusterControl UI under Aktivitet> Jobb> Skapa PostgreSQL-kluster :

När distributionen är klar kan vi se sammanfattningen av det körande klustret genom att använda flaggan --stat:

$ s9s cluster --stat

Importera ett befintligt kluster

Om låt oss säga att du redan har ett PostgreSQL-strömmande replikeringskluster distribuerat manuellt, kan du importera det till ClusterControl med flaggan --register som visas i följande kommando:

$ 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 kommer sedan att ansluta till de angivna noderna, upptäcka topologin och registrera klustret i ClusterControl. Du kan verifiera med kommandot 's9s cluster --stat' som visas ovan.

Nod- och klusterhantering

Servicekontroll

För att utföra en rullande omstart av ett kluster, ange kluster-ID och använd --rolling-restart-flaggan:

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

Använd flaggan --stop för komponent "kluster" för att stoppa ett kluster. För att se jobbutdata istället för förloppsindikator kan vi använda --log flagga istället:

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

Det kommer att rapportera samma jobbmeddelanden som webbgränssnittet. I likhet med ovan, för att starta ett kluster, använd helt enkelt --start-flaggan (vi använder --wait-flaggan istället för att se framstegen istället för jobbloggarna):

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

För att starta om PostgreSQL-tjänsten på en databasnod använder vi "nod"-komponenten och --restart-flaggan:

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

För att stoppa och starta en PostgreSQL-nod, använd helt enkelt samma kommando med --stop eller --start flagga, som visas nedan:

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

Observera att dessa åtgärder inte kommer att starta om systemet.

Skalningsnod

För att ta bort en nod från ett kluster, använd flaggan --remove-node:

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

Att lägga till en ny nod fungerar på liknande sätt, men du måste se till att noden är tillgänglig via lösenordslös SSH i förväg. Konfigurera den först och lägg sedan till noden med flaggan --add-node:

$ 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'.

Från jobbloggarna kan vi se att eftersom klustret redan har en master igång (192.168.0.91), kommer den nya noden att distribueras som en slav till mastern. ClusterControl kommer sedan att utföra alla nödvändiga åtgärder och förbereda den nya noden som den givna rollen i enlighet därmed.

Byt till en ny Master

För att utföra bytet, välj en av slaverna för att bli den nya mastern med --promote-slave-flaggan:

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

Jobbmeddelandena visar att ClusterControl först kommer att upptäcka den aktuella topologin och stoppa alla noder i klustret. Sedan konfigurerar den den nya mastern och får de andra noderna att replikera från den. Den kommer också att försöka köra pg_rewind för att återsynkronisera PGDATA för den nedgraderade mastern med en ny basbackup. I slutet av jobbet rapporterar ClusterControl den aktuella topologin och befordrans tillstånd.

Vi kan sedan verifiera genom att lista ut alla noder för kluster ID 8:

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

Tillståndet "poM-" i kolumnen längst till vänster har följande betydelse:

  • p - PostgreSQL-nod
  • o - online
  • M - mästare

Databashantering

För att lista ut alla databaser som finns i klustret, använd --list-databasflaggan på komponentklustret:

$ 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

Observera att om klustret har många databaser kanske det här alternativet inte visar några av dem. Att sampla ett stort antal databaser skulle generera hög belastning och så har styrenheten en övre gräns inbyggd.

Om du vill skapa en ny databas för klustret gör du helt enkelt:

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

För att skapa en ny databasanvändare, tillsammans med en databas som är associerad med den (med samma databasnamn), använd --create-account med --with-database flag:

$ 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 kommer att utföra nödvändiga åtgärder för att skapa databasen och användarkontot med rätt behörighet och tillåta det på alla databasnoder.

Säkerhetskopieringshantering

ClusterControl stöder två säkerhetskopieringsmetoder för PostgreSQL:

  • pgdump - Alias ​​till pg_dumpall, ett verktyg för att skriva ut alla PostgreSQL-databaser i ett kluster till en skriptfil.
  • pg_basebackup – Ett verktyg för att skapa en fullständig säkerhetskopia på filsystemnivå av en PostgreSQL-databas.

Skapa en säkerhetskopia

För att skapa en ny säkerhetskopia med pg_dumpall, välj en databasnod och ange "pgdump" i flaggan --backup-method:

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

--on-controller-flaggan indikerar att vi vill att den skapade säkerhetskopian ska lagras i katalogen /storage/backups på ClusterControl-noden. Utelämna flaggan om du vill lagra den på själva databasnoden. Samma kommando kan användas för att skapa pg_basebackup backup. Bara att ersätta "pgdump" med "pg_basebackup" skulle räcka.

För att lista ut säkerhetskopian använder du helt enkelt flaggorna --list och --cluster-id:

$ 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

Schemalägga en säkerhetskopia

Att schemalägga en säkerhetskopia liknar kommandot vi använde för att skapa en säkerhetskopia, med ytterligare --recurrence-flagga:

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

Värdet på upprepning måste bifogas med citat och i crontab-format.

Återställer en säkerhetskopia

För att återställa en säkerhetskopia till ett kluster, använd flaggan --restore och peka ut backup-ID:t som du vill använda:

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

Observera att för pg_basebackups säkerhetskopiering kräver återställningsoperationen nedtid för databasen. Alla PostgreSQL-noder kommer att stoppas före återställningen och återställningen sker på den senast kända mastern. Denna master kommer att tas upp först (följt av alla slavar) efter att restaureringen är klar.

Verifiera en säkerhetskopia

För att återställa och verifiera säkerhetskopian, använd --verify-flaggan och ange destinationsservern med flaggan --test-server:

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

Testservern får inte vara en del av klustret och måste vara tillgänglig via lösenordslös SSH från ClusterControl-noden. ClusterControl kommer först att installera målservern med samma PostgreSQL-version, streama och återställa säkerhetskopian på den noden. Backupverifieringen letar efter den sista utgångskoden efter återställning. Om säkerhetskopian kan återställas kommer ClusterControl sedan att stoppa testservern och ta bort den från ClusterControl (men ClusterControl kommer inte att stänga av den). Du bör se följande när jobbet är klart:

Backup 9 was successfully verified.

Skapa kluster från säkerhetskopia

ClusterControl introducerade en ny funktion i v1.7.1, där man kan skapa ett nytt kluster baserat på en säkerhetskopia som tagits av ett befintligt kluster. Detta kan vara mycket användbart för att testa din databas på en annan plattform eller databasversion. I det här exemplet skulle vi vilja distribuera ett PostgreSQL 9.6-kluster med två noder baserat på backup-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

Observera att administratörslösenordet för det nya klustret måste vara identiskt med PostgreSQL-adminlösenordet som ingår i säkerhetskopian. I grund och botten utför ClusterControl distributionsjobbet baserat på följande ordning:

  1. Installera nödvändig programvara och beroenden på alla PostgreSQL-noder.
  2. Starta den första noden.
  3. Strömma och återställ säkerhetskopia på den första noden (med flagga för automatisk omstart).
  4. Konfigurera och lägg till resten av noderna.

Du kan sedan verifiera klusterlistan genom att använda följande kommando:

$ s9s cluster --stat

Konfigurationshantering

För att lista ut PostgreSQL-konfigurationen för en nod, använd flaggan --list-config:

$ 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 returnerar utdata från OPTION NAME och VALUE i enlighet därmed. Kolumnen GROUP är inte tillämplig i PostgreSQL så du bör se '-'-värdet.

För att ändra ett konfigurationsalternativ, använd flaggan --change-config och ange parametern och värdet med --opt-name respektive --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.

Du bör se ClusterControl returnera konfigurationsändringsstatusen och ge råd om uppföljningsproceduren för att säkerställa att konfigurationsändringen träder i kraft. Du kan sedan använda kommandot "s9s node --restart" för att starta om den specifika noden.

Sluta tankar

ClusterControl erbjuder stor flexibilitet när det gäller att hantera och övervaka ditt PostgreSQL-databaskluster. Du har valet av webbgränssnitt, vilket är ganska enkelt och okomplicerat plus kommandoradsgränssnitt, som ger dig möjlighet att uppnå full databasautomatisering via skript. Lycka till med ledningen!


  1. Hur skapar man postgres-förlängning inuti behållaren?

  2. android.database.CursorIndexOutOfBoundsException

  3. SQLite-databasläcka hittades

  4. Vad är Unique Constraint i SQL Server - SQL Server / TSQL Tutorial Del 95