Configure o Cloud SQL e o servidor externo para a replicação

Esta página descreve como configurar o servidor externo para replicação no Cloud SQL, criar uma instância de representação de origem no Cloud SQL e replicar os dados no Cloud SQL. Tem de seguir todos os passos nesta página antes de avançar para os passos de replicação.

Uma alternativa aos passos descritos nesta página é o serviço de migração de base de dados, que oferece replicação contínua ou migração única de base de dados de um servidor externo para o Cloud SQL.

Antes de começar

Terminologia

  • Servidor externo. O servidor PostgreSQL externo ao Cloud SQL a partir do qual quer replicar dados. Também é conhecido como base de dados de origem ou servidor de base de dados externo. Pode ser outra instância do Cloud SQL ou qualquer outro servidor de base de dados, como um servidor no local, o Amazon Relational Database Service (RDS) e assim sucessivamente.

  • Instância de representação da origem. Uma simulação de uma instância do Cloud SQL que representa o servidor externo para a réplica do Cloud SQL. É visível na Google Cloud consola e aparece como uma instância normal do Cloud SQL, mas não contém dados, não requer configuração nem manutenção, e não afeta a faturação.

  • Réplica do Cloud SQL. A instância do Cloud SQL que faz a replicação a partir do servidor externo. Também conhecida como réplica de leitura primária externa.

  • Conta de utilizador de replicação. A conta de utilizador do PostgreSQL no servidor externo com autorizações suficientes para permitir a replicação entre o servidor externo e a réplica do Cloud SQL.

  • Importação gerida. O processo de importar dados diretamente do servidor externo para a réplica do Cloud SQL. Nesta situação, o Cloud SQL liga-se ao servidor externo através da conta de utilizador de replicação e executa o despejo de dados diretamente no servidor externo para importar dados para a réplica do Cloud SQL.

Configure um Google Cloud projeto

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud SQL Admin API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Cloud SQL Admin API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  8. Certifique-se de que tem as funções de administrador do Cloud SQL, administrador do armazenamento e leitor do Compute na sua conta de utilizador.

    Aceda à página IAM

  9. Instale o Google Cloud SDK

    Para configurar a replicação, instale Google Cloud o SDK para o seu servidor externo. Pode querer instalar o SDK no seu servidor externo, a menos que já esteja instalado noutro local.

    Configure o servidor externo para a replicação

    O Cloud SQL suporta migrações contínuas de bases de dados de origem para bases de dados de destino do Cloud SQL.

    As bases de dados de origem compatíveis com o PostgreSQL incluem:

    • PostgreSQL autogerido (no local ou em qualquer VM na nuvem que controla totalmente) 9.4, 9.5, 9.6, 10, 11, 12, 13, 14, 15, 16 e 17
    • Amazon RDS 9.6.10+, 10.5+, 11.1+, 12, 13, 14, 15, 16 e 17
    • Amazon Aurora 10.11+, 11.6+, 12.4+, 13.3+, 14.6+, 15.2+, 16 e 17
    • Microsoft Azure Database for PostgreSQL Flexible Server 11 e posterior
    • Cloud SQL 9.6, 10, 11, 12, 13, 14, 15, 16 e 17

    A configuração da origem requer a configuração da instância de origem e das bases de dados de origem subjacentes.

    Lista de verificação do servidor externo

    Se a réplica do Cloud SQL estiver ativada com um endereço IP privado porque o endereço IP privado de saída não é estático, configure a firewall do servidor externo para permitir o intervalo de IP interno atribuído para o acesso privado a serviços da rede VPC que a réplica do Cloud SQL usa como rede privada.

    A firewall do servidor da base de dados de origem tem de ser configurada para permitir todo o intervalo de IP interno atribuído à ligação de serviço privado da rede VPC que a instância de destino do Cloud SQL usa como o campo privateNetwork das respetivas definições de ipConfiguration.

    Para encontrar o intervalo de IPs internos:

    1. Na Google Cloud consola, aceda à página Redes VPC.

      Aceda à página Redes de VPC

    2. Selecione a rede de VPC que quer usar.

    3. Clique no separador Ligação de serviço privada.

    Configure a instância de origem

    Para configurar a instância de origem, siga estes passos:

    1. Se a instância de origem não incluir a base de dados postgres, crie-a.
    2. Instale o pacote pglogical na instância de origem.
    3. Defina os seguintes parâmetros, conforme necessário.

      1. Se a instância do PostgreSQL de origem for o Amazon RDS, inclua estes parâmetros num novo grupo de parâmetros e anexe o grupo de parâmetros à instância.

        • Se a origem for o Cloud SQL, defina as flags cloudsql.logical_decoding e cloudsql.enable_pglogical como on.

          Para ativar flags no Cloud SQL, consulte o artigo Configurar flags de base de dados.

        • Defina shared_preload_libraries para incluir pglogical através do seguinte comando:

          ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
                
        • Defina wal_level como logical através do seguinte comando:

              ALTER SYSTEM SET wal_level = 'logical';
              

          Se a instância PostgreSQL de origem for o Amazon RDS, para ativar os registos WAL ao nível da base de dados, defina o parâmetro rds.logical_replication como 1.logical

        • Defina wal_sender_timeout como 0 através do seguinte comando:

          ALTER SYSTEM SET wal_sender_timeout = 0;

          O valor 0 desativa o mecanismo de limite de tempo usado para terminar as ligações de replicação inativas.

        • Defina max_replication_slots para o número máximo de espaços de replicação que a instância de origem pode suportar. Use o seguinte comando, depois de substituir MAX_REPLICATION_SLOTS pelo número:

          ALTER SYSTEM SET max_replication_slots = MAX_REPLICATION_SLOTS;

          O Cloud SQL requer um espaço para cada base de dados migrada. Especifique, pelo menos, o número de subscrições que espera associar, com algumas reservas para a sincronização de tabelas.

          Por exemplo, se a instância de origem tiver 5 bases de dados e forem criadas 2 tarefas de migração para a origem, o número de espaços de replicação tem de ser, pelo menos, 5 * 2 = 10, além do número de espaços de replicação que já usa.

        • Defina max_wal_senders para, pelo menos, o mesmo que max_replication_slots, além do número de remetentes já usados na sua instância. Use o seguinte comando, substituindo MAX_WAL_SENDERS pelo número total de processos de envio de WAL em execução em simultâneo:

          ALTER SYSTEM SET max_wal_senders = MAX_WAL_SENDERS;

          Por exemplo, se o parâmetro max_replication_slots estiver definido como 10 e já estiver a usar 2 remetentes, o número de processos de remetentes WAL em execução em simultâneo seria 10 + 2 = 12.

        • Defina max_worker_processes para, pelo menos, o número de bases de dados na instância de origem, além do número de processos de trabalho já usados na sua instância. Use o seguinte comando, depois de substituir MAX_WORKER_PROCESSES pelo número total:

          ALTER SYSTEM SET max_worker_processes = MAX_WORKER_PROCESSES;
      2. Se a instância do PostgreSQL de origem for o Microsoft Azure Database for PostgreSQL Flexible Server, execute as seguintes ações para suportar a migração de dados de um servidor externo para uma instância do Cloud SQL:
        • Defina shared_preload_libraries para incluir pglogical através do seguinte comando:

          ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
                
        • Defina wal_level como logical. Para mais informações, consulte o artigo Replicação lógica e descodificação lógica na Base de Dados Azure para PostgreSQL – Servidor Flexível.
        • Defina max_replication_slots para o número máximo de espaços de replicação que a instância de origem pode suportar. Use o seguinte comando, depois de substituir MAX_REPLICATION_SLOTS pelo número:

          ALTER SYSTEM SET max_replication_slots = MAX_REPLICATION_SLOTS;

          O Cloud SQL requer um espaço para cada base de dados migrada. Especifique, pelo menos, o número de subscrições que espera associar, com algumas reservas para a sincronização de tabelas.

          Por exemplo, se a instância de origem tiver 5 bases de dados e forem criadas 2 tarefas de migração para a origem, o número de espaços de replicação tem de ser, pelo menos, 5 * 2 = 10, além do número de espaços de replicação que já usa.

        • Defina max_wal_senders para, pelo menos, o mesmo que max_replication_slots, além do número de remetentes já usados na sua instância. Use o seguinte comando, substituindo MAX_WAL_SENDERS pelo número total de processos de envio de WAL em execução em simultâneo:

          ALTER SYSTEM SET max_wal_senders = MAX_WAL_SENDERS;

          Por exemplo, se o parâmetro max_replication_slots estiver definido como 10 e já estiver a usar 2 remetentes, o número de processos de remetentes WAL em execução em simultâneo seria 10 + 2 = 12.

        • Defina max_worker_processes para, pelo menos, o número de bases de dados na instância de origem, além do número de processos de trabalho já usados na sua instância. Use o seguinte comando, depois de substituir MAX_WORKER_PROCESSES pelo número total:

          ALTER SYSTEM SET max_worker_processes = MAX_WORKER_PROCESSES;
        • Defina azure.extensions para incluir pglogical. Para mais informações, consulte o artigo Parâmetros do servidor na base de dados do Azure para PostgreSQL – Servidor flexível.
    4. Os parâmetros que está a definir neste passo aplicam-se a um servidor de base de dados PostgreSQL em execução. Também pode tornar estas alterações persistentes incluindo-as no ficheiro postgresql.conf.

    5. Se a réplica do Cloud SQL usar um IP privado, configure a firewall do servidor externo para permitir o intervalo de IP interno atribuído para o acesso privado a serviços da rede VPC da réplica.
    6. Para aplicar as alterações de configuração, reinicie a instância de origem.

    Ative a monitorização do atraso de replicação para versões do PostgreSQL anteriores à 9.6

    Se estiver a migrar de uma versão do PostgreSQL inferior à 9.6, a métrica de atraso na replicação não está disponível por predefinição. Pode usar uma de três alternativas para acompanhar esta métrica e garantir um tempo de inatividade mínimo quando promove a base de dados:

    • Opção 1: ative o servidor externo do Cloud SQL para acompanhar o atraso na replicação concedendo acesso a uma consulta específica. Usando um utilizador com o privilégio SUPERUSER, faça o seguinte:

      1. Defina a seguinte função para permitir que o servidor externo consulte o atraso na replicação.

        CREATE OR REPLACE FUNCTION pg_stat_replication_user()
        RETURNS TABLE (
        pid               integer                  ,
        usesysid          oid                      ,
        username          name                     ,
        application_name  text                     ,
        client_addr       inet                     ,
        client_hostname   text                     ,
        client_port       integer                  ,
        backend_start     timestamp with time zone ,
        backend_xmin      xid                      ,
        state             text                     ,
        sent_location     pg_lsn                   ,
        write_location    pg_lsn                   ,
        flush_location    pg_lsn                   ,
        replay_location   pg_lsn                   ,
        sync_priority     integer                  ,
        sync_state        text
        )
        LANGUAGE SQL
        SECURITY DEFINER
        AS $$
         SELECT *
         FROM pg_catalog.pg_stat_replication;
        $$;
        
      2. Conceda a autorização EXECUTE ao utilizador executando os seguintes comandos:

        1. REVOKE EXECUTE ON FUNCTION pg_stat_replication_user() FROM public;
        2. GRANT EXECUTE ON FUNCTION pg_stat_replication_user() to {replication_user};
    • Opção 2: conceda o privilégio SUPERUSER diretamente ao utilizador usado para estabelecer ligação à instância de origem. Isto permite que o servidor externo leia o atraso na replicação diretamente.

    • Opção 3: acompanhe o atraso na replicação de forma independente através da seguinte consulta:

          SELECT current_timestamp, application_name,
          pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.sent_location) AS sent_location_lag,
          pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.write_location) AS write_location_lag,
          pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.flush_location) AS flush_location_lag,
          pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.replay_location) AS replay_location_lag
          FROM pg_stat_replication
          WHERE application_name like 'cloudsql%';
        

      Nesta opção, o Cloud SQL não reflete a métrica de atraso na replicação nos gráficos nem nas respostas da API.

    Configure as bases de dados de origem

    O servidor externo do Cloud SQL migra todas as bases de dados na instância de origem, exceto as seguintes:

    • Para origens no local: bases de dados de modelos template0 e template1
    • Para origens do Amazon RDS: template0, template1 e rdsadmin
    • Para origens do Cloud SQL: bases de dados de modelos template0 e template1

    Faça o seguinte em cada base de dados na instância de origem que não esteja incluída na lista anterior:

    1. Para instalar a extensão pglogical, execute o seguinte comando em todas as bases de dados na instância de origem:

      CREATE EXTENSION IF NOT EXISTS pglogical

      Para tabelas que não têm chaves primárias, o Cloud SQL suporta a migração da captura instantânea inicial e das declarações INSERT durante a fase de captura de dados de alterações (CDC). Migre as declarações UPDATE e DELETE manualmente.

      são migradas.
    2. Efetue a ligação à instância e execute os seguintes comandos para definir privilégios para o utilizador em cada uma das bases de dados migradas, bem como na base de dados postgres predefinida.

      O utilizador que usa para estabelecer ligação à instância de origem está configurado como o utilizador na página Perfis de associação. Pode criar um novo utilizador ou reutilizar um existente.

      • Em todos os esquemas em cada base de dados a migrar, exceto no esquema de informações e nos esquemas que começam por pg_, execute o seguinte comando:

        GRANT USAGE on SCHEMA schema to username;
        GRANT SELECT on ALL SEQUENCES in SCHEMA schema to username;
        GRANT SELECT on ALL TABLES in SCHEMA schema to username;
      • Em cada base de dados a migrar, execute o seguinte comando:

        GRANT USAGE on SCHEMA pglogical to PUBLIC;
      • Para obter informações de replicação das bases de dados de origem, execute o seguinte comando em todas as bases de dados:

        GRANT SELECT on ALL TABLES in SCHEMA pglogical to username;
      • Se a sua origem for o Amazon RDS, execute o seguinte comando:

        GRANT rds_replication to username;

        Se a sua origem for a versão anterior à 14 da base de dados do Microsoft Azure para PostgreSQL, execute o seguinte comando:

        GRANT SELECT on ALL TABLES in SCHEMA pglogical to username;

        Pode ignorar um erro que aparece na interface pglogical.node.

        Se a sua origem for a versão 14 e posteriores da base de dados do Microsoft Azure para PostgreSQL, execute o seguinte comando:

        GRANT pg_read_all_data to username;

        Caso contrário, execute o seguinte comando:

        ALTER USER username with REPLICATION;

    Configure uma instância de representação de origem

    A instância de representação da origem faz referência ao servidor externo. Contém apenas os dados do pedido do servidor externo. Crie os dados do pedido e use-os num comando curl que crie a instância de representação da origem no Cloud SQL.

    Crie os dados do pedido

    Os dados do pedido contêm informações básicas sobre o seu servidor externo no formato JSON. Os dados do pedido podem ser configurados para uma réplica do Cloud SQL numa rede pública ou privada e devem conter estas informações.

    Se quiser migrar um subconjunto de bases de dados da instância de representação de origem para a instância do Cloud SQL de destino, use o parâmetro selectedObjects para especificar os nomes das bases de dados. Se não usar este parâmetro ou fornecer uma lista vazia como o valor do parâmetro, todas as bases de dados são migradas da origem para o destino.

    source.json

        {
          "name": "SOURCE_NAME",
          "region": "REGION",
          "databaseVersion": "DATABASE_VERSION",
          "onPremisesConfiguration": {
            "selectedObjects": "SELECTED_OBJECTS",
            "hostPort": "SOURCE_HOST",
            "username": "USERNAME",
            "password": "PASSWORD",
            "caCertificate": "SOURCE_CERT",
            "clientCertificate": "CLIENT_CERT",
            "clientKey": "CLIENT_KEY"
          }
        }

    Exemplo de importação gerida

    // example of source.json for external server that
    // - initiates replication from a Cloud SQL managed import
    // - doesn't use SSL/TLS
    
    {
      "name": "cloudsql-source-instance",
      "region": "us-central1",
      "databaseVersion": "POSTGRES_9_6",
      "onPremisesConfiguration": {
        "selectedObjects":[{"database":"db1"}, {"database":"db2"}],
        "hostPort": "192.0.2.0:3306",
        "username": "replicationUser",
        "password": "486#@%*@"
      }
    }
    
    Propriedade Descrição
    SOURCE_NAME O nome da instância de representação da origem a criar.
    REGION A região onde quer que a instância de representação de origem resida.
    DATABASE_VERSION A versão da base de dados em execução no seu servidor externo. As opções são POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16 ou POSTGRES_17.
    SELECTED_OBJECTS Uma lista de objetos separados por vírgulas, que contém bases de dados das quais está a migrar da instância de representação de origem para a instância do Cloud SQL de destino.
    SOURCE HOST O endereço IPv4 e a porta do servidor externo ou o endereço DNS do servidor externo. Se o servidor externo estiver alojado no Cloud SQL, a porta é 5432.
    USERNAME A conta de utilizador de replicação no servidor externo.
    PASSWORD A palavra-passe da conta de utilizador de replicação.
    BUCKET O nome do contentor que contém o ficheiro de despejo. Inclua apenas se estiver a configurar a replicação com um ficheiro de despejo existente num contentor do Cloud Storage.
    DUMP_FILE Um ficheiro no contentor que contém os dados do servidor externo.
    CLIENT_CA_CERT O certificado da AC no servidor externo. Inclua apenas se o SSL/TLS for usado no servidor externo.
    CLIENT_CERT O certificado de cliente no servidor externo. Obrigatório apenas para a autenticação de servidor-cliente. Inclua apenas se o SSL/TLS for usado no servidor externo.
    CLIENT_KEY O ficheiro de chave privada para o certificado de cliente no servidor externo. Obrigatório apenas para a autenticação servidor-cliente. Inclua apenas se o SSL/TLS for usado no servidor externo.
    SSL_OPTION

    Se a encriptação SSL/TLS é usada para estabelecer uma ligação entre a base de dados do Microsoft Azure de origem e a base de dados do Cloud SQL de destino. Pode especificar os seguintes valores para este parâmetro:

    • SSL_OPTION_UNSPECIFIED: a base de dados de destino se liga à base de dados de origem sem encriptação.
    • DISABLED: O SSL está desativado quando a réplica se liga à base de dados de origem.
    • REQUIRE: O SSL é necessário para que a réplica se ligue à base de dados de origem.
    • VERIFY_CA: use este parâmetro para especificar se a autenticação apenas do servidor ou a autenticação do servidor-cliente é usada como parte da encriptação SSL/TLS para estabelecer ligação entre as bases de dados de origem e de destino.

      Para usar a autenticação apenas do servidor, para a variável SOURCE_CERT, tem de fornecer o certificado codificado em PEM x509 da autoridade de certificação (AC) que assinou o certificado do servidor externo.

      Para usar a autenticação servidor-cliente, faça as seguintes substituições:

      • SOURCE_CERT: fornecer o certificado da CA que assinou o certificado do servidor da base de dados de origem
      • CLIENT_CERT: forneça o certificado que a base de dados de destino usa para autenticar no servidor da base de dados de origem
      • CLIENT_KEY: faculte a chave privada associada ao certificado de cliente

    O valor predefinido para este parâmetro é SSL_OPTION_UNSPECIFIED.

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

    Antes de iniciar este passo, crie um ficheiro JSON que contenha os dados do pedido de origem.

    Em seguida, para criar a instância de representação da origem no Cloud SQL, abra um terminal e execute os seguintes comandos:

    curl

        gcloud auth login
        ACCESS_TOKEN="$(gcloud auth print-access-token)"
        curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
             --header 'Content-Type: application/json' \
             --data @JSON_PATH \
             -X POST \
             https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances

    exemplo

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @./source.json \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances
    
    Propriedade Descrição
    PROJECT_ID O ID do seu projeto em Google Cloud.
    JSON_PATH O caminho para o ficheiro JSON que contém os dados do pedido para o servidor externo.

    Atualize uma instância de representação de origem

    Se atualizar os dados do pedido do servidor externo, pode atualizar a instância de representação da origem existente para usar os valores modificados.

    Modifique os dados do pedido

    Atualize os dados do pedido para incluir todos os campos que foram alterados. Isto inclui os campos hostPort, username, password, caCertificate, clientCertificate e clientKey. Depois de atualizar os dados do pedido, use-os num comando curl para atualizar a instância no Cloud SQL.

    Para atualizar as bases de dados a partir das quais quer migrar a instância de representação de origem, atualize a lista de nomes de bases de dados associados ao parâmetro selectedObjects. Se não usar este parâmetro ou fornecer uma lista vazia como o valor do parâmetro, todas as bases de dados são migradas da origem para o destino.

    O exemplo seguinte mostra a atualização dos campos username e password com um nome de utilizador e uma palavra-passe diferentes:

    source.json

        {
          "name": "SOURCE_NAME",
          "region": "REGION",
          "databaseVersion": "DATABASE_VERSION",
          "onPremisesConfiguration": {
            "selectedObjects": "SELECTED_OBJECTS",
            "username": "NEW_USERNAME",
            "password": "NEW_PASSWORD"
          }
        }

    Exemplo de importação gerida

    // example of source.json for external server that
    // - initiates replication from a Cloud SQL managed import
    // - doesn't use SSL/TLS
    
    {
      "name": "cloudsql-source-instance",
      "region": "us-central1",
      "databaseVersion": "POSTGRES_9_6",
      "onPremisesConfiguration": {
        "selectedObjects":[{"database":"db1"}, {"database":"db3"}],
        "username": "newReplicationUser",
        "password": "525#@%*@"
      }
    }
    
    Propriedade Descrição
    SOURCE_NAME O nome da instância de representação da origem.
    REGION A região onde a instância de representação de origem reside.
    DATABASE_VERSION A versão da base de dados em execução no seu servidor externo. As opções são POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16 ou POSTGRES_17.
    SELECTED_OBJECTS Uma lista de objetos atualizada separada por vírgulas, que contém bases de dados que está a migrar da instância de representação de origem para a instância do Cloud SQL de destino.
    NEW_USERNAME A nova conta de utilizador de replicação no servidor externo.
    NEW_PASSWORD A palavra-passe da nova conta.

    Modifique uma instância de representação de origem

    Antes de iniciar este passo, crie um ficheiro JSON que contenha os dados do pedido modificados.

    Em seguida, para modificar a instância de representação de origem no Cloud SQL, abra um terminal e execute os seguintes comandos:

    curl

        gcloud auth login
        ACCESS_TOKEN="$(gcloud auth print-access-token)"
        curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
             --header 'Content-Type: application/json' \
             --data @JSON_PATH \
             -X PATCH \
             https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/SOURCE_NAME

    exemplo

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @./source.json \
         -X PATCH \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/cloudsql-source-instance
    
    Propriedade Descrição
    PROJECT_ID O ID do seu projeto em Google Cloud.
    JSON_PATH O caminho para o ficheiro JSON que contém os dados do pedido para o servidor externo.
    SOURCE_NAME O nome da instância de representação da origem.

    Configure uma réplica do Cloud SQL

    Eventualmente, a réplica do Cloud SQL contém os dados do servidor externo. Neste passo, cria os dados de pedido e usa-os num comando curl que cria a réplica do Cloud SQL no Cloud SQL.

    Crie os dados do pedido

    Os dados do pedido contêm informações básicas sobre o seu servidor externo e réplica do Cloud SQL no formato JSON. Os dados do pedido podem ser configurados para uma réplica do Cloud SQL numa rede pública ou privada e devem conter estas informações:

    replica.json

        {
            "settings": {
                "tier": "TIER",
                "dataDiskSizeGb": "DISK_SIZE",
                "ipConfiguration": {
                    "ipv4Enabled": "PUBLIC_IP_STATUS",
                    "privateNetwork": "projects/PROJECT_ID/global/networks/NETWORK_NAME"
                 },
                 "availabilityType": "AVAILABILITY_TYPE"
            },
            "masterInstanceName": "SOURCE_REPRESENTATION_INSTANCE_NAME",
            "region": "SOURCE_REGION",
            "databaseVersion": "DATABASE_VERSION",
            "name": "REPLICA_NAME"
        }

    exemplo

        {
            "settings": {
                "tier": "db-custom-4-15360",
                "dataDiskSizeGb": "100"
            },
            "masterInstanceName": "source-instance",
            "region": "us-central1",
            "databaseVersion": "POSTGRES_16",
            "name": "replica-instance"
        }
    Propriedade Descrição
    TIER O tipo de máquina para alojar a instância de réplica. Se não souber que tipo de máquina usar, comece por db-custom-2-7680. Pode alterar o tamanho e outros valores suportados mais tarde, se necessário.
    DISK_SIZE O tamanho do armazenamento da réplica do Cloud SQL, em GB.
    PUBLIC_IP_STATUS Determina se a instância tem um endereço IP público atribuído. Por predefinição, o valor desta propriedade é true. Para desativar a atribuição de um endereço IP público à réplica, defina o valor como false. Se o seu projeto tiver a política da organização constraints/sql.restrictPublicIp ativada, para criar a réplica do Cloud SQL, tem de definir o valor da propriedade ipv4Enabled como false. Para mais informações sobre como desativar a atribuição de endereços IP públicos, consulte Desativar IP público.
    PROJECT_ID Se a réplica do Cloud SQL estiver numa rede privada, inclua a propriedade privateNetwork no ficheiro replica.json. Para PROJECT_ID, especifique o ID do seu projeto em Google Cloud.
    NETWORK_NAME O nome da rede privada a usar com a réplica do Cloud SQL.
    AVAILABILITY_TYPE O tipo de disponibilidade da réplica do Cloud SQL. Por predefinição, o valor é ZONAL. Para tornar a réplica HA, defina o valor como REGIONAL. Para saber mais sobre os valores permitidos, consulte SqlAvailabilityType.
    Depois de criar uma réplica de HA do servidor externo, não pode alterá-la para uma réplica sem HA. Isto também é verdade no sentido inverso. Não pode alterar uma réplica não de alta disponibilidade de um servidor externo para uma réplica de alta disponibilidade.
    A comutação por falha manual pode levar a uma migração irrecuperável se for tentada quando a instância ainda estiver a carregar os dados iniciais ou a uma indisponibilidade temporária se a instância já estiver a replicar a partir da origem. Verifique o estado da replicação.
    SOURCE_REPRESENTATION_INSTANCE_NAME O nome da instância de representação da origem.
    SOURCE_REGION A região atribuída à instância de representação de origem.
    DATABASE_VERSION A versão da base de dados a usar com a réplica do Cloud SQL. As opções para esta versão são POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16 ou POSTGRES_17. Faça corresponder a versão da base de dados em execução no seu servidor externo ou defina o valor para não mais de uma versão posterior.
    REPLICA_NAME O nome da réplica do Cloud SQL a criar.

    Crie a réplica do Cloud SQL

    Antes de iniciar este passo, crie um ficheiro JSON que contenha os dados do pedido de réplica. Em seguida, para criar uma réplica do Cloud SQL, abra um terminal do Cloud Shell e execute estes comandos:

    curl

        gcloud auth login
        ACCESS_TOKEN="$(gcloud auth print-access-token)"
        curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
             --header 'Content-Type: application/json' \
             --data @JSON_PATH \
             -X POST \
             https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances

    exemplo

        gcloud auth login
        ACCESS_TOKEN="$(gcloud auth print-access-token)"
        curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
             --header 'Content-Type: application/json' \
             --data @./replica.json \
             -X POST \
             https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances
    Propriedade Descrição
    PROJECT_ID O ID do seu projeto no Google Cloud, que tem de ser igual ao da instância de origem.
    JSON_PATH O caminho para o ficheiro JSON que contém os dados do pedido para a réplica do Cloud SQL.

    Valide a configuração

    Para garantir que as instâncias foram configuradas corretamente, aceda à página de instâncias do Cloud SQL.

    Deverá ver a instância de representação de origem e a réplica do Cloud SQL numa listagem semelhante à seguinte:

    ID da instância Tipo IP público
    (-) source-representation-instance Chave principal externa da base de dados 10.68.48.3:5432
         replica-instance Réplica de leitura da base de dados 34.66.48.59

    Certifique-se também de que tem a autorização cloudsql.instances.migrate na réplica do Cloud SQL. Esta autorização está incluída nas cloudsql.admin ou cloudsql.editor funções de IAM.

    Defina a palavra-passe do utilizador predefinida e adicione outras contas de utilizador à réplica do Cloud SQL

    Depois de criar a réplica do Cloud SQL, defina a palavra-passe do utilizador predefinido. Também pode adicionar outras contas de utilizador à réplica, se necessário. Não pode importar contas de utilizadores da base de dados do servidor externo, mas pode recriar as contas de utilizadores na réplica do Cloud SQL. Faça estas atividades antes de replicar a partir do servidor externo.

    Para definir a palavra-passe do utilizador predefinido, use o comando gcloud sql users set-password da seguinte forma.

    gcloud sql users set-password postgres \
    --instance=INSTANCE_NAME \
    --password=PASSWORD

    Substitua INSTANCE_NAME pelo nome da instância e PASSWORD pela palavra-passe selecionada antes de executar o comando.

    Para criar contas de utilizador na réplica, consulte o artigo Crie e faça a gestão de utilizadores.

    Obtenha o endereço IP de saída da réplica do Cloud SQL

    Pode usar o endereço IP de saída da réplica do Cloud SQL para criar uma ligação segura entre o servidor externo e a réplica do Cloud SQL. Não lhe será cobrado este endereço IP.

    Consola

    Para obter o endereço IP de saída da réplica, faça o seguinte:

    1. Na Google Cloud consola, aceda à página Instâncias do Cloud SQL.

      Aceda a Instâncias do Cloud SQL

    2. Junto ao endereço IP público da réplica do Cloud SQL, mantenha o ponteiro sobre a sugestão Mais informações e obtenha o endereço IP de saída.

      Tenha em atenção que o endereço IP de saída não é o endereço IP apresentado na ficha principal da réplica na Google Cloud consola.

    gcloud

    Para obter o endereço IP de saída da réplica, execute o seguinte comando:

    gcloud sql instances describe REPLICA_NAME --format="default(ipAddresses)"
    
    Propriedade Descrição
    REPLICA_NAME O nome da réplica do Cloud SQL cujo endereço IP público de saída quer obter.

    Permita ligações recebidas no servidor externo

    A réplica do Cloud SQL tem de estabelecer ligação ao servidor externo para que a replicação seja bem-sucedida. Tem de configurar a firewall de rede do seu servidor externo para aceitar ligações do endereço IP de saída da réplica do Cloud SQL se se aplicarem as seguintes condições:

    • O servidor externo está protegido por uma firewall ou alguma outra restrição de rede.
    • A sua réplica do Cloud SQL está a usar um IP público.

    Para estabelecer ligação à réplica do Cloud SQL, usa o endereço IP principal da réplica. Este endereço IP é apresentado na Google Cloud consola.

    Atualize a instância de representação de origem para permitir a replicação para a réplica do Cloud SQL

    Depois de configurar a instância de representação da origem para a réplica do Cloud SQL, pode ter de atualizar a instância de representação da origem. Por exemplo, os seguintes cenários requerem uma atualização das suas configurações:

    • O anfitrião, a porta ou o IP do servidor externo são alterados.
    • Quiser usar um utilizador de replicação do PostgreSQL diferente.
    • A palavra-passe do utilizador de replicação do PostgreSQL é alterada.
    • Os certificados SSL usados para estabelecer ligação segura ao servidor externo mudam.

    Inicialize a réplica do Cloud SQL

    Para o carregamento inicial de dados do servidor externo para a réplica do Cloud SQL, use uma importação gerida. Usa um serviço que extrai dados do servidor externo e importa-os diretamente para a instância do Cloud SQL. Para mais informações, consulte o artigo Usar uma importação gerida para configurar a replicação a partir de bases de dados externas.

    Monitorize a replicação

    Quando a réplica do Cloud SQL termina o carregamento de dados inicial, estabelece ligação ao servidor externo e aplica todas as atualizações feitas após a operação de exportação. Confirme o estado da replicação.

    É importante verificar o estado da replicação antes de promover a réplica para uma instância autónoma. Se o processo de replicação não for concluído com êxito, uma réplica promovida não tem todas as alterações do seu servidor externo.

    Se o atraso na replicação não estiver a aproximar-se de 0, tome medidas para o resolver. Recomendamos que verifique as seguintes métricas: /postgresql/external_sync/initial_sync_complete, postgresql/external_sync/max_replica_byte_lag e database/replication/state. Veja a lista de métricas do Cloud SQL.

    Se quiser migrar um subconjunto de bases de dados da instância de representação de origem para a instância do Cloud SQL de destino, selecione as seguintes métricas por base de dados:

    Métrica Descrição
    per_database/postgresql/external_sync/initial_sync_complete Compreenda a fase de migração de uma base de dados. Se o valor desta métrica for 0, a base de dados continua a fazer parte da exportação de dados inicial. Se o valor for 1, significa que a base de dados concluiu a descarga de dados inicial e está na fase de captura de dados de alterações (CDC).
    per_database/postgresql/external_sync/replication_byte_lag Conhecer o intervalo de tempo da replicação de uma base de dados (em bytes).

    Depois de a réplica do Cloud SQL alcançar o servidor externo e não haver atraso na replicação na réplica do Cloud SQL, estabeleça ligação à sua base de dados. Execute os comandos de base de dados adequados para se certificar de que o conteúdo está como esperado quando comparado com o servidor externo. Mantenha o seu servidor externo até que as validações necessárias estejam concluídas.

    Configure uma réplica em cascata

    Após a migração, pode criar réplicas de leitura em cascata na sua réplica do Cloud SQL antes de promover a réplica do Cloud SQL.

    Para criar uma réplica em cascata, execute os seguintes comandos:

    Consola

    1. Na Google Cloud consola, aceda à página Instâncias do Cloud SQL.

      Aceda a Instâncias do Cloud SQL

    2. Clique no separador Réplicas para a réplica que vai atuar como principal para a réplica que quer criar.
    3. Clique em Criar réplica.
    4. Na página Criar réplica de leitura, atualize o ID da instância e quaisquer outras opções de configuração, incluindo o nome, a região e a zona.
    5. Clique em Criar.

      O Cloud SQL cria uma réplica. Regressa à página da instância da réplica principal.

    6. Siga os passos 4 a 6 para cada nova réplica em cascata que quer criar.

    gcloud

    1. Crie a nova réplica especificando a réplica do Cloud SQL como a instância principal através da flag --master-instance-name:
    2. gcloud sql instances create REPLICA_NAME \
            --master-instance-name=PARENT_REPLICA_NAME \
      Substitua o seguinte:
      • REPLICA_NAME: o ID exclusivo da réplica que está a criar
      • PARENT_REPLICA_NAME: o nome da réplica do Cloud SQL
    3. Depois de criar a réplica, pode ver que as alterações feitas à instância principal são replicadas em todas as réplicas na cadeia de réplicas em cascata.

    curl

    1. Para criar uma réplica na réplica principal, edite o seguinte exemplo de código JSON e guarde-o num ficheiro denominado request.json:

      {
        "masterInstanceName": "EXTERNAL_SERVER_REPLICA_NAME",
        "project": "PROJECT_ID",
        "name": "REPLICA_NAME",
        "region": "REPLICA_REGION",
        "settings":
          {
            "tier": "MACHINE_TYPE",
          }
      }
    2. Execute o seguinte 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"

    Promova a réplica

    Promova a sua réplica seguindo estes passos:

    1. Promova a réplica a uma instância principal.
    2. Adicione réplicas de leitura à sua instância.
    3. Opcional: configure a sua instância para alta disponibilidade (AA). Para evitar tempo de inatividade adicional, pode ativar a HA enquanto configura uma réplica definindo AVAILABILITY_TYPE como REGIONAL.

    Limitações

    • Se instalar extensões nas bases de dados de origem externas que o Cloud SQL não suporta, quando migrar as bases de dados para uma instância de destino, o Cloud SQL não migra estas extensões. Para garantir uma migração sem problemas, verifique se nenhum objeto ou aplicação faz referência às extensões. Antes de continuar com a migração, recomendamos que remova as extensões, bem como todas as referências das bases de dados de origem.

      Para mais informações sobre as extensões suportadas pelo Cloud SQL, consulte o artigo Configure extensões do PostgreSQL.

    • Se instalar a extensão pg_cron nas bases de dados de origem externas, quando migrar as bases de dados para uma instância de destino, o Cloud SQL não migra a extensão nem as definições cron associadas à extensão. Depois de migrar as bases de dados e promover a réplica, a Google recomenda que reative a extensão pg_cron em cada base de dados migrada.

    • Não é possível migrar dados da versão 11 de um servidor Microsoft Azure de origem para a versão 11 de uma instância do Cloud SQL para PostgreSQL de destino. Para resolver este problema, migre os dados para uma instância do Cloud SQL com a versão 12 ou posterior.

    O que se segue?