PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como gerenciar seus bancos de dados PostgreSQL da CLI do ClusterControl


Você sabia que, além da interface da web do ClusterControl, você também pode usar uma interface de linha de comando para gerenciar suas instâncias do PostgreSQL?

ClusterControl suporta replicação de streaming PostgreSQL (replicação assíncrona e síncrona), bem como instância PostgreSQL independente. Colocamos nosso melhor esforço para tornar a interface de linha de comando próxima à interface do usuário em termos de funcionalidade disponível.

Por que você deseja usar a CLI?

Ele permite que você implante uma configuração de replicação inteira em um comando, execute um failover ou adicione novos nós à configuração. Isso se integra muito bem ao seu código de automação de infraestrutura existente escrito em Ansible, Chef ou Puppet.

Esta postagem de blog fornece um passo a passo sobre como gerenciar um cluster de replicação de streaming PostgreSQL usando ClusterControl CLI ou s9s.

Observe que a maioria das funcionalidades mostradas nesta postagem do blog exige que você tenha o ClusterControl instalado e funcionando com uma assinatura válida, seja licença comercial ou licença de avaliação gratuita (válida até 30 dias após a instalação do ClusterControl).

Implantação e importação de cluster

Implantando um novo cluster


Antes de implantar um novo cluster ou importar um cluster PostgreSQL existente para o ClusterControl, certifique-se de que o SSH sem senha do nó ClusterControl para todos os nós do banco de dados esteja configurado antecipadamente. Supondo que gostaríamos de implantar uma nova replicação de streaming PostgreSQL de três nós, execute os seguintes comandos no nó 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

No nó ClusterControl, verifique se você consegue o seguinte comando sem senha:
$ ssh 192.168.0.91 "ls /root"

Se você puder ver o conteúdo do diretório, você está em boa forma. Em seguida, use a CLI do ClusterControl com o sinalizador --create para implantar o cluster:
$ 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 o primeiro nó, 192.168.0.91 como mestre e os demais são escravos. Como já configuramos o SSH sem senha por meio do usuário root, especificamos o usuário do sistema operacional como "root" junto com o arquivo de chave SSH correspondente usando o sinalizador --os-key-file. O sinalizador --wait significa que o trabalho aguardará e relatará o progresso até que seja concluído.

Você também pode monitorar o progresso da implantação da interface do usuário do ClusterControl em Atividade> Trabalhos> Criação de cluster PostgreSQL :

Depois que a implantação for concluída, podemos ver o resumo do cluster em execução usando o sinalizador --stat:
$ s9s cluster --stat

Importando um cluster existente


Se digamos que você já tenha um cluster de replicação de streaming PostgreSQL implantado manualmente, você pode importá-lo para o ClusterControl usando o sinalizador --register conforme mostrado no comando a seguir:
$ 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

O ClusterControl se conectará aos nós especificados, descobrirá a topologia e registrará o cluster no ClusterControl. Você pode verificar com o comando 's9s cluster --stat' como mostrado acima.

Gerenciamento de nós e clusters

Controle de Serviço


Para executar uma reinicialização contínua de um cluster, especifique o ID do cluster e use a sinalização --rolling-restart:
$ s9s cluster --rolling-restart --cluster-id=8 --wait
Rolling Restart
- Job 264 RUNNING    [██▊       ]  27% Waiting for 192.168.0.91

Use o sinalizador --stop para o componente "cluster" para interromper um cluster. Para ver a saída do trabalho em vez da barra de progresso, podemos usar o sinalizador --log:
$ 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.

Ele relatará as mesmas mensagens de trabalho que a interface do usuário da web. Semelhante ao acima, para iniciar um cluster, basta usar o sinalizador --start (usamos o sinalizador --wait para ver o progresso em vez dos logs de trabalho):
$ s9s cluster --start --cluster-id=8 --wait
Starting Cluster
\ Job 272 RUNNING    [     █    ] ---% Start Cluster

Para reiniciar o serviço PostgreSQL em um nó de banco de dados, usamos o componente "node" e a flag --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 parar e iniciar um nó PostgreSQL, basta aplicar o mesmo comando com a flag --stop ou --start, conforme mostrado abaixo:
$ s9s node --stop --cluster-id=8 --nodes=192.168.0.92
$ s9s node --start --cluster-id=8 --nodes=192.168.0.92

Observe que essas ações não reinicializarão o sistema.

Nó de dimensionamento


Para remover um nó de um cluster, use o sinalizador --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.

Adicionar um novo nó funciona de maneira semelhante, mas você deve garantir que o nó seja acessível por meio de SSH sem senha com antecedência. Configure-o primeiro e, em seguida, adicione o nó usando o sinalizador --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'.

A partir dos logs de tarefas, podemos ver que, como o cluster já possui um mestre em execução (192.168.0.91), o novo nó será implantado como escravo do mestre. O ClusterControl executará todas as ações necessárias e preparará o novo nó conforme a função especificada.

Mudança para um novo mestre


Para realizar a alternância, escolha um dos escravos para se tornar o novo mestre com o sinalizador --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.

As mensagens de trabalho mostram que o ClusterControl primeiro descobrirá a topologia atual e interromperá todos os nós no cluster. Em seguida, ele configura o novo mestre e obtém os outros nós para replicar a partir dele. Ele também tentará executar pg_rewind para ressincronizar o PGDATA do mestre rebaixado com um novo backup de base. No final do trabalho, o ClusterControl relata a topologia atual e o estado da promoção.

Podemos então verificar listando todos os nós para o ID de cluster 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.

O estado "poM-" na coluna mais à esquerda tem o seguinte significado:
  • p - Nó PostgreSQL
  • o - on-line
  • M - mestre

Gerenciamento de banco de dados


Para listar todos os bancos de dados encontrados no cluster, use o sinalizador --list-database no cluster 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

Observe que, se o cluster tiver muitos bancos de dados, essa opção pode não mostrar alguns deles. A amostragem de um grande número de bancos de dados geraria alta carga e, portanto, o controlador tem um limite superior embutido nele.

Se você deseja criar um novo banco de dados para o cluster, basta fazer:
$ s9s cluster \
--create-database \
--cluster-id=8 \
--db-name=my_shopping_db

Para criar um novo usuário de banco de dados, junto com um banco de dados associado a ele (usando o mesmo nome de banco de dados), use o sinalizador --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.

O ClusterControl executará as ações necessárias para criar o banco de dados e a conta de usuário com os privilégios adequados e permitir isso em todos os nós do banco de dados.

Gerenciamento de backup


O ClusterControl suporta dois métodos de backup para PostgreSQL:
  • pgdump - Alias ​​para pg_dumpall, um utilitário para escrever todos os bancos de dados PostgreSQL de um cluster em um arquivo de script.
  • pg_basebackup - Um utilitário para criar um backup completo em nível de sistema de arquivos de um banco de dados PostgreSQL.

Criando um backup


Para criar um novo backup usando pg_dumpall, escolha um nó de banco de dados e especifique "pgdump" no sinalizador --backup-method:
$ s9s backup \
--create \
--backup-method=pgdump \
--cluster-id=8 \
--nodes=192.168.0.92 \
--backup-directory=/storage/backups \
    --on-controller

O sinalizador --on-controller indica que gostaríamos que o backup criado fosse armazenado no diretório /storage/backups no nó ClusterControl. Omita o sinalizador se desejar armazená-lo no próprio nó do banco de dados. O mesmo comando pode ser aplicado para criar o backup pg_basebackup. Basta substituir "pgdump" por "pg_basebackup".

Para listar o backup, basta usar os sinalizadores --list e --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

Agendando um backup


Agendar um backup é semelhante ao comando que usamos para criar um backup, com o sinalizador --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 * * *'

O valor da recorrência deve estar entre aspas e no formato crontab.

Restaurando um backup


Para restaurar um backup em um cluster, use o sinalizador --restore e indique o ID de backup que você deseja 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.

Observe que para o backup do pg_basebackup, a operação de restauração requer tempo de inatividade do banco de dados. Todos os nós do PostgreSQL serão interrompidos antes da restauração e a restauração ocorrerá no último mestre conhecido. Este mestre será exibido primeiro (seguido por todos os escravos) após a conclusão da restauração.

Verificando um backup


Para restaurar e verificar o backup, use o sinalizador --verify e especifique o servidor de destino usando o sinalizador --test-server:
$ s9s backup \
--verify \
--cluster-id=8 \
--backup-id=9 \
--test-server=192.168.0.99 \
--log

O servidor de teste não deve fazer parte do cluster e deve ser acessível via SSH sem senha do nó ClusterControl. O ClusterControl primeiro instalará o servidor de destino com a mesma versão do PostgreSQL, transmitirá e restaurará o backup nesse nó. A verificação de backup procura o último código de saída após a restauração. Se o backup for restaurável, o ClusterControl interromperá o servidor de teste e o removerá do ClusterControl (mas o ClusterControl não o encerrará). Você deverá ver o seguinte quando o trabalho for concluído:
Backup 9 was successfully verified.

Criar cluster a partir do backup


O ClusterControl introduziu um novo recurso na v1.7.1, onde é possível criar um novo cluster com base em um backup feito por um cluster existente. Isso pode ser muito útil para testar seu banco de dados em uma plataforma ou versão de banco de dados diferente. Neste exemplo, gostaríamos de implantar um cluster PostgreSQL 9.6 de dois nós com base no ID de backup 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

Observe que a senha do usuário admin para o novo cluster deve ser idêntica à senha admin do PostgreSQL incluída no backup. Basicamente, o ClusterControl executa o trabalho de implantação com base na seguinte ordem:
  1. Instale os softwares e dependências necessários em todos os nós do PostgreSQL.
  2. Inicie o primeiro nó.
  3. Transmita e restaure o backup no primeiro nó (com sinalizador de reinicialização automática).
  4. Configure e adicione o restante dos nós.

Você pode então verificar a lista de clusters usando o seguinte comando:
$ s9s cluster --stat

Gerenciamento de configuração


Para listar a configuração do PostgreSQL de um nó, use o sinalizador --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 retorna a saída de OPTION NAME e VALUE de acordo. A coluna GROUP não é aplicável no PostgreSQL, portanto, você deve ver o valor '-'.

Para alterar uma opção de configuração, use o sinalizador --change-config e especifique o parâmetro e o valor usando --opt-name e --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.

Você deve ver o ClusterControl retornar o status de modificação da configuração e aconselhar o procedimento de acompanhamento para garantir que a alteração da configuração tenha efeito. Você pode então usar o comando "s9s node --restart" para reiniciar o nó específico.

Considerações finais


O ClusterControl oferece grande flexibilidade quando se trata de gerenciar e monitorar seu cluster de banco de dados PostgreSQL. Você tem a opção de interface de usuário da web, que é bastante simples e direta, além de interface de linha de comando, que permite que você obtenha automação completa do banco de dados por meio de scripts. Boa gestão!