Gerenciar backups pode ser uma tarefa complexa e arriscada de ser feita manualmente. Você deve saber que o backup está funcionando de acordo com sua política de backup, pois você não quer estar na situação em que precisa do backup e não está funcionando ou não existe. Isso será um grande problema com certeza. Portanto, o melhor aqui é usar um aplicativo de gerenciamento de backup testado em batalha, para evitar qualquer problema em caso de falha.
PGHoard é um daemon de backup e sistema de restauração do PostgreSQL que armazena dados de backup em armazenamentos de objetos na nuvem. Ele suporta o PostgreSQL 9.3 ou posterior, até o PostgreSQL 11, a última versão suportada no momento. A versão atual do PGHoard é 2.1.0, lançada em maio de 2019 (há 1 ano).
ClusterControl é um software de gerenciamento e automação sem agente para clusters de banco de dados. Ele ajuda a implantar, monitorar, gerenciar e dimensionar seu servidor/cluster de banco de dados diretamente da interface do usuário do ClusterControl ou usando a CLI do ClusterControl. Ele inclui recursos de gerenciamento de backup e suporta as versões 9.6, 10, 11 e 12 do PostgreSQL. A versão atual do ClusterControl é 1.7.6, lançada no mês passado, em abril de 2020.
Neste blog, compararemos o PGHoard com o recurso ClusterControl Backup Management e veremos como instalar e usar os dois sistemas. Para isso, usaremos um servidor Ubuntu 18.04 e PostgreSQL11 (por ser a última versão suportada para uso do PGHoard). Vamos instalar o PGHoard no mesmo servidor de banco de dados e importá-lo para o ClusterControl.
Comparação de recursos de gerenciamento de backup
PGHoard
Alguns dos recursos mais importantes do PGHoard são:
- Backups de base periódicos automáticos
- Backups automáticos de log de transações
- Suporte independente para Hot Backup
- Suporte ao armazenamento de objetos em nuvem (AWS S3, Google Cloud, OpenStack Swift, Azure, Ceph)
- Restauração de backup diretamente do armazenamento de objetos, compactado e criptografado
- Recuperação pontual (PITR)
- Inicie um novo modo de espera a partir de backups de armazenamento de objetos, configurado automaticamente como um modo de espera a quente de replicação
- Compactação e criptografia paralelas
Uma das maneiras de usá-lo é ter uma máquina de backup separada, para que o PGHoard possa se conectar com pg_receivexlog para receber arquivos WAL do banco de dados. Outro modo é usar pghoard_postgres_command como um archive_command PostgreSQL. Em ambos os casos, o PGHoard cria backups base periódicos usando pg_basebackup.
Controle de Cluster
Vamos ver também alguns dos recursos mais importantes deste sistema:
- IU amigável
- Backup e restauração (no mesmo nó ou em um separado)
- Agendar backups
- Criar um cluster do Backup
- Verificação automática de backup
- Compressão
- Criptografia
- Upload automático na nuvem
- Recuperação pontual (PITR)
- Diferentes métodos de backup (lógico, físico, completo, incremental etc.)
- Relatórios operacionais de backup
Como este não é apenas um sistema de gerenciamento de backup, também mencionaremos diferentes recursos importantes, não apenas os relacionados ao backup:
- Implantar/importar bancos de dados:autônomo, cluster/replicação, balanceadores de carga
- Escalonamento:adicionar/remover nós, ler réplicas, clonagem de cluster, replicação de cluster para cluster
- Monitoramento:painéis personalizados, detecção de falhas, monitoramento de consultas, consultores de desempenho, alarmes e notificações, desenvolvimento de consultores personalizados
- Recuperação automática:recuperação de nós e clusters, failover, ambientes de alta disponibilidade
- Gerenciamento:gerenciamento de configuração, atualizações de patches de banco de dados, gerenciamento de usuários de banco de dados, integração na nuvem, relatórios de operações, gerenciamento de ProxySQL
- Segurança:gerenciamento de chaves, controle de acesso baseado em função, autenticação usando LDAP/Active Directory, criptografia SSL
A topologia recomendada é ter um nó separado para executar o ClusterControl, para garantir que, em caso de falha, você possa aproveitar os recursos de recuperação automática e failover do ClusterControl (entre outros recursos úteis) .
Requisitos do sistema
PGHoard
De acordo com a documentação, o PGHoard pode fazer backup e restaurar o PostgreSQL versões 9.3 e superiores. O daemon é implementado em Python e funciona com CPython versão 3.5 ou mais recente. Os seguintes módulos Python podem ser necessários dependendo dos requisitos:
- psycopg2 para pesquisar metadados do log de transações
- solicitações para a arquitetura cliente-servidor interna
- azure para armazenamento de objetos do Microsoft Azure
- botocore para armazenamento de objetos AWS S3 (ou Ceph-S3)
- google-api-client para armazenamento de objetos do Google Cloud
- criptografia para criptografia e descriptografia de backup (requer versão 0.8 ou mais recente)
- snappy para compactação e descompactação do Snappy
- zstandard para compactação e descompactação Zstandard (zstd)
- systemd para integração com o systemd
- swiftclient para armazenamento de objetos OpenStack Swift
- paramiko para armazenamento de objetos sftp
Não há menção ao sistema operacional suportado, mas diz que foi testado em sistemas Linux x86-64 modernos, mas deve funcionar em outras plataformas que forneçam os módulos necessários.
Controle de Cluster
O seguinte software é requerido pelo servidor ClusterControl:
- Servidor/cliente MySQL
- Servidor web Apache (ou nginx)
- mod_rewrite
- mod_ssl
- permitir substituição de .htaccess
- PHP (5.4 ou posterior)
- RHEL:php, php-mysql, php-gd, php-ldap, php-curl
- Debian:php5-common, php5-mysql, php5-gd, php5-ldap, php5-curl, php5-json
- Linux Kernel Security (SElinux ou AppArmor) - deve ser desativado ou definido para o modo permissivo
- Servidor/cliente OpenSSH
- BASH (recomendado:versão 4 ou posterior)
- Servidor NTP - O horário de todos os servidores deve ser sincronizado em um fuso horário
- socat ou netcat - para backups de streaming
E suporta diferentes sistemas operacionais:
- Red Hat Enterprise Linux 6.x/7.x/8.x
- CentOS 6.x/7.x/8.x
- Ubuntu 12.04/14.04/16.04/18.04 LTS
- Debian 7.x/8.x/9.x/10.x
Se o ClusterControl for instalado via script de instalação (install-cc) ou gerenciador de pacotes (yum/apt), todas as dependências serão satisfeitas automaticamente.
Para PostgreSQL, ele suporta versões 9.6/10.x/11.x/12.x. Você pode encontrar uma lista completa dos bancos de dados suportados na documentação.
Requer apenas acesso SSH sem senha aos nós do banco de dados (usando chaves privadas e públicas) e um usuário privilegiado do sistema operacional (pode ser root ou sudo).
O processo de instalação
Processo de instalação do PGHoard
Vamos supor que você tenha seu banco de dados PostgreSQL funcionando, então vamos instalar os pacotes restantes. PGHoard é um pacote Python, então depois de instalar os pacotes necessários, você pode instalá-lo usando o comando pip:
$ apt install postgresql-server-dev-11 python3 python3-pip python3-snappy
$ pip3 install pghoard
Como parte deste processo de instalação, você precisa preparar a instância do PostgreSQL para trabalhar com esta ferramenta. Para isso, você precisará editar o postgresql.conf para permitir o arquivo WAL e aumentar o max_wal_senders:
wal_level = logical
max_wal_senders = 4
archive_mode = on
archive_command = pghoard_postgres_command --mode archive --site default --xlog %f
Esta alteração exigirá uma reinicialização do banco de dados:
$ service postgresql restart
Agora, vamos criar um usuário de banco de dados para PGHoard:
$ psql
CREATE USER pghoard PASSWORD 'Password' REPLICATION;
E adicione a seguinte linha no arquivo pg_hba.conf:
host replication pghoard 127.0.0.1/32/32 md5
Recarregue o serviço de banco de dados:
$ service postgresql reload
Para que funcione, você precisará criar um arquivo de configuração JSON para PGHoard. Veremos isso na próxima seção "Uso".
Processo de instalação do ClusterControl
Existem diferentes métodos de instalação, conforme mencionado na documentação. No caso de instalação manual, os pacotes necessários são especificados na mesma documentação, e há um guia passo a passo para todo o processo.
Vamos ver um exemplo usando o script de instalação automática.
$ wget http://www.severalnines.com/downloads/cmon/install-cc
$ chmod +x install-cc
$ sudo ./install-cc # omit sudo if you run as root
O script de instalação tentará automatizar as seguintes tarefas:
- Instale e configure um servidor MySQL local (usado pelo ClusterControl para armazenar dados de monitoramento)
- Instale e configure o pacote do controlador ClusterControl por meio do gerenciador de pacotes
- Instale as dependências do ClusterControl por meio do gerenciador de pacotes
- Configurar Apache e SSL
- Configurar o URL e o token da API ClusterControl
- Configure o ClusterControl Controller com opções de configuração mínimas
- Ative o serviço CMON na inicialização e inicie-o
Executando o script mencionado, você receberá uma pergunta sobre o envio de dados de diagnóstico:
$ sudo ./install-cc
!!
Only RHEL/Centos 6.x|7.x|8.x, Debian 7.x|8.x|9.x|10.x, Ubuntu 14.04.x|16.04.x|18.04.x LTS versions are supported
Minimum system requirements: 2GB+ RAM, 2+ CPU cores
Server Memory: 1024M total, 922M free
MySQL innodb_buffer_pool_size set to 512M
Severalnines would like your help improving our installation process.
Information such as OS, memory and install success helps us improve how we onboard our users.
None of the collected information identifies you personally.
!!
=> Would you like to help us by sending diagnostics data for the installation? (Y/n):
Então, ele começará a instalar os pacotes necessários. A próxima pergunta é sobre o hostname que será usado:
=> The Controller hostname will be set to 192.168.100.116. Do you want to change it? (y/N):
Quando o banco de dados local estiver instalado, o instalador o protegerá criando uma senha de root que você deve inserir:
=> Starting database. This may take a couple of minutes. Do NOT press any key.
Redirecting to /bin/systemctl start mariadb.service
=> Securing the MySQL Server ...
=> !! In order to complete the installation you need to set a MySQL root password !!
=> Supported special password characters: [email protected]#$%^&*()_+{}<>?
=> Press any key to proceed ...
E uma senha de usuário CMON, que será usada pelo ClusterControl:
=> Set a password for ClusterControl's MySQL user (cmon) [cmon]
=> Supported special characters: [email protected]#$%^&*()_+{}<>?
=> Enter a CMON user password:
É isso. Dessa forma, você terá tudo no lugar sem instalar ou configurar nada manualmente.
=> ClusterControl installation completed!
Open your web browser to http://192.168.100.116/clustercontrol and enter an email address and new password for the default Admin User.
Determining network interfaces. This may take a couple of minutes. Do NOT press any key.
Public/external IP => http://10.10.10.10/clustercontrol
Installation successful. If you want to uninstall ClusterControl then run install-cc --uninstall.
A primeira vez que você acessar a interface do usuário, precisará se registrar para o período de teste gratuito de 30 dias.
Após o término da avaliação gratuita de 30 dias, sua instalação será automaticamente convertida em a edição da comunidade, a menos que você tenha uma licença comercial.
Uso de gerenciamento de backups
Uso de PGHoards
Após esta ferramenta ser instalada, você precisa criar um arquivo JSON (pghoard.json) com a configuração PGHoard. Isto é um exemplo:
{
"backup_location": "/var/lib/pghoard",
"backup_sites": {
"default": {
"nodes": [
{
"host": "127.0.0.1",
"password": "Password",
"port": 5432,
"user": "pghoard"
}
],
"object_storage": {
"storage_type": "local",
"directory": "./backups"
},
"pg_data_directory": "/var/lib/postgresql/11/main/"
}
}
}
Neste exemplo, vamos fazer um backup e armazená-lo localmente, mas você também pode configurar uma conta na nuvem e armazená-la lá:
"object_storage": {
"aws_access_key_id": "AKIAQTUN************",
"aws_secret_access_key": "La8YZBvN********************************",
"bucket_name": "pghoard",
"region": "us-east-1",
"storage_type": "s3"
},
Você pode encontrar mais detalhes sobre a configuração na documentação.
Agora, vamos executar o backup usando este arquivo JSON:
$ pghoard --short-log --config pghoard.json
INFO pghoard initialized, own_hostname: 'pg1', cwd: '/root'
INFO Creating a new basebackup for 'default' because there are currently none
INFO Started: ['/usr/lib/postgresql/11/bin/pg_receivewal', '--status-interval', '1', '--verbose', '--directory', '/var/lib/pghoard/default/xlog_incoming', '--dbname', "dbname='replication' host='127.0.0.1' port='5432' replication='true' user='pghoard'"], running as PID: 19057
INFO Started: ['/usr/lib/postgresql/11/bin/pg_basebackup', '--format', 'tar', '--label', 'pghoard_base_backup', '--verbose', '--pgdata', '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0', '--wal-method=none', '--progress', '--dbname', "dbname='replication' host='127.0.0.1' port='5432' replication='true' user='pghoard'"], running as PID: 19059, basebackup_location: '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0/base.tar'
INFO Compressed 83 byte open file '/var/lib/pghoard/default/xlog_incoming/00000003.history' to 76 bytes (92%), took: 0.001s
INFO 'UPLOAD' transfer of key: 'default/timeline/00000003.history', size: 76, origin: 'pg1' took 0.001s
INFO Compressed 16777216 byte open file '/var/lib/postgresql/11/main/pg_wal/000000030000000000000009' to 799625 bytes (5%), took: 0.175s
INFO 'UPLOAD' transfer of key: 'default/xlog/000000030000000000000009', size: 799625, origin: 'pg1' took 0.002s
127.0.0.1 - - [21/May/2020 13:13:31] "PUT /default/archive/000000030000000000000009 HTTP/1.1" 201 -
INFO Compressed 16777216 byte open file '/var/lib/pghoard/default/xlog_incoming/000000030000000000000009' to 799625 bytes (5%), took: 0.190s
INFO 'UPLOAD' transfer of key: 'default/xlog/000000030000000000000009', size: 799625, origin: 'pg1' took 0.028s
INFO Compressed 16777216 byte open file '/var/lib/pghoard/default/xlog_incoming/00000003000000000000000A' to 789927 bytes (5%), took: 0.109s
INFO 'UPLOAD' transfer of key: 'default/xlog/00000003000000000000000A', size: 789927, origin: 'pg1' took 0.002s
INFO Compressed 16777216 byte open file '/var/lib/postgresql/11/main/pg_wal/00000003000000000000000A' to 789927 bytes (5%), took: 0.114s
INFO 'UPLOAD' transfer of key: 'default/xlog/00000003000000000000000A', size: 789927, origin: 'pg1' took 0.002s
127.0.0.1 - - [21/May/2020 13:13:32] "PUT /default/archive/00000003000000000000000A HTTP/1.1" 201 -
INFO Ran: ['/usr/lib/postgresql/11/bin/pg_basebackup', '--format', 'tar', '--label', 'pghoard_base_backup', '--verbose', '--pgdata', '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0', '--wal-method=none', '--progress', '--dbname', "dbname='replication' host='127.0.0.1' port='5432' replication='true' user='pghoard'"], took: 1.940s to run, returncode: 0
INFO Compressed 24337408 byte open file '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0/base.tar' to 4892408 bytes (20%), took: 0.117s
INFO 'UPLOAD' transfer of key: 'default/basebackup/2020-05-21_13-13_0', size: 4892408, origin: 'pg1' took 0.008s
No diretório “backup_location” (neste caso /var/lib/pghoard), você encontrará um arquivo pghoard_state.json com o estado atual:
$ ls -l /var/lib/pghoard
total 48
drwxr-xr-x 6 root root 4096 May 21 13:13 default
-rw------- 1 root root 42385 May 21 15:25 pghoard_state.json
E um diretório do site (neste caso chamado “default/”) com o backup:
$ ls -l /var/lib/pghoard/default/
total 16
drwxr-xr-x 2 root root 4096 May 21 13:13 basebackup
drwxr-xr-x 3 root root 4096 May 21 13:13 basebackup_incoming
drwxr-xr-x 2 root root 4096 May 21 13:13 xlog
drwxr-xr-x 2 root root 4096 May 21 13:13 xlog_incoming
Você pode verificar a lista de backup usando o comando follogin:
$ pghoard_restore list-basebackups --config pghoard.json
Available 'default' basebackups:
Basebackup Backup size Orig size Start time
---------------------------------------- ----------- ----------- --------------------
default/basebackup/2020-05-21_13-13_0 4 MB 23 MB 2020-05-21T13:13:31Z
Uso do Controle de Cluster
Para isso, vamos supor que você tenha seu cluster de banco de dados PostgreSQL importado no ClusterControl ou que você o implantou usando este sistema.
No ClusterControl, selecione seu cluster e vá para a seção "Backup" e, em seguida, selecione “Create Backup”.
Para este exemplo, usaremos a opção "Agendar backup". Ao agendar um backup, além de selecionar as opções comuns como método ou armazenamento, você também precisa especificar agendamento/frequência.
Você deve escolher um método, o servidor do qual o backup será feito , e onde você deseja armazená-lo. Você também pode carregar seu backup na nuvem (AWS, Google ou Azure) ativando o botão correspondente.
Então você precisa especificar o uso de compactação, criptografia e retenção do seu backup. Nesta etapa, você também pode ativar o recurso “Verificar backup”, que permite confirmar se o backup é utilizável, restaurando-o em um nó diferente.
Se você habilitar a opção “Fazer upload de backup para a nuvem”, você consulte uma seção para especificar o provedor de nuvem e as credenciais. Se você não integrou sua conta na nuvem com o ClusterControl, você deve ir para ClusterControl -> Integrações -> Provedores de Nuvem para adicioná-la.
Na seção de backup, você pode ver o progresso do backup e informações como o método, tamanho, localização e muito mais.
Linha de comando do ClusterControl (s9s)
Para scripts e automatização de tarefas, ou mesmo se você preferir apenas a linha de comando, o ClusterControl possui a ferramenta s9s. É uma ferramenta de linha de comando para gerenciar seu cluster de banco de dados. Vejamos um exemplo de como criar e listar backups usando esta ferramenta:
$ s9s backup --list --cluster-id=40 --long --human-readable
$ s9s backup --create --backup-method=pg_basebackup --cluster-id=40 --nodes=192.168.100.125 --backup-directory=/tmp --wait
Você pode encontrar mais exemplos e informações na seção de documentação da CLI do ClusterControl.
Conclusão
Como conclusão da comparação desses sistemas de gerenciamento de backup mencionados, podemos dizer que o PGHoard é uma solução gratuita, porém complexa, para essa tarefa. Você precisará de algum tempo para entender como funciona e como configurá-lo, pois a documentação oficial é um pouco pobre nisso. Além disso, parece um pouco desatualizado, já que o último lançamento foi há 1 ano. Além disso, o ClusterControl é um sistema de gerenciamento completo com muitos recursos, não apenas gerenciamento de backup, com uma interface de usuário amigável e fácil de usar. Possui comunidade (com recursos disponíveis limitados) e versões pagas com um período de teste gratuito de 30 dias. A documentação é clara e completa, com exemplos e informações detalhadas.
Esperamos que este blog ajude você a tomar a melhor decisão para manter seus dados seguros.