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

Alternativas de pghoard:gestión de copias de seguridad de PostgreSQL con ClusterControl

Administrar copias de seguridad puede ser una tarea compleja y riesgosa si se realiza de forma manual. Debe saber que la copia de seguridad está funcionando de acuerdo con su política de copia de seguridad, ya que no quiere estar en la situación en la que necesita la copia de seguridad y no funciona o no existe. Eso será un gran problema seguro. Por lo tanto, lo mejor aquí es utilizar una aplicación de gestión de copias de seguridad probada en batalla, para evitar cualquier problema en caso de falla.

PGHoard es un demonio de copia de seguridad y un sistema de restauración de PostgreSQL que almacena datos de copia de seguridad en almacenes de objetos en la nube. Es compatible con PostgreSQL 9.3 o posterior, hasta PostgreSQL 11, la última versión compatible en este momento. La versión actual de PGHoard es 2.1.0, lanzada en mayo de 2019 (hace 1 año).

ClusterControl es un software de gestión y automatización sin agentes para clústeres de bases de datos. Ayuda a implementar, monitorear, administrar y escalar su servidor/clúster de base de datos directamente desde la interfaz de usuario de ClusterControl o mediante la CLI de ClusterControl. Incluye funciones de gestión de copias de seguridad y es compatible con las versiones 9.6, 10, 11 y 12 de PostgreSQL. La versión actual de ClusterControl es 1.7.6, lanzada el mes pasado, en abril de 2020.

En este blog, compararemos PGHoard con la función de administración de respaldo de ClusterControl y veremos cómo instalar y usar ambos sistemas. Para esto, usaremos un servidor Ubuntu 18.04 y PostgreSQL11 (ya que es la última versión compatible para usar PGHoard). Instalaremos PGHoard en el mismo servidor de base de datos y lo importaremos a ClusterControl.

Comparación de funciones de administración de copias de seguridad

PGHoard

Algunas de las características más importantes de PGHoard son:

  • Copias de seguridad base periódicas automáticas
  • Copias de seguridad automáticas del registro de transacciones
  • Compatibilidad con Hot Backup independiente
  • Soporte de almacenamiento de objetos en la nube (AWS S3, Google Cloud, OpenStack Swift, Azure, Ceph)
  • Restauración de copias de seguridad directamente desde el almacenamiento de objetos, comprimido y encriptado
  • Recuperación de un punto en el tiempo (PITR)
  • Inicializar un nuevo modo de espera a partir de copias de seguridad de almacenamiento de objetos, configurado automáticamente como un modo de espera en caliente de replicación
  • Compresión y cifrado en paralelo

Una de las formas de usarlo es tener una máquina de respaldo separada, para que PGHoard pueda conectarse con pg_receivexlog para recibir archivos WAL de la base de datos. Otro modo es usar pghoard_postgres_command como archive_command de PostgreSQL. En ambos casos, PGHoard crea copias de seguridad base periódicas utilizando pg_basebackup.

Control de clúster

Veamos también algunas de las características más importantes de este sistema:

  • IU fácil de usar
  • Copia de seguridad y restauración (en el mismo nodo o en uno separado)
  • Programar copias de seguridad
  • Crear un clúster desde Copia de seguridad
  • Verificación de copia de seguridad automática
  • Compresión
  • Cifrado
  • Carga automática en la nube
  • Recuperación de un punto en el tiempo (PITR)
  • Diferentes métodos de respaldo (lógico, físico, completo, incremental, etc.)
  • Informes operativos de respaldo

Dado que este no es solo un sistema de administración de copias de seguridad, también mencionaremos diferentes funciones importantes, no solo las relacionadas con las copias de seguridad:

  • Implementar/importar bases de datos:independiente, clúster/replicación, equilibradores de carga
  • Escalado:Agregar o quitar nodos, leer réplicas, clonación de clústeres, replicación de clúster a clúster
  • Monitoreo:paneles personalizados, detección de fallas, monitor de consultas, asesores de rendimiento, alarmas y notificaciones, desarrollo de asesores personalizados
  • Recuperación automática:recuperación de nodos y clústeres, conmutación por error, entornos de alta disponibilidad
  • Administración:administración de configuración, actualizaciones de parches de bases de datos, administración de usuarios de bases de datos, integración en la nube, informes de operaciones, administración de ProxySQL
  • Seguridad:administración de claves, control de acceso basado en funciones, autenticación mediante LDAP/Active Directory, cifrado SSL

La topología recomendada es tener un nodo separado para ejecutar ClusterControl, para asegurarse de que, en caso de falla, pueda aprovechar las funciones de recuperación automática y conmutación por error de ClusterControl (entre otras funciones útiles) .

Requisitos del sistema

PGHoard

Según la documentación, PGHoard puede respaldar y restaurar las versiones 9.3 y superiores de PostgreSQL. El demonio está implementado en Python y funciona con CPython versión 3.5 o posterior. Los siguientes módulos de Python podrían ser necesarios según los requisitos:

  • psycopg2 para buscar metadatos del registro de transacciones
  • solicitudes para la arquitectura cliente-servidor interna
  • azure para el almacenamiento de objetos de Microsoft Azure
  • botocore para almacenamiento de objetos de AWS S3 (o Ceph-S3)
  • google-api-client para el almacenamiento de objetos de Google Cloud
  • criptografía para el cifrado y descifrado de copias de seguridad (se requiere la versión 0.8 o posterior)
  • snappy para compresión y descompresión Snappy
  • zstandard para compresión y descompresión Zstandard (zstd)
  • systemd para la integración de systemd
  • swiftclient para almacenamiento de objetos OpenStack Swift
  • paramiko para almacenamiento de objetos sftp

No se menciona el sistema operativo compatible, pero dice que se probó en sistemas Linux x86-64 modernos, pero debería funcionar en otras plataformas que proporcionen los módulos necesarios.

Control de clúster

El servidor ClusterControl requiere el siguiente software:

  • servidor/cliente MySQL
  • servidor web Apache (o nginx)
  • mod_rewrite
  • mod_ssl
  • permitir anular .htaccess
  • PHP (5.4 o 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 o AppArmor):debe estar deshabilitado o configurado en modo permisivo
  • Servidor/cliente OpenSSH
  • BASH (recomendado:versión 4 o posterior)
  • Servidor NTP:la hora de todos los servidores debe sincronizarse en una zona horaria
  • socat o netcat:para copias de seguridad de transmisión

Y soporta diferentes sistemas operativos:

  • 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

Si ClusterControl se instala mediante un script de instalación (install-cc) o un administrador de paquetes (yum/apt), todas las dependencias se cumplirán automáticamente.

Para PostgreSQL, es compatible con las versiones 9.6/10.x/11.x/12.x. Puede encontrar una lista completa de las bases de datos admitidas en la documentación.

Solo requiere acceso SSH sin contraseña a los nodos de la base de datos (usando claves privadas y públicas) y un usuario privilegiado del sistema operativo (podría ser usuario root o sudo).

El proceso de instalación

Proceso de instalación de PGHoard

Supondremos que tiene su base de datos PostgreSQL en funcionamiento, así que instalemos los paquetes restantes. PGHoard es un paquete de Python, por lo que una vez que haya instalado los paquetes necesarios, puede instalarlo con el comando pip:

$ apt install postgresql-server-dev-11 python3 python3-pip python3-snappy

$ pip3 install pghoard

Como parte de este proceso de instalación, debe preparar la instancia de PostgreSQL para que funcione con esta herramienta. Para esto, deberá editar postgresql.conf para permitir el archivo WAL y aumentar max_wal_senders:

wal_level = logical

max_wal_senders = 4

archive_mode = on

archive_command = pghoard_postgres_command --mode archive --site default --xlog %f

Este cambio requerirá reiniciar la base de datos:

$ service postgresql restart

Ahora, vamos a crear un usuario de base de datos para PGHoard:

$ psql

CREATE USER pghoard PASSWORD 'Password' REPLICATION;

Y agregue la siguiente línea en el archivo pg_hba.conf:

host    replication  pghoard  127.0.0.1/32/32  md5

Recargar el servicio de base de datos:

$ service postgresql reload

Para que funcione, deberá crear un archivo de configuración JSON para PGHoard. Veremos esto en la siguiente sección "Uso".

Proceso de instalación de ClusterControl

Existen diferentes métodos de instalación como se menciona en la documentación. En el caso de instalación manual, los paquetes necesarios se especifican en la misma documentación, y existe una guía paso a paso para todo el proceso.

Veamos un ejemplo usando el script de instalación 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

El script de instalación intentará automatizar las siguientes tareas:

  • Instalar y configurar un servidor MySQL local (usado por ClusterControl para almacenar datos de monitoreo)
  • Instalar y configurar el paquete del controlador ClusterControl a través del administrador de paquetes
  • Instalar dependencias de ClusterControl a través del administrador de paquetes
  • Configurar Apache y SSL
  • Configurar la URL y el token de la API de ClusterControl
  • Configure el controlador ClusterControl con opciones de configuración mínimas
  • Habilite el servicio CMON en el arranque e inícielo

Al ejecutar el script mencionado, recibirá una pregunta sobre el envío de datos 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):

Luego, comenzará a instalar los paquetes necesarios. La siguiente pregunta es sobre el nombre de host que se usará:

=> The Controller hostname will be set to 192.168.100.116. Do you want to change it? (y/N):

Cuando se instala la base de datos local, el instalador la protegerá creando una contraseña de root que debe ingresar:

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

Y una contraseña de usuario CMON, que será utilizada por ClusterControl:

=> Set a password for ClusterControl's MySQL user (cmon) [cmon]

=> Supported special characters: [email protected]#$%^&*()_+{}<>?

=> Enter a CMON user password:

Eso es todo. De esta forma, lo tendrás todo en orden sin instalar ni 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.

La primera vez que acceda a la interfaz de usuario, deberá registrarse para el período de prueba gratuito de 30 días.

Después de que finalice su prueba gratuita de 30 días, su instalación se convertirá automáticamente a la edición comunitaria a menos que tenga una licencia comercial.

Uso de administración de copias de seguridad

Uso de PGHoards

Después de instalar esta herramienta, debe crear un archivo JSON (pghoard.json) con la configuración de PGHoard. Este es un ejemplo:

{

"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/"

}

}

}

En este ejemplo, tomaremos una copia de seguridad y la almacenaremos localmente, pero también puede configurar una cuenta en la nube y almacenarla allí:

"object_storage": {

"aws_access_key_id": "AKIAQTUN************",

"aws_secret_access_key": "La8YZBvN********************************",

"bucket_name": "pghoard",

"region": "us-east-1",

"storage_type": "s3"

},

Puede encontrar más detalles sobre la configuración en la documentación.

Ahora, ejecutemos la copia de seguridad usando este archivo 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

En el directorio “backup_location” (en este caso /var/lib/pghoard), encontrará un archivo pghoard_state.json con el estado actual:

$ 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

Y un directorio del sitio (en este caso llamado “default/”) con la copia de seguridad:

$ 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

Puede consultar la lista de copias de seguridad con el siguiente comando:

$ 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 de control de clúster

Para esto, asumiremos que tiene su clúster de base de datos PostgreSQL importado en ClusterControl o que lo implementó usando este sistema.

En ClusterControl, seleccione su clúster y vaya a la sección "Copia de seguridad", luego seleccione "Crear copia de seguridad".

Para este ejemplo, usaremos la opción "Copia de seguridad programada". Al programar una copia de seguridad, además de seleccionar las opciones comunes como el método o el almacenamiento, también debe especificar la programación/frecuencia.

Debe elegir un método, el servidor desde el que se realizará la copia de seguridad y dónde desea guardarlo. También puede subir su copia de seguridad a la nube (AWS, Google o Azure) activando el botón correspondiente.

Luego debe especificar el uso de compresión, cifrado y retención de su copia de seguridad. En este paso, también puede habilitar la función "Verificar copia de seguridad", que le permite confirmar que la copia de seguridad se puede utilizar al restaurarla en un nodo diferente.

Si activa la opción "Subir copia de seguridad a la nube", consulte una sección para especificar el proveedor de la nube y las credenciales. Si no ha integrado su cuenta en la nube con ClusterControl, debe ir a ClusterControl -> Integraciones -> Proveedores de la nube para agregarlo.

En la sección de respaldo, puede ver el progreso del respaldo y información como el método, el tamaño, la ubicación y más.

Línea de comando de control de clúster (s9s)

Para secuencias de comandos y tareas de automatización, o incluso si prefiere la línea de comandos, ClusterControl tiene la herramienta s9s. Es una herramienta de línea de comandos para administrar su clúster de base de datos. Veamos un ejemplo de cómo crear y listar copias de seguridad usando esta herramienta:

$ 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

Puede encontrar más ejemplos e información en la sección de documentación CLI de ClusterControl.

Conclusión

Como conclusión de comparar estos sistemas de gestión de copias de seguridad mencionados, podemos decir que PGHoard es una solución gratuita pero compleja para esta tarea. Necesitará algo de tiempo para comprender cómo funciona y cómo configurarlo, ya que la documentación oficial es un poco pobre al respecto. Además, parece un poco desactualizado, ya que el último lanzamiento fue hace 1 año. Además, ClusterControl es un sistema de administración todo en uno con muchas funciones, no solo la administración de copias de seguridad, con una interfaz de usuario fácil de usar y fácil de usar. Tiene comunidad (con funciones disponibles limitadas) y versiones pagas con un período de prueba gratuito de 30 días. La documentación es clara y completa, con ejemplos e información detallada.

Esperamos que este blog lo ayude a tomar la mejor decisión para mantener sus datos seguros.