Configuración de clústeres activo-activo para RDS para MySQL - Amazon Relational Database Service

Configuración de clústeres activo-activo para RDS para MySQL

Puede configurar un clúster activo-activo para RDS para MySQL mediante el complemento MySQL Group Replication. El complemento MySQL Group Replication es compatible con las instancias de base de datos de RDS para MySQL que ejecutan la versión 8.0.35 y versiones secundarias posteriores.

Para obtener información acerca de MySQL Group Replication, consulte Group Replication en la documentación de MySQL. La documentación de MySQL contiene información detallada sobre esta característica, mientras que en este tema se describe cómo configurar y administrar el complemento en las instancias de base de datos de RDS para MySQL.

nota

En aras de la brevedad, todas las menciones a clúster “activo-activo” que se realicen en este tema se refieren a clústeres activo-activo que utilizan el complemento Group Replication de MySQL.

Casos de uso de clústeres activo-activo

Los siguientes casos son buenos candidatos para usar clústeres activo-activo:

  • Aplicaciones que necesitan todas las instancias de base de datos del clúster para admitir operaciones de escritura. El complemento Group Replication mantiene la coherencia de datos en cada instancia de base de datos del clúster activo-activo. Para obtener más información acerca de su funcionamiento, consulte Group Replication en la documentación de MySQL.

  • Aplicaciones que requieren una disponibilidad continua de la base de datos. Con un clúster activo-activo, los datos se conservan en todas las instancias de base de datos del clúster. Si se produce un error en una instancia de base de datos, la aplicación puede redirigir el tráfico a otra instancia de base de datos del clúster.

  • Aplicaciones que podrían necesitar dividir las operaciones de lectura y escritura entre distintas instancias de base de datos del clúster para equilibrar la carga. Con un clúster activo-activo, sus aplicaciones pueden enviar tráfico de lectura a instancias de base de datos específicas y tráfico de escritura a otras. También puede cambiar las instancias de base de datos a las que desea enviar lecturas o escrituras en cualquier momento.

Consideraciones y prácticas recomendadas de los clústeres activo-activo

Antes de utilizar clústeres activo-activo de RDS para MySQL, revise las siguientes consideraciones y prácticas recomendadas:

  • Los clústeres activo-activo no pueden tener más de nueve instancias de base de datos.

  • Con el complemento Group Replication, puede controlar las garantías de coherencia de las transacciones del clúster activo-activo. Para obtener más información, consulte Transaction Consistency Guarantees en la documentación de MySQL.

  • Es posible que surjan conflictos cuando distintas instancias de base de datos actualizan la misma fila de un clúster activo-activo. Para obtener información sobre conflictos y resolución de conflictos, consulte Group Replication en la documentación de MySQL.

  • Para garantizar la tolerancia a errores, incluya al menos tres instancias de base de datos en el clúster activo-activo. Es posible configurar un clúster activo-activo con solo una o dos instancias de base de datos, pero el clúster no tolerará errores. Para obtener información acerca de la tolerancia a errores, consulte Fault-tolerance en la documentación de MySQL.

  • Cuando una instancia de base de datos se une a un clúster activo-activo existente y ejecuta la misma versión del motor que la versión de motor más antigua del clúster, la instancia de base de datos se une en modo de lectura-escritura.

  • Cuando una instancia de base de datos se une a un clúster activo-activo existente y ejecuta una versión de motor posterior a la versión de motor más antigua del clúster, la instancia de base de datos debe permanecer en modo de solo lectura.

  • Si habilita Group Replication para una instancia de base de datos configurando su parámetro rds.group_replication_enabled en 1 en el grupo de parámetros de base de datos, pero la replicación no se ha iniciado, la instancia de base de datos se coloca en modo de solo superlectura para evitar incoherencias en los datos. Para obtener información sobre el modo de solo superlectura, consulte la documentación de MySQL.

  • Puede actualizar una instancia de base de datos de un clúster activo-activo, pero la instancia de base de datos será de solo lectura hasta que todas las demás instancias de base de datos del clúster activo-activo se actualicen a la misma versión del motor o a una versión del motor posterior. Al actualizar una instancia de base de datos, esta se une automáticamente al mismo clúster activo-activo cuando se completa la actualización. Para evitar que una instancia de base de datos cambie involuntariamente al modo de solo lectura, desactive las actualizaciones automáticas de las versiones secundarias en ella. Para obtener información acerca de la actualización de una instancia de base de datos MySQL, consulte Actualización del motor de base de datos MySQL.

  • Puede añadir una instancia de base de datos en una implementación de instancia de base de datos multi-AZ a un clúster activo-activo existente. También puede convertir una instancia de base de datos single-AZ de un clúster activo-activo en una implementación de instancia de base de datos multi-AZ. Si se produce un error en una instancia de base de datos principal de una implementación multi-AZ, esa instancia principal realiza una conmutación por error a la instancia en espera. La nueva instancia de base de datos principal se une automáticamente al mismo clúster una vez finalizada la conmutación por error. Para obtener más información acerca de las implementaciones de instancias de base de datos multi-AZ, consulte Implementaciones de instancias de base de datos Multi-AZ.

  • Recomendamos que las instancias de base de datos de un clúster activo-activo tengan intervalos de tiempo diferentes para sus períodos de mantenimiento. Esta práctica evita que varias instancias de base de datos del clúster se desconecten al mismo tiempo para realizar tareas de mantenimiento. Para obtener más información, consulte La ventana de mantenimiento de Amazon RDS.

  • Los clústeres activo-activo pueden usar SSL para las conexiones entre instancias de base de datos. Para configurar las conexiones SSL, defina los parámetros group_replication_recovery_use_ssl y group_replication_ssl_mode. Los valores de estos parámetros deben ser iguales para todas las instancias de base de datos del clúster activo-activo.

    Actualmente, los clústeres activo-activo no admiten la verificación por parte de la autoridad de certificación (CA) para las conexiones entre Regiones de AWS. Por lo tanto, el parámetro group_replication_ssl_mode debe estar establecido en DISABLED (el valor predeterminado) o REQUIRED para los clústeres entre regiones.

  • Un clúster activo-activo de RDS para MySQL se ejecuta en modo multiprimario. El valor predeterminado de group_replication_enforce_update_everywhere_checks es ON y el parámetro es estático. Si este parámetro está establecido en ON, las aplicaciones no pueden insertarlo en una tabla que tenga restricciones de clave externa en cascada.

  • Un clúster activo-activo de RDS para MySQL utiliza la pila de comunicación de MySQL para garantizar la seguridad de la conexión en lugar de XCOM. Para obtener más información, consulte Communication Stack for Connection Security Management en la documentación de MySQL.

  • Cuando un grupo de parámetros de base de datos está asociado a una instancia de base de datos de un clúster activo-activo, recomendamos asociar este grupo de parámetros de base de datos únicamente a otras instancias de base de datos que estén en el clúster.

  • Los clústeres activo-activo solo admiten instancias de base de datos de RDS para MySQL. Estas instancias de base de datos deben ejecutar versiones compatibles del motor de base de datos.

  • Cuando una instancia de base de datos de un clúster activo-activo sufre un error inesperado, RDS inicia la recuperación de la instancia de base de datos automáticamente. Si la instancia de base de datos no se recupera, le recomendamos que la sustituya por una nueva instancia de base de datos mediante una recuperación a un momento dado con una instancia de base de datos en buen estado del clúster. Para obtener más información, consulte Adición de una instancia de base de datos a un clúster activo-activo mediante la recuperación a un momento dado.

  • Puede eliminar una instancia de base de datos de un clúster activo-activo sin que ello afecte a las demás instancias de base de datos del clúster. Para obtener más información sobre la eliminación de instancias de base de datos, consulte Eliminación de una instancia de base de datos.

Requisitos previos de un clúster activo-activo entre VPC

Puede configurar un clúster activo-activo con instancias de base de datos en más de una VPC. Las VPC pueden estar en la misma Región de AWS o en diferentes Regiones de AWS.

nota

El envío de tráfico entre varias Regiones de AWS puede conllevar costos adicionales. Para obtener más información, consulte Overview of Data Transfer Costs for Common Architectures.

Si va a configurar un clúster activo-activo en una sola VPC, puede omitir estos pasos y pasar a Configuración de un clúster activo-activo con nuevas instancias de base de datos.

Preparación para un clúster activo-activo con instancias de base de datos en más de una VPC
  1. Asegúrese de que los rangos de direcciones IPv4 de los bloques CIDR cumplan los siguientes requisitos:

    • Los rangos de direcciones IPv4 de los bloques CIDR de las VPC no se pueden superponer.

    • Todos los rangos de direcciones IPv4 de los bloques CIDR deben ser inferiores a 128.0.0.0/subnet_mask o superiores a 128.0.0.0/subnet_mask.

    Los siguientes rangos ilustran estos requisitos:

    • Se admite 10.1.0.0/16 en una VPC y 10.2.0.0/16 en la otra VPC.

    • Se admite 172.1.0.0/16 en una VPC y 172.2.0.0/16 en la otra VPC.

    • No se admite 10.1.0.0/16 en una VPC y 10.1.0.0/16 en la otra VPC porque los rangos se superponen.

    • No se admite 10.1.0.0/16 en una VPC y 172.1.0.0/16 en la otra VPC porque una está por debajo de 128.0.0.0/subnet_mask y la otra por encima de 128.0.0.0/subnet_mask.

    Para obtener información acerca de los bloques de CIDR, consulte Bloques de CIDR de VPC en la Guía del usuario de Amazon VPC.

  2. En cada VPC, asegúrese de que tanto la resolución de DNS como los nombres de host DNS están habilitados.

    Para obtener instrucciones, consulte Ver y actualizar los atributos de DNS de su VPC en la Guía del usuario de Amazon VPC.

  3. Configure las VPC para poder enrutar el tráfico entre ellas de una de las siguientes maneras:

    • Cree una conexión de emparejamiento de VPC entre las VPC.

      Para obtener instrucciones, consulte Create a VPC peering connection en la Guía de emparejamiento de Amazon VPC. En cada VPC, asegúrese de que haya reglas entrantes para los grupos de seguridad que hagan referencia a grupos de seguridad de la VPC emparejada. De este modo, garantizará el tráfico entrante y saliente de las instancias asociadas al grupo de seguridad al que se hace referencia en la VPC del mismo nivel. Para obtener instrucciones, consulte Update your security groups to reference peer security groups en la Guía de interconexión de Amazon VPC.

    • Cree una puerta de enlace de tránsito entre las VPC.

      Para obtener instrucciones, consulte Getting started with transit gateways en Amazon VPC Transit Gateways. En cada VPC, asegúrese de que haya reglas de entrada para sus grupos de seguridad que permitan el tráfico desde la otra VPC, como reglas de entrada que especifiquen el CIDR de la otra VPC. De este modo, garantizará el tráfico entrante y saliente de las instancias asociadas al grupo de seguridad al que se hace referencia en el clúster activo-activo. Para obtener más información, consulte Controlar el tráfico hacia los recursos de AWS mediante grupos de seguridad en la Guía del usuario de Amazon VPC.

Configuración de parámetros obligatorios para los clústeres activo-activo

Se requieren los siguientes ajustes de parámetros al configurar un clúster activo-activo de RDS para MySQL.

Parámetro Descripción Configuración necesaria

binlog_format

Permite configurar el formato de registro binario. El valor predeterminado de RDS para MySQL es MIXED. Para obtener más información, consulte la documentación de MySQL.

ROW

enforce_gtid_consistency

Aplica la coherencia de GTID en la ejecución de las instrucciones. El valor predeterminado de RDS para MySQL es OFF. Para obtener más información, consulte la documentación de MySQL.

ON

group_replication_group_name

Permite establecer el nombre de Group Replication en un UUID. El formato de UUID es 11111111-2222-3333-4444-555555555555. Para generar un UUID de MySQL, conéctese a una instancia de base de datos MySQL y ejecute SELECT UUID(). El valor debe ser el mismo para todas las instancias de base de datos del clúster activo-activo. Para obtener más información, consulte la documentación de MySQL.

Un UUID de MySQL

gtid-mode

Controla el registro basado en GTID. El valor predeterminado de RDS para MySQL es OFF_PERMISSIVE. Para obtener más información, consulte la documentación de MySQL.

ON

rds.custom_dns_resolution

Especifica si se permite la resolución de DNS desde el servidor DNS de Amazon en la VPC. La resolución de DNS debe estar habilitada cuando Group Replication está habilitado con el parámetro rds.group_replication_enabled. La resolución de DNS no puede estar habilitada cuando Group Replication está deshabilitado con el parámetro rds.group_replication_enabled. Para obtener más información, consulte Servidor DNS de Amazon en la Guía del usuario de Amazon VPC.

1

rds.group_replication_enabled

Especifica si Group Replication está habilitado para una instancia de base de datos. Group Replication debe estar habilitado en una instancia de base de datos de un clúster activo-activo.

1

slave_preserve_commit_order

Controla el orden en que se confirman las transacciones en una réplica. El valor predeterminado de RDS para MySQL es ON. Para obtener más información, consulte la documentación de MySQL.

ON

Conversión de una instancia de base de datos existente en un clúster activo-activo

La versión del motor de base de datos de la instancia de base de datos que desea migrar a un clúster activo-activo debe ser MySQL 8.0.35 o posterior. Si necesita actualizar la versión del motor, consulte Actualización del motor de base de datos MySQL.

Si va a configurar un clúster activo-activo con instancias de base de datos en más de una VPC, asegúrese de completar los requisitos previos que se indican en Requisitos previos de un clúster activo-activo entre VPC.

Realice los siguientes pasos para migrar una instancia de base de datos existente a un clúster activo-activo para RDS para MySQL.

Paso 1: defina los parámetros del clúster activo-activo en uno o más grupos de parámetros personalizados

Las instancias de base de datos de RDS para MySQL de un clúster activo-activo deben estar asociadas a un grupo de parámetros personalizado que tenga la configuración correcta para los parámetros necesarios. Para obtener más información sobre los parámetros y la configuración necesaria para cada uno, consulte Configuración de parámetros obligatorios para los clústeres activo-activo.

Puede configurar estos parámetros en grupos de parámetros nuevos o en grupos de parámetros existentes. Sin embargo, para evitar que afecte accidentalmente a las instancias de base de datos que no forman parte del clúster activo-activo, le recomendamos encarecidamente que cree un nuevo grupo de parámetros personalizado. Las instancias de base de datos de un clúster activo-activo se pueden asociar al mismo grupo de parámetros de base de datos o a diferentes grupos de parámetros de base de datos.

Puede utilizar la AWS Management Console o la AWS CLI para crear un nuevo grupo de parámetros personalizado. Para obtener más información, consulte Creación de un grupo de parámetros de base de datos. En el siguiente ejemplo, se ejecuta el comando de la AWS CLI create-db-parameter-group para crear un grupo de parámetros de base de datos personalizado denominado myactivepg:

Para Linux, macOS o Unix:

aws rds create-db-parameter-group \ --db-parameter-group-name myactivepg \ --db-parameter-group-family mysql8.0 \ --description "Parameter group for active-active clusters"

En Windows:

aws rds create-db-parameter-group ^ --db-parameter-group-name myactivepg ^ --db-parameter-group-family mysql8.0 ^ --description "Parameter group for active-active clusters"

También puede utilizar la AWS Management Console o la AWS CLI para establecer los parámetros del grupo de parámetros personalizado. Para obtener más información, consulte Modificación de parámetros de un grupo de parámetros de base de datos.

En el siguiente ejemplo, se ejecuta el comando de la AWS CLI modify-db-parameter-group para establecer los parámetros:

Para Linux, macOS o Unix:

aws rds modify-db-parameter-group \ --db-parameter-group-name myactivepg \ --parameters "ParameterName='rds.group_replication_enabled',ParameterValue='1',ApplyMethod=pending-reboot" \ "ParameterName='rds.custom_dns_resolution',ParameterValue='1',ApplyMethod=pending-reboot" \ "ParameterName='enforce_gtid_consistency',ParameterValue='ON',ApplyMethod=pending-reboot" \ "ParameterName='gtid-mode',ParameterValue='ON',ApplyMethod=pending-reboot" \ "ParameterName='binlog_format',ParameterValue='ROW',ApplyMethod=immediate" \ "ParameterName='slave_preserve_commit_order',ParameterValue='ON',ApplyMethod=immediate" \ "ParameterName='group_replication_group_name',ParameterValue='11111111-2222-3333-4444-555555555555',ApplyMethod=pending-reboot"

En Windows:

aws rds modify-db-parameter-group ^ --db-parameter-group-name myactivepg ^ --parameters "ParameterName='rds.group_replication_enabled',ParameterValue='1',ApplyMethod=pending-reboot" ^ "ParameterName='rds.custom_dns_resolution',ParameterValue='1',ApplyMethod=pending-reboot" ^ "ParameterName='enforce_gtid_consistency',ParameterValue='ON',ApplyMethod=pending-reboot" ^ "ParameterName='gtid-mode',ParameterValue='ON',ApplyMethod=pending-reboot" ^ "ParameterName='binlog_format',ParameterValue='ROW',ApplyMethod=immediate" ^ "ParameterName='slave_preserve_commit_order',ParameterValue='ON',ApplyMethod=immediate" ^ "ParameterName='group_replication_group_name',ParameterValue='11111111-2222-3333-4444-555555555555',ApplyMethod=pending-reboot"

Paso 2: asocie la instancia de base de datos a un grupo de parámetros de base de datos que tenga configurados los parámetros de Group Replication necesarios

Asocie la instancia de base de datos a un grupo de parámetros que haya creado o modificado en el paso anterior. Para obtener más información, consulte Asociación de un grupo de parámetros de base de datos con una instancia de base de datos.

Reinicie la instancia de base de datos para que se aplique la nueva configuración de los parámetros. Para obtener más información, consulte Reinicio de una instancia de base de datos.

Paso 3: cree el clúster activo-activo

En el grupo de parámetros de base de datos asociado a la instancia de base de datos, defina el parámetro group_replication_group_seeds en el punto de conexión de la instancia de base de datos que va a convertir.

Puede usar la AWS Management Console o la AWS CLI para establecer el parámetro. No es necesario reiniciar la instancia de base de datos después de configurar este parámetro. Para obtener más información acerca de cómo configurar los parámetros, consulte Modificación de parámetros de un grupo de parámetros de base de datos.

En el siguiente ejemplo, se ejecuta el comando de la AWS CLI modify-db-parameter-group para establecer los parámetros:

Para Linux, macOS o Unix:

aws rds modify-db-parameter-group \ --db-parameter-group-name myactivepg \ --parameters "ParameterName='group_replication_group_seeds',ParameterValue='myactivedb1.123456789012.us-east-1.rds.amazonaws.com:3306',ApplyMethod=immediate"

En Windows:

aws rds modify-db-parameter-group ^ --db-parameter-group-name myactivepg ^ --parameters "ParameterName='group_replication_group_seeds',ParameterValue='myactivedb1.123456789012.us-east-1.rds.amazonaws.com:3306',ApplyMethod=immediate"

Paso 4: cree instancias de base de datos de RDS para MySQL adicionales para el clúster activo-activo

Para crear instancias de base de datos adicionales para el clúster activo-activo, realice una recuperación en un momento dado de la instancia de base de datos que va a convertir. Para obtener más información, consulte Adición de una instancia de base de datos a un clúster activo-activo mediante la recuperación a un momento dado.

Los clústeres activo-activo pueden tener hasta nueve instancias de base de datos. Realice una recuperación a un momento dado de la instancia de base de datos hasta que tenga el número de instancias de base de datos que desea para el clúster. Cuando realice una recuperación en un momento dado, asegúrese de asociar la instancia de base de datos que va a añadir a un grupo de parámetros de base de datos que tenga rds.group_replication_enabled establecido en 1. De lo contrario, Group Replication no se iniciará en la instancia de base de datos recién agregada.

Paso 5: inicialice el grupo en la instancia de base de datos que va a convertir

Inicialice el grupo e inicie la replicación:

  1. Conéctese a la instancia de base de datos que va a convertir en un cliente SQL. Para obtener más información sobre la conexión a una instancia de base de datos de RDS para MySQL, consulte Conexión a una instancia de base de datos que ejecuta el motor de base de datos de MySQL.

  2. En el cliente de SQL, ejecute los siguientes procedimientos almacenados y sustituya group_replication_user_password por la contraseña del usuario rdsgrprepladmin. El usuario rdsgrprepladmin está reservado para las conexiones de Group Replication de un clúster activo-activo. La contraseña de este usuario debe ser la misma en todas las instancias de base de datos de un clúster activo-activo.

    call mysql.rds_set_configuration('binlog retention hours', 168); -- 7 days binlog call mysql.rds_group_replication_create_user('group_replication_user_password'); call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password'); call mysql.rds_group_replication_start(1);

    En este ejemplo, se establece el valor de binlog retention hours en 168, lo que significa que los archivos de registro binarios se conservan durante siete días en la instancia de base de datos. Puede ajustar este valor de acuerdo con sus requisitos.

    En este ejemplo, se especifica 1 en el procedimiento almacenado mysql.rds_group_replication_start para que se inicialice un grupo nuevo con la instancia de base de datos actual.

    Para obtener más información acerca de los procedimientos almacenados a los que se hace referencia en el ejemplo, consulte Administración de clústeres activo-activo.

Paso 6: inicie la replicación en las demás instancias de base de datos del clúster activo-activo

Para cada una de las instancias de base de datos del clúster activo-activo, utilice un cliente de SQL para conectarse a la instancia y ejecute los siguientes procedimientos almacenados. Sustituya group_replication_user_password por la contraseña del usuario rdsgrprepladmin.

call mysql.rds_set_configuration('binlog retention hours', 168); -- 7 days binlog call mysql.rds_group_replication_create_user('group_replication_user_password'); call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password'); call mysql.rds_group_replication_start(0);

En este ejemplo, se establece el valor de binlog retention hours en 168, lo que significa que los archivos de registro binarios se conservan durante siete días en cada instancia de base de datos. Puede ajustar este valor de acuerdo con sus requisitos.

En este ejemplo, se especifica 0 en el procedimiento almacenado mysql.rds_group_replication_start para que se una la instancia de base de datos actual a un grupo existente.

sugerencia

Asegúrese de ejecutar estos procedimientos almacenados en todas las demás instancias de base de datos del clúster activo-activo.

Paso 7: (recomendado) compruebe el estado del clúster activo-activo

Para asegurarse de que cada miembro del clúster esté configurado correctamente, compruebe el estado del clúster conectándose a una instancia de base de datos del clúster activo-activo y ejecutando el siguiente comando SQL:

SELECT * FROM performance_schema.replication_group_members;

En el resultado se debería mostrar ONLINE para el MEMBER_STATE de cada instancia de base de datos, como en el siguiente ejemplo de salida:

+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK | +---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+ | group_replication_applier | 9854d4a2-5d7f-11ee-b8ec-0ec88c43c251 | ip-10-15-3-137 | 3306 | ONLINE | PRIMARY | 8.0.35 | MySQL | | group_replication_applier | 9e2e9c28-5d7f-11ee-8039-0e5d58f05fef | ip-10-15-3-225 | 3306 | ONLINE | PRIMARY | 8.0.35 | MySQL | | group_replication_applier | a6ba332d-5d7f-11ee-a025-0a5c6971197d | ip-10-15-1-83 | 3306 | ONLINE | PRIMARY | 8.0.35 | MySQL | +---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+ 3 rows in set (0.00 sec)

Para obtener información acerca de los valores posibles de MEMBER_STATE, consulte Group Replication Server States en la documentación de MySQL.

Configuración de un clúster activo-activo con nuevas instancias de base de datos

Realice los siguientes pasos para configurar un clúster activo-activo mediante las nuevas instancias de base de datos de RDS para MySQL.

Si va a configurar un clúster activo-activo con instancias de base de datos en más de una VPC, asegúrese de completar los requisitos previos que se indican en Requisitos previos de un clúster activo-activo entre VPC.

Paso 1: defina los parámetros del clúster activo-activo en uno o más grupos de parámetros personalizados

Las instancias de base de datos de RDS para MySQL de un clúster activo-activo deben estar asociadas a un grupo de parámetros personalizado que tenga la configuración correcta para los parámetros necesarios. Para obtener más información sobre los parámetros y la configuración necesaria para cada uno, consulte Configuración de parámetros obligatorios para los clústeres activo-activo.

Puede configurar estos parámetros en grupos de parámetros nuevos o en grupos de parámetros existentes. Sin embargo, para evitar que afecte accidentalmente a las instancias de base de datos que no forman parte del clúster activo-activo, le recomendamos encarecidamente que cree un nuevo grupo de parámetros personalizado. Las instancias de base de datos de un clúster activo-activo se pueden asociar al mismo grupo de parámetros de base de datos o a diferentes grupos de parámetros de base de datos.

Puede utilizar la AWS Management Console o la AWS CLI para crear un nuevo grupo de parámetros personalizado. Para obtener más información, consulte Creación de un grupo de parámetros de base de datos. En el siguiente ejemplo, se ejecuta el comando de la AWS CLI create-db-parameter-group para crear un grupo de parámetros de base de datos personalizado denominado myactivepg:

Para Linux, macOS o Unix:

aws rds create-db-parameter-group \ --db-parameter-group-name myactivepg \ --db-parameter-group-family mysql8.0 \ --description "Parameter group for active-active clusters"

En Windows:

aws rds create-db-parameter-group ^ --db-parameter-group-name myactivepg ^ --db-parameter-group-family mysql8.0 ^ --description "Parameter group for active-active clusters"

También puede utilizar la AWS Management Console o la AWS CLI para establecer los parámetros del grupo de parámetros personalizado. Para obtener más información, consulte Modificación de parámetros de un grupo de parámetros de base de datos.

En el siguiente ejemplo, se ejecuta el comando de la AWS CLI modify-db-parameter-group para establecer los parámetros:

Para Linux, macOS o Unix:

aws rds modify-db-parameter-group \ --db-parameter-group-name myactivepg \ --parameters "ParameterName='rds.group_replication_enabled',ParameterValue='1',ApplyMethod=pending-reboot" \ "ParameterName='rds.custom_dns_resolution',ParameterValue='1',ApplyMethod=pending-reboot" \ "ParameterName='enforce_gtid_consistency',ParameterValue='ON',ApplyMethod=pending-reboot" \ "ParameterName='gtid-mode',ParameterValue='ON',ApplyMethod=pending-reboot" \ "ParameterName='binlog_format',ParameterValue='ROW',ApplyMethod=immediate" \ "ParameterName='slave_preserve_commit_order',ParameterValue='ON',ApplyMethod=immediate" \ "ParameterName='group_replication_group_name',ParameterValue='11111111-2222-3333-4444-555555555555',ApplyMethod=pending-reboot"

En Windows:

aws rds modify-db-parameter-group ^ --db-parameter-group-name myactivepg ^ --parameters "ParameterName='rds.group_replication_enabled',ParameterValue='1',ApplyMethod=pending-reboot" ^ "ParameterName='rds.custom_dns_resolution',ParameterValue='1',ApplyMethod=pending-reboot" ^ "ParameterName='enforce_gtid_consistency',ParameterValue='ON',ApplyMethod=pending-reboot" ^ "ParameterName='gtid-mode',ParameterValue='ON',ApplyMethod=pending-reboot" ^ "ParameterName='binlog_format',ParameterValue='ROW',ApplyMethod=immediate" ^ "ParameterName='slave_preserve_commit_order',ParameterValue='ON',ApplyMethod=immediate" ^ "ParameterName='group_replication_group_name',ParameterValue='11111111-2222-3333-4444-555555555555',ApplyMethod=pending-reboot"

Paso 2: cree nuevas instancias de base de datos de RDS para MySQL para el clúster activo-activo

Los clústeres activo-activo son compatibles con las instancias de base de datos de RDS para MySQL de la versión 8.0.35 y posteriores. Puede crear hasta nueve instancias de base de datos nuevas para el clúster.

Puede utilizar la AWS Management Console o la AWS CLI para crear las nuevas instancias de base de datos. Para obtener más información acerca de la creación de una instancia de base de datos, consulte Creación de una instancia de base de datos de Amazon RDS. Al crear la instancia de base de datos, asóciela a un grupo de parámetros de base de datos que haya creado o modificado en el paso anterior.

Paso 4: especifique las instancias de base de datos del clúster activo-activo

En el grupo de parámetros de base de datos asociado a cada instancia de base de datos, defina el parámetro group_replication_group_seeds en los puntos de conexión de las instancias de base de datos que desee incluir en el clúster.

Puede usar la AWS Management Console o la AWS CLI para establecer el parámetro. No es necesario reiniciar la instancia de base de datos después de configurar este parámetro. Para obtener más información acerca de cómo configurar los parámetros, consulte Modificación de parámetros de un grupo de parámetros de base de datos.

En el siguiente ejemplo, se ejecuta el comando de la AWS CLI modify-db-parameter-group para establecer los parámetros:

Para Linux, macOS o Unix:

aws rds modify-db-parameter-group \ --db-parameter-group-name myactivepg \ --parameters "ParameterName='group_replication_group_seeds',ParameterValue='myactivedb1.123456789012.us-east-1.rds.amazonaws.com:3306,myactivedb2.123456789012.us-east-1.rds.amazonaws.com:3306,myactivedb3.123456789012.us-east-1.rds.amazonaws.com:3306',ApplyMethod=immediate"

En Windows:

aws rds modify-db-parameter-group ^ --db-parameter-group-name myactivepg ^ --parameters "ParameterName='group_replication_group_seeds',ParameterValue='myactivedb1.123456789012.us-east-1.rds.amazonaws.com:3306,myactivedb2.123456789012.us-east-1.rds.amazonaws.com:3306,myactivedb3.123456789012.us-east-1.rds.amazonaws.com:3306',ApplyMethod=immediate"
sugerencia

Asegúrese de configurar el parámetro group_replication_group_seeds en cada grupo de parámetros de base de datos que esté asociado a una instancia de base de datos del clúster activo-activo.

Paso 5: inicialice el grupo en una instancia de base de datos e inicie la replicación

Puede elegir cualquier base de datos nueva para inicializar el grupo e iniciar la replicación. Para ello, complete los siguientes pasos.

  1. Elija una instancia de base de datos en el clúster activo-activo y conéctese a esa instancia de base de datos en un cliente de SQL. Para obtener más información sobre la conexión a una instancia de base de datos de RDS para MySQL, consulte Conexión a una instancia de base de datos que ejecuta el motor de base de datos de MySQL.

  2. En el cliente de SQL, ejecute los siguientes procedimientos almacenados y sustituya group_replication_user_password por la contraseña del usuario rdsgrprepladmin. El usuario rdsgrprepladmin está reservado para las conexiones de Group Replication de un clúster activo-activo. La contraseña de este usuario debe ser la misma en todas las instancias de base de datos de un clúster activo-activo.

    call mysql.rds_set_configuration('binlog retention hours', 168); -- 7 days binlog call mysql.rds_group_replication_create_user('group_replication_user_password'); call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password'); call mysql.rds_group_replication_start(1);

    En este ejemplo, se establece el valor de binlog retention hours en 168, lo que significa que los archivos de registro binarios se conservan durante siete días en la instancia de base de datos. Puede ajustar este valor de acuerdo con sus requisitos.

    En este ejemplo, se especifica 1 en el procedimiento almacenado mysql.rds_group_replication_start para que se inicialice un grupo nuevo con la instancia de base de datos actual.

    Para obtener más información acerca de los procedimientos almacenados a los que se hace referencia en el ejemplo, consulte Administración de clústeres activo-activo.

Paso 6: inicie la replicación en las demás instancias de base de datos del clúster activo-activo

Para cada una de las instancias de base de datos del clúster activo-activo, utilice un cliente de SQL para conectarse a la instancia y ejecute los siguientes procedimientos almacenados. Sustituya group_replication_user_password por la contraseña del usuario rdsgrprepladmin.

call mysql.rds_set_configuration('binlog retention hours', 168); -- 7 days binlog call mysql.rds_group_replication_create_user('group_replication_user_password'); call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password'); call mysql.rds_group_replication_start(0);

En este ejemplo, se establece el valor de binlog retention hours en 168, lo que significa que los archivos de registro binarios se conservan durante siete días en cada instancia de base de datos. Puede ajustar este valor de acuerdo con sus requisitos.

En este ejemplo, se especifica 0 en el procedimiento almacenado mysql.rds_group_replication_start para que se una la instancia de base de datos actual a un grupo existente.

sugerencia

Asegúrese de ejecutar estos procedimientos almacenados en todas las demás instancias de base de datos del clúster activo-activo.

Paso 7: (recomendado) compruebe el estado del clúster activo-activo

Para asegurarse de que cada miembro del clúster esté configurado correctamente, compruebe el estado del clúster conectándose a una instancia de base de datos del clúster activo-activo y ejecutando el siguiente comando SQL:

SELECT * FROM performance_schema.replication_group_members;

En el resultado se debería mostrar ONLINE para el MEMBER_STATE de cada instancia de base de datos, como en el siguiente ejemplo de salida:

+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK | +---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+ | group_replication_applier | 9854d4a2-5d7f-11ee-b8ec-0ec88c43c251 | ip-10-15-3-137 | 3306 | ONLINE | PRIMARY | 8.0.35 | MySQL | | group_replication_applier | 9e2e9c28-5d7f-11ee-8039-0e5d58f05fef | ip-10-15-3-225 | 3306 | ONLINE | PRIMARY | 8.0.35 | MySQL | | group_replication_applier | a6ba332d-5d7f-11ee-a025-0a5c6971197d | ip-10-15-1-83 | 3306 | ONLINE | PRIMARY | 8.0.35 | MySQL | +---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+ 3 rows in set (0.00 sec)

Para obtener información acerca de los valores posibles de MEMBER_STATE, consulte Group Replication Server States en la documentación de MySQL.

Paso 8: (opcional) importe los datos a una instancia de base de datos del clúster activo-activo

Puede importar datos desde una base de datos MySQL a una instancia de base de datos del clúster activo-activo. Una vez importados los datos, Group Replication los replica en las demás instancias de base de datos del clúster.

Para obtener información acerca de cómo importar los datos, consulte Importación de datos a una base de datos de Amazon RDS MariaDB o MySQL con un tiempo de inactividad reducido.

Adición de una instancia de base de datos en un clúster activo-activo

Para añadir una instancia de base de datos a un clúster activo-activo, restaure una instantánea de base de datos o una instancia de base de datos a un momento dado. Un clúster activo-activo puede incluir hasta nueve instancias de base de datos.

Cuando recupera una instancia de base de datos a un momento dado, normalmente incluye transacciones más recientes que las de una instancia de base de datos que se haya restaurado a partir de una instantánea de base de datos. Cuando la instancia de base de datos tiene transacciones más recientes, es necesario aplicar menos transacciones al iniciar la replicación. Por lo tanto, suele ser más rápido utilizar la recuperación a un momento dado para agregar una instancia de base de datos a un clúster que realizar la restauración a partir de una instantánea de base de datos.

Adición de una instancia de base de datos a un clúster activo-activo mediante la recuperación a un momento dado

Para agregar una instancia de base de datos a un clúster activo-activo, realice una recuperación a un momento dado en una instancia de base de datos del clúster.

Para obtener información sobre la recuperación de una instancia de base de datos a un momento dado en una Región de AWS diferente, consulte Replicación de las copias de seguridad automatizadas en otra Región de AWS.

Adición de una instancia de base de datos a un clúster activo-activo mediante la recuperación a un momento dado
  1. Cree una nueva instancia de base de datos realizando una recuperación a momento dado en una instancia de base de datos del clúster activo-activo.

    Puede realizar una recuperación a un momento dado en cualquier instancia de base de datos del clúster para crear la nueva instancia de base de datos. Para obtener más información, consulte Restauración de una instancia de base de datos a un momento especificado.

    importante

    Durante la recuperación a un momento dado, asocie la nueva instancia de base de datos a un grupo de parámetros de base de datos que tenga establecidos los parámetros del clúster activo-activo. De lo contrario, Group Replication no se iniciará en la nueva instancia de base de datos. Para obtener más información sobre los parámetros y la configuración necesaria para cada uno, consulte Configuración de parámetros obligatorios para los clústeres activo-activo.

    sugerencia

    Si realiza una instantánea de la instancia de base de datos antes de iniciar la recuperación a un momento dado, es posible que pueda reducir el tiempo necesario para aplicar las transacciones en la nueva instancia de base de datos.

  2. Agregue la instancia de base de datos al parámetro group_replication_group_seeds de cada grupo de parámetros de base de datos asociado a una instancia de base de datos en el clúster activo-activo, incluido el grupo de parámetros de base de datos que asoció a la nueva instancia de base de datos.

    Para obtener más información acerca de cómo configurar los parámetros, consulte Modificación de parámetros de un grupo de parámetros de base de datos.

  3. En un cliente SQL, conéctese a la nueva instancia de base de datos y llame al procedimiento almacenado mysql.rds_group_replication_set_recovery_channel. Sustituya group_replication_user_password por la contraseña del usuario rdsgrprepladmin.

    call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password');
  4. Con el cliente SQL, llame al procedimiento almacenado mysql.rds_group_replication_start para iniciar la replicación:

    call mysql.rds_group_replication_start(0);

Adición de una instancia de base de datos en un clúster activo-activo mediante una instantánea de base de datos

Para agregar una instancia de base de datos a un clúster activo-activo, cree una instantánea de base de datos de una instancia de base de datos del clúster y, a continuación, restaure la instantánea de base de datos.

Para obtener más información acerca de cómo copiar una instantánea en una Región de AWS diferente, consulte Copia de instantáneas entre regiones.

Adición de una instancia de base de datos en un clúster activo-activo mediante una instantánea de base de datos
  1. Cree una instantánea de base de datos de una instancia de base de datos en el clúster activo-activo.

    Puede crear una instantánea de base de datos de una instancia de base de datos en el clúster. Para obtener más información, consulte Creación de una instantánea de base de datos para una instancia de base de datos single-AZ.

  2. Restaure una instancia de base de datos a partir de una instantánea de base de datos.

    Durante la operación de restauración de la instantánea, asocie la nueva instancia de base de datos a un grupo de parámetros de base de datos que tenga establecidos los parámetros del clúster activo-activo. Para obtener más información sobre los parámetros y la configuración necesaria para cada uno, consulte Configuración de parámetros obligatorios para los clústeres activo-activo.

    Para obtener información acerca de cómo restaurar una instancia de base de datos a partir una instantánea de base de datos, consulte Restauración desde una instantánea de un de base de datos.

  3. Agregue la instancia de base de datos al parámetro group_replication_group_seeds de cada grupo de parámetros de base de datos asociado a una instancia de base de datos en el clúster activo-activo, incluido el grupo de parámetros de base de datos que asoció a la nueva instancia de base de datos.

    Para obtener más información acerca de cómo configurar los parámetros, consulte Modificación de parámetros de un grupo de parámetros de base de datos.

  4. En un cliente SQL, conéctese a la nueva instancia de base de datos y llame al procedimiento almacenado mysql.rds_group_replication_set_recovery_channel. Sustituya group_replication_user_password por la contraseña del usuario rdsgrprepladmin.

    call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password');
  5. Con el cliente SQL, llame al procedimiento almacenado mysql.rds_group_replication_start para iniciar la replicación:

    call mysql.rds_group_replication_start(0);

Monitorización de clústeres activo-activo

Puede monitorizar el clúster activo-activo conectándose a una instancia de base de datos del clúster y ejecutando el siguiente comando SQL:

SELECT * FROM performance_schema.replication_group_members;

En el resultado se debería mostrar ONLINE para el MEMBER_STATE de cada instancia de base de datos, como en el siguiente ejemplo de salida:

+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK | +---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+ | group_replication_applier | 9854d4a2-5d7f-11ee-b8ec-0ec88c43c251 | ip-10-15-3-137 | 3306 | ONLINE | PRIMARY | 8.0.35 | MySQL | | group_replication_applier | 9e2e9c28-5d7f-11ee-8039-0e5d58f05fef | ip-10-15-3-225 | 3306 | ONLINE | PRIMARY | 8.0.35 | MySQL | | group_replication_applier | a6ba332d-5d7f-11ee-a025-0a5c6971197d | ip-10-15-1-83 | 3306 | ONLINE | PRIMARY | 8.0.35 | MySQL | +---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+ 3 rows in set (0.00 sec)

Para obtener información acerca de los valores posibles de MEMBER_STATE, consulte Group Replication Server States en la documentación de MySQL.

Detención de Group Replication en una instancia de base de datos de un clúster activo-activo

Puede detener Group Replication en una instancia de base de datos de un clúster activo-activo. Al detener Group Replication, la instancia de base de datos pasa al modo de solo superlectura hasta que se reinicie la replicación o se elimine la instancia de base de datos del clúster activo-activo. Para obtener información sobre el modo de solo superlectura, consulte la documentación de MySQL.

Detención temporal de Group Replication para un clúster activo-activo
  1. Conéctese a una instancia de base de datos en el clúster activo-activo utilizando un cliente SQL.

    Para obtener más información sobre la conexión a una instancia de base de datos de RDS para MySQL, consulte Conexión a una instancia de base de datos que ejecuta el motor de base de datos de MySQL.

  2. En el cliente SQL, llame al procedimiento almacenado mysql.rds_group_replication_stop:

    call mysql.rds_group_replication_stop();

Cambio de nombre de una instancia de base de datos en un clúster activo-activo

Puede cambiar el nombre de una instancia de base de datos en un clúster activo-activo. Para cambiar el nombre de más de una instancia de base de datos en un clúster activo-activo, debe hacerlo de una en una. Por lo tanto, cambie el nombre de una instancia de base de datos y vuelva a unirla al clúster antes de cambiar el nombre de la siguiente.

Cambio de nombre de una instancia de base de datos en un clúster activo-activo
  1. Conéctese a la instancia de base de datos en un cliente SQL y llame al procedimiento almacenado mysql.rds_group_replication_stop.

    call mysql.rds_group_replication_stop();
  2. Para cambiar el nombre de la instancia de base de datos, siga las instrucciones que se indican en Cambio del nombre de una instancia de base de datos.

  3. Modifique el parámetro group_replication_group_seeds en cada grupo de parámetros de base de datos asociado a una instancia de base de datos del clúster activo-activo.

    En la configuración de los parámetros, sustituya el punto de conexión de la instancia de base de datos anterior por el nuevo punto de conexión de la instancia de base de datos. Para obtener más información acerca de cómo configurar los parámetros, consulte Modificación de parámetros de un grupo de parámetros de base de datos.

  4. Conéctese a la instancia de base de datos en un cliente SQL y llame al procedimiento almacenado mysql.rds_group_replication_start.

    call mysql.rds_group_replication_start(0);

Eliminación de una instancia de base de datos de un clúster activo-activo

Al eliminar una instancia de base de datos de un clúster activo-activo, esta se convierte en una instancia de base de datos independiente.

Eliminación de una instancia de base de datos de un clúster activo-activo
  1. Conéctese a la instancia de base de datos en un cliente SQL y llame al procedimiento almacenado mysql.rds_group_replication_stop.

    call mysql.rds_group_replication_stop();
  2. Modifique el parámetro group_replication_group_seeds de las instancias de base de datos que permanecerán en el clúster activo-activo.

    En el parámetro group_replication_group_seeds, elimine la instancia de base de datos que va a eliminar del clúster activo-activo. Para obtener más información acerca de cómo configurar los parámetros, consulte Modificación de parámetros de un grupo de parámetros de base de datos.

  3. Modifique los parámetros de la instancia de base de datos que va a eliminar del clúster activo-activo para que deje de formar parte del clúster.

    Puede asociar la instancia de base de datos a un grupo de parámetros diferente o modificar los parámetros del grupo de parámetros de base de datos asociado a la instancia de base de datos. Los parámetros que se van a modificar incluyen group_replication_group_name, rds.group_replication_enabled y group_replication_group_seeds. Para obtener más información acerca de los parámetros de clúster activo-activo, consulte Configuración de parámetros obligatorios para los clústeres activo-activo.

    Si modifica los parámetros de un grupo de parámetros de base de datos, asegúrese de que el grupo de parámetros de base de datos no esté asociado a otras instancias de base de datos del clúster activo-activo.

  4. Reinicie la instancia de base de datos que ha eliminado del clúster activo-activo para que se aplique la nueva configuración de parámetros.

    Para obtener más información, consulte Reinicio de una instancia de base de datos.

Limitaciones de los clústeres activo-activo de RDS para MySQL

Las siguientes limitaciones se aplican a los clústeres activo-activo de RDS para MySQL:

  • El nombre de usuario maestro no puede ser rdsgrprepladmin para las instancias de base de datos de un clúster activo-activo. Este nombre de usuario está reservado para las conexiones de Group Replication.

  • En el caso de las instancias de base de datos con réplicas de lectura en clústeres activo-activo, un estado de replicación prolongado que no sea Replicating puede provocar que los archivos de registro superen los límites de almacenamiento. Para obtener más información acerca del estado de las réplicas de lectura, consulte Monitoreo de la replicación de lectura.

  • Las implementaciones azul/verde no son compatibles con instancias de base de datos en un clúster activo-activo. Para obtener más información, consulte Uso de las implementaciones azul/verde de Amazon RDS para actualizar las bases de datos.

  • La autenticación Kerberos no es compatible con las instancias de base de datos en un clúster activo-activo. Para obtener más información, consulte Uso de la autenticación Kerberos para MySQL.

  • Las instancias de base de datos de un clúster de base de datos multi-AZ no se pueden agregar a un clúster activo-activo.

    Sin embargo, las instancias de base de datos en una implementación de instancias de base de datos multi-AZ se pueden agregar a un clúster activo-activo.

    Para obtener más información, consulte Configuración y administración de una implementación multi-AZ.

  • Las tablas que no tienen una clave principal no se replican en un clúster activo-activo porque el complemento Group Replication rechaza las escrituras.

  • Las tablas que no son de InnoDB no se replican en un clúster activo-activo.

  • Los clústeres activo-activo no admiten instrucciones DML y DDL simultáneas en distintas instancias de base de datos del clúster.

  • No puede configurar un clúster activo-activo para que utilice el modo principal único para el modo de replicación del grupo. Para esta configuración, se recomienda utilizar en su lugar un clúster de base de datos multi-AZ. Para obtener más información, consulte Implementaciones de clústeres de base de datos Multi-AZ.

  • Las instancias de base de datos de un clúster activo-activo no admiten la replicación de varios orígenes.

  • Un clúster activo-activo entre regiones no puede aplicar la verificación de la autoridad de certificación (CA) en las conexiones de Group Replication.