Configurar réplicas externas

En esta página se describe cómo configurar una instancia de Cloud SQL que se replica en una o varias réplicas externas a Cloud SQL, así como cómo degradar la instancia principal en una configuración de réplica externa para invertir la configuración.

Para obtener más información sobre la replicación, consulta el artículo Acerca de la replicación en Cloud SQL.

Configurar la réplica externa

Antes de empezar

Antes de empezar esta tarea, debe tener una instancia de Cloud SQL y una instancia de MySQL externa que cumpla los requisitos de las réplicas externas.

Requisitos de la instancia de origen

La instancia de origen de una réplica de lectura externa debe ser una instancia principal o independiente. No puedes usar una réplica de lectura de Cloud SQL como instancia de origen de una réplica de lectura externa. A veces, las réplicas de lectura se vuelven a crear a partir del clon de disco de su instancia principal, y la réplica de lectura no puede mantener su estado de replicación en una réplica de lectura externa.

Configurar la instancia principal

  1. Ve a la página Instancias de Cloud SQL de la Google Cloud consola.
  2. Habilita el acceso en la instancia principal para la dirección IP de la réplica externa.

    Para obtener información sobre cómo habilitar el acceso por IP, consulta el artículo Configurar el acceso para conexiones IP.

  3. Anota la dirección IP pública y la dirección IP pública de salida de la instancia principal para usarlas más adelante. Puede encontrar estos valores en la página Resumen de la instancia.
  4. En la esquina superior derecha, haz clic en el icono de Cloud Shell .
  5. En el prompt de Cloud Shell, usa el cliente MySQL integrado para conectarte a tu instancia principal:
       
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=root
       
       
  6. Introduce tu contraseña de administrador. A continuación, deberías ver la petición de mysql.
  7. Crea un usuario especial para la replicación y concédele privilegios de replicación:
    CREATE USER 'REPLICATION_USER'@'%' IDENTIFIED BY 'REPLICATION_USER_PASSWORD';
    GRANT REPLICATION SLAVE ON *.* TO 'REPLICATION_USER'@'%';
       
  8. Si vas a usar una base de datos nueva, crea la misma base de datos y las mismas tablas en las instancias principal y réplica. Por ejemplo:
    CREATE DATABASE test;
    
    USE test;
    
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
  9. Si ya tienes una base de datos en la instancia principal, debes crear la misma en la réplica. Para ello, exporta la base de datos de la instancia principal a un segmento de Cloud Storage e impórtala en la réplica. Consulta más información sobre cómo exportar datos de Cloud SQL a un archivo de volcado de SQL en Cloud Storage.

Configurar la réplica externa

Advertencia: Este procedimiento sobrescribe los datos alojados en una base de datos MySQL de la réplica, incluidos los usuarios y las contraseñas, con la configuración y los datos de la instancia principal.
  1. En la máquina que aloja la réplica, inicializa la nueva instancia de MySQL externa con el archivo de exportación que has creado a partir de la instancia principal.

    Por ejemplo, el siguiente comando carga un archivo exportado llamado mydump.sql:

    mysql --user=root --password < mydump.sql
    
  2. Determina el ID del servidor de este par réplica-principal.

    El ID de servidor es un valor numérico (por ejemplo, "3") que debe ser único en la configuración de réplica externa (cada réplica debe tener un ID de servidor único).

  3. Añade las siguientes opciones al archivo de opciones my.cnf de la réplica:
    [mysqld]
    server-id=[SERVER_ID]
    gtid_mode=ON
    enforce_gtid_consistency=ON
    log_slave_updates=ON
    replicate-ignore-db=mysql
    binlog-format=ROW
    log_bin=mysql-bin
    expire_logs_days=1
    read_only=ON
    

    Para obtener más información sobre las opciones de replicación de MySQL, consulta Opciones de replicación y de almacenamiento de registros binarios.

  4. Reinicia el proceso mysqld para que se lea el archivo de configuración.
  5. En un cliente mysql de la réplica, introduce el siguiente comando:
    CHANGE MASTER TO MASTER_HOST='MASTER_IP_ADDRESS', MASTER_USER='REPLICATION_USER',
    MASTER_PASSWORD='REPLICATION_PASSWORD', MASTER_AUTO_POSITION=1;
    
  6. Inicia la replicación en la réplica:
    START SLAVE;
    
  7. Confirma el estado de la replicación:

    SHOW SLAVE STATUS\G;
    

    Si ves el mensaje "Waiting for master to send event" (Esperando que el elemento principal envíe el evento), significa que la replicación funciona.

Rebajar la instancia principal de una réplica externa

Si tienes una instancia de Cloud SQL con una réplica externa, puedes invertir la configuración para que se produzcan los siguientes cambios:

  • La réplica externa se convierte en la nueva instancia principal.
  • La instancia de Cloud SQL se convierte en una réplica de lectura que replica datos del servidor que antes era la réplica externa (ahora llamado servidor de base de datos de origen).

Para revertir la configuración de la réplica externa, sigue estos pasos:

  1. Crea una instancia de representación de la fuente.

    Esta instancia representará el servidor de la base de datos de origen en la réplica de Cloud SQL una vez que se haya completado la operación de degradación.

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{
             "name": "SOURCE_REPRESENTATION_NAME",
             "region": "REGION",
             "databaseVersion": "EXTERNAL_SERVER_DATABASE_VERSION",
             "onPremisesConfiguration": {
                 "hostPort": "EXTERNAL_SERVER_IP:EXTERNAL_SERVER_PORT"
             }
         }' \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances
    

    Usa la región en la que quieras que resida tu réplica de Cloud SQL.

  2. Inicia el proceso de degradación.

    Como esta llamada a la API requiere que proporciones información sensible, debes usar un archivo JSON para proporcionar tus datos a cURL en lugar de hacerlo en la línea de comandos.

    Crea el archivo de datos:

    {
        "demoteMasterContext": {
            "replicaConfiguration": {
                "mysqlReplicaConfiguration": {
                    "username": "REPLICATION_USERNAME",
                    "password": "PASSWORD",
                    "caCertificate": "EXTERNAL_SERVER_CA",
                    "clientCertificate": "CLIENT_CERT",
                    "clientKey": "PRIVATE_KEY"
                }
            },
            "masterInstanceName": "SOURCE_REPRESENTATION_NAME",
        },
    }
    

    A continuación, llama a la API.

    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @PATH_TO_DATA_FILE \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_NAME/demoteMaster
    

    Para obtener más información sobre las opciones de SSL/TLS, consulta Opciones de SSL/TLS. Para obtener más información sobre las propiedades que usa el objeto replicaConfiguration, consulta el artículo Replicación desde un servidor externo.

  3. Espera a que la réplica externa complete todas las transacciones pendientes de la instancia principal.

    Cuando la réplica se haya puesto al día, el comando SHOW SLAVE STATUS mostrará Seconds Behind Master como 0 y el valor de Executed_Gtid_Set será idéntico en la réplica externa y en la instancia principal de Cloud SQL.

  4. Usa el cliente mysql para detener la replicación en la réplica externa:

    STOP SLAVE
    RESET SLAVE ALL
    
  5. Espera a que la instancia de Cloud SQL empiece a replicar datos del servidor externo, que ahora es el servidor de la base de datos de origen.

    Al ejecutar el comando SHOW SLAVE STATUS en la instancia de Cloud SQL, se muestra el estado de la replicación.

  6. Cuando la instancia de Cloud SQL replique correctamente los datos del servidor de la base de datos de origen, define la marca read_only en el servidor de la base de datos de origen como off y actualiza tus aplicaciones para que apunten al servidor de la base de datos de origen.

Solucionar problemas

Problema Solución de problemas
Mensaje de error: The slave is connecting ... master has purged binary logs containing GTIDs that the slave requires. La instancia principal de Cloud SQL tiene copias de seguridad automáticas, registros binarios y la recuperación a un momento dado habilitada, por lo que debería tener suficientes registros para que la réplica pueda ponerse al día. Sin embargo, en este caso, aunque existen los registros binarios, la réplica no sabe desde qué fila debe empezar a leer.

Crea un archivo de volcado con los ajustes de marca correctos y configura la réplica externa con ese archivo.

  1. Conéctate a tu cliente mysql a través de una instancia de Compute Engine.
  2. Ejecuta mysqldump y usa las marcas --master-data=1 y --flush-privileges.

    Importante: No incluya la --set-gtid-purged=OFF bandera.

    Más información

  3. Asegúrate de que el archivo de volcado que acabas de crear contiene la línea SET @@GLOBAL.GTID_PURGED='...'.
  4. Sube el archivo de volcado a un segmento de Cloud Storage y configura la réplica con el archivo de volcado.

Siguientes pasos