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

Sådan administrerer du dine PostgreSQL-databaser fra ClusterControl CLI

Vidste du, at bortset fra ClusterControl-webbrugergrænsefladen, kan du også bruge en kommandolinjegrænseflade til at administrere dine PostgreSQL-forekomster?

ClusterControl understøtter PostgreSQL-streamingreplikering (både asynkron og synkron replikering) såvel som selvstændig PostgreSQL-instans. Vi har gjort vores bedste for at få kommandolinjegrænsefladen til at være tæt på brugergrænsefladen med hensyn til tilgængelig funktionalitet.

Hvorfor vil du bruge CLI?

Det giver dig mulighed for at implementere en hel replikeringsopsætning i én kommando, eller udføre en failover eller tilføje nye noder til opsætningen. Dette integrerer meget godt med din eksisterende infrastrukturautomatiseringskode skrevet i Ansible, Chef eller Puppet.

Dette blogindlæg giver en gennemgang af, hvordan man administrerer en PostgreSQL-streamingreplikeringsklynge ved hjælp af ClusterControl CLI eller s9s.

Bemærk, at de fleste af de funktioner, der vises i dette blogindlæg, kræver, at du har ClusterControl installeret og kører med et gyldigt abonnement, enten kommerciel licens eller gratis prøvelicens (gyldig op til 30 dage efter ClusterControl-installation).

Klyngeimplementering og -import

Implementering af en ny klynge

Før du implementerer en ny klynge eller importerer en eksisterende PostgreSQL-klynge til ClusterControl, skal du sikre dig, at adgangskodefri SSH fra ClusterControl-knuden til alle databasenoder er konfigureret på forhånd. Antaget, at vi ønsker at implementere en ny postgreSQL-streamingreplikering med tre knudepunkter, skal du køre følgende kommandoer på ClusterControl-knudepunktet:

$ 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 skal du kontrollere, om du kan følgende kommando uden adgangskode:

$ ssh 192.168.0.91 "ls /root"

Hvis du kan se mappeindholdet, er du i god form. Brug derefter ClusterControl CLI med --create flag for at implementere klyngen:

$ 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 specificerede den første node, 192.168.0.91 som master, og resten er slaver. Da vi allerede har konfigureret adgangskodefri SSH via root-bruger, specificerede vi OS-brugeren som "root" sammen med den tilsvarende SSH-nøglefil ved hjælp af --os-key-file flag. --wait-flaget betyder, at jobbet vil vente og rapportere fremskridtet, indtil det er færdigt.

Du kan også overvåge implementeringsprocessen fra ClusterControl UI under Aktivitet> Jobs> Oprettelse af PostgreSQL-klynge :

Når implementeringen er fuldført, kan vi se oversigten over den kørende klynge ved at bruge --stat-flaget:

$ s9s cluster --stat

Import af en eksisterende klynge

Hvis lad os sige, at du allerede har en PostgreSQL-streaming-replikeringsklynge installeret manuelt, kan du importere den til ClusterControl ved at bruge flaget --register som vist i følgende 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 vil derefter oprette forbindelse til de angivne noder, opdage topologien og registrere klyngen i ClusterControl. Du kan bekræfte med kommandoen 's9s cluster --stat' som vist ovenfor.

Knude- og klyngestyring

Servicekontrol

For at udføre en rullende genstart af en klynge skal du angive klynge-id'et og bruge --rolling-restart flag:

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

Brug --stop-flaget for komponent "cluster" for at stoppe en klynge. For at se joboutput i stedet for statuslinje kan vi bruge --log flag i stedet:

$ 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 vil rapportere de samme jobmeddelelser som web-brugergrænsefladen. I lighed med ovenstående, for at starte en klynge, skal du blot bruge --start flaget (vi bruger --wait flag i stedet for at se fremskridtene i stedet for joblogfilerne):

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

For at genstarte PostgreSQL-tjenesten på en databasenode bruger vi "node"-komponenten og --restart flag:

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

For at stoppe og starte en PostgreSQL-node skal du blot anvende den samme kommando med --stop eller --start flag, som vist nedenfor:

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

Vær opmærksom på, at disse handlinger ikke vil genstarte systemet.

Skaleringsknude

For at fjerne en node fra en klynge skal du bruge flaget --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.

Tilføjelse af en ny node fungerer på samme måde, men du skal sikre dig, at noden er tilgængelig via adgangskodefri SSH på forhånd. Konfigurer det først og tilføj derefter noden ved hjælp af --add-node flaget:

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

Fra jobloggene kan vi se, at da klyngen allerede har en master kørende (192.168.0.91), vil den nye node blive implementeret som en slave til masteren. ClusterControl vil derefter udføre alle nødvendige handlinger og forberede den nye node som den givne rolle i overensstemmelse hermed.

Skift til en ny Master

For at udføre skiftet skal du vælge en af ​​slaverne for at blive den nye master med --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.

Jobmeddelelserne viser, at ClusterControl først vil opdage den aktuelle topologi og stoppe alle noder i klyngen. Derefter konfigurerer den den nye master og får de andre noder til at replikere fra den. Den vil også forsøge at køre pg_rewind for at gensynkronisere PGDATA for den nedgraderede master med en ny basis backup. Ved afslutningen af ​​jobbet rapporterer ClusterControl den aktuelle topologi og kampagnens tilstand.

Vi kan derefter verificere ved at liste alle noder for klynge 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.

Tilstanden "poM-" i kolonnen længst til venstre har følgende betydning:

  • p - PostgreSQL-node
  • o - online
  • M - mester

Databasestyring

For at få en liste over alle databaser, der findes på klyngen, skal du bruge --list-database flaget på komponentklyngen:

$ 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

Bemærk, at hvis klyngen har mange databaser, viser denne mulighed muligvis ikke nogle af dem. Sampling af et stort antal databaser ville generere høj belastning, og controlleren har derfor en øvre grænse indbygget.

Hvis du vil oprette en ny database til klyngen, skal du blot gøre:

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

For at oprette en ny databasebruger sammen med en database tilknyttet den (ved at bruge det samme databasenavn), skal du bruge --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 udfører de nødvendige handlinger for at oprette databasen og brugerkontoen med de rette privilegier og tillade det på alle databasenoder.

Sikkerhedskopiering

ClusterControl understøtter to backupmetoder til PostgreSQL:

  • pgdump - Alias ​​til pg_dumpall, et værktøj til at udskrive alle PostgreSQL-databaser i en klynge til én scriptfil.
  • pg_basebackup - Et værktøj til at oprette en komplet sikkerhedskopi på filsystemniveau af en PostgreSQL-database.

Oprettelse af en sikkerhedskopi

For at oprette en ny sikkerhedskopi ved hjælp af pg_dumpall skal du vælge en databaseknude og angive "pgdump" i flaget --backup-method:

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

--on-controller-flaget angiver, at vi ønsker, at den oprettede sikkerhedskopi skal gemmes under mappen /storage/backups på ClusterControl-noden. Udelad flaget, hvis du vil gemme det på selve databasenoden. Den samme kommando kan anvendes til at oprette pg_basebackup backup. Bare erstatte "pgdump" med "pg_basebackup" ville gøre.

For at få en liste over sikkerhedskopien skal du blot bruge flagene --list og --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

Planlægning af en sikkerhedskopi

Planlægning af en sikkerhedskopi svarer til den kommando, vi brugte til at oprette en sikkerhedskopi, med yderligere --recurrence flag:

$ 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ærdien af ​​gentagelse skal være vedlagt citat og i crontab-format.

Gendannelse af en sikkerhedskopi

For at gendanne en sikkerhedskopi til en klynge skal du bruge flaget --restore og pege på det backup-id, du vil bruge:

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

Bemærk, at for pg_basebackups backup kræver gendannelsesoperationen databasen nedetid. Alle PostgreSQL-noder vil blive stoppet før gendannelsen, og gendannelsen finder sted på den sidst kendte master. Denne master vil blive opdraget først (efterfulgt af alle slaver), efter at restaureringen er fuldført.

Bekræftelse af en sikkerhedskopi

For at gendanne og bekræfte sikkerhedskopien, brug --verify flag og angiv destinationsserveren ved hjælp af --test-server flag:

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

Testserveren må ikke være en del af klyngen og skal være tilgængelig via adgangskodefri SSH fra ClusterControl node. ClusterControl vil først installere målserveren med den samme PostgreSQL-version, streame og gendanne sikkerhedskopien på den node. Sikkerhedskopieringsbekræftelsen leder efter den sidste udgangskode efter gendannelse. Hvis sikkerhedskopien kan gendannes, vil ClusterControl derefter stoppe testserveren og fjerne den fra ClusterControl (men ClusterControl lukker den ikke ned). Du bør se følgende, når jobbet er fuldført:

Backup 9 was successfully verified.

Opret klynge fra sikkerhedskopi

ClusterControl introducerede en ny funktion i v1.7.1, hvor man kan oprette en ny klynge baseret på en backup taget af en eksisterende klynge. Dette kan være meget nyttigt for at teste din database på en anden platform eller databaseversion. I dette eksempel vil vi gerne implementere en to-node PostgreSQL 9.6-klynge baseret 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

Bemærk, at admin-brugeradgangskoden til den nye klynge skal være identisk med PostgreSQL-adminadgangskoden som inkluderet i sikkerhedskopien. Grundlæggende udfører ClusterControl implementeringsjobbet baseret på følgende rækkefølge:

  1. Installer nødvendig software og afhængigheder på alle PostgreSQL-noder.
  2. Start den første node.
  3. Stream og gendan backup på den første node (med auto-genstart flag).
  4. Konfigurer og tilføj resten af ​​noderne.

Du kan derefter bekræfte klyngelisten ved at bruge følgende kommando:

$ s9s cluster --stat

Konfigurationsstyring

For at få vist PostgreSQL-konfigurationen af ​​en node, skal du bruge flaget --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 returnerer outputtet af OPTION NAME og VALUE tilsvarende. GRUPPE-kolonnen er ikke anvendelig i PostgreSQL, så du skulle se '-'-værdien.

For at ændre en konfigurationsindstilling, brug --change-config flag og specificer parameteren og værdien ved hjælp af henholdsvis --opt-name og --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 returnere konfigurationsændringsstatus og rådgive opfølgningsproceduren for at sikre, at konfigurationsændringen træder i kraft. Du kan derefter bruge kommandoen "s9s node --restart" til at genstarte den bestemte node.

Sidste tanker

ClusterControl tilbyder stor fleksibilitet, når det kommer til styring og overvågning af din PostgreSQL-databaseklynge. Du har valget af web-UI, som er ret enkel og ligetil plus kommandolinjegrænseflade, som giver dig mulighed for at opnå fuld databaseautomatisering via scripting. God ledelse!


  1. Upload CSV-fil til SQL-server

  2. brug kommandoen database_name i PostgreSQL

  3. Hvordan finder man den medarbejder med den næsthøjeste løn?

  4. Dupliker rækker i en primær nøgletabel.