Administrar réplicas de lectura

En esta página, se describe cómo administrar réplicas de lectura. Estas operaciones incluyen inhabilitar y habilitar la replicación, promover una réplica, configurar la replicación paralela y verificar el estado de la replicación.

Para obtener más información sobre cómo funciona la replicación, consulta Replicación en Cloud SQL.

Inhabilitar replicación

Según la configuración predeterminada, una réplica se inicia con su habilitación. Sin embargo, puedes inhabilitar la replicación, por ejemplo, para depurar o analizar el estado de una instancia. Cuando estés listo, habilita de nuevo la replicación de forma explícita. Inhabilitar o volver a habilitar la replicación no reinicia la instancia de réplica.

Cuando se inhabilita la replicación, no se detiene la instancia de réplica, sino que se convierte en una instancia de solo lectura que ya no se replica a partir de su instancia principal. Se te seguirá cobrando por la instancia. En la réplica inhabilitada, puedes volver a habilitar la replicación, borrar la réplica o ascenderla a una instancia independiente.

Para inhabilitar la replicación:

Console

  1. En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Haz clic en el nombre de una instancia de réplica para seleccionarla.
  3. Haz clic en Inhabilitar replicación en la barra de botones.
  4. Haz clic en Aceptar.

gcloud

gcloud sql instances patch REPLICA_NAME \
--no-enable-database-replication

REST v1

Para ejecutar este comando cURL en una ventana de línea de comandos, debes adquirir un token de acceso con el comando gcloud auth print-access-token. También puedes usar el Explorador de API en la página de parches de instancias para enviar la solicitud a la API de REST.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • project-id: El ID del proyecto
  • replica-name: El nombre de la instancia de réplica

Método HTTP y URL:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name

Cuerpo JSON de la solicitud:

{
  "settings":
  {
    "databaseReplicationEnabled": "False"
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

REST v1beta4

Para ejecutar este comando cURL en una ventana de línea de comandos, debes adquirir un token de acceso con el comando gcloud auth print-access-token. También puedes usar el Explorador de API en la página de parches de instancias para enviar la solicitud a la API de REST.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • project-id: El ID del proyecto
  • replica-name: El nombre de la instancia de réplica

Método HTTP y URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name

Cuerpo JSON de la solicitud:

{
  "settings":
  {
    "databaseReplicationEnabled": "False"
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

Habilitar replicación

Si una réplica no se repitió durante mucho tiempo, tardará más en alcanzar a la instancia principal. En este caso, borra la réplica y crea una nueva.

Para habilitar la replicación:

Console

  1. En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Haz clic en el nombre de una instancia de réplica para seleccionarla.
  3. Haz clic en Habilitar replicación.
  4. Haga clic en Ok.

gcloud

gcloud sql instances patch REPLICA_NAME \
--enable-database-replication

REST v1

Para ejecutar este comando cURL en una ventana de línea de comandos, debes adquirir un token de acceso con el comando gcloud auth print-access-token. También puedes usar el Explorador de API en la página de parches de instancias para enviar la solicitud a la API de REST.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • project-id: El ID del proyecto
  • replica-name: El nombre de la instancia de réplica

Método HTTP y URL:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name

Cuerpo JSON de la solicitud:

{
  "settings":
  {
    "databaseReplicationEnabled": "True"
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

REST v1beta4

Para ejecutar este comando cURL en una ventana de línea de comandos, debes adquirir un token de acceso con el comando gcloud auth print-access-token. También puedes usar el Explorador de API en la página de parches de instancias para enviar la solicitud a la API de REST.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • project-id: El ID del proyecto
  • replica-name: El nombre de la instancia de réplica

Método HTTP y URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name

Cuerpo JSON de la solicitud:

{
  "settings":
  {
    "databaseReplicationEnabled": "True"
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

Ascender una réplica

Si asciendes una réplica de lectura, se detendrá la replicación y la instancia pasará a ser una instancia principal de Cloud SQL independiente con funciones de lectura y escritura.

Cuando se ascienden, las réplicas de lectura se configuran de forma automática con copias de seguridad, pero no se configuran automáticamente como instancias con alta disponibilidad (HA). Puedes habilitar la alta disponibilidad después de ascender la réplica como lo harías con cualquier instancia que no sea de réplica. La configuración de una réplica de lectura para alta disponibilidad se realiza de la misma manera que para una instancia principal. Obtén más información sobre cómo configurar la instancia para alta disponibilidad.

Antes de ascender una réplica de lectura, si la instancia principal sigue disponible y entrega contenido a los clientes, debes hacer lo siguiente:

  1. Detén todas las operaciones de escritura en la instancia principal.
  2. Verifica el estado de replicación de la réplica (sigue las instrucciones que se indican en la pestaña Cliente mysql).
  3. Verifica que la réplica se replique y, luego, espera hasta que el retraso de replicación que informa la métrica Seconds_Behind_Master sea 0.

De lo contrario, es posible que a una instancia recién ascendida le falten algunas transacciones confirmadas en la instancia principal.

Para ascender una réplica a una instancia independiente, sigue estos pasos:

Console

  1. En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Haz clic en el nombre de una instancia de réplica para seleccionarla.
  3. Haz clic en Promover réplica.
  4. Haga clic en Ok.

gcloud

gcloud sql instances promote-replica REPLICA_NAME
  

REST v1

Para ejecutar este comando cURL en una ventana de línea de comandos, debes adquirir un token de acceso con el comando gcloud auth print-access-token. También puedes usar el Explorador de API en la página de ascenso de réplicas de instancias para enviar la solicitud a la API de REST.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • project-id: El ID del proyecto
  • replica-name: El nombre de la instancia de réplica

Método HTTP y URL:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name/promoteReplica

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

REST v1beta4

Para ejecutar este comando cURL en una ventana de línea de comandos, debes adquirir un token de acceso con el comando gcloud auth print-access-token. También puedes usar el Explorador de API en la página de ascenso de réplicas de instancias para enviar la solicitud a la API de REST.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • project-id: El ID del proyecto
  • replica-name: El nombre de la instancia de réplica

Método HTTP y URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name/promoteReplica

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

Confirma que la instancia ascendida esté configurada de forma correcta. En particular, considera configurar la instancia para alta disponibilidad si es necesario.

Configurar una replicación paralela

Reducir el retraso de replicación es importante para administrar el rendimiento de la replicación. El retraso de replicación ocurre cuando las actualizaciones de una réplica de lectura se encuentran detrás de las actualizaciones de la instancia principal. En esta sección, se describe cómo los usuarios pueden habilitar la replicación paralela, que puede reducir el retraso de replicación.

En la replicación de MySQL, se usa un subproceso de replicación de SQL para ejecutar las transacciones que se recopilan en el registro de retransmisión en la réplica de lectura. La replicación paralela reduce el retraso de replicación mediante el aumento del número de subprocesos de SQL que funcionan para ejecutar estas transacciones. A veces, las réplicas de lectura con replicación paralela habilitada se denominan réplicas multiproceso.

La replicación paralela está disponible en estas tres situaciones en Cloud SQL para MySQL:

Para simplificar, en esta página se usan los términos "instancia principal" y "réplica de lectura".

Pasos básicos para cambiar las marcas de replicación paralela

Los pasos para habilitar la replicación paralela son los siguientes:

  1. En una réplica de lectura, inhabilita la replicación.
  2. En la réplica de lectura, establece las marcas para la replicación paralela. Usa el comando gcloud para establecer las marcas. La opción de la consola de Google Cloud se inhabilita cuando se inhabilita la replicación.
  3. En la réplica de lectura, habilita la replicación.
  4. De manera opcional, en las instancias principales, configura las marcas para optimizar el rendimiento de la replicación paralela.

Réplicas de lectura: Marcas para la replicación paralela

Cloud SQL para MySQL admite varias marcas para la replicación paralela en réplicas de lectura. Para obtener información sobre las marcas, haz clic en estos vínculos a la documentación de MySQL 8.0:

Cambiar estas marcas no reinicia la réplica de lectura.

En la siguiente tabla, se muestran los rangos permitidos y los valores predeterminados para estas marcas:

Marca de réplica de lectura Valores permitidos MySQL 5.7 (valor predeterminado) MySQL 8.0 (valor predeterminado)
slave_parallel_workers 0-1024 0 0 (MySQL 8.0.26 y versiones anteriores)
4 (MySQL 8.0.27 y versiones posteriores)
slave_parallel_type DATABASE, LOGICAL_CLOCK DATABASE DATABASE (MySQL 8.0.26 y versiones anteriores)
LOGICAL_CLOCK (MySQL 8.0.27 y versiones posteriores)
slave_preserve_commit_order ON, OFF OFF OFF (MySQL 8.0.26 y versiones anteriores)
ON (MySQL 8.0.27 y versiones posteriores)
slave_pending_jobs_size_max 1024-1 GB 16 MB 128 MB

La marca slave_preserve_commit_order evita brechas en la secuencia de transacciones ejecutadas del registro de retransmisión de la réplica.

La configuración de slave_preserve_commit_order=1 requiere lo siguiente:

La marca slave_pending_jobs_size_max establece la memoria máxima (en bytes) disponible para las colas del aplicador que contienen eventos que aún no se aplicaron.

Instancia principal: Marcas para la replicación paralela

Cloud SQL para MySQL admite varias marcas que se pueden usar en una instancia principal. Puedes usar estas marcas para ajustar el rendimiento de la replicación de las réplicas de lectura asociadas con la replicación paralela habilitada. Para obtener información sobre las marcas, haz clic en estos vínculos a la documentación de MySQL 8.0:

Cambiar estas marcas no reinicia la instancia principal.

En la siguiente tabla, se muestran los rangos permitidos y los valores predeterminados para estas marcas:

Marca de la instancia principal Valores permitidos MySQL 5.7 (valor predeterminado) MySQL 8.0 (valor predeterminado)
binlog_transaction_dependency_history_size 1-1000000 25000 25000
binlog_transaction_dependency_tracking COMMIT_ORDER, WRITESET, WRITESET_SESSION COMMIT_ORDER WRITESET
transaction_write_set_extraction OFF, MURMUR32, XXHASH64 OFF XXHASH64

En MySQL 5.7, si binlog_transaction_dependency_tracking se configura como WRITESET o WRITESET_SESSION, entonces transaction_write_set_extraction se debe establecer en un valor que no sea OFF (XXHASH64 o MURMUR32).

Comprobar el estado de la replicación

Cuando visualizas una instancia de réplica con la consola de Google Cloud o accedes a la instancia con un cliente de administración, obtienes los detalles de la replicación, incluidos el estado y las métricas. Cuando usas gcloud, obtienes un breve resumen de la configuración de la replicación.

Antes de verificar el estado de replicación de una instancia de réplica de Cloud SQL, usa el comando
gcloud sql instances describe para mostrar el estado de la instancia. Como resultado, puedes ver si la replicación está habilitada para la instancia de réplica.

Las siguientes métricas están disponibles para instancias de réplica. (Obtén más información sobre las métricas adicionales disponibles para todas las instancias, incluidas las que no son de réplica).

MétricaDescripción
Estado de replicació
(cloudsql.googleapis.com/database/replication/state)

Indica si la replicación transmite de forma activa los registros desde la instancia principal hacia la réplica. Los valores posibles son los siguientes:

  • Running
  • Stopped
  • Error

Esta métrica informa a Running si los subprocesos de E/S y SQL de la réplica informan que están en ejecución. Consulta las métricas de estado de ejecución de subprocesos secundarios de E/S y estado de ejecución de subprocesos secundarios de SQL a continuación para obtener más información o verifica el estado de la replicación en el manual de referencia de MySQL.

Retraso de replicación
(cloudsql.googleapis.com/database/replication/replica_lag)

La cantidad de tiempo que el estado de la réplica se encuentra detrás del estado de la instancia principal. Esta es la diferencia entre (1) la hora actual y (2) la marca de tiempo original en la que la confirmación principal confirmó la transacción que se está aplicando en la réplica. En particular, las operaciones de escritura se pueden contar como atrasadas incluso si la réplica las recibió, si la réplica aún no aplica la operación de escritura en la base de datos.

Para las réplicas en cascada, cada par de réplica principal se supervisa por separado y no hay una sola métrica que genere el retraso de extremo a extremo (principal para réplica).

Esta métrica informa el valor de Seconds_Behind_Master cuando SHOW SLAVE STATUS se ejecuta en la réplica. Para obtener más información, consulta Verifica el estado de replicación en el manual de referencia de MySQL.

Retraso de red
(cloudsql.googleapis.com/database/replication/network_lag)

La cantidad de tiempo, en segundos, que lleva escribir el binlog en la base de datos principal para alcanzar el subproceso de E/S en la réplica.

Si el valor de network_lag es cero o insignificante, pero el valor de “replica_lag” es alto, indica que el subproceso de SQL no puede aplicar los cambios de replicación lo suficientemente rápido.

Estado de ejecución del subproceso secundario de E/S
(cloudsql.googleapis.com/database/mysql/replication/slave_io_running_state)

Indica si el subproceso de E/S para leer el registro binario de la instancia principal se está ejecutando en la réplica. Los valores posibles son los siguientes:

  • Yes
  • No
  • Connecting

Esta métrica informa el valor de Slave_IO_Running cuando SHOW SLAVE STATUS se ejecuta en la réplica. Para obtener más información, consulta Verifica el estado de replicación en el manual de referencia de MySQL.

Estado de ejecución del subproceso secundario de SQL
(cloudsql.googleapis.com/database/mysql/replication/slave_sql_running_state)

Indica si el subproceso de SQL para ejecutar eventos en el registro de retransmisión se está ejecutando en la réplica. Los valores posibles son los siguientes:

  • Yes
  • No
  • Connecting

Esta métrica informa el valor de Slave_SQL_Running cuando SHOW SLAVE STATUS se ejecuta en la réplica. Para obtener más información, consulta Verifica el estado de replicación en el manual de referencia de MySQL.

Para verificar el estado de la replicación:

Console

Cloud SQL informa las métricas Replication State y Replication Lag en el panel de supervisión predeterminado de Cloud SQL.

Si deseas ver otras métricas de réplicas en región y entre regiones, y las réplicas de los servidores externos, crea un panel personalizado y agrega las métricas que deseas supervisar en él:

  1. En la consola de Google Cloud, ve a la página Supervisión.

    Ir a Monitoring

  2. Selecciona la pestaña Paneles.
  3. Haz clic en Crear panel de control.
  4. Asigna un nombre al panel y haz clic en Aceptar.
  5. Haz clic en Agregar gráfico.
  6. En Tipo de recurso, selecciona Cloud SQL Database.
  7. Sigue uno de estos pasos:
    1. Para supervisar la métrica del estado de replicación: En el campo Seleccionar una métrica, escribe Replication state. Luego, agrega un filtro para state = "Running". En el gráfico, se muestra 1 si la replicación está en ejecución y 0 en caso contrario.
    2. Para supervisar la métrica del retraso de replicación: En el campo Seleccionar una métrica, escribe replica_lag. En el gráfico, se muestra la cantidad de tiempo que el estado de la réplica se retrasa con respecto al de su principal.
    3. Para supervisar el estado del subproceso de E/S de la réplica: En el campo Seleccionar una métrica, escribe Slave I/O thread running state. Luego, agrega un filtro en state = "Yes". En el gráfico, se muestra 1 si el subproceso está en ejecución y 0 en caso contrario.
    4. Para supervisar el estado del subproceso de SQL de la réplica, en el campo Seleccionar una métrica, escribe Slave SQL thread running state. Luego, agrega un filtro en state = "Yes". En el gráfico, se muestra 1 si el subproceso está en ejecución y 0 en caso contrario.

gcloud

Para una instancia de réplica, verifica el estado de la replicación de la siguiente forma:

gcloud sql instances describe REPLICA_NAME

En el resultado, busca las propiedades databaseReplicationEnabled y masterInstanceName.

En el caso de una instancia principal, puedes verificar si hay réplicas de la siguiente forma:

gcloud sql instances describe PRIMARY_INSTANCE_NAME

Busca la propiedad replicaNames en el resultado.

Cliente mysql

  1. Conéctate a la réplica con un cliente MySQL.

    Si quieres obtener más información, consulta Opciones de conexión para aplicaciones externas.

  2. Verifica el estado de la réplica:
    SHOW SLAVE STATUS \G

    Busca las siguientes métricas en el resultado del comando:

    • Master_Host: Es el nombre de la instancia principal.
    • Slave_IO_Running, Slave_SQL_Running: Determina si los subprocesos de E/S y SQL, respectivamente, están en ejecución. Estos subprocesos son responsables de transferir eventos de la instancia principal al registro de retransmisión de la réplica y ejecutar esos eventos desde este registro. El valor de la métrica es Yes si el subproceso está en ejecución. Ambos subprocesos deben estar ejecutándose para que la replicación esté activa.
    • Seconds_Behind_Master: La cantidad de tiempo, en segundos, durante el cual la réplica retrasa el procesamiento de las transacciones de la instancia principal, es decir, la diferencia entre (1) la hora actual y (2) la marca de tiempo original en que la instancia principal confirmó la transacción que se está aplicando en la réplica. El valor es NULL si se rompe la replicación.
    • Master_Log_file, Read_Master_Log_Pos, Relay_Master_Log_File y Exec_Master_Log_Pos: Estas métricas muestran las coordenadas (nombre de archivo y desplazamiento) en los que el subproceso de E/S tiene eventos de lectura hasta (Master_Log_file y Read_Master_Log_Pos) y que el subproceso de SQL haya ejecutado eventos hasta (Relay_Master_Log_File yExec_Master_Log_Pos). Si son iguales (es decir, Master_Log_file es igual a Relay_Master_Log_File y Read_Master_Log_Pos es igual a Exec_Master_Log_Pos), la réplica procesó todos los eventos que recibió de la instancia principal.

Para obtener más detalles sobre el resultado de este comando, consulta la documentación de MySQL sobre cómo verificar el estado de replicación.

Solucionar problemas

Problema Soluciona problemas
La réplica de lectura no comenzó a replicarse cuando se creó. Es probable que haya un error más específico en los archivos de registro. Inspecciona los registros en Cloud Logging para encontrar el error real.
No se puede crear una réplica de lectura: error invalidFlagValue. Una de las marcas de la solicitud no es válida. Puede ser una marca que proporcionaste explícitamente o una que se configuró como un valor predeterminado.

Primero, comprueba que el valor de la marca max_connections sea mayor o igual que el valor en el principal.

Si la marca max_connections se configuró de forma correcta, inspecciona los registros en Cloud Logging para encontrar el error real.

No se puede crear una réplica de lectura: error desconocido. Es probable que haya un error más específico en los archivos de registro. Inspecciona los registros en Cloud Logging para encontrar el error real.

Si el error es set Service Networking service account as servicenetworking.serviceAgent role on consumer project, inhabilita y vuelve a habilitar la Service Networking API. Esta acción crea la cuenta de servicio que se necesita para continuar con el proceso.

El disco está lleno. El tamaño del disco de la instancia principal puede llenarse durante la creación de una réplica. Edita la instancia principal para actualizarla a un tamaño de disco más grande.
La instancia de réplica usa demasiada memoria. La réplica usa memoria temporal para almacenar en caché las operaciones de lectura solicitadas con frecuencia, lo que puede ocasionar que use más memoria que la instancia principal.

Reinicia la instancia de réplica para recuperar el espacio de memoria temporal.

Se detuvo la replicación. Se alcanzó el límite de almacenamiento máximo y el aumento de almacenamiento automático no está habilitado.

Edita la instancia para habilitar automatic storage increase.

El retraso de replicación se mantiene alto. La carga de escritura es demasiado alta para que la réplica la maneje. El retraso de la replicación se produce cuando el subproceso de SQL en una réplica no puede mantener el ritmo del subproceso de E/S. Algunos tipos de consultas o cargas de trabajo pueden causar un gran retraso de la replicación de forma temporal o permanente en un esquema determinado. Algunas de las causas típicas del retraso de la replicación son las siguientes:
  • Consultas lentas en la réplica. Encuéntralas y corrígelas.
  • Todas las tablas deben tener una clave primaria o única. Cada actualización en una tabla sin una clave única o primaria genera análisis completos de la tabla en la réplica.
  • Las consultas como DELETE ... WHERE field < 50000000 provocan un retraso de la replicación basado en filas, ya que se acumula una gran cantidad de actualizaciones en la réplica.

Estas son algunas de las soluciones posibles:

El retraso de la replicación aumenta de manera repentina. Esto se debe a las transacciones de larga duración. Cuando se confirma una transacción (una sola declaración o varias declaraciones) en la instancia de origen, la hora de inicio de la transacción se registra en el registro binario. Cuando la réplica recibe este evento binlog, compara esa marca de tiempo con la marca de tiempo actual para calcular el retraso de replicación. Por lo tanto, una transacción de larga duración en la fuente generaría un gran retraso de replicación inmediato en la réplica. Si la cantidad de cambios de fila en la transacción es grande, la réplica también tardaría mucho tiempo en ejecutarla. Durante ese tiempo, el retraso de la replicación aumenta. Una vez que la réplica finalice esta transacción, el período de actualización dependerá de la carga de trabajo de escritura en el origen y la velocidad de procesamiento de la réplica.

Para evitar una transacción larga, algunas soluciones posibles incluyen las siguientes:

  • Divide la transacción en varias transacciones pequeñas
  • Divide una sola consulta de escritura grande en lotes más pequeños
  • Intenta separar las consultas SELECT largas de una transacción mezclada con DML
Si cambias las marcas de replicación paralelas, se generará un error. Se configuró un valor incorrecto para una o más de estas marcas.

En la instancia principal que muestra el mensaje de error, configura las marcas de replicación paralelas:

  1. Modifica las marcas binlog_transaction_dependency_tracking y transaction_write_set_extraction:
    • binlog_transaction_dependency_tracking=COMMIT_ORDER
    • transaction_write_set_extraction=OFF
  2. Agrega la marca slave_pending_jobs_size_max:

    slave_pending_jobs_size_max=33554432

  3. Modifica la marca transaction_write_set_extraction:

    transaction_write_set_extraction=XXHASH64

  4. Modifica la marca binlog_transaction_dependency_tracking:

    binlog_transaction_dependency_tracking=WRITESET

La creación de la réplica falla con el tiempo de espera. Las transacciones no confirmadas de larga duración en la instancia principal pueden generar una falla en la creación de la réplica de lectura.

Vuelve a crear la réplica después de detener todas las consultas en ejecución.

¿Qué sigue?