Crear réplicas de lectura

Esta página describe cómo crear una réplica de lectura para una instancia de Cloud SQL.

Para configurar una instancia de Cloud SQL para que actúe como publicador de un suscriptor externo, consulte Configurar réplicas externas .

Una réplica de lectura es una copia de la instancia principal que refleja los cambios en esta casi en tiempo real, en circunstancias normales. Puede usar una réplica de lectura para descargar solicitudes de lectura o tráfico analítico de la instancia principal.

Además, para la recuperación ante desastres, puede realizar una migración regional. Si una réplica es interregional , puede realizar una conmutación por error a otra región; en concreto, puede convertir una réplica en una instancia independiente (en cuyo caso, las réplicas existentes no la considerarán principal).

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

Antes de empezar

Si va a crear la primera réplica de esta instancia, asegúrese de que cumpla los requisitos de las instancias principales. Más información .

Crear una réplica de lectura

Al crear una réplica de lectura, tenga en cuenta las siguientes consideraciones:

  • Puede crear un máximo de 8 réplicas de lectura por instancia principal.
  • Si no se especifica una edición, la edición Cloud SQL Enterprise será la predeterminada.
  • Si, al crear una réplica de lectura o una réplica en cascada, la instancia principal es una instancia de la edición Cloud SQL Enterprise Plus, deberá indicar la edición y el nivel que desea utilizar.

Los pasos para crear una réplica de lectura se detallan a continuación.

Consola

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

    Ir a Instancias de Cloud SQL

  2. Busque la instancia para la que desea crear una réplica y luego abra el menú more actions junto a la lista.
  3. Seleccione Crear réplica de lectura .

    Si no ve esa opción, entonces la instancia es una réplica; no puede crear una réplica de una réplica.

  4. En la sección "Personalizar su instancia" , actualice la configuración de su réplica. Para empezar, haga clic en "Mostrar opciones de configuración" para ver los grupos de configuración. A continuación, expanda los grupos que desee para revisar y personalizar la configuración. A la derecha, aparecerá un resumen de todas las opciones seleccionadas. Personalizar esta configuración es opcional. Se asignan los valores predeterminados siempre que no se realicen personalizaciones.

    Para obtener más detalles sobre cada configuración, consulte la página Acerca de la configuración de instancia .

  5. Haga clic en Crear réplica .

    Cloud SQL crea una copia de seguridad, si es necesario, y crea la réplica. Regresará a la página de la instancia principal.

nube g

Crear la réplica:

gcloud sql instances create REPLICA_NAME \
--master-instance-name=PRIMARY_INSTANCE_NAME
  

Puede especificar un tamaño de nivel diferente utilizando el parámetro --tier , si es necesario.

Puede especificar una región diferente utilizando el parámetro --region .

Si la instancia principal solo tiene una dirección IP interna, agregue el parámetro --no-assign-ip al comando.

Puedes agregar más parámetros para otras configuraciones de instancia. Para obtener más información, consulta "gcloud sql instances create" .

Debe crear la réplica en la misma red de VPC que la instancia principal. También puede especificar un allocated-ip-range-name en esa red de VPC. Si no se especifica ningún rango, la réplica se crea en un rango aleatorio.

Terraformar

Para crear una réplica de lectura, utilice un recurso Terraform .

resource "google_sql_database_instance" "read_replica" {
  name                 = "sqlserver-replica-instance-name"
  master_instance_name = google_sql_database_instance.primary.name
  region               = "europe-west4"
  database_version     = "SQLSERVER_2019_ENTERPRISE"
  root_password        = "INSERT-PASSWORD-HERE"
  replica_configuration {
    failover_target = false
  }

  settings {
    tier              = "db-custom-2-7680"
    availability_type = "ZONAL"
    disk_size         = "100"
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

REST v1beta4

Utilice el método insert del recurso de instancias para crear la réplica de lectura. Las propiedades "región" y "databaseVersion" deben ser las mismas que las del maestro.

Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

  • project-id : El ID del proyecto
  • database-version : cadena de versión de enumeración (por ejemplo, SQLSERVER_2017_ENTERPRISE)
  • primary-instance-name : El nombre de la instancia principal
  • primary-instance-region : La región de la instancia principal
  • replica-region : La región de la instancia de réplica
  • replica-name : El nombre de la instancia de réplica
  • machine-type : Cadena de enumeración del tipo de máquina. Por ejemplo: "db-custom-1-3840"

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "masterInstanceName": "primary-instance-name",
  "project": "project-id",
  "databaseVersion": "database-version",
  "name": "replica-name",
  "region": "replica-region",
  "settings":
  {
    "tier": "machine-type",
    "settingsVersion": 0,
    
  }
}

Para enviar su solicitud, expanda una de estas opciones:

Debería recibir una respuesta JSON similar a la siguiente:

Crear una réplica de lectura de una instancia con Private Service Connect habilitado

Para crear una réplica de lectura de una instancia con Conexión de servicio privado habilitada, utilice La CLI o la API de gcloud . Puede crear esta réplica en la misma región o en una diferente a la de la instancia principal ( réplica de lectura entre regiones ).

La réplica de lectura no puede replicar desde una instancia con un tipo de conectividad diferente. Por ejemplo, una instancia con la Conexión de Servicio Privado habilitada solo puede replicar desde otra instancia con Conexión de Servicio Privado. Tampoco puede replicar desde una instancia que admita conexiones IP externas ni desde una instancia configurada con acceso a servicios privados .

nube g

Para crear una réplica de lectura de una instancia, utilice el comando gcloud sql instances create :

gcloud sql instances create REPLICA_INSTANCE_NAME \
--master-instance-name=PRIMARY_INSTANCE_NAME \
--project=PROJECT_ID \
--region=REGION_NAME \
--enable-private-service-connect \
--allowed-psc-projects=ALLOWED_PROJECTS \
--availability-type=AVAILABILITY_TYPE \
--no-assign-ip

Realice las siguientes sustituciones:

  • REPLICA_INSTANCE_NAME : el nombre de la instancia de réplica.
  • PRIMARY_INSTANCE_NAME : el nombre de la instancia principal.
  • PROJECT_ID : el ID o número de proyecto del Google Cloud proyecto que contiene la instancia.
  • REGION_NAME : el nombre de la región para la instancia de réplica.
  • ALLOWED_PROJECTS : lista de IDs o números de proyecto permitidos, separados por comas. Si un proyecto no figura en esta lista, no podrá usarlo para crear una instancia ni habilitar la Conexión de Servicio Privado.

    Cloud SQL no copia los proyectos permitidos para la instancia principal a la réplica. Para cada réplica, debe crear un punto de conexión de servicio privado . Si utiliza el proxy de autenticación de Cloud SQL o los conectores de lenguaje de Cloud SQL , cree una zona DNS y un registro DNS para las réplicas.

  • AVAILABILITY_TYPE : habilita la alta disponibilidad para la instancia. Para este parámetro, especifique uno de los siguientes valores:
    • REGIONAL : habilita la alta disponibilidad y se recomienda para instancias de producción. La instancia conmuta por error a otra zona dentro de la región seleccionada.
    • ZONAL : no proporciona conmutación por error. Este es el valor predeterminado.

    Para obtener más información sobre cómo configurar y eliminar la alta disponibilidad para instancias, consulte Configurar una instancia existente para alta disponibilidad y Desactivar la alta disponibilidad para una instancia .

REST versión 1

Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

  • PRIMARY_INSTANCE_NAME : el nombre de la instancia principal.
  • PROJECT_ID : el ID o número de proyecto del Google Cloud proyecto que contiene la instancia.
  • REPLICA_INSTANCE_NAME : el nombre de la instancia de réplica.
  • REGION_NAME : el nombre de la región para la instancia de réplica.
  • MACHINE_TYPE : el tipo de máquina para la instancia.
  • AVAILABILITY_TYPE : habilita la alta disponibilidad para la instancia. Para este parámetro, especifique uno de los siguientes valores:
    • REGIONAL : habilita la alta disponibilidad y se recomienda para instancias de producción. La instancia conmuta por error a otra zona dentro de la región seleccionada.
    • ZONAL : no proporciona conmutación por error. Este es el valor predeterminado.

    Para obtener más información sobre cómo configurar y eliminar la alta disponibilidad para instancias, consulte Configurar una instancia existente para alta disponibilidad y Desactivar la alta disponibilidad para una instancia .

  • ALLOWED_PROJECTS : lista de IDs o números de proyecto permitidos, separados por comas. Si un proyecto no figura en esta lista, no podrá usarlo para crear una instancia ni habilitar la Conexión de Servicio Privado.

    Cloud SQL no copia los proyectos permitidos para la instancia principal a la réplica. Para cada réplica, debe crear un punto de conexión de servicio privado . Si utiliza el proxy de autenticación de Cloud SQL o los conectores de lenguaje de Cloud SQL , debe crear una zona DNS y un registro DNS para las réplicas.

Método HTTP y URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances

Cuerpo JSON de la solicitud:

{
  "masterInstanceName": "PRIMARY_INSTANCE_NAME",
  "project": "PROJECT_ID",
  "databaseVersion": "SQLSERVER_2019_STANDARD",
  "name": "REPLICA_INSTANCE_NAME",
  "region": "REGION_NAME",
  "kind": "sql#instance",
  "settings":
  {
    "tier": "MACHINE_TYPE",
    "availabilityType": "AVAILABILITY_TYPE",
    "settingsVersion": 0,
    "ipConfiguration": {
      "ipv4Enabled": false,
      "pscConfig": {
        "allowedConsumerProjects": [ALLOWED_PROJECTS],
        "pscEnabled": true
      }
    },
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "ASYNCHRONOUS",
    "tier": "MACHINE_TYPE"
  }
}

Para enviar su solicitud, expanda una de estas opciones:

Debería recibir una respuesta JSON similar a la siguiente:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME",
  "status": "PENDING",
  "user": "[email protected]",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "CREATE_REPLICA",
  "name": "OPERATION_ID",
  "targetId": "REPLICA_INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

  • PRIMARY_INSTANCE_NAME : el nombre de la instancia principal.
  • PROJECT_ID : el ID o número de proyecto del Google Cloud proyecto que contiene la instancia.
  • REPLICA_INSTANCE_NAME : el nombre de la instancia de réplica.
  • REGION_NAME : el nombre de la región para la instancia de réplica.
  • MACHINE_TYPE : el tipo de máquina para la instancia.
  • AVAILABILITY_TYPE : habilita la alta disponibilidad para la instancia. Para este parámetro, especifique uno de los siguientes valores:
    • REGIONAL : habilita la alta disponibilidad y se recomienda para instancias de producción. La instancia conmuta por error a otra zona dentro de la región seleccionada.
    • ZONAL : no proporciona conmutación por error. Este es el valor predeterminado.

    Para obtener más información sobre cómo configurar y eliminar la alta disponibilidad para instancias, consulte Configurar una instancia existente para alta disponibilidad y Desactivar la alta disponibilidad para una instancia .

  • ALLOWED_PROJECTS : lista de IDs o números de proyecto permitidos, separados por comas. Si un proyecto no figura en esta lista, no podrá usarlo para crear una instancia ni habilitar la Conexión de Servicio Privado.

    Cloud SQL no copia los proyectos permitidos para la instancia principal a la réplica. Para cada réplica, debe crear un punto de conexión de servicio privado . Si utiliza el proxy de autenticación de Cloud SQL o los conectores de lenguaje de Cloud SQL , debe crear una zona DNS y un registro DNS para las réplicas.

Método HTTP y URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances

Cuerpo JSON de la solicitud:

{
  "masterInstanceName": "PRIMARY_INSTANCE_NAME",
  "project": "PROJECT_ID",
  "databaseVersion": "SQLSERVER_2019_STANDARD",
  "name": "REPLICA_INSTANCE_NAME",
  "region": "REGION_NAME",
  "kind": "sql#instance",
  "settings":
  {
    "tier": "MACHINE_TYPE",
    "availabilityType": "AVAILABILITY_TYPE",
    "settingsVersion": 0,
    "ipConfiguration": {
      "ipv4Enabled": false,
      "pscConfig": {
        "allowedConsumerProjects": [ALLOWED_PROJECTS],  
        "pscEnabled": true
      }
    },
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "ASYNCHRONOUS",
    "tier": "MACHINE_TYPE"
  }
}

Para enviar su solicitud, expanda una de estas opciones:

Debería recibir una respuesta JSON similar a la siguiente:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME",
  "status": "PENDING",
  "user": "[email protected]",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "CREATE_REPLICA",
  "name": "OPERATION_ID",
  "targetId": "REPLICA_INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Crear réplicas en cascada

Esta sección describe cómo crear y administrar réplicas en cascada.

Para obtener información sobre cómo funcionan las réplicas en cascada, consulte Réplicas en cascada .

Antes de empezar

La instancia principal debe tener una réplica en cascada. La siguiente sección describe los pasos para crear una réplica en cascada.

Pasos para crear una réplica en cascada

Al crear una réplica en cascada, debe crearla en una región distinta a la de la instancia principal. Para configurar una réplica en cascada, configure el indicador cascadable-replica .

nube g

Cree la nueva réplica especificando la instancia principal utilizando el indicador --master-instance-name y el indicador --cascadable-replica :

gcloud sql instances create REPLICA_NAME \
   --master-instance-name=PRIMARY_INSTANCE_NAME \
   --cascadable-replica \
   --region=REGION

Reemplace lo siguiente:

  • REPLICA_NAME : el ID único de la réplica que está creando.
  • PRIMARY_INSTANCE_NAME : el nombre de la instancia principal.
  • REGION : la región donde se desea crear la nueva réplica. Esta región debe ser diferente de la de la instancia principal.

Debe crear la réplica en la misma red de VPC que la instancia principal. También puede especificar un rango de IP asignado en esa red de VPC. Si no se especifica ningún rango, la réplica se crea en un rango aleatorio.

Puedes agregar más parámetros para otras configuraciones de instancia. Por ejemplo,

  • Puede especificar un tamaño de nivel de máquina diferente utilizando el parámetro --tier .
  • Si la instancia principal solo tiene una dirección IP privada, agregue el parámetro --no-assign-ip al comando.

Para obtener más información sobre cómo agregar parámetros para la configuración de instancias, consulte gcloud sql instances create .

Una vez creada la réplica en cascada, puedes crear una réplica en cascada.

rizo

  1. Para crear una réplica en cascada bajo la instancia principal, edite el siguiente ejemplo de código JSON y guárdelo en un archivo llamado request.json .

    Antes de utilizar cualquiera de los datos solicitados, realice las siguientes sustituciones:

    • PROJECT_ID : el ID del proyecto.
    • DATABASE_VERSION : cadena de enumeración de la versión de la base de datos. Por ejemplo, SQLSERVER_2017_ENTERPRISE.
    • PRIMARY_INSTANCE_NAME : el nombre de la instancia principal.
    • PRIMARY_INSTANCE_REGION : la región de la instancia principal.
    • REPLICA_REGION : la región de la instancia de réplica.
    • REPLICA_NAME : el nombre de la instancia de réplica.
    • MACHINE_TYPE : cadena de enumeración del tipo de máquina. Por ejemplo, db-custom-2-3840 .
    {
      "masterInstanceName": "PRIMARY_INSTANCE_NAME",
      "project": "PROJECT_ID",
      "databaseVersion": "DATABASE_VERSION"
      "name": "REPLICA_NAME",
      "region": "REPLICA_REGION",
      "settings":
        {
          "tier": "MACHINE_TYPE",
          "settingsVersion": 0,
        }
        "replicaConfiguration":
        {
         "cascadableReplica": true
        }
    }
  2. En la sección replicaConfiguration , asegúrese de que el campo cascadadableReplica esté configurado como true .
  3. Ejecute el siguiente comando:
    curl -X POST
    -H "Authorization: Bearer "$(gcloud auth print-access-token)
    -H "Content-Type: application/json; charset=utf-8"
    -d @request.json
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances"

Una vez creada la réplica en cascada, puedes crear una réplica en cascada.

Pasos para crear una réplica en cascada

Al crear una réplica en cascada, debe crearla en la misma región que la réplica en cascada. Para configurar una réplica en cascada, proporcione el nombre de la réplica en cascada en el parámetro –master-instance-name .

Consola

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

    Ir a Instancias de Cloud SQL

  2. Haga clic en la pestaña Réplicas de la réplica que actuará como padre de la réplica que desea crear.
  3. Haga clic en Crear réplica .
  4. En la página Crear réplica de lectura , actualice el ID de instancia y cualquier otra opción de configuración, incluido el nombre, la región y la zona.
  5. Haga clic en Crear .

    Cloud SQL crea una réplica. Regresará a la página de la instancia de la réplica principal.

  6. Siga los pasos 4 a 6 para cada nueva réplica en cascada que desee crear.

nube g

  1. Cree la nueva réplica especificando la instancia de réplica en cascada en el indicador --master-instance-name :
  2. gcloud sql instances create REPLICA_NAME \
          --master-instance-name=CASCADABLE_REPLICA_NAME \
    Reemplace lo siguiente:
    • REPLICA_NAME : el ID único de la réplica que está creando
    • CASCADABLE_REPLICA_NAME : el nombre de la réplica en cascada
  3. Después de crear la réplica en cascada, puede ver que los cambios realizados en la instancia principal se replican en todas las réplicas de la cadena de réplicas en cascada.

rizo

  1. Para crear una réplica en cascada debajo de la réplica en cascada, edite el siguiente ejemplo de código JSON y guárdelo en un archivo llamado request.json :
    {
      "masterInstanceName": "CASCADABLE_REPLICA_NAME",
      "project": "PROJECT_ID",
      "name": "REPLICA_NAME",
      "region": "REPLICA_REGION",
      "settings":
        {
          "tier": "MACHINE_TYPE",
        }
    }
  2. Ejecute el siguiente comando:
    curl -X POST
    -H "Authorization: Bearer "$(gcloud auth print-access-token)
    -H "Content-Type: application/json; charset=utf-8"
    -d @request.json
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances"

Solucionar problemas

Asunto Solución de problemas
La réplica de lectura no comenzó a replicarse durante la creación. Probablemente haya un error más específico en los archivos de registro. Inspeccione los registros en Cloud Logging para encontrar el error real.
No se puede crear una réplica de lectura: error invalidFlagValue. Una de las banderas de la solicitud no es válida. Podría ser una bandera que usted proporcionó explícitamente o una que se configuró con un valor predeterminado.

Primero, verifique que el valor del indicador max_connections sea mayor o igual al valor del principal.

Si el indicador max_connections está configurado correctamente, inspeccione los registros en Cloud Logging para encontrar el error real.

No se puede crear una réplica de lectura: error desconocido. Probablemente haya un error más específico en los archivos de registro. Inspeccione 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 , deshabilite y vuelva a habilitar la Service Networking API . Esta acción crea la cuenta de servicio necesaria para continuar con el proceso.

El disco está lleno. El disco de la instancia principal puede alcanzar su capacidad máxima durante la creación de la réplica. Edite la instancia principal para ampliarla a un disco de mayor capacidad.
La instancia de réplica está utilizando demasiada memoria. La réplica utiliza memoria temporal para almacenar en caché operaciones de lectura solicitadas con frecuencia, lo que puede provocar que utilice más memoria que la instancia principal.

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

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

Edite la instancia para habilitar automatic storage increase .

El retraso en la replicación es constantemente alto. La carga de escritura es demasiado alta para que la réplica la pueda gestionar. El retraso de replicación se produce cuando el subproceso SQL de una réplica no puede seguir el ritmo del subproceso de E/S. Algunos tipos de consultas o cargas de trabajo pueden causar un retraso de replicación elevado, temporal o permanente, para un esquema determinado. Algunas de las causas típicas del retraso de replicación son:
  • Consultas lentas en la réplica. Encuéntrelas y corríjalas.
  • Consultas como DELETE ... WHERE field < 50000000 provocan retrasos en la replicación con la replicación basada en filas, ya que una gran cantidad de actualizaciones se acumulan en la réplica.

Algunas posibles soluciones incluyen:

  • Edite la instancia para aumentar el tamaño de la réplica.
  • Reducir la carga en la base de datos.
  • Envía tráfico de lectura a la réplica de lectura.
  • Indexar las tablas.
  • Identificar y corregir consultas de escritura lentas.
  • Recrea la réplica.
La creación de una réplica falla debido al tiempo de espera. Las transacciones no confirmadas de ejecución prolongada en la instancia principal pueden provocar que falle la creación de una réplica de lectura.

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

¿Qué sigue?