Configurar réplicas externas

Nesta página, você verá como configurar uma instância do Cloud SQL que é replicada a uma ou mais réplicas externas a ele. Além disso, verá como rebaixar a instância mestre em uma configuração de réplica externa para reverter a configuração.

Para mais informações sobre a configuração da réplica externa, consulte Requisitos e dicas para configurar a replicação.

Como definir a configuração da réplica externa

Antes de começar

Para iniciar essa tarefa, você precisa ter uma instância do Cloud SQL e uma outra externa do MySQL que atendam aos requisitos de réplicas externas.

Configuração da instância mestre

  1. Acesse a página Instâncias do Cloud SQL no Console do Google Cloud.

    Acessar a página Instâncias do Cloud SQL

  2. Ative o acesso na instância mestre do endereço IP da réplica externa.

    Para informações sobre como ativar o acesso IP, consulte Como configurar o acesso para conexões IP.

  3. Registre o endereço IP da instância mestre para uso posterior.

    Você pode encontrar o endereço IP na página Visão geral da instância.

  4. Clique no ícone do Cloud Shell (Ícone do Cloud Shell) no canto superior direito.

  5. No prompt do Cloud Shell, use o cliente mysql integrado para se conectar à instância mestre:

    gcloud sql connect [MASTER_INSTANCE_NAME] --user=root
        
  6. Insira a senha raiz.

    Você verá o prompt mysql.

  7. Crie um usuário especial para a replicação:

    CREATE USER '[REPLICATION_USER]'@'%' IDENTIFIED BY '[REPLICATION_PASSWORD]';
        
  8. Conceda privilégios de replicação a esse usuário:

    GRANT REPLICATION SLAVE ON *.* TO '[REPLICATION_USER]'@'%';
        
  9. Exporte o banco de dados da instância mestre para um intervalo do Cloud Storage.

    Siga as instruções de replicação externa em Criar um arquivo dump SQL.

  10. Faça o download do arquivo de exportação do intervalo para a réplica. Basta clicar no arquivo do Console do Cloud Storage pela máquina que hospeda a réplica.

Configuração da réplica externa

2ª geração

  1. Na máquina que hospeda a réplica, sugira a nova instância MySQL externa com o arquivo de exportação criado pela instância mestre.

    Por exemplo, o comando a seguir carrega o arquivo de exportação chamado mysqldump.sql:

        mysql --user=root --password <  mysqldump.sql
        
  2. Determine o código do servidor desse par réplica/mestre.

    O código do servidor é um valor numérico, por exemplo, "3", que precisa ser exclusivo em toda a configuração da replicação externa. Além disso, é necessário que cada réplica tenha um código do servidor exclusivo.

  3. Adicione as seguintes opções ao arquivo de opções my.cnf da 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 mais informações sobre opções de replicação do MySQL, consulte Replicação e opções de geração de registros binários

    .
  4. Reinicie o processo mysqld para fazer com que o arquivo de configuração seja lido.
  5. Em um cliente mysql na réplica, digite o seguinte comando:
        CHANGE MASTER TO MASTER_HOST='[MASTER_IP_ADDRESS]', MASTER_USER='[REPLICATION_USER]',
        MASTER_PASSWORD='[REPLICATION_PASSWORD]', MASTER_AUTO_POSITION=1;
        
  6. Inicie a replicação na réplica:
        START SLAVE;
        
  7. Confirme o status da replicação:

        SHOW SLAVE STATUS\G;
        

    Caso você veja "Espera pelo envio do evento pelo mestre", a replicação está funcionando.

1ª geração

  1. Na máquina que hospeda a réplica, sugira a nova instância MySQL externa com o arquivo de exportação criado pela instância mestre.

    Por exemplo, o comando a seguir carrega o arquivo de exportação chamado mysqldump.sql:

        mysql --user=root --password <  mysqldump.sql
        
  2. Determine o código do servidor desse par réplica/mestre.

    O código do servidor é um valor numérico, por exemplo, "3", que precisa ser exclusivo em toda a configuração da replicação externa. Além disso, é necessário que cada réplica tenha um código do servidor exclusivo.

  3. Configure o ID do servidor na réplica de leitura adicionando uma linha semelhante ao exemplo a seguir ao arquivo de opções my.cnf:

        [mysqld]
        server-id=[SERVER_ID]
        

    Para mais informações sobre opções de replicação do MySQL, consulte Replicação e opções de geração de registros binários

    .
  4. Reinicie o processo mysqld para fazer com que o arquivo de configuração seja lido.
  5. Abra o arquivo de exportação e localize o comando CHANGE MASTER TO MASTER_LOG_FILE.
  6. Copie e cole a linha, menos os traços iniciais ("--"), no cliente mysql.

    Ainda não pressione Enter.

  7. Antes do ponto e vírgula final, insira valores para MASTER_HOST, MASTER_USER e MASTER_PASSWORD.

    A instrução deve ser semelhante ao seguinte exemplo:

        CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107,
        MASTER_HOST='[MASTER_IP_ADDRESS]', MASTER_USER='[REPLICATION_USER]', MASTER_PASSWORD='[REPLICATION_PASSWORD]';
        
  8. Pressione Enter para executar a instrução.
  9. Inicie a replicação na réplica:

        START SLAVE;
        
  10. Confirme o status da replicação:

        SHOW SLAVE STATUS\G;
        

    Caso você veja "Espera pelo envio do evento pelo mestre", a replicação está funcionando.

Como rebaixar o mestre de uma réplica externa

Quando você tem uma instância do Cloud SQL com uma réplica externa, é possível reverter a configuração, o que faz com que estas alterações ocorram:

  • A réplica externa se torna a nova instância mestre.
  • A instância do Cloud SQL se torna uma réplica de leitura, replicando a partir do servidor que anteriormente era a réplica externa (agora chamado de servidor de banco de dados de origem).

Para reverter a configuração da réplica externa:

  1. Crie uma instância de representação de origem.

    Esta instância representará o servidor de banco de dados de origem para a réplica do Cloud SQL após a conclusão da operação de rebaixamento.

        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_MYSQL_VERSION]",
                 "onPremisesConfiguration": {
                     "hostPort": "[EXTERNAL_SERVER_IP]:[EXTERNAL_SERVER_PORT]"
                 }
             }' \
             -X POST \
             https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances
        

    Use a região em que você quer que sua réplica do Cloud SQL resida.

  2. Inicie o processo de rebaixamento.

    Como essa chamada de API requer que você forneça informações confidenciais, é necessário usar um arquivo JSON para fornecer seus dados a cURL, em vez de fornecê-los na linha de comando.

    Crie o arquivo de dados:

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

    Em seguida, chame a API.

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

    Para mais informações sobre suas opções para SSL/TLS, consulte Opções de SSL/TLS. Para obter mais informações sobre as propriedades usadas pelo objeto replicaConfiguration, consulte Como replicar de um servidor externo.

  3. Aguarde a réplica externa concluir todas as transações pendentes da instância mestre.

    Quando a réplica é capturada, o comando SHOW SLAVE STATUS mostra Seconds Behind Master como 0, e o valor Executed_Gtid_Set será idêntico entre a réplica externa e o Cloud SQL mestre.

  4. Use o cliente mysql para interromper a replicação na réplica externa:

        STOP SLAVE
        RESET SLAVE ALL
        
  5. Aguarde até que a instância do Cloud SQL comece a replicar a partir do servidor externo, que agora é o servidor de banco de dados de origem.

    A execução do comando SHOW SLAVE STATUS na instância do Cloud SQL fornece o status de replicação.

  6. Quando a instância do Cloud SQL estiver sendo replicada do servidor de banco de dados de origem, defina a sinalização read_only no servidor de banco de dados de origem como off e atualize seus aplicativos para apontar para o servidor de banco de dados de origem.

A seguir