Solución de problemas de una réplica de lectura de MariaDB - Amazon Relational Database Service

Solución de problemas de una réplica de lectura de MariaDB

Las tecnologías de replicación para MariaDB son asíncronas. Como son asíncronas, cabe esperar aumentos ocasionales de BinLogDiskUsage en la instancia de base de datos de origen y de ReplicaLag en la réplica de lectura. Por ejemplo, en paralelo se pueden realizar gran volumen de operaciones de escritura en la instancia de base de datos de origen. En cambio, las operaciones de escritura en la réplica de lectura se serializan con un único subproceso E/S que puede provocar un retraso entre la instancia de origen y la réplica de lectura. Para obtener más información acerca de las réplicas de solo lectura en la documentación de MariaDB, vaya a Replication Overview.

Puede hacer varias cosas para reducir el retraso entre las actualizaciones de una instancia de base de datos de origen y las actualizaciones posteriores de la réplica de lectura. Por ejemplo, puede hacer lo siguiente:

  • Dimensionar una réplica de lectura para que tenga un tamaño de almacenamiento y una clase de instancia de base de datos comparables a los de la instancia de base de datos de origen.

  • Asegurarse de que los valores de los parámetros de los grupos de parámetros de base de datos utilizados en la instancia de base de datos de origen y la réplica de lectura son compatibles. Para obtener más información y un ejemplo, consulte el análisis del parámetro max_allowed_packet que se puede encontrar más adelante en esta sección.

Amazon RDS monitorea el estado de la replicación de las réplicas de lectura y actualiza el campo Replication State de la instancia de la réplica de lectura a Error si la replicación se detiene por cualquier motivo. Un ejemplo de ello pueden ser las consultas DML que se ejecutan en la réplica de lectura y que entran en conflicto con las actualizaciones realizadas en la instancia de base de datos de origen.

Puede revisar los detalles del error asociado mostrado por el motor de MariaDB visualizando el campo Replication Error. También se generan eventos que indican el estado de la réplica de lectura, entre los que se incluyen RDS-EVENT-0045, RDS-EVENT-0046 y RDS-EVENT-0047. Para obtener más información acerca de los eventos y la suscripción a ellos, consulte Uso de notificaciones de eventos de Amazon RDS. Si aparece un mensaje de error de MariaDB, revise el error en la documentación sobre los mensajes de error de MariaDB.

Un problema frecuente que puede causar errores de replicación es que el valor del parámetro max_allowed_packet de una réplica de lectura sea inferior al parámetro max_allowed_packet de la instancia de base de datos de origen. El parámetro max_allowed_packet es un parámetro personalizado que se puede establecer en un grupo de parámetros de base de datos y que se usa para especificar el tamaño máximo del código DML que se puede ejecutar en la base de datos. En algunos casos, el valor del parámetro max_allowed_packet en el grupo de parámetros de base de datos asociado a una instancia de base de datos de origen es inferior al valor del parámetro max_allowed_packet del grupo de parámetros de base de datos asociado a la réplica de lectura de origen. En estos casos, el proceso de replicación puede provocar un error (paquete mayor que los bytes de "max_allowed_packet") y parar la replicación. Puede resolver el error haciendo que el origen y la réplica de lectura usen grupos de parámetros de base de datos con los mismos valores del parámetro max_allowed_packet.

Entre las situaciones comunes que pueden causar errores de replicación se incluyen las siguientes:

  • Escritura en tablas en una réplica de lectura. Si desea crear índices en una réplica de lectura, debe establecer el parámetro read_only en 0 para crear los índices. Si se escribe en las tablas de la réplica de lectura, podría interrumpirse la replicación.

  • Uso de un motor de almacenamiento no transaccional como MyISAM. Las réplicas de lectura requieren un motor de almacenamiento transaccional. La reproducción solo se admite para el motor de almacenamiento InnoDB en MariaDB.

  • Uso de consultas no deterministas que no sean seguras, como SYSDATE(). Para obtener más información, consulte Determinación de instrucciones seguras e inseguras en el registro binario.

Si decide que es seguro hacer caso omiso de un error, puede seguir los pasos que se describen en la sección Omisión del error de replicación actual de RDS para MySQL. De lo contrario, puede eliminar la réplica de lectura y crear una instancia que use el mismo identificador de instancias de bases de datos para que el punto de enlace siga siendo el mismo que en la réplica de lectura antigua. Si se corrige un error de replicación, Replication State cambia a replicating.

Para las instancias de base de datos de MariaDB, en algunos casos las réplicas de lectura no se pueden cambiar a la secundaria si algunos eventos de binlog no se vacían durante el error. En estos casos, elimine y vuelva a crear manualmente las réplicas de lectura. Puede reducir la probabilidad de que esto ocurra al establecer los siguientes valores de parámetro: sync_binlog=1 y innodb_flush_log_at_trx_commit=1. Estos ajustes pueden reducir el desempeño, así que es aconsejable probar su impacto antes de implementar los cambios en un entorno de producción.