Configurar backups de Db2 LUW a AWS S3

Un bucket de S3 es un contenedor lógico en Amazon Simple Storage Service (S3), el servicio de almacenamiento de objetos en la nube de AWS, donde se guardan archivos u objetos con un nombre único globalmente. Se utiliza principalmente para almacenar grandes volúmenes de datos de forma escalable y duradera, como backups, data lakes o contenido estático para sitios web.

En la siguiente entrada se explica paso a paso las acciones de configuración de Db2 para lograr hacer un backup de una base de datos directamente a un bucket S3.

Resumen de los pasos a realizar

  1. Creación y/o configuración de un keystore
  2. Actualización de la configuración DBM con los parámetros KEYSTORE_LOCATION y KEYSTORE_TYPE.
  3. Configurar los accesos a AWS
  4. Catalogar el storage access alias
  5. Actualización del parámetro DB2_OBJECT_STORAGE_LOCAL_STAGING_PATH
  6. Paro y arranque de la instancia de Db2
  7. Test de Backup y Restore

1. Creación y/o configuración de un keystore

Se necesita un keystore para guardar la clave necesaria para acceder a S3. Es posible que ya estés utilizando uno, por ejemplo, si tu base de datos está encriptada. Si es así, este paso no será necesario realizarlo.

Para comprobar si ya estas utilizando un keystore, puedes utilizar el siguiente comando:

db2 get dbm cfg | grep -i KEYSTORE 

Si obtienes algo similar a las siguientes lineas, ya estas utilizando un keystore y te puede valer para conectar con S3:

Keystore type            (KEYSTORE_TYPE) = PKCS12 
Keystore location        (KEYSTORE_LOCATION) = db2home/db2inst1/db2keys/db2inst1_keystore.p12 

Para crear un nuevo keystore, podemos utilizar el siguiente comando modificando el nombre del keystore que queramos y su password:

gsk8capicmd_64 -keydb -create -db <nombre_keystore.p12> -pw <password>  -strong -type pkcs12 -stash 

Asegúrate de generar y guardar este keystore en una ruta adecuadamente protegida, siendo importante además, que se le haga backup de forma regular.

Aunque no sea el fin del mundo si se pierde este almacén de claves en este caso de uso concreto, puede ser una verdadera molestia en otros casos de uso como la autenticación SSL o el cifrado nativo de la base de datos, hasta el punto de una posible pérdida de datos.

2. Actualización de la configuración DBM con los parámetros KEYSTORE_LOCATION y KEYSTORE_TYPE

Si hemos creado un keystore con las instrucciones del paso anterior, ahora hay que configurar los parametros KEYSTORE_LOCATION y KEYSTORE_TYPE utilizando el siguiente comando:

db2 update dbm cfg using keystore_location <ruta donde se ha creado el keystore> 
db2 update dbm cfg using keystore_type pkcs12 

Hay que reemplazar <ruta donde se ha creado el keystore> por la ruta completa donde reside el keystore junto con su nombre y la extension (por ejemplo: db2home/db2inst1/db2keys/db2inst1_keystore.p12)

3. Configuración de AWS CLI

A continuación se explica cómo configurar rápidamente los ajustes básicos que la interfaz de línea de comandos de AWS (AWS CLI) utiliza para interactuar con AWS. Estos incluyen las credenciales de seguridad, el formato de salida predeterminado y la región de AWS predeterminada.

Para ello, hay que ejecutar los siguientes comandos:

aws configure set aws_access_key_id <access_key_id> 
aws configure set aws_secret_access_key <secret_access_key> 
aws configure set region <aws-region> 

Para comprobar si se han configurado correctamente los parámetros anteriores, podemos ir a la carpeta $HOME/.aws (sustituir $HOME por la ruta del home del usuario para el que hemos configurado el AWS CLI). Allí observaremos que hay 2 ficheros llamados credentials y config.

Si hacemos un cat del fichero credentials deberiamos ver el access key id y el secret access key que hemos indicado previamente.

Si hacemos un cat del fichero config, podremos ver que la región se corresponde con la región de AWS que hemos indicado anteriormente

4. Catalogar el storage access alias

Una vez completados los pasos anteriores, hay que catalogar el storage access alias. Esto es necesario para realizar una copia de seguridad directamente en un bucket de S3.

Este es un ejemplo de la sintaxis mas utilizada:

db2 "catalog storage access alias DB2BACKUP vendor S3 server s3.<región AWS>.amazonaws.com user '<access key>' password '<secret key>' container '<nombre del s3>'" 

Consideraciones:

  • DB2BACKUP: Alias que se utilizará para hacer el backup.
  • <región AWS>: Nombre de la región de AWS donde reside el bucket S3. Por ejemplo, si la región es eu-west-3, el server que indicaremos será s3.eu-west-3.amazonaws.com.
  • <access key>: Corresponde al mismo access key id que hemos indicado en el paso anterior.
  • <secret key>: Corresponde al mismo secret key id que hemos indicado en el paso anterior.
  • <nombre del s3>: Corresponde al nombre que tiene el bucket. En el siguiente enlace, se ofrecen los estandares de AWS para el naming de los buckets.

Podemos comprobar la correcta configuración del storage access alias con el siguiente comando:

db2 list storage access

Node Directory 
Node 1 entry: 
 ALIAS=DB2BACKUP 
 VENDOR=S3 
 SERVER=s3.eu-west-3.amazonaws.com 
 USERID=**** 
 CONTAINER=s3-pro-db2-01 
 OBJECT= 
 DBUSER= 
 DBGROUP=SYSADM 
Number of entries in the directory = 1 

 DB20000I  The LIST STORAGE ACCESS command completed successfully. 

5. Actualización del parámetro DB2_OBJECT_STORAGE_LOCAL_STAGING_PATH

El parámetro de registro de Db2, DB2_OBJECT_STORAGE_LOCAL_STAGING_PATH, especifica la ruta de almacenamiento temporal local que utiliza Db2 cuando realiza un backup.

En este caso, al realizar una copia de seguridad, primero se escribirá localmente en la ruta que indique este parámetro y luego se transfiere a S3.

Los backups se dividen automáticamente en archivos cuyo tamaño viene indicado por el parámetro de configuración de DBM MULTIPARTSIZEMB.

Para configurar el valor de DB2_OBJECT_STORAGE_LOCAL_STAGING_PATH, lo haremos de la siguiente forma:

db2set DB2_OBJECT_STORAGE_LOCAL_STAGING_PATH=/ruta/local/backupDb2 

Si no se le indica nada, por defecto, el backup se guardará de forma local en la siguiente ruta: <instance_directory>/sqllib/tmp/RemoteStorage.xxxx

6. Paro y arranque de la instancia de Db2

Llegados a este punto va a ser necesario hacer un paro y arranque de la instancia de Db2, sobretodo si se ha añadido un keystore y se ha modificado el parámetro DB2_OBJECT_STORAGE_LOCAL_STAGING_PATH.

Si no se ha realizado ninguna de las acciones anteriores, porque el Db2 ya tenia configurado un keystore y el valor por defecto del path temporal donde se guardarán los backups ya nos sirve, no seria necesario hacer el paro y arranque de la instancia

7. Test de Backup y Restore

Para ejecutar un backup directamente a S3, lo haremos de la siguiente forma:

db2 "backup db sample online to DB2REMOTE://DB2BACKUP compress include logs" 

Si queremos guardar este backup en un subdirectorio dentro del S3, podemos ejecutar el backup con la siguiente sintaxis:

db2 "backup db sample online to DB2REMOTE://DB2BACKUP//ruta/subdirectorio compress include logs" 

El restore podemos hacerlo usando el siguiente comando:

db2 "RESTORE DATABASE sample FROM DB2REMOTE://DB2BACKUP taken at <timestamp> WITHOUT PROMPTING" 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *