Acerca de la replicación en Cloud SQL

La replicación es la capacidad de crear copias de una instancia de Cloud SQL o una base de datos local y dejar que las copias hagan el trabajo.

Introducción

La razón principal para usar la replicación es escalar el uso de datos en una base de datos sin degradar el rendimiento.

Otros motivos incluyen los siguientes:

  • Migrar datos entre regiones
  • Migrar datos entre plataformas
  • Migrar datos desde una base de datos local a Cloud SQL

Además, una réplica podría ascender si la instancia original se daña.

Cuando se hace referencia a una instancia de Cloud SQL, la instancia que se replica se denomina instancia principal y las copias se denominan réplicas de lectura. La instancia principal y las réplicas de lectura residen en Cloud SQL.

Cuando se hace referencia a una base de datos local, la situación de replicación se denomina replicación desde un servidor externo. En esta situación, la base de datos que se replica es el servidor de base de datos de origen. Las copias que residen en Cloud SQL se llaman réplicas de Cloud SQL. También hay una instancia que representa el servidor de base de datos de origen en Cloud SQL que se denomina instancia de representación de origen.

En una situación de recuperación ante desastres, puedes ascender una réplica para convertirla en una instancia principal. De esta manera, puedes usarla en lugar de una instancia en una región que tenga una interrupción. También puedes ascender una réplica para reemplazar una instancia dañada.

Cloud SQL admite los siguientes tipos de réplicas:

Con la aplicación forzosa de conectores, puedes aplicar el uso exclusivo del proxy de autenticación de Cloud SQL o los conectores de lenguaje de Cloud SQL para conectarte a instancias de Cloud SQL. Con la aplicación del conector, Cloud SQL rechaza las conexiones directas a la base de datos. No puedes crear réplicas de lectura para una instancia que tenga habilitada la aplicación forzosa de conectores. Del mismo modo, si una instancia tiene réplicas de lectura, no puedes habilitar la aplicación forzosa de conectores para ella.

También puedes usar Database Migration Service para la replicación continua desde un servidor de la base de datos de origen a Cloud SQL.

Cloud SQL no admite la replicación entre dos servidores externos. Sin embargo, Cloud SQL admite la replicación basada en un identificador de transacciones global (GTID). Los GTID identifican de manera inequívoca cada transacción en el servidor y dentro de una configuración de replicación. Debido a que cada transacción tiene un identificador único, el servidor MySQL puede realizar un seguimiento de las transacciones que se ejecutaron. Un GTID usa coordenadas absolutas a fin de que la réplica de una instancia de Cloud SQL pueda apuntar a su instancia principal y no tengas que especificar un nombre de archivo para el registro binario o una posición en la declaración CHANGE MASTER. Hay menos errores con las réplicas y la recuperación de un momento determinado. Debido a estos beneficios, no puedes inhabilitar la replicación basada en GTID en Cloud SQL.

Réplicas de lectura

Se usa una réplica de lectura para descargar el trabajo de una instancia de Cloud SQL. La réplica de lectura es una copia exacta de la instancia principal. Los datos y otros cambios que se realizan en la instancia principal se actualizan casi en tiempo real en la réplica de lectura.

Las réplicas de lectura son de solo lectura, por lo que no puedes realizar operaciones de escritura en ellas. La réplica de lectura procesa consultas, solicitudes de lectura y tráfico de estadísticas, lo que reduce la carga en la instancia principal.

Te conectas a una réplica directamente con su nombre y dirección IP de conexión. Si te conectas a una réplica mediante una dirección IP privada, no necesitas crear una conexión privada de VPC adicional para la réplica, porque la conexión se hereda de la instancia principal.

Para obtener más información sobre cómo crear una réplica de lectura, consulta Crea réplicas de lectura. Para obtener más información sobre cómo administrar una réplica de lectura, consulta Administra réplicas de lectura.

Como práctica recomendada, coloca réplicas de lectura en una zona diferente a la instancia principal cuando usas la alta disponibilidad en tu instancia principal. Esta práctica garantiza que las réplicas de lectura sigan funcionando cuando la zona que contiene la instancia principal tenga una interrupción. Consulta la Descripción general de la alta disponibilidad para obtener más información.

Selecciona un tipo de máquina adecuado

Las réplicas de lectura pueden tener un tipo de máquina diferente al de la instancia principal. Debes supervisar las métricas en tu instancia, como el uso de memoria y CPU, para asegurarte de que la instancia de réplica tenga el tamaño adecuado para su carga de trabajo, en especial si es más pequeña que la instancia principal. Una instancia de réplica que tiene un tamaño insuficiente es más propensa a un rendimiento deficiente, como eventos frecuentes de memoria insuficiente (OOM).

Réplicas de lectura entre regiones

La replicación entre regiones te permite crear una réplica de lectura en una región diferente a la de la instancia principal. Una réplica de lectura entre regiones se crea de la misma manera en la que se creas una réplica dentro de una región.

Las réplicas entre regiones realizan las siguientes acciones:

  • Mejoran el rendimiento de lectura, ya que pueden hacer que las réplicas estén disponibles más cerca de la región de la aplicación.
  • Proporcionan una capacidad de recuperación ante desastres adicional para protegerte contra fallas regionales.
  • Te permiten migrar datos de una región a otra.

Consulta la sección sobre cómo ascender réplicas para la migración regional o la recuperación ante desastres a fin de obtener más información sobre las réplicas entre regiones.

Réplicas de lectura en cascada

La replicación en cascada te permite crear una réplica de lectura en otra réplica de lectura en la misma región o en una diferente. Las siguientes situaciones son casos de uso para usar réplicas en cascada:

  • Recuperación ante desastres: puedes usar una jerarquía de cascada de réplicas de lectura para simular la topología de tu instancia principal y sus réplicas de lectura. Durante una interrupción, la réplica de lectura seleccionada asciende a principal y las réplicas de lectura en la nueva instancia principal se siguen replicando y están listas para usarse.
  • Mejoras de rendimiento: reduce la carga en la instancia principal mediante la transferencia del trabajo de replicación en varias réplicas de lectura.
  • Escala las lecturas: puedes tener más réplicas para compartir la carga de lectura.
  • Reducción de costos: puedes reducir los costos de las herramientas de redes mediante una sola réplica en cascada con replicación entre regiones en otras regiones.

Terminología

  • Réplica de cascada: una réplica de lectura que puede tener su propia réplica.
  • Niveles: Puedes crear niveles de réplicas en una jerarquía de réplica en cascada. Por ejemplo, si agregas cuatro réplicas a una instancia, esas cuatro réplicas estarán en el mismo nivel.
  • Instancias del mismo nivel: Varias réplicas que se replican desde la misma instancia principal. Los grupos del mismo nivel se encuentran en el mismo nivel de la jerarquía de réplica. Una réplica puede tener hasta ocho grupos del mismo nivel.
  • Réplica de hoja: una réplica de lectura que no tiene ninguna réplica propia. En una jerarquía de replicación de varios niveles, la réplica de hoja es el último nivel.
  • Ascender: Una acción que convierte una réplica, en cualquier nivel de la jerarquía, en una instancia principal. Cuando se asciende, se conserva la jerarquía de réplica en cascada de la réplica.

Configura réplicas en cascada

Las réplicas en cascada te permiten agregar réplicas de lectura a cualquier réplica existente. Puedes agregar hasta cuatro niveles de réplicas, incluida la instancia principal. Cuando asciendes la réplica en la parte superior de una jerarquía de réplica en cascada, esta se convierte en una instancia principal y sus réplicas en cascada se siguen replicando.

A fin de planificar tu configuración, debes tener un objetivo de lo que pretenden hacer las réplicas de lectura. En las siguientes dos secciones, se describen las configuraciones para la recuperación ante desastres y la replicación multirregional.

Recuperación ante desastres

Para comprender cómo las réplicas en cascada te ayudan a recuperarte rápidamente durante una interrupción, considera la siguiente situación de replicación:

Configuración

Representa la configuración de réplica en cascada con la réplica en cascada en una región separada

Interrupción

Representa la promoción o la réplica durante una interrupción

Promoción

Representa la instancia nueva con réplicas

Si deseas usar una instancia en la región B en una configuración de recuperación ante desastres y tienes lo siguiente:

  • Réplicas en la misma región conectadas a la instancia principal (réplica A)
  • Réplicas en otras regiones (réplica en cascada) conectadas a la instancia principal.

Puedes crear réplicas de lectura en la réplica en cascada en la región B.

En la pestaña Interrupción, si hay una interrupción en la región A, la réplica en cascada asciende a una instancia principal. Ya tiene réplicas de lectura debajo, lo que reduce el objetivo de tiempo de recuperación (RTO).

En la pestaña Ascender, verás que cuando una réplica en cascada asciende, sus réplicas también ascienden y se continúan replicando debajo de ella.

Replicación multirregión

Otro caso de uso para las réplicas en cascada es distribuir la capacidad de lectura a una segunda región de manera rentable. Se pueden crear réplicas en cascada C y D que replican desde la réplica B. Los clientes pueden distribuir consultas de lectura en las réplicas B, C y D para reducir la carga en cada réplica. El costo del tráfico de red entre regiones se genera solo una vez, desde la instancia principal hasta la réplica B. La replicación de B a C y D usa la transferencia de red dentro de la región, que es gratuita.

Puedes crear una jerarquía de hasta cuatro instancias mediante réplicas en cascada para la replicación multirregional.

Principal A → Réplica B → Réplica C y Réplica D

Restricciones

  • No puedes borrar una réplica que tenga réplicas. Para borrar la réplica, debes comenzar con las réplicas de hoja y avanzar en la jerarquía.
  • No se admite la dependencia de la región circular. Para tener la réplica de una réplica en cascada en la misma región que la instancia principal, la réplica en cascada también debe estar en la misma región.

Réplicas de lectura externas

Las réplicas de lectura externas son instancias de MySQL externas que se replican desde la instancia principal de Cloud SQL. Por ejemplo, una instancia de MySQL que se ejecuta en Compute Engine se considera una instancia externa.

Las réplicas de lectura externas tienen las siguientes restricciones:

  • Tal vez no sea posible replicar a una instancia de MySQL alojada en otra plataforma en la nube. Consulta la documentación del otro proveedor. Por ejemplo, establecer el campo de configuración replicate-ignore-db es obligatorio, y no se admiten los proveedores de servicios en la nube que no lo permiten. Consulta Configura réplicas externas para obtener otros campos de configuración obligatorios.
  • Si la replicación se interrumpe por unas pocas horas, por ejemplo, debido a una interrupción de la red o del servidor, la réplica se retrasa en relación con la instancia principal. Una vez que se vuelva a conectar a la principal y comience a replicar de nuevo, la réplica debería recuperar el tiempo perdido. Sin embargo, si la replicación se interrumpe durante más tiempo del que se conservan los registros de replicación de Cloud SQL (siete copias de seguridad), debes borrar la réplica y crear una nueva.
  • El flujo de datos que se transfiere de la instancia principal a la réplica externa se cobra como una transferencia de datos saliente. Consulta la página precios para conocer los costos de la transferencia de datos para tu tipo de instancia de Cloud SQL.
  • Si creas una réplica de lectura externa para una instancia y aplicas el uso exclusivo del proxy de autenticación de Cloud SQL o los conectores de lenguaje de Cloud SQL para conectarte a una instancia que tiene configurado el acceso a servicios privados, debes agregar los rangos de subred de la réplica a las redes autorizadas de la instancia principal. Debes configurar todos los rangos como redes autorizadas de la instancia de Cloud SQL.

    gcloud

    Para establecer la autorización de IP de una instancia para permitir el tráfico desde los rangos de direcciones IP de una réplica de lectura externa, usa el comando gcloud sql instances patch:

    gcloud sql instances patch \
    --authorized-networks=IP_ADDRESS_RANGE_1/24,IP_ADDRESS_RANGE_2/24

    Reemplaza IP_ADDRESS_RANGE_1 y IP_ADDRESS_RANGE_2 por los rangos de direcciones IP de tu réplica de lectura externa.

    REST

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

    • PROJECT_ID: el ID o el número del proyecto de Google Cloud que contiene la instancia
    • INSTANCE_NAME: El nombre de tu instancia de Cloud SQL
    • IP_ADDRESS_RANGE_1: Es el primer rango de direcciones IP de tu réplica de lectura externa.
    • IP_ADDRESS_RANGE_2: El segundo rango de direcciones IP de tu réplica de lectura externa

    Método HTTP y URL:

    PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

    Cuerpo JSON de la solicitud:

    {
      "kind": "sql#instance",
      "name": INSTANCE_NAME,
      "project": PROJECT_ID,
      "settings": {
        "ipConfiguration": {
          "authorizedNetworks": [{"kind": "sql#aclEntry", "value": "IP_ADDRESS_RANGE_1/24"}, {"kind": "sql#aclEntry", "value": "IP_ADDRESS_RANGE_2/24"}]},
      "kind": "sql#settings"
      }
    }

    Para enviar tu solicitud, expande una de estas opciones:

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

    {
      "kind": "sql#operation",
      "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-16T02:32:12.281Z",
      "operationType": "UPDATE",
      "name": "OPERATION_ID",
      "targetId": "INSTANCE_NAME",
      "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
      "targetProject": "PROJECT_ID"
    }
    

Casos de uso de replicación

Los siguientes casos de uso se aplican a cada tipo de replicación.

Nombre Principal Réplica Beneficios y casos prácticos Más información
Réplica de lectura Instancia de Cloud SQL Instancia de Cloud SQL
  • Capacidad de lectura adicional
  • Objetivo de estadísticas
Réplica de lectura entre regiones Instancia de Cloud SQL Instancia de Cloud SQL
  • Capacidad de lectura adicional
  • Objetivo de estadísticas
  • Función adicional de recuperación ante desastres
  • Mejora en el rendimiento de lectura
  • Migra datos entre regiones
Réplica de lectura externa Instancia de Cloud SQL Instancia de MySQL externa a Cloud SQL
  • Menor latencia para las conexiones externas
  • Objetivo de estadísticas
  • Ruta de migración hacia otras plataformas
Replicación desde un servidor externo Instancia de MySQL externa a Cloud SQL Instancia de Cloud SQL para MySQL
  • Ruta de acceso de migración a Cloud SQL
  • Replicación de datos en Google Cloud
  • Objetivo de estadísticas

Requisitos previos para crear una réplica de lectura

Para poder crear una réplica de lectura de una instancia de Cloud SQL, la instancia debe cumplir con los siguientes requisitos:

  • Debes tener habilitadas las copias de seguridad automáticas.
  • El registro binario debe estar habilitado, lo que requiere que se habilite la recuperación de un momento determinado. Obtén más información sobre el impacto de estos registros.
  • Se debe haber creado al menos una copia de seguridad después de que se habilitó el registro binario.

Requisitos adicionales para la réplica externa:

  • La versión de MySQL de la réplica debe ser igual o superior a la versión de MySQL de la instancia principal. Más información.
  • Por razones de seguridad, debes configurar SSL/TLS en tu instancia principal. Más información.

Consecuencias de habilitar el registro binario

Debes habilitar la recuperación de un momento determinado para habilitar el registro binario en la instancia principal a fin de que admita réplicas de lectura. Esto implica las siguientes consecuencias:

  • Sobrecarga de rendimiento

    Cloud SQL usa la replicación basada en filas con las marcas sync_binlog=1 y innodb_support_xa=true de MySQL. Por lo tanto, se requiere un disco fsync adicional para cada operación de escritura, lo que reduce el rendimiento.

  • Sobrecarga de almacenamiento

    El almacenamiento de los registros binarios se cobra a la misma tarifa que los datos regulares. Los registros binarios se truncan de manera automática a la edad de la copia de seguridad automática más antigua. Cloud SQL conserva las siete copias de seguridad automáticas más recientes y todas las copias de seguridad a pedido. El tamaño de los registros binarios y, por lo tanto, el importe cobrado, dependen de la carga de trabajo. Por ejemplo, una carga de trabajo con mucha carga de escritura consume más espacio de registro binario que una carga de trabajo con mucha carga de lectura.

    Puedes consultar el tamaño de los registros binarios mediante el comando SHOW BINARY LOGS de MySQL.

    Cuando se realizan copias de seguridad, los registros se almacenan en la copia de seguridad junto con los datos.

Registro binario en réplicas de lectura

  • El registro binario es compatible con las instancias de réplica de lectura (solo MySQL 5.7 y 8.0). Puedes habilitar el registro binario en una réplica con los mismos comandos de API que en la instancia principal, mediante el nombre de instancia de la réplica en lugar del nombre de la instancia principal. Ten en cuenta que los términos enable binary logging y enable point-in-time recovery son intercambiables.

    La durabilidad del registro binario en la instancia de réplica (pero no en la instancia principal) se puede establecer con la marca sync_binlog, que controla la frecuencia con la que el servidor MySQL sincroniza el registro binario en el disco.

    El registro binario se puede habilitar en una réplica incluso cuando la copia de seguridad está inhabilitada en la instancia principal.

    Si una réplica que tiene este conjunto de valores se promueve a un servidor independiente, la configuración se restablece al valor seguro 1 en el servidor independiente.

Facturación

  • Una réplica de lectura se cobra a la misma tarifa que una instancia de Cloud SQL estándar. No se aplican cargos por la replicación de datos.
  • En el caso de las réplicas externas, el flujo de datos que se transfiere de la réplica principal a la externa se cobra como una transferencia de datos. Consulta la página precios para conocer los costos de la transferencia de datos para tu tipo de instancia de Cloud SQL.
  • El precio de una réplica de lectura entre regiones es el mismo que el de la creación de una instancia de Cloud SQL nueva en la región. Consulta los precios de las instancias de Cloud SQL y selecciona la región adecuada. Además del costo normal asociado a la instancia, una réplica entre regiones genera cargos de salida de red entre regiones por los registros de replicación enviados desde la instancia principal hasta la instancia de la réplica, como se describe en Precios de salida de la red

Referencia rápida para las réplicas de lectura de Cloud SQL

Tema Debate
Copias de seguridad No puedes configurar copias de seguridad en la réplica.
Núcleos y memoria Las réplicas de lectura pueden usar una cantidad diferente de núcleos y de memoria de las de la instancia principal.
Borra la instancia principal Antes de borrar una instancia principal, debes promover todas sus réplicas de lectura a instancias independientes o borrar las réplicas de lectura.
Borra la réplica Cuando borras una réplica, el estado de la instancia principal no se ve afectado.
Inhabilitar el registro binario Antes de inhabilitar los registros binarios en una instancia principal, debes promover o borrar todas sus réplicas de lectura.
Conmutación por error Una instancia principal puede conmutar por error a una réplica solo si la réplica es de DR. Las réplicas de lectura no pueden conmutar por error de ninguna manera durante una interrupción.
Alta disponibilidad Las réplicas de lectura te permiten habilitar la alta disponibilidad en las réplicas.
Balanceo de cargas Cloud SQL no proporciona balanceo de cargas entre las réplicas. Puedes implementar el balanceo de cargas para la instancia de Cloud SQL. También puedes usar la agrupación de conexiones para distribuir consultas en réplicas con tu configuración de balanceo de cargas para obtener un mejor rendimiento.
Períodos de mantenimiento Las réplicas de lectura comparten períodos de mantenimiento con la instancia principal. Las réplicas siguen la configuración de mantenimiento de la instancia principal, incluido el período de mantenimiento, la reprogramación y el período de rechazo del mantenimiento. Durante el mantenimiento, Cloud SQL actualiza todas las réplicas de lectura antes de actualizar la instancia principal.
Varias réplicas de lectura Cloud SQL admite réplicas en cascada. Como resultado, puedes crear hasta 10 réplicas para una sola instancia principal y crear réplicas de esas réplicas, hasta cuatro niveles, incluida la instancia principal.
Replicación paralela Si quieres obtener información sobre cómo usar la replicación paralela para mejorar el rendimiento, consulta Cómo configurar la replicación paralela.
IP privada Si te conectas a una réplica mediante una dirección IP privada, no necesitas crear una conexión privada de VPC adicional para la réplica, ya que se hereda de la instancia principal.
Restablece la instancia principal No puedes restablecer la instancia principal de una réplica mientras exista dicha réplica. Para restablecer una instancia desde una copia de seguridad o realizar una recuperación de un momento determinado, debes ascender o borrar todas sus réplicas.
Configuración La configuración de MySQL de la instancia principal se propaga a la réplica, incluidas la contraseña raíz y las modificaciones de la tabla de usuario. Los cambios en la CPU y la memoria no se propagan a la réplica.
Detener una réplica No puedes stop una réplica. Puedes aplicar restart, delete o disable replication en ella, pero no puedes detenerla como lo haces con una instancia principal.
Actualiza una réplica Las réplicas de lectura pueden experimentar una actualización perjudicial en cualquier momento.
Tablas de usuarios No puedes realizar cambios en la réplica. Todas las modificaciones de usuario se deben realizar en la instancia principal.

¿Qué sigue?