Cómo configurar pgbackrest en PostgreSQL para realizar backups a Azure
¡Hola! Bienvenidas y bienvenidos a un nuevo post en el mejor blog de Data y Cloud. En el artículo de hoy hablaremos sobre cómo realizar backups a Azure con pgbackrest en Postgre SQL.
Pero primero, vamos a hablar un poco de qué es PGBackrest y cuáles son sus principales funcionalidades.
PGBackrest es una herramienta sencilla y fiable para las copias de seguridad automáticas, en la cual podemos hacer copias de seguridad de tipo: diferenciales, incrementales y completas.
Además es compatible con las siguientes plataformas Azure/Amazon S3/OCI/GCP.
Esta herramienta solo es compatible con PostgreSQL y actualmente solo está disponible en distribuciones Ubuntu.
En el ejemplo de este blog, lo vamos a hacer en un Ubuntu server 20.04.1 y PostgreSQL 15
1. Instalar PostgreSQL
Lo vamos a instalar con los siguientes comandos:
Crear la configuración del repositorio de archivos
sudo sh -c ‘echo «deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main» > /etc/apt/sources.list.d/pgdg.list’
Descargar e instalar el certificado
wget –quiet -O – https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add –
Actualizamos los repositorios con las nuevas listas
sudo apt-get update
Instalamos la última versión de PostgreSQL
sudo apt-get -y install postgresql
Pero si queremos instalar un versión de PostgreSQL en específico lo podemos hacer con el siguiente comando:
apt-get install postgresql-12
2. Instalar PGBackrest
apt-get install pgbackrest
3. Configuración de pgbackrest
Cuando instalamos pgbackrest tambien se genera un archivo llamado pgbackrest.conf que está en la ruta /etc/pgbackrest.conf.
Editamos el fichero, y en el fichero veremos lo siguiente:
Global son las opciones globales que podemos configurar para nuestro cluster de base de datos, es decir, cifrado, retención de backup, el tipo Azure, Amazon, Google y otras configuraciones.
Main: es el nombre de nuestro stanza.
Un stanza es la configuración de un cluster de base de datos de PostgreSQL en la cual definimos donde se encuentra la BBDD, es decir, la ruta y como se van a realizar los backup.
Vamos borrar el contenido y ponemos lo siguiente:
Explicación de los parámetros:
[dvdrental]: es el nombre de nuestro stanza, le hemos puesto el mismo nombre que a nuestra BBDD pero le podemos llamar como queramos.
[global]repo1-retention_full y repo1-retention_diff significa que vamos a guardar las dos ultimos backupFull realizados con éxito, así como los backupDiff asociados a estos.
Pero si queremos especificar la retención en días, podemos hacerlo con las siguientes líneas:
repo1-retention-full-type=tiempo
repo1-retention-full=30
Importante:
Si en este ejemplo el repositorio tuviera cinco backupFull – una de 25 días de antigüedad, otra de 35 días y el resto más antiguas – el backupFull de 35 días de antigüedad seguiría siendo necesario para restaurar al periodo comprendido entre hace 30 y 25 días, y como tal se mantiene aunque sea más antigua que el periodo de retención configurado. Todas los backup anteriores se eliminarán durante el mantenimiento de la retención.
[repo1-cipher-pass]: clave de cifrado para nuestros backup
Nota:
Para la clave de cifrado podemos ejecutar el siguiente comando para que nos genere una clave:
openssl rand -base64 48
[repo1-cipher-type]: es el tipo de cifrado que vamos a utilizar
[repo1-path]: es la carpeta en nuestro cloud donde vamos a guardar los backups, la carpeta se crea automáticamente.
Lo siguientes parámetros son las credenciales de nuestro usuario en Azure.
[repo1-azure-account] [repo1-azure-container] [repo1-azure-key]Para obtener estas credenciales nos vamos a nuestra cuenta en Azure.
Cuentas de almacenamiento
Creamos una nueva cuenta y una vez creada vamos a claves de acceso
Y aquí podremos ver nuestra KEY.
[repo1-type]: es el tipo de almacenamiento, es decir, Azure, Amazon, Google…
[process-max]: es el máximo de procesos a utilizar para comprimir/transferir, cada procesos realizara la compresión y transferencia para que la ejecución sea lo más rápida posible.Este valor no hay que ponerlo muy alto ya que puede afectar al rendimiento de la nuestra BBDD.
4. Configuración de PostgreSQL
Editamos el archivo de configuración de PostgreSQL que se encuentra en la siguiente ruta:
nano /etc/postgresql/15/main/postgresql.conf
y al final del archivo ponemos las siguiente líneas, justo debajo de “CUSTOMIZED OPTIONS”
archive_command = ‘pgbackrest –stanza=dvdrental archive-push %p’
archive_mode = on
max_wal_senders = 3
wal_level = hot_standby
archive_command: esto para determinar cómo vamos a enviar nuestro
archive_mode: con esta opción vamos a realizar los backup del log de transacciones para poder recuperar nuestra BBDD a cualquier punto en el tiempo
max_wal_senders: especifica el numero máximo de conexiones concurrentes desde servidores en espera o clientes de copia de seguridad de base de streaming, es decir el número máximo de procesos emisores de WAL que se ejecutan simultáneamente.
wal_level: determina cuanta información se escribe en los archivos WAL.
Una vez configurado PostgreSQL, hay que reiniciar el servidor para que se apliquen los cambios.
systemctl restart postgresql
5. Configuración de Copias
La configuración de las copias la vamos a hacer con usuarios postgres, que es el usuario por defecto de PostgreSQL.
Y vamos a congurar las copias para que solo este usuario puede lanzar los backup.
Aquí entramos como usuario postgres en nuestro Ubuntu:
sudo -i -u postgres
Iniciamos el repositorio:
pgbackrest –stanza=dvdrental –log-level-console=info stanza-create
Comprobamos la configuracion:
pgbackrest –stanza= dvdrental –log-level-console=info check
6. Programación de las copias
En esta parte seguimos logueados como usuarios postgres.
En la carpeta /var/lib/postgresql/ vamos a crear un script para las copias.
nano copia.bash
y añadimos el siguiente contenido.
Añadimos permisos de ejecución:
chmod ug+x copia.bash
Y en el crontab de Ubuntu añadimos las líneas para que se ejecute de manera automática.
#copia full todos los domingos
0 23 * * 0 /var/lib/postgresql/copia.bash full > /var/lib/postgresql/copia_full.ultimo 2>&1
El backup full se ejecuta todos los domingos a las 23:00
#copia diff los demas dias
0 23 * * 1-6 /var/lib/postgresql/copia.bash diff > /var/lib/postgresql/copia_diff.ultimo 2>&1
El backup diff se ejecuta todos los días a las 23:00
Puntos importanes a tener en cuenta en la configuración de pgbackrest
Una vez que tengamos pgbackrest configurado y funcionando es muy importante hacernos una copia del fichero pgbackrest.conf, ya que en este fichero es donde tenemos informada nuestra clave de encriptación, nuestras credenciales de azure, key, account y el bucket.
SI PERDEMOS ESTE FICHERO NO PODREMOS RECUPERAR NUESTROS BACKUP.
Por otro lado tener en cuenta que pgbackrest cuando realiza los backups los divide en pequeños archivos ya que facilita la subida de archivos a nuestra cuenta en Azure, en vez de subir un único archivo.
Y con esto damos por finalizado el artículo de hoy. Si te ha parecido interesante, puedes consultar nuestros últimos posts de SQL Server y Azure:
Actualiza MongoDB sin parada de servicio
Cómo crear Alertas de Coste en una Suscripción de Azure
Si necesitas ayuda con tu BBDD o estas pensando en migrar tu SQL Server a la nube, en Aleson ITC podemos ayudarte.
Data Analyst Associate.