Administra réplicas

En esta página, se describen las operaciones de réplica de lectura. Estas operaciones incluyen inhabilitar y habilitar la replicación. Además, en esta página se describe cómo realizar las siguientes operaciones:

  • Ascender una réplica a una instancia independiente
  • Configurar una replicación paralela

Para obtener más información sobre cómo trabajar con réplicas de lectura, consulta Replicación en Cloud SQL.

Inhabilita la 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. La réplica se reinicia si inhabilitas o vuelves a habilitar la replicación.

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. Puedes volver a habilitar la replicación en la réplica inhabilitada, borrarla o ascenderla a una instancia independiente. No puedes detener la réplica.

Para inhabilitar la replicación:

Console

  1. Ve a la página Instancias de Cloud SQL en Google Cloud Console.

    Ir a la página Instancias de Cloud SQL

  2. Haz clic en el nombre de una instancia de réplica para abrirla.
  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 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 siguientes, 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://www.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 siguiente:

Habilita la 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. Ve a la página Instancias de Cloud SQL en Google Cloud Console.

    Ir a la página 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 en la barra de botones.
  4. Haz clic en Aceptar.

gcloud

gcloud sql instances patch [REPLICA_NAME] --enable-database-replication

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 siguientes, 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://www.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 siguiente:

Asciende 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. Esta acción no se puede deshacer.

Antes de ascender una réplica de lectura, si la principal sigue disponible y entrega a los clientes, debes detener todas las operaciones de escritura en la instancia principal y verificar el estado de replicación de la réplica (sigue las instrucciones) en la pestaña Cliente MySQL). Debes verificar que la réplica se replique y, luego, esperar hasta que el retraso de replicación que informa la métrica Seconds_Behind_Master sea 0. De lo contrario, es posible que a la instancia recién ascendida le falten algunas de las transacciones que se confirmaron en la instancia principal.

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

Console

  1. Ve a la página Instancias de Cloud SQL en Google Cloud Console.

    Ir a la página Instancias de Cloud SQL

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

gcloud

gcloud sql instances promote-replica [REPLICA_NAME]
  

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 siguientes, 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://www.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, habilita las copias de seguridad automáticas y, si es necesario, considera configurar la instancia para alta disponibilidad.

Configura la 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.
  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
slave_parallel_type DATABASE, LOGICAL_CLOCK DATABASE DATABASE
slave_preserve_commit_order 0, 1 0 1
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 COMMIT_ORDER
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).

Comprueba el estado de replicación

Cuando visualizas una instancia de réplica con Google Cloud Console 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 la herramienta de línea de comandos de gcloud, obtienes un breve resumen de la configuración de la replicación.

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.

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.

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. Dirígete a la página Supervisión.
  2. Selecciona la pestaña Paneles.
  3. Haz clic en + CREAR PANEL en la barra de botones en la parte superior de la página.
  4. Asigna un nombre al panel y haz clic en Aceptar.
  5. Haz clic en AGREGAR GRÁFICO en la esquina superior derecha de la página.
  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.

Soluciona problemas

Haz clic en los vínculos de la tabla para obtener más información:

Situación Posible problema Solución
La réplica de lectura no comenzó a replicarse cuando se creó. Puede haber varias causas principales. Verifica los registros para obtener más información.
No se puede crear una réplica de lectura: error invalidFlagValue. Una de las marcas proporcionadas según la configuración predeterminada o de forma explícita no es válida. Revisa los valores y registros de las marcas para obtener más información.
No se puede crear una réplica de lectura: error desconocido. Puede haber varias causas principales. Verifica los registros para obtener más información.
El disco está lleno. El tamaño del disco de la instancia principal puede llenarse durante la creación de una réplica. Actualiza la instancia principal a un tamaño de disco más grande.
La instancia de réplica usa demasiada memoria. Las réplicas pueden almacenar en caché operaciones de lectura solicitadas con frecuencia. Reinicia la instancia de réplica para recuperar el espacio de memoria temporal.
Se detuvo la replicación. Se alcanzó el espacio de almacenamiento máximo y el aumento de almacenamiento automático no está habilitado. Habilita el aumento del almacenamiento automático.
El retraso de replicación se mantiene alto. Puede haber muchas causas principales diferentes. Aquí encontrarás algunas opciones que puedes probar.

La réplica de lectura no comenzó a replicarse cuando se creó

La réplica de lectura no comenzó a replicarse cuando se creó.

Posible problema

Es probable que haya un error más específico en los archivos de registro.

Solución

Inspecciona los registros en Cloud Logging para encontrar el error real.


No se puede crear una réplica de lectura: error invalidFlagValue

No se puede crear una réplica de lectura: invalidFlagValue.

Posible problema

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.

Solución

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

No se puede crear una réplica de lectura: unknown error.

Posible problema

Es probable que haya un error más específico en los archivos de registro.

Solución

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

Los errores posibles son UPDATE_DISK_SIZE o mysqld: disk is full.

Posible problema

El tamaño del disco de la instancia principal puede llenarse durante la creación de una réplica.

Solución

Edita la instancia principal para actualizarla a un tamaño de disco más grande.


La instancia de réplica usa demasiada memoria

La instancia de réplica usa demasiada memoria.

Posible problema

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.

Solución

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


Se detuvo la replicación

Se detuvo la replicación.

Posible problema

Se alcanzó el límite de almacenamiento máximo y >automatic storage increase is disabled.

Solución

Edita la instancia para habilitar automatic storage increase.


El retraso de la replicación se mantiene alto

El retraso de la replicación se mantiene alto.

Posible problema

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.

Solución

Soluciones posibles:

¿Qué sigue?