Como migrar um cluster MySQL para o Compute Engine usando o HAProxy

Neste tutorial, explicamos o processo de migração de um banco de dados MySQL para o Google Cloud usando a replicação nativa do MySQL, instâncias HAProxy e o Compute Engine. O MySQL é um conhecido sistema multifunções de gerenciamento de banco de dados relacional (RDBMS, na sigla em inglês).

Este tutorial é útil se você for administrador de sistemas, desenvolvedor, engenheiro, administrador de banco de dados ou engenheiro de desenvolvimento e queira migrar seus dados do MySQL cluster em uso para o MySQL no Compute Engine. Talvez você queira gerenciar sua própria instância do MySQL em vez de usar o serviço gerenciado em decorrência de instâncias entre regiões, uso mais avançado de parâmetros e necessidades específicas de desempenho. Esta solução não aborda a migração do MySQL para o Cloud SQL.

Neste tutorial, presumimos que você esteja familiarizado com o que se segue:

  • Linux
  • Ubuntu-server 16.04
  • MySQL 5.7
  • HAProxy
  • Compute Engine

Arquitetura

Use um modelo do Cloud Deployment Manager do repositório do GitHub deste tutorial para criar um ambiente em que um cluster MySQL esteja na região us-east1, que consiste em uma primária (master) e uma réplica (slave), além de um cliente MySQL. Os scripts detalhados neste documento preenchem o banco de dados com um esquema source_db e uma tabela source_table com 5.000 linhas de dados de amostra.

O diagrama de arquitetura a seguir ilustra o ambiente quando você começa. Ele consiste em um cluster MySQL e uma instância de cliente.

Arquitetura de um ambiente de início com o cluster MySQL e uma instância de cliente

Primeiro, replique a instância de réplica de origem na instância primária de destino em execução no Compute Engine e crie uma instância HAProxy para encaminhar o tráfego. No diagrama a seguir, o balanceador de carga do HAProxy é direcionado para a primária de origem, e a replicação é configurada entre a réplica de origem e a instância primária de destino:

Direcionar o balanceador de carga para a primária no local

Após configurar a replicação e sincronizar as implantações, direcione o balanceador de carga do HAProxy para a instância primária de destino do Compute Engine, conforme ilustrado no seguinte diagrama:

Direcionar o balanceador de carga para as instâncias do Compute Engine

Objetivos

  • Criar um cluster MySQL de origem e uma instância MySQL cliente no Compute Engine usando o Deployment Manager.
  • Configurar uma implementação de um nó do MySQL de destino no Compute Engine.
  • Replicar os dados do cluster MySQL de origem para a instância de destino do MySQL.
  • Criar uma instância HAProxy e configurá-la para direcionar ao cluster MySQL de origem.
  • Direcionar o cliente MySQL para a instância HAProxy.
  • Direcionar a instância HAProxy para o nó de destino do MySQL.
  • Interromper a replicação de dados da implantação de origem para a implantação de destino.

Custos

Neste tutorial, usamos os seguintes componentes faturáveis do Google Cloud:

  • Compute Engine
  • Cloud Storage

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem ser qualificados para uma avaliação gratuita.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  4. Ative as APIs Compute Engine and Cloud Deployment Manager.

    Ative as APIs

Ao concluir este tutorial, exclua os recursos criados para evitar o faturamento contínuo. Veja mais detalhes em Como fazer a limpeza.

Configurar o ambiente

Neste tutorial, use o Cloud Shell para inserir comandos. O Cloud Shell fornece acesso à linha de comando no Console do Google Cloud e inclui o SDK do Cloud e outras ferramentas necessárias para desenvolver no Google Cloud. Ele aparece como uma janela na parte inferior do Console do Cloud. A inicialização leva vários minutos, mas a janela aparece imediatamente.

Como primeiro passo, use o Cloud Shell para criar um bucket do Cloud Storage.

  1. Abra o Cloud Shell

    ABRIR o Cloud Shell

  2. Defina uma variável de ambiente para o nome do bucket do Cloud Storage.

    GCS_BUCKET_NAME=${USER}-mysql-$(date +%s)
    echo $GCS_BUCKET_NAME
    
  3. Crie o bucket do Cloud Storage.

    gsutil mb gs://${GCS_BUCKET_NAME}/
    
  4. Recupere os scripts para definir o ambiente do repositório do GitHub.

    git clone https://github.com/GoogleCloudPlatform/solutions-compute-mysql-migration-haproxy.git mysql-migration
    
  5. Execute o script de inicialização para criar um cluster do MySQL de instâncias primárias e de réplica. Este script também cria uma instância de cliente MySQL.

    cd mysql-migration
    ./run.sh ${DEVSHELL_PROJECT_ID} ${GCS_BUCKET_NAME}
    

Preparar o MySQL de origem para replicação

Para migrar os dados para outra instância do MySQL, configure a instância source-mysql-replica para replicar os dados para outras instâncias.

  1. No Console do Cloud, acesse a página Instâncias de VM.

    PÁGINA DE INSTÂNCIAS DE VM

  2. Na linha da instância source-mysql-replica, clique em ssh.

  3. Especifique um usuário para fins de replicação. Para os fins deste tutorial, a senha deste usuário é solution-admin.

    mysql -u root -psolution-admin -e "GRANT REPLICATION SLAVE ON *.* TO
    'sourcereplicator'@'%' IDENTIFIED BY 'solution-admin';"
    
  4. Ative a geração de registros de réplica.

    sudo bash -c 'echo log_slave_updates = 1 >>/etc/mysql/mysql.conf.d/mysqld.cnf'
    
  5. Reinicie o MySQL.

    sudo service mysql restart
    

    Quando reiniciar o MySQL, todos os clientes conectados à instância da réplica serão desconectados. Pode levar algum tempo para a réplica sincronizar com a primária, dependendo do volume de gravações nela durante o reinício da réplica.

Definir a conta de serviço para instâncias de destino do MySQL

Uma conta de serviço está associada a um conjunto de papéis e permissões. Crie uma conta de serviço para sua instância do MySQL com os privilégios mínimos necessários para este tutorial.

  1. Abra o Cloud Shell

    ABRIR o Cloud Shell

  2. Crie a conta de serviço.

    gcloud iam service-accounts create mysql-instance \
        --display-name "mysql-instance"
    
  3. Adicione o papel storage.objectAdmin à conta de serviço mysql-instance. Esse papel é necessário para visualizar e fazer o download de arquivos do bucket do Cloud Storage.

    gcloud projects add-iam-policy-binding ${DEVSHELL_PROJECT_ID} \
        --member=serviceAccount:mysql-instance@${DEVSHELL_PROJECT_ID}.iam.gserviceaccount.com \
        --role=roles/storage.objectAdmin
    

Definir a instância de destino do MySQL no Compute Engine

Nesta seção, crie uma instância do Compute Engine e instale o MySQL.

  1. No Cloud Shell, crie a instância de destino do MySQL.

    gcloud compute instances create target-mysql-primary \
            --image-family=ubuntu-1604-lts  --image-project=ubuntu-os-cloud \
            --tags=mysql57 --zone=us-central1-c \
        --service-account=mysql-instance@${DEVSHELL_PROJECT_ID}.iam.gserviceaccount.com \
        --scopes=https://www.googleapis.com/auth/devstorage.read_write
    
  2. No Console do Cloud, acesse a página Instâncias de VM.

    PÁGINA DE INSTÂNCIAS DE VM

  3. Clique em Atualizar.

  4. No Console do Cloud, use ssh para se conectar à instância target-mysql-primary.

  5. Na janela de terminal da instância, instale o MySQL.

    sudo apt-get update
    sudo apt-get -y install mysql-server-5.7
    
  6. Quando solicitado, digite solution-admin para a senha do usuário raiz.

  7. No Cloud Shell, crie regras de firewall para permitir a comunicação entre as instâncias MySQL de origem e a instância de destino.

    gcloud compute firewall-rules create mysql  --allow=tcp:3306 \
        --source-tags source-mysql --target-tags target-mysql
    

Definir o acesso raiz seguro entre a réplica de origem e as instâncias primárias de destino

Para configurar a autenticação, crie chaves privadas e públicas na instância target-mysql-primary e copie a chave pública para a instância source-mysql-replica. Essa autenticação permite que você copie rapidamente arquivos mais tarde da instância source-mysql-replica para a instância target-mysql-primary usando o comando rsync.

  1. No Console do Cloud, use ssh para se conectar à instância target-mysql-primary.

  2. Crie uma chave privada.

    sudo ssh-keygen
    
  3. Quando solicitado, pressione Enter para aceitar todas as configurações padrão.

  4. Copie a chave pública para o bucket do Cloud Storage.

    sudo bash -c "gsutil cp /root/.ssh/id_rsa.pub gs://[GCS_BUCKET_NAME]/"
    

    Em que:

    • [GCS_BUCKET_NAME] representa o bucket criado no início deste tutorial.
  5. No Console do Cloud, use ssh para se conectar à instância source-mysql-replica.

  6. Na janela do terminal da instância, copie a chave pública do bucket do Cloud Storage.

    sudo bash -c "gsutil cp \
        gs://[GCS_BUCKET_NAME]/id_rsa.pub /root/.ssh/target-mysql-primary.pub"
    

    Em que:

    • [GCS_BUCKET_NAME] representa o bucket criado no início deste tutorial.
  7. Adicione a chave pública ao arquivo authorized_keys.

    sudo bash -c "cat /root/.ssh/target-mysql-primary.pub >>  \
        /root/.ssh/authorized_keys"
    
  8. No Console do Cloud, use ssh para se conectar à instância target-mysql-primary.

  9. Na instância target-mysql-primary, teste a conexão.

    sudo ssh source-mysql-replica
    
  10. Quando solicitado, digite yes para aceitar a chave pública do servidor remoto.

Sincronizar as implementações do MySQL

Use o comando rsync para copiar os arquivos de dados do MySQL da instância source-mysql-replica para a instância target-mysql-primary. Para minimizar a inatividade, execute este comando duas vezes: uma vez enquanto a réplica de origem estiver on-line para copiar a maioria dos dados e, em seguida, uma segunda vez enquanto a réplica de origem estiver off-line. Copie os arquivos enquanto a réplica da origem estiver off-line para garantir que todos os dados nos arquivos abertos sejam copiados corretamente.

Copiar os arquivos de dados do MySQL

Nesta seção, você copiará os arquivos de dados do MySQL da instância source-mysql-replica para a instância target-mysql-primary.

  1. No Console do Cloud, use ssh para se conectar à instância target-mysql-primary.

  2. Na janela de terminal da instância, interrompa o MySQL.

    sudo service mysql stop
    
  3. Exclua o conteúdo de /var/lib/mysql.

    sudo bash -c "rm -rf /var/lib/mysql/*"
    
  4. Copie os arquivos do banco de dados de origem.

    sudo bash -c "rsync -av source-mysql-replica:/var/lib/mysql/ /var/lib/mysql"
    

    Neste tutorial, esse processo leva de 5 a 10 segundos. No entanto, para uma carga de trabalho real, o tempo de conclusão do processo depende do tamanho do banco de dados que está sendo migrado e do desempenho da rede.

  5. No Console do Cloud, use ssh para se conectar à instância source-mysql-replica.

  6. Pause a replicação da instância source-mysql-primary.

    mysql -uroot -psolution-admin -e 'show master status; stop slave;'
    

    A saída aparecerá no seguinte formato.

    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000002 |      154 | source_db    |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    

    Anote o arquivo log_bin e a posição. Mais tarde, no tutorial, o nome do arquivo mysql-bin.000002 será representado como PRIMARY_LOG_FILE e a posição do arquivo 154 será representada como PRIMARY_LOG_POS, porque seus valores podem ser diferentes.

  7. Na instância target-mysql-primary, execute o seguinte comando para garantir que a instância target-mysql-primary seja consistente com a instância source-mysql-replica, porque você não interrompeu as gravações durante a primeira operação de cópia.

    sudo bash -c "rsync -av source-mysql-replica:/var/lib/mysql/ /var/lib/mysql"
    
  8. Na instância source-mysql-replica, retome a replicação.

    sudo mysql -uroot -psolution-admin -e 'start slave;'
    

Configurar a instância target-mysql-primary para replicação

  1. No Console do Cloud, use ssh para se conectar à instância target-mysql-primary.

  2. Remova o arquivo com o código da instância padrão do MySQL.

    sudo rm /var/lib/mysql/auto.cnf
    
  3. Atualize a configuração do MySQL para replicar o banco de dados source_db da instância source-mysql-replica.

    sudo sed -i "s|#server-id.*|server-id = 4|" \
        /etc/mysql/mysql.conf.d/mysqld.cnf
    sudo sed -i "s|#log_bin|log_bin|" /etc/mysql/mysql.conf.d/mysqld.cnf
    sudo sed -i "s|#binlog_do_db.*|binlog_do_db = source_db|" \
        /etc/mysql/mysql.conf.d/mysqld.cnf
    
  4. Ative o MySQL para aceitar conexões de outros hosts na rede.

    LOCAL_IP=$(curl  http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip \
        -H "Metadata-Flavor: Google")
    sudo sed -i "s|bind-address.*|bind-address = $LOCAL_IP|" \
        /etc/mysql/mysql.conf.d/mysqld.cnf
    
  5. Inicie o MySQL.

    sudo service mysql start
    
  6. Faça login no console do MySQL.

    mysql -u root -psolution-admin
    
  7. Redefina a instância principal.

    reset slave;
    
  8. Configure o processo de replicação.

    CHANGE MASTER TO MASTER_HOST='source-mysql-replica', \
        MASTER_USER='sourcereplicator', MASTER_PASSWORD='solution-admin', \
        MASTER_LOG_FILE='[[PRIMARY_LOG_FILE]]', MASTER_LOG_POS=[[PRIMARY_LOG_POS]];
    

    Em que:

    • [PRIMARY_LOG_FILE] representa mysql-bin.000002 de uma etapa anterior.
    • [PRIMARY_LOG_FILE] representa 154 de uma etapa anterior.
  9. Inicie a replicação.

    start slave;
    
  10. Verifique se a tabela source_db existe no servidor e contém os dados da implantação de origem.

    SELECT * FROM source_db.source_table;
    

    A tabela aparecerá no seguinte formato:

    +----+---------------------+------------+
    | id | timestamp           | event_data |
    +----+---------------------+------------+
    |  1 | 2018-09-06 13:57:17 |    8511.85 |
    |  2 | 2018-09-06 13:57:17 |    2658.33 |
    |  3 | 2018-09-06 13:57:17 |    2756.08 |
    |  4 | 2018-09-06 13:57:17 |    5805.42 |
    |  5 | 2018-09-06 13:57:17 |    5758.86 |
    
  11. Verifique o status da instância da réplica.

    show slave status \G
    

    A resposta será semelhante a esta:

    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: source-mysql-replica
    ...
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    ...
    1 row in set (0.00 sec)
    

Como criar a instância do HAProxy

Ao usar a instância HAProxy, você cria um ponto de acesso que pode ser direcionado para a implantação de origem. Mais tarde, direcione o ponto de acesso para a implantação de destino, sem reconfigurar os clientes durante a migração.

  1. No Cloud Shell, crie a instância HAProxy e atribua um endereço IP fixo a ela.

    gcloud compute instances create haproxy --image-family=ubuntu-1604-lts  \
        --image-project=ubuntu-os-cloud --tags=haproxy,http-server \
        --zone=us-central1-c --private-network-ip=10.128.0.100
    
  2. No Console do Cloud, acesse a página Instâncias de VM.

    PÁGINA DE INSTÂNCIAS DE VM

  3. Clique em Atualizar.

  4. Na linha da instância HAProxy, clique em ssh para se conectar à instância.

  5. Na instância HAProxy, instale o HAProxy 1.6.3.

    sudo apt-get update
    sudo apt-get install -y haproxy=1.6.3-1
    
  6. Para testar a conectividade com as instâncias do MySQL mais tarde, instale o cliente MySQL.

    sudo apt-get install -y mysql-client
    

Como ativar a instância do HAProxy para se comunicar com os nós primários das duas implantações do MySQL

Quando você finalizar a configuração da replicação do MySQL, inicie a migração.

Ativar regras de firewall

  1. No Cloud Shell, crie regras de firewall para ativar a comunicação entre a instância HAProxy e as duas implantações do MySQL.

    gcloud compute firewall-rules create haproxy-mysql --allow=tcp:3306 \
        --source-tags haproxy --target-tags target-mysql,source-mysql
    
  2. Crie regras de firewall para permitir o acesso do administrador da instância HAProxy.

    gcloud compute firewall-rules create haproxy-admin --allow=tcp:80 \
        --source-ranges=0.0.0.0/0 --target-tags haproxy
    

Configurar a autenticação do HAProxy para a instância de destino

Nesta seção, você definirá a autenticação HAProxy para a instância target-mysql-primary.

  1. No Console do Cloud, use ssh para se conectar à instância target-mysql-primary.

  2. Crie um usuário chamado haproxy_check. Autorize-o a fazer login pela instância HAProxy. A instância HAProxy usa esse usuário para verificar o status de um servidor.

    mysql -uroot -psolution-admin -e "INSERT INTO mysql.user \
        (Host,User,ssl_cipher,x509_issuer,x509_subject) values \
        ('10.128.0.100','haproxy_check','','',''); FLUSH PRIVILEGES";
    
  3. Crie um usuário chamado haproxy_root. Autorize-o a fazer login pela instância HAProxy.

    PROJECT_ID=`curl  \
        http://metadata.google.internal/computeMetadata/v1/project/project-id -H "Metadata-Flavor: Google"`
    HA_PROXY_FQDN=haproxy.c.$PROJECT_ID.internal
    mysql -uroot -psolution-admin -e "GRANT ALL PRIVILEGES ON *.* TO \
        'haproxy_root'@'"$HA_PROXY_FQDN"' IDENTIFIED BY 'solution-admin' WITH \
        GRANT OPTION; FLUSH PRIVILEGES;"
    

Configurar a autenticação do HAProxy para a instância primária de origem

Nesta seção, você definirá a autenticação HAProxy para a instância source-mysql-primary.

  1. No Console do Cloud, use ssh para se conectar à instância source-mysql-primary.

  2. Crie um usuário chamado haproxy_check e conceda a ele permissão para fazer login pela instância HAProxy.

    mysql -uroot -psolution-admin -e "INSERT INTO mysql.user \
        (Host,User,ssl_cipher,x509_issuer,x509_subject) values \
        ('10.128.0.100','haproxy_check','','',''); FLUSH PRIVILEGES;"
    
  3. Crie um usuário chamado HAProxy_root e conceda a ele permissão para fazer login pela instância HAProxy.

    PROJECT_ID=`curl  \
        http://metadata.google.internal/computeMetadata/v1/project/project-id -H \
        "Metadata-Flavor: Google"`
    HA_PROXY_FQDN=haproxy.c.$PROJECT_ID.internal
    mysql -uroot -psolution-admin -e "GRANT ALL PRIVILEGES ON *.* TO \
        'haproxy_root'@'"$HA_PROXY_FQDN"' IDENTIFIED BY 'solution-admin' WITH GRANT OPTION; FLUSH PRIVILEGES;"
    

    Esse usuário haproxy_root é necessário para acessar o MySQL da instância HAProxy.

Testar a conectividade entre o HAProxy e as instâncias primárias do MySQL

  1. No Console do Cloud, use ssh para fazer login na máquina HAProxy.

  2. Teste a conectividade com a instância source-mysql-primary.

    mysql -h source-mysql-primary -u haproxy_root -psolution-admin -e \
        "SHOW DATABASES"
    
  3. Teste a conectividade com a instância target-mysql-primary.

    mysql -h target-mysql-primary -u haproxy_root -psolution-admin -e \
        "SHOW DATABASES"
    

Configurar o HAProxy

Agora, crie o arquivo de configuração HAProxy e direcione-o para a instância source-mysql-primary.

  1. No Console do Cloud, use ssh para fazer login na instância HAProxy.

  2. Faça backup do arquivo de configuração HAProxy existente na instância HAProxy.

    sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bkp
    
  3. Configure a instância HAProxy e crie uma senha para ser usada mais tarde no tutorial.

    sudo bash -c "cat <<EOF >  /etc/haproxy/haproxy.cfg
    ######### HAProxy Config file #########
    
    global
           log /dev/log    local0
           log /dev/log    local1 notice
           chroot /var/lib/haproxy
           stats socket /run/haproxy/admin.sock mode 660 level admin
           stats timeout 30s
           user haproxy
           group haproxy
           daemon
    
    defaults
           log     global
           timeout connect 3000
           timeout client  5000
           timeout server  5000
    
    listen mysql-cluster
    bind 127.0.0.1:3306,$(curl  \
        http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip \
        -H 'Metadata-Flavor: Google'):3306
           mode tcp
           option mysql-check user haproxy_check
           balance roundrobin
    
           # Server number 1
           server source-primary source-mysql-primary:3306 check
    
           # Server number 2
           # server target-primary target-mysql-primary:3306 check
    
    listen stats
           bind 0.0.0.0:80
           mode http
           stats enable
           stats uri /haproxy
           stats realm Strictly\ Private
           stats auth mysqlproxy:MySQLProxy12!
    EOF"
    
  4. Atualize o serviço HAProxy.

    sudo service haproxy reload
    

Como testar a implantação

  1. Na instância HAProxy, use o endereço localhost como o host para se conectar à instância source-mysql-primary.

    mysql -h 127.0.0.1 -u haproxy_root -psolution-admin -e "SHOW DATABASES"
    

    A saída contém os nomes dos bancos de dados.

    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | source_db          |
    | sys                |
    +--------------------+
    
  2. No Console do Cloud, use ssh para se conectar à instância mysql-client.

  3. Use a instância HAProxy para testar a conectividade com a instância source-mysql-primary.

    mysql -h haproxy  -u haproxy_root -psolution-admin -e "SHOW DATABASES"
    
  4. No Cloud Shell, encontre o endereço IP público da instância HAProxy.

    gcloud compute instances describe haproxy \
        --format='value(networkInterfaces[0].accessConfigs[0].natIP)' \
        --zone=us-central1-c
    
  5. Copie o endereço IP externo da instância HAProxy.

  6. Para verificar o status da conectividade entre a instância HAProxy e a instância source-mysql-master, acesse o URL a seguir e verifique se a linha da primária de origem está verde.

    http://[PUBLIC_IP_OF_HAPROXY]/haproxy
    

    Em que:

    • [PUBLIC_IP_OF_HAPROXY] representa o endereço IP público da instância HAProxy.
  7. No campo Nome de usuário, digite mysqlproxy.

  8. No campo Senha, digite MySQLProxy12!.

Como alternar o servidor MySQL

Nesta etapa, é realizada a migração em si. Garanta que todas as instâncias estejam sincronizadas, aponte o serviço do HAProxy para a implantação de destino e teste o ambiente.

Interromper o serviço do HAProxy

  1. Conecte-se à instância HAProxy.

  2. Para garantir que o destino corresponda à origem, interrompa todas as conexões com a instância source-mysql-primary.

    sudo service haproxy stop
    

Bloquear tabelas na instância primária

  1. Conecte-se à instância source-mysql-primary.

  2. Bloqueie as tabelas para gravações.

    mysql -uroot -psolution-admin -e "FLUSH TABLES WITH READ LOCK"
    

Verificar se as instâncias de origem estão sincronizadas

Nesta seção, você verificará se as instâncias source-mysql-primary e source-mysql-replica estão sincronizadas.

  1. No Console do Cloud, use ssh para fazer login na instância source-mysql-replica.

  2. Verifique o status da réplica.

    mysql -u root -psolution-admin -e "show slave status \G" | grep \
        Seconds_Behind_Master
    

    As instâncias estarão sincronizadas se o valor de Seconds_Behing_Master for 0.

Verificar se as instâncias de origem e de destino estão sincronizadas

Nesta seção, você verificará se as instâncias source-mysql-replica e target-mysql-primary estão sincronizadas.

  1. No Console do Cloud, use ssh para fazer login na instância target-mysql-primary.

  2. Verifique o status da réplica.

    mysql -u root -psolution-admin -e "show slave status \G" | grep Seconds_Behind_Master
    

    As instâncias estarão sincronizadas se o valor de Seconds_Behind_Master for 0.

  3. Interrompa a replicação da instância source-mysql-replica.

    mysql -u root -psolution-admin -e "stop slave;reset master;"
    

Direcionar a configuração do HAProxy para a instância target-mysql-primary

  1. No Console do Cloud, use ssh para fazer login na instância HAProxy.

  2. Altere a configuração HAProxy para direcionar para a instância target-mysql-primary.

    sudo sed -i 's|server source-primary|# server source-primary|g' \
        /etc/haproxy/haproxy.cfg
    sudo sed -i 's|# server target-primary|server target-primary|g' \
        /etc/haproxy/haproxy.cfg
    
  3. Atualize o serviço.

    sudo service haproxy restart
    
  4. Para verificar o status da conectividade entre a instância HAProxy e a instância target-mysql-primary, acesse o URL a seguir e verifique se a linha da primária de origem está verde.

    http://[PUBLIC_IP_OF_HAPROXY]/haproxy
    

    Em que:

    • [PUBLIC_IP_OF_HAPROXY] representa o endereço IP público da instância HAProxy.
  5. No campo Nome de usuário, digite mysqlproxy.

  6. No campo Senha, digite MySQLProxy12!.

  7. No Console do Cloud, use ssh para fazer login na instância mysql-client.

  8. Teste a nova configuração.

    mysql -h haproxy  -u haproxy_root -psolution-admin -e "SHOW DATABASES"
    

    A saída contém os nomes dos bancos de dados.

    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | source_db          |
    | sys                |
    +--------------------+
    

Considerações a respeito da migração de um cluster de produção

Neste tutorial, um cluster MySQL foi migrado para uma instância diferente do MySQL. O cluster de origem, mesmo que esteja implantado no Google Cloud, é para simular um cluster no local ou em uma plataforma em nuvem diferente. Veja a seguir o que você precisa considerar ao fazer a migração de uma carga de trabalho de produção:

  • Como configurar a conectividade: seja migrando de uma implantação no local ou de outra nuvem pública, será necessário configurar canais de conectividade entre o ambiente e o Google Cloud. Considere usar uma VPN ou o Cloud Interconnect.
  • Desempenho da rede: qual é a latência entre o ambiente de origem e o ambiente de destino? Qual é a largura de banda disponível? Esses fatores podem ter efeitos significativos na velocidade de sincronização e afetar a conexão entre seus clientes e o cluster do HAProxy.
  • Ajuste de parâmetros do banco de dados: este tutorial aborda somente alguns parâmetros de replicação. Os administradores de banco de dados podem ter configurado o cluster MySQL de origem com diferentes parâmetros personalizados para modificar o desempenho e a configuração com base nas necessidades do ambiente e do aplicativo. Por exemplo, talvez seja necessário ajustar as configurações do cluster de destino.
  • Tipos de consultas realizadas no cluster MySQL: estão sendo realizadas consultas longas? O número de consultas por segundo é alto ou baixo? Suas respostas podem afetar a configuração da instância do HAProxy. Por exemplo, talvez você precise ajustar o tempo limite.
  • Implantação de destino: neste tutorial não foi configurada uma instância de réplica para a implantação de destino. Em um ambiente de produção, configure um cluster para a implantação de destino.
  • Instâncias e implantações do Haproxy: foi usada uma única instância do HAProxy para este tutorial. Para uma migração de carga de trabalho de produção, use uma implantação do HAProxy redundante.
  • Seleção de zona: este tutorial usa a zona us-central1-c, mas é possível usar qualquer zona para as cargas de trabalho de produção. Para mais informações sobre como selecionar uma região, consulte Práticas recomendadas para a seleção de região do Compute Engine.
  • Tamanho do disco: verifique se o tamanho do disco corresponde ao das instâncias do MySQL de origem.
  • Permissões e acesso: neste tutorial, foi usado o usuário raiz. Em uma migração de produção, talvez seja necessário usar um usuário diferente se não for possível executar os comandos sudo ou root.

Limpeza

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

Exclua o projeto

  1. No Console do Cloud, acesse a página Gerenciar recursos:

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

A seguir