Configurer des instances dupliquées externes

Cette page explique comment configurer une instance Cloud SQL répliquée par une ou plusieurs instances dupliquées externes vers Cloud SQL. Elle décrit également comment rétrograder l'instance principale vers une configuration d'instance dupliquée externe pour inverser la configuration.

Pour en savoir plus sur la configuration des instances dupliquées externes, consultez la section À propos de la réplication externe.

Définir la configuration de l'instance dupliquée externe

Avant de commencer

Pour effectuer cette tâche, vous devez disposer d'une instance Cloud SQL et d'une instance MySQL externe répondant aux exigences relatives aux instances dupliquées externes.

Configurer l'instance principale

  1. Accédez à la page Instances Cloud SQL dans la console Google Cloud.
  2. Autorisez l'adresse IP de l'instance dupliquée externe à accéder à l'instance principale.

    Pour en savoir plus sur l'activation de l'accès à une adresse IP, consultez la section Configurer l'accès pour les connexions IP.

  3. Enregistrez l'adresse IP publique et l'adresse IP sortante publique de l'instance principale pour une utilisation ultérieure. Vous pouvez trouver ces valeurs sur la page Présentation de l'instance.
  4. Cliquez sur l'icône Cloud Shell  dans l'angle supérieur droit.
  5. Lorsque l'invite Cloud Shell s'affiche, utilisez le client MySQL intégré pour vous connecter à votre instance principale :
       
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=root
       
       
  6. Saisissez votre mot de passe racine. L'invite mysql doit alors s'afficher.
  7. Créez un utilisateur spécial pour la réplication et accordez-lui des droits de réplication :
    CREATE USER 'REPLICATION_USER'@'%' IDENTIFIED BY 'REPLICATION_USER_PASSWORD';
    GRANT REPLICATION SLAVE ON *.* TO 'REPLICATION_USER'@'%';
       
  8. Si vous lancez une nouvelle base de données, créez la même base de données et les mêmes tables sur les instances principale et répliquée. Exemple :
    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 vous disposez déjà d'une base de données sur l'instance principale, vous devez la créer sur l'instance dupliquée. Pour ce faire, exportez la base de données de l'instance principale vers un bucket Cloud Storage, puis importez-la dans l'instance dupliquée. Apprenez-en plus sur l'exportation de données de Cloud SQL vers un fichier de vidage SQL dans Cloud Storage.

Configurer l'instance dupliquée externe

Avertissement : Cette procédure écrase toutes les données hébergées dans une base de données MySQL sur l'instance dupliquée, y compris les utilisateurs et mots de passe, ainsi que les paramètres et données issus de l'instance principale.
  1. Sur la machine hébergeant l'instance dupliquée, chargez le fichier d'exportation que vous avez créé à partir de l'instance principale sur votre nouvelle instance externe MySQL.

    Par exemple, la commande suivante charge un fichier exporté nommé mydump.sql :

    mysql --user=root --password < mydump.sql
    
  2. Identifiez l'ID de serveur associé à cette paire instance dupliquée/instance principale.

    L'ID de serveur est une valeur numérique (par exemple, "3") qui doit être unique dans la configuration de l'instance dupliquée externe (chaque instance dupliquée doit posséder un ID de serveur unique).

  3. Ajoutez les éléments suivants au fichier d'options my.cnf de l'instance dupliquée :
    [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
    

    Pour en savoir plus sur les options associées à la réplication MySQL, consultez la section Options associées à la réplication et à la journalisation binaire.

  4. Redémarrez le processus mysqld pour que le fichier de configuration soit lu.
  5. Dans un client mysql sur l'instance dupliquée, saisissez la commande suivante :
    CHANGE MASTER TO MASTER_HOST='MASTER_IP_ADDRESS', MASTER_USER='REPLICATION_USER',
    MASTER_PASSWORD='REPLICATION_PASSWORD', MASTER_AUTO_POSITION=1;
    
  6. Démarrez la duplication sur l'instance dupliquée :
    START SLAVE;
    
  7. Confirmez l'état de la réplication :

    SHOW SLAVE STATUS\G;
    

    Si l'état "En attente d'un événement de l'instance maître" s'affiche, la réplication fonctionne correctement.

Rétrograder l'instance principale d'une instance dupliquée externe

Lorsque vous disposez d'une instance Cloud SQL avec une instance dupliquée externe, vous pouvez inverser la configuration, ce qui entraîne les modifications suivantes :

  • L'instance dupliquée externe devient la nouvelle instance principale.
  • L'instance Cloud SQL devient une instance dupliquée avec accès en lecture. Elle réplique alors le serveur qui servait précédemment d'instance dupliquée externe (et qui est désormais appelé serveur de base de données source).

Pour inverser la configuration de l'instance dupliquée externe, procédez comme suit :

  1. Créez une instance de représentation source.

    Une fois la rétrogradation terminée, elle représentera le serveur de base de données source auprès de l'instance dupliquée Cloud SQL.

    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
    

    Spécifiez la région qui accueillera votre instance dupliquée Cloud SQL.

  2. Démarrez le processus de rétrogradation.

    Comme cet appel d'API vous oblige à insérer des informations sensibles, il est préférable de les fournir à cURL par le biais d'un fichier JSON plutôt que d'utiliser la ligne de commande.

    Créez le fichier de données :

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

    Appelez ensuite l'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
    

    Pour en savoir plus sur les options SSL/TLS, reportez-vous à la section Options SSL/TLS. Pour en savoir plus sur les propriétés utilisées par l'objet replicaConfiguration, consultez la page Duplication depuis un serveur externe.

  3. Attendez que l'instance dupliquée externe termine toutes les transactions en attente provenant de l'instance principale.

    Une fois que l'instance dupliquée a rattrapé son retard, la commande SHOW SLAVE STATUS indique la valeur 0 pour le champ Seconds Behind Master. L'instance dupliquée externe et l'instance principale Cloud SQL possèdent également la même valeur pour le champ Executed_Gtid_Set.

  4. Arrêtez la duplication sur l'instance dupliquée externe à l'aide du client mysql :

    STOP SLAVE
    RESET SLAVE ALL
    
  5. Attendez que l'instance Cloud SQL commence la duplication depuis le serveur externe, qui est désormais un serveur de base de données source.

    Vous pouvez exécuter la commande SHOW SLAVE STATUS sur l'instance Cloud SQL pour connaître l'état de la duplication.

  6. Une fois que l'instance Cloud SQL réplique bien les données du serveur de base de données source, définissez l'option read_only du serveur sur off et mettez à jour vos applications pour qu'elles pointent vers celui-ci.

Résoudre les problèmes

Problème Dépannage
Message d'erreur : The slave is connecting ... master has purged binary logs containing GTIDs that the slave requires. L'instance principale Cloud SQL dispose de sauvegardes automatiques, de journaux binaires et de la récupération à un moment précis. Elle devrait donc disposer de suffisamment de journaux pour que l'instance dupliquée puisse rattraper son retard. Toutefois, même si les journaux binaires existent, l'instance dupliquée ne sait pas sur quelle ligne commencer à lire.

Créez un fichier de dump avec les options appropriées, puis configurez l'instance répliquée externe en utilisant ce fichier.

  1. Connectez-vous à votre client mysql via une instance Compute Engine.
  2. Exécutez mysqldump et utilisez les options --master-data=1 et --flush-privileges.

    Important : n'incluez pas l'option --set-gtid-purged=OFF.

    En savoir plus.

  3. Assurez-vous que le fichier de dump que vous venez de créer contient la ligne SET @@GLOBAL.GTID_PURGED='...'.
  4. Importez le fichier de dump dans un bucket Cloud Storage, puis configurez l'instance répliquée en utilisant ce fichier.

Étape suivante