sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo administrar sus bases de datos PostgreSQL desde la CLI de ClusterControl

¿Sabía que además de la interfaz de usuario web de ClusterControl, también puede usar una interfaz de línea de comandos para administrar sus instancias de PostgreSQL?

ClusterControl es compatible con la replicación de transmisión de PostgreSQL (tanto replicación asíncrona como síncrona), así como con la instancia independiente de PostgreSQL. Hemos hecho todo lo posible para que la interfaz de la línea de comandos esté cerca de la interfaz de usuario en términos de funcionalidad disponible.

¿Por qué querrías usar la CLI?

Le permite implementar una configuración de replicación completa en un solo comando, realizar una conmutación por error o agregar nuevos nodos a la configuración. Esto se integra muy bien con su código de automatización de infraestructura existente escrito en Ansible, Chef o Puppet.

Esta publicación de blog proporciona un tutorial sobre cómo administrar un clúster de replicación de transmisión de PostgreSQL mediante la CLI de ClusterControl o s9s.

Tenga en cuenta que la mayoría de las funcionalidades que se muestran en esta publicación de blog requieren que ClusterControl esté instalado y funcionando con una suscripción válida, ya sea una licencia comercial o una licencia de prueba gratuita (válida hasta 30 días después de la instalación de ClusterControl).

Implementación e importación de clústeres

Implementación de un nuevo clúster

Antes de implementar un nuevo clúster o importar un clúster de PostgreSQL existente en ClusterControl, asegúrese de que SSH sin contraseña desde el nodo de ClusterControl a todos los nodos de la base de datos esté configurado de antemano. Supongamos que querríamos implementar una nueva replicación de transmisión de PostgreSQL de tres nodos, ejecute los siguientes comandos en el nodo ClusterControl:

$ 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

En el nodo ClusterControl, verifique si puede ejecutar el siguiente comando sin contraseña:

$ ssh 192.168.0.91 "ls /root"

Si puede ver el contenido del directorio, está en buena forma. A continuación, use la CLI de ClusterControl con el indicador --create para implementar el clúster:

$ 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

Especificamos el primer nodo, 192.168.0.91 como maestro y el resto son esclavos. Dado que ya configuramos SSH sin contraseña a través del usuario raíz, especificamos el usuario del sistema operativo como "raíz" junto con el archivo de clave SSH correspondiente usando el indicador --os-key-file. El indicador --wait significa que el trabajo esperará e informará el progreso hasta que finalice.

También puede supervisar el progreso de la implementación desde la interfaz de usuario de ClusterControl en Actividad> Trabajos> Creación de un clúster de PostgreSQL :

Una vez que se completa la implementación, podemos ver el resumen del clúster en ejecución mediante el indicador --stat:

$ s9s cluster --stat

Importación de un clúster existente

Si supongamos que ya tiene un clúster de replicación de transmisión de PostgreSQL implementado manualmente, puede importarlo a ClusterControl usando el indicador --register como se muestra en el siguiente comando:

$ 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

Luego, ClusterControl se conectará a los nodos especificados, descubrirá la topología y registrará el clúster en ClusterControl. Puede verificar con el comando 's9s cluster --stat' como se muestra arriba.

Gestión de nodos y clústeres

Control de Servicios

Para realizar un reinicio continuo de un clúster, especifique el ID del clúster y use el indicador --rolling-restart:

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

Use el indicador --stop para el componente "clúster" para detener un clúster. Para ver el resultado del trabajo en lugar de la barra de progreso, podemos usar el indicador --log en su lugar:

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

Informará los mismos mensajes de trabajo que la interfaz de usuario web. Similar a lo anterior, para iniciar un clúster, simplemente use el indicador --start (usamos el indicador --wait en su lugar para ver el progreso en lugar de los registros del trabajo):

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

Para reiniciar el servicio PostgreSQL en un nodo de base de datos, usamos el componente "nodo" y el indicador --restart:

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

Para detener e iniciar un nodo de PostgreSQL, simplemente aplique el mismo comando con el indicador --stop o --start, como se muestra a continuación:

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

Tenga en cuenta que esas acciones no reiniciarán el sistema.

Nodo de escala

Para eliminar un nodo de un clúster, use el indicador --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.

Agregar un nuevo nodo funciona de manera similar, pero debe asegurarse de que se pueda acceder al nodo a través de SSH sin contraseña de antemano. Configúrelo primero y luego agregue el nodo usando el indicador --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'.

En los registros de trabajo, podemos ver que dado que el clúster ya tiene un maestro en ejecución (192.168.0.91), el nuevo nodo se implementará como esclavo del maestro. ClusterControl luego realizará todas las acciones necesarias y preparará el nuevo nodo como el rol asignado en consecuencia.

Cambio a un nuevo Maestro

Para realizar el cambio, elija uno de los esclavos para que se convierta en el nuevo maestro con el indicador --promote-slave:

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

Los mensajes de trabajo muestran que ClusterControl primero descubrirá la topología actual y detendrá todos los nodos en el clúster. Luego, configura el nuevo maestro y hace que los otros nodos se repliquen desde él. También intentará ejecutar pg_rewind para volver a sincronizar el PGDATA del maestro degradado con una nueva copia de seguridad base. Al final del trabajo, ClusterControl informa la topología actual y el estado de la promoción.

Luego podemos verificar enumerando todos los nodos para el ID de clúster 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.

El estado "poM-" en la columna más a la izquierda tiene el siguiente significado:

  • p:nodo de PostgreSQL
  • o - en línea
  • M - maestro

Gestión de bases de datos

Para enumerar todas las bases de datos que se encuentran en el clúster, use el indicador --list-database en el clúster de componentes:

$ 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

Tenga en cuenta que si el clúster tiene muchas bases de datos, es posible que esta opción no muestre algunas de ellas. El muestreo de una gran cantidad de bases de datos generaría una gran carga, por lo que el controlador tiene un límite superior integrado.

Si desea crear una nueva base de datos para el clúster, simplemente haga lo siguiente:

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

Para crear un nuevo usuario de base de datos, junto con una base de datos asociada a él (usando el mismo nombre de base de datos), use la marca --create-account with --with-database:

$ 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 realizará las acciones necesarias para crear la base de datos y la cuenta de usuario con los privilegios adecuados y permitirlo en todos los nodos de la base de datos.

Gestión de copias de seguridad

ClusterControl admite dos métodos de copia de seguridad para PostgreSQL:

  • pgdump:alias de pg_dumpall, una utilidad para escribir todas las bases de datos PostgreSQL de un clúster en un archivo de secuencia de comandos.
  • pg_basebackup:una utilidad para crear una copia de seguridad completa a nivel de sistema de archivos de una base de datos PostgreSQL.

Crear una copia de seguridad

Para crear una nueva copia de seguridad usando pg_dumpall, elija un nodo de base de datos y especifique "pgdump" en el indicador --backup-method:

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

El indicador --on-controller indica que nos gustaría que la copia de seguridad creada se almacene en el directorio /storage/backups en el nodo ClusterControl. Omita el indicador si desea almacenarlo en el propio nodo de la base de datos. El mismo comando se puede aplicar para crear una copia de seguridad de pg_basebackup. Simplemente reemplace "pgdump" con "pg_basebackup".

Para enumerar la copia de seguridad, simplemente use las banderas --list y --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

Programación de una copia de seguridad

Programar una copia de seguridad es similar al comando que usamos para crear una copia de seguridad, con el indicador --recurrence adicional:

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

El valor de recurrencia debe estar entre comillas y en formato crontab.

Restaurar una copia de seguridad

Para restaurar una copia de seguridad en un clúster, use el indicador --restore y señale la ID de la copia de seguridad que desea usar:

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

Tenga en cuenta que para la copia de seguridad de pg_basebackup, la operación de restauración requiere un tiempo de inactividad de la base de datos. Todos los nodos de PostgreSQL se detendrán antes de la restauración y la restauración se llevará a cabo en el último maestro conocido. Este maestro aparecerá primero (seguido de todos los esclavos) después de que se complete la restauración.

Verificación de una copia de seguridad

Para restaurar y verificar la copia de seguridad, use la bandera --verify y especifique el servidor de destino usando la bandera --test-server:

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

El servidor de prueba no debe ser parte del clúster y debe ser accesible a través de SSH sin contraseña desde el nodo ClusterControl. ClusterControl primero instalará el servidor de destino con la misma versión de PostgreSQL, transmitirá y restaurará la copia de seguridad en ese nodo. La verificación de respaldo busca el último código de salida después de la restauración. Si la copia de seguridad se puede restaurar, ClusterControl detendrá el servidor de prueba y lo eliminará de ClusterControl (pero ClusterControl no lo apagará). Debería ver lo siguiente una vez que se complete el trabajo:

Backup 9 was successfully verified.

Crear clúster desde la copia de seguridad

ClusterControl introdujo una nueva característica en v1.7.1, donde se puede crear un nuevo clúster basado en una copia de seguridad realizada por un clúster existente. Esto puede ser muy útil para probar su base de datos en una plataforma o versión de base de datos diferente. En este ejemplo, nos gustaría implementar un clúster PostgreSQL 9.6 de dos nodos basado en el ID de copia de seguridad 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

Tenga en cuenta que la contraseña del usuario administrador para el nuevo clúster debe ser idéntica a la contraseña del administrador de PostgreSQL que se incluye en la copia de seguridad. Básicamente, ClusterControl realiza el trabajo de implementación según el siguiente orden:

  1. Instale los softwares y dependencias necesarios en todos los nodos de PostgreSQL.
  2. Inicie el primer nodo.
  3. Transmita y restaure la copia de seguridad en el primer nodo (con indicador de reinicio automático).
  4. Configure y agregue el resto de los nodos.

A continuación, puede verificar la lista de clústeres con el siguiente comando:

$ s9s cluster --stat

Gestión de la configuración

Para enumerar la configuración de PostgreSQL de un nodo, use el indicador --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 devuelve la salida de NOMBRE DE OPCIÓN y VALOR en consecuencia. La columna GRUPO no es aplicable en PostgreSQL, por lo que debería ver el valor '-'.

Para cambiar una opción de configuración, use el indicador --change-config y especifique el parámetro y el valor usando --opt-name y --opt-value respectivamente:

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

Debería ver que ClusterControl devuelve el estado de modificación de la configuración y recomienda el procedimiento de seguimiento para asegurarse de que el cambio de configuración surta efecto. Luego puede usar el comando "s9s node --restart" para reiniciar el nodo en particular.

Reflexiones finales

ClusterControl ofrece una gran flexibilidad cuando se trata de administrar y monitorear su clúster de base de datos PostgreSQL. Tiene la opción de la interfaz de usuario web, que es bastante simple y directa, además de la interfaz de línea de comandos, que le permite lograr la automatización completa de la base de datos a través de secuencias de comandos. ¡Feliz gestión!