Bienvenido a la segunda parte del artículo de HADR. En un documento previo, describí el significado de HADR y los diferentes modos de sincronización que existen. Una vez que entendemos los conceptos básicos, es mucho más fácil preparar nuestro ambiente y configurar nuestros parámetros de HADR.
Preparando el ambiente antes de configurar HADR
Antes de configurar HADR hay varios pre-requisitos que cumplir y decisiones que tomar. Por ejemplo:
- Elegir el modo de sincronización así como los puertos por los que se comunicará HADR. Los puertos deben ser diferentes al que utiliza la aplicación para conectarse a la base de datos.
- Decidir si se va a utilizar una red pública o privada para el tráfico de HADR.
- Si es posible, crear servidores idénticos con la misma versión de Sistema Operativo y directorios para la base de datos.
- La versión de base de datos debe ser idéntica. Sin embargo, Fixpacks en la base de datos standby pueden ser una version más actual, pero solo por periodos de tiempo cortos.
- La base de datos primaria deberá estar en modo “Archive Logging“
Configurando HADR
A lo largo de éste documento, configuraremos HADR en tres servidores para una base de datos llamada “hadrdb”
Los servidores tienen los siguientes nombres:
- Servidor primario (serverA): Servidor con la base de datos primaria que se encuentra abierta y usuarios se pueden conectar a ella.
- Standby Principal (serverB): Servidor al cual se aplican los logs usando el modo de sincronización en el servidor primario. Este servidor existe en el mismo centro de datos que el servidor primario.
- Standby Auxiliar (serverC): Servidor en centro de datos remoto para recuperación de desastres (DR).
Los parámetros a usar serán:
- HADR_LOCAL_SVC: Nombre de servicio o número de Puerto que usará HADR
- HADR_REMOTE_HOST: Nombre o dirección IP del servidor secundario o standby
- HADR_REMOTE_SVC: Nombre de servicio o número de Puerto que usará HADR en servidor standby
- HADR_REMOTE_INST: Nombre de instancia de base de datos en servidor remoto
- HADR_SYNCMODE: Modo de sincronización
- HADR_TARGET_LIST: Especifica la lista de bases de datos standby en el cluster.
- HADR_TIMEOUT: Número de segundos antes de que DB2 considere que los dos servidores se han desconectado. Tiene un valor pre-establecido de 120 segundos, lo cual es suficiente tiempo para la mayoría de las bases de datos.
- HADR_PEER_WINDOW: Número de segundos después de que HADR se a desconectado. DB2 espera ese tiempo antes de comenzar a hacer commit en las transacciones. Su valor pre-establecido es 120, lo cual es el valor mínimo recomendado. Debe ser el mismo valor para ambas bases de datos, primaria y standby. Este parámetro es ignorado cuando el modo de sincronización es ASYNC o SUPERASYC. Sólo aplica para SYNC o NEARSYNC.
- LOGINDEXBUILD: Especifica si índices y operaciones de reorganización de tablas pueden ser reconstruidos durante el envío de logs en HADR
- BLOCKNONLOGGED: Se debe habilitar para evitar operaciones no registradas en logs.
- INDEXREC: Indica cuando DB2 deberá reconstruír índices inválidos y si reenviará o no los logs a la base de datos standby.
Los parámetros deberán verse de la siguiente manera.
Servidor Primario: serverA
db2 connect to hadrdb
db2 update db cfg for hadrdb using HADR_LOCAL_HOST serverA
db2 update db cfg for hadrdb using HADR_LOCAL_SVC 20000
db2 update db cfg for hadrdb using HADR_REMOTE_HOST serverB
db2 update db cfg for hadrdb using HADR_REMOTE_SVC 20001
db2 update db cfg for hadrdb using HADR_REMOTE_INST db2inst1
db2 update db cfg for hadrdb using LOGINDEXBUILD ON
db2 update db cfg for hadrdb using HADR_TIMEOUT 120
db2 update db cfg for hadrdb using HADR_SYNCMODE nearsync
db2 update db cfg for hadrdb using HADR_TARGET_LIST "serverB:20001|serverC:20002"
db2 update db cfg for hadrdb using HADR_PEER_WINDOW 300
db2 update db cfg for hadrdb using BLOCKNONLOGGED yes
db2 update db cfg for hadrdb using INDEXREC restart
db2 update db cfg for hadrdb using LOGINDEXBUILD ON
Configurar Servidor Alterno: En un ambiente de alta disponibilidad (HA) es importante configurar el servidor alterno para evitar errores al momento de un failover.
db2 update alternate server for database hadrdb using hostname serverB port 50001
db2 terminate
db2 deactivate db hadrdb
db2 activate db hadrdb
Verificar los parámetros relacionados a HADR
db2 get db cfg for hadrdb | grep HADR
Tomar un respaldo de la base de datos para restaurarlo en los servidores secundarios.
db2 terminate
db2 deactivate db hadrdb
db2 backup db hadrdb to /backups/hadrdb
Backup successful. The timestamp for this backup image is: 20180802112023
Standby Principal: serverB
Antes de restaurar el respaldo que se tomó de la base de datos primaria, debemos crear los mismos directorios de datos.
mkdir /data01/hadrdb
mkdir /data02/hadrdb
mkdir /data03/hadrdb
mkdir /activelog/hadrdb
Restaurar el respaldo de la base de datos primaria en el servidor secundario serverB, y dejar la base de datos en estado “roll-forward pending”.
db2 "restore db hadrdb from /backups/hadrdb
taken at 20180802112023
ON '/data01/hadrdb, /data02/hadrdb, /data03/hadrdb'
INTO hadrdb
NEWLOGPATH '/activelog/hadrdb'
REPLACE HISTORY FILE"
db2 "rollforward db hadrdb query status"
Configurar los parámetros de HADR en servidor secundario server.
db2 update db cfg for hadrdb using HADR_LOCAL_HOST serverB
db2 update db cfg for hadrdb using HADR_LOCAL_SVC 20001
db2 update db cfg for hadrdb using HADR_REMOTE_HOST serverA
db2 update db cfg for hadrdb using HADR_REMOTE_SVC 20000
db2 update db cfg for hadrdb using HADR_REMOTE_INST db2inst1
db2 update db cfg for hadrdb using LOGINDEXBUILD ON
db2 update db cfg for hadrdb using HADR_TIMEOUT 120
db2 update db cfg for hadrdb using HADR_SYNCMODE nearsync
db2 update db cfg for hadrdb using HADR_TARGET_LIST "serverA:20000|serverC:20002"
db2 update db cfg for hadrdb using HADR_PEER_WINDOW 300
db2 update db cfg for hadrdb using BLOCKNONLOGGED yes
db2 update db cfg for hadrdb using INDEXREC restart
db2 update db cfg for hadrdb using LOGINDEXBUILD ON
Configurar Servidor Alterno
db2 update alternate server for database hadrdb using hostname serverA port 50001
db2 terminate
db2 deactivate db hadrdb
Verificar los parámetros relacionados a HADR.
db2 get db cfg for hadrdb | grep HADR
Standby Auxiliar: serverC
Crear los mismos directorios de datos.
mkdir /data01/hadrdb
mkdir /data02/hadrdb
mkdir /data03/hadrdb
mkdir /activelog/hadrdb
Restaurar el respaldo de la base de datos primaria en el servidor secundario serverC, y dejar la base de datos en estado “roll-forward pending”.
db2 "restore db hadrdb from /backups/hadrdb
taken at 20180802112023
ON '/data01/hadrdb, /data02/hadrdb, /data03/hadrdb'
INTO hadrdb
NEWLOGPATH '/activelog/hadrdb'
REPLACE HISTORY FILE"
db2 "rollforward db hadrdb query status"
Configurar los parámetros de HADR en servidor secundario server.
db2 update db cfg for hadrdb using HADR_LOCAL_HOST serverC
db2 update db cfg for hadrdb using HADR_LOCAL_SVC 20002
db2 update db cfg for hadrdb using HADR_REMOTE_HOST serverA
db2 update db cfg for hadrdb using HADR_REMOTE_SVC 20000
db2 update db cfg for hadrdb using HADR_REMOTE_INST db2inst1
db2 update db cfg for hadrdb using LOGINDEXBUILD ON
db2 update db cfg for hadrdb using HADR_TIMEOUT 120
db2 update db cfg for hadrdb using HADR_SYNCMODE superasync
db2 update db cfg for hadrdb using HADR_TARGET_LIST "serverA:20000|serverB:20001"
db2 update db cfg for hadrdb using BLOCKNONLOGGED yes
db2 update db cfg for hadrdb using INDEXREC restart
db2 update db cfg for hadrdb using LOGINDEXBUILD ON
Configurar Servidor Alterno
db2 update alternate server for database hadrdb using hostname serverA port 50001
db2 terminate
db2 deactivate db hadrdb
Verificar los parámetros relacionados a HADR.
db2 get db cfg for hadrdb | grep HADR
Iniciar HADR en las bases de datos en el siguiente orden. Comenzar por la base de datos Standby Principal (serverB), seguir con la primaria (serverA) y por ultimo la standby auxiliary (serverC - DR).
serverB:
db2 deactivate db hadrdb
db2 start hadr on database hadrdb as standby
serverA:
db2 deactivate db hadrdb
db2 start hadr on database hadrdb as primary
serverC:
db2 deactivate db hadrdb
db2 start hadr on database hadrdb as standby
Para verificar los valores de los parámetros y que HADR está funcionando, podemos usar éstos comandos.
db2 get db cfg for hadrdb | grep HADR
db2 get db cfg for hadrdb | grep role
db2pd -db hadrdb -hadr
db2pd -db hadrdb -hadr | grep -i log_time
Con ésto concluímos la configuración de parametros para HADR. El siguiente paso sería configurar failover automático, lo cual se encuentra fuera del alcance de éste documento.
#espanol