Esta página descreve como criar uma réplica de leitura para uma instância do Cloud SQL.
Uma réplica de leitura é uma cópia da instância principal que reflete as alterações à instância principal quase em tempo real, em circunstâncias normais. Pode usar uma réplica de leitura para descarregar pedidos de leitura ou tráfego de estatísticas da instância principal.
Além disso, para recuperação de desastres, pode fazer uma migração regional. Se uma réplica for uma réplica entre regiões, pode fazer uma comutação por falha para outra região; especificamente, pode promover uma réplica para uma instância autónoma (neste caso, as réplicas existentes não considerariam essa instância como principal).
Para mais informações sobre o funcionamento da replicação, consulte o artigo Replicação no Cloud SQL.
Antes de começar
Se estiver a criar a primeira réplica para esta instância, certifique-se de que a instância cumpre os requisitos das instâncias principais. Saiba mais.
Crie uma réplica de leitura
Seguem-se os passos para criar uma réplica de leitura.
Consola
-
Na Trusted Cloud consola, aceda à página Instâncias do Cloud SQL.
- Encontre a instância para a qual quer criar uma réplica e, de seguida, abra o menu
more actions
junto à ficha. - Selecione Criar réplica de leitura.
Se não vir essa escolha, significa que a instância é uma réplica. Não pode criar uma réplica de uma réplica.
Na secção Personalize a sua instância da página, atualize as definições da sua réplica. Comece por clicar em Mostrar opções de configuração para apresentar os grupos de definições. Em seguida, expanda os grupos pretendidos para rever e personalizar as definições. Um Resumo de todas as opções que selecionar é apresentado à direita. A personalização destas definições é opcional. As predefinições são atribuídas em todos os casos em que não são feitas personalizações.
Para mais detalhes sobre cada definição, consulte a página Acerca das definições da instância.
Por exemplo, para permitir que outros serviços Trusted Cloud by S3NS , como o BigQuery, acedam a dados no Cloud SQL e façam consultas a estes dados através de uma associação interna, expanda o grupo Associações e, de seguida, desmarque a caixa de verificação IP público.
- Clique em Criar réplica.
O Cloud SQL cria uma cópia de segurança, se necessário, e cria a réplica. Regressa à página da instância para o servidor principal.
gcloud
Crie a réplica:
gcloud sql instances create REPLICA_NAME \ --master-instance-name=MASTER_INSTANCE_NAME
Se necessário, pode especificar um tamanho de nível diferente através do parâmetro --tier
. Além disso, se estiver a criar uma réplica a partir de uma instância principal e a edição do Cloud SQL para a instância for Enterprise ou Enterprise Plus, versão 16 e posterior, não tem de especificar um valor para este parâmetro. A réplica herda o tipo de máquina da instância principal.
Pode especificar uma região diferente através do parâmetro --region
.
Se a instância principal tiver apenas um endereço IP interno e quiser
permitir que outros Trusted Cloud by S3NS serviços, como o BigQuery, acedam aos dados no Cloud SQL e façam consultas a estes dados através de
uma ligação interna, adicione o parâmetro --enable-google-private-path
ao comando.
Tem de criar a réplica na mesma rede VPC que a instância principal. Também pode especificar um allocated-ip-range-name
nessa rede de VPC. Se não for especificado nenhum intervalo, a réplica é criada num intervalo aleatório.
Terraform
Para criar uma réplica de leitura, use um recurso do Terraform.
REST v1
Use o método
insert
do recurso instances para criar a réplica de leitura. As propriedades region
e databaseVersion têm de ser iguais às da base de dados principal.
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- project-id: o ID do projeto
- database-version: string da versão enum (por exemplo, POSTGRES_12)
- primary-instance-name: o nome da instância principal
- primary-instance-region: a região da instância principal
- replica-region: a região da instância de réplica
- replica-name: o nome da instância de réplica
- machine-type: string enum do tipo de máquina. Por exemplo: "db-custom-1-3840"
- private-network: A rede autorizada que está a adicionar ou a selecionar para criar uma ligação privada.
Pode usar o campo sqlNetworkArchitecture
para aplicar a utilização da nova arquitetura de rede à instância no momento da criação, mesmo que o projeto não esteja totalmente atualizado.
Para mais detalhes sobre a nova arquitetura de rede e as respetivas implicações, consulte os artigos
Atualize uma instância para a nova arquitetura de rede e Atribua um intervalo de endereços IP.
Método HTTP e URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances
Corpo JSON do pedido:
{ "masterInstanceName": "primary-instance-name", "project": "project-id", "databaseVersion": "database-version", "name": "replica-name", "region": "replica-region", "settings": { "tier": "machine-type", "settingsVersion": 0, "ipConfiguration": { object (IpConfiguration) }, { "ipv4Enabled": false, "privateNetwork": private-network, "requireSsl": boolean, "authorizedNetworks": [ { object (AclEntry) } ], "allocatedIpRange": string } }, "sqlNetworkArchitecture": "NEW_NETWORK_ARCHITECTURE" }
Para enviar o seu pedido, expanda uma destas opções:
Deve receber uma resposta JSON semelhante à seguinte:
REST v1beta4
Use o método
insert
do recurso instances para criar a réplica de leitura. As propriedades region
e databaseVersion têm de ser iguais às da base de dados principal.
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- project-id: o ID do projeto
- database-version: string da versão enum (por exemplo, POSTGRES_12)
- primary-instance-name: o nome da instância principal
- primary-instance-region: a região da instância principal
- replica-region: a região da instância de réplica
- replica-name: o nome da instância de réplica
- machine-type: string enum do tipo de máquina. Por exemplo: "db-custom-1-3840"
- private-network: A rede autorizada que está a adicionar ou a selecionar para criar uma ligação privada.
Pode usar o campo sqlNetworkArchitecture
para aplicar a utilização da nova arquitetura de rede à instância no momento da criação, mesmo que o projeto não esteja totalmente atualizado.
Para mais detalhes sobre a nova arquitetura de rede e as respetivas implicações, consulte os artigos
Atualize uma instância para a nova arquitetura de rede e Atribua um intervalo de endereços IP.
Método HTTP e URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances
Corpo JSON do pedido:
{ "masterInstanceName": "primary-instance-name", "project": "project-id", "databaseVersion": "database-version", "name": "replica-name", "region": "replica-region", "settings": { "tier": "machine-type", "settingsVersion": 0, "ipConfiguration": { object (IpConfiguration) }, { "ipv4Enabled": false, "privateNetwork": private-network, "requireSsl": boolean, "authorizedNetworks": [ { object (AclEntry) } ], "allocatedIpRange": string } }, "sqlNetworkArchitecture": "NEW_NETWORK_ARCHITECTURE" }
Para enviar o seu pedido, expanda uma destas opções:
Deve receber uma resposta JSON semelhante à seguinte:
Crie uma réplica de leitura de uma instância com o Private Service Connect ativado
Para criar uma réplica de leitura de uma instância com o Private Service Connect ativado, use a CLI gcloud ou a API. Pode criar esta réplica na mesma região ou numa região diferente da instância principal (réplica de leitura entre regiões).
A réplica de leitura não pode ser replicada a partir de uma instância com um tipo de conetividade diferente. Por exemplo, uma instância com o Private Service Connect ativado só pode ser replicada a partir de outra instância do Private Service Connect. Também não pode ser replicada a partir de uma instância que suporte ligações IP externas ou de uma instância configurada com acesso a serviços privados.
gcloud
Para criar uma réplica de leitura de uma instância, use o comando gcloud sql instances create
:
gcloud sql instances create REPLICA_INSTANCE_NAME \ --master-instance-name=PRIMARY_INSTANCE_NAME \ --project=PROJECT_ID \ --region=REGION_NAME \ --enable-private-service-connect \ --allowed-psc-projects=ALLOWED_PROJECTS \ --availability-type=AVAILABILITY_TYPE \ --no-assign-ip
Faça as seguintes substituições:
- REPLICA_INSTANCE_NAME: o nome da instância de réplica.
- PRIMARY_INSTANCE_NAME: o nome da instância principal.
- PROJECT_ID: o ID ou o número do projeto do Trusted Cloud projeto que contém a instância.
- REGION_NAME: o nome da região da instância da réplica.
ALLOWED_PROJECTS: uma lista de IDs ou números de projetos permitidos, separados por vírgulas. Se um projeto não estiver incluído nesta lista, não pode usá-lo para criar uma instância e ativar o Private Service Connect para o mesmo.
O Cloud SQL não copia os projetos permitidos para a instância principal para a réplica. Para cada réplica, tem de criar um ponto final do Private Service Connect. Se estiver a usar o proxy Auth do Cloud SQL ou os conetores de linguagem do Cloud SQL, crie uma zona DNS e um registo DNS para as réplicas.
- AVAILABILITY_TYPE: ative a elevada disponibilidade para a instância. Para este parâmetro, especifique um dos seguintes valores:
REGIONAL
: ative a alta disponibilidade. Esta opção é recomendada para instâncias de produção. A instância comuta para outra zona na região selecionada.ZONAL
: não oferecem capacidade de comutação por falha. Este é o valor predefinido.
Para mais informações sobre como definir e remover a elevada disponibilidade para instâncias, consulte os artigos Configure uma instância existente para elevada disponibilidade e Desative a elevada disponibilidade para uma instância.
REST v1
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- PRIMARY_INSTANCE_NAME: o nome da instância principal.
- PROJECT_ID: o ID ou o número do projeto do Trusted Cloud projeto que contém a instância.
- REPLICA_INSTANCE_NAME: o nome da instância de réplica.
- REGION_NAME: o nome da região da instância da réplica.
- MACHINE_TYPE: o tipo de máquina da instância.
- AVAILABILITY_TYPE: ative a elevada disponibilidade para a instância. Para este parâmetro, especifique um dos seguintes valores:
REGIONAL
: ative a alta disponibilidade. Esta opção é recomendada para instâncias de produção. A instância comuta para outra zona na região selecionada.ZONAL
: não oferecem capacidade de comutação por falha. Este é o valor predefinido.
Para mais informações sobre como definir e remover a elevada disponibilidade para instâncias, consulte os artigos Configure uma instância existente para elevada disponibilidade e Desative a elevada disponibilidade para uma instância.
ALLOWED_PROJECTS: uma lista de IDs ou números de projetos permitidos, separados por vírgulas. Se um projeto não estiver incluído nesta lista, não pode usá-lo para criar uma instância e ativar o Private Service Connect para o mesmo.
O Cloud SQL não copia os projetos permitidos para a instância principal para a réplica. Para cada réplica, tem de criar um ponto final do Private Service Connect. Se estiver a usar o proxy Auth do Cloud SQL ou os conectores de linguagem do Cloud SQL, tem de criar uma zona DNS e um registo DNS para as réplicas.
Método HTTP e URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances
Corpo JSON do pedido:
{ "masterInstanceName": "PRIMARY_INSTANCE_NAME", "project": "PROJECT_ID", "databaseVersion": "POSTGRES_13", "name": "REPLICA_INSTANCE_NAME", "region": "REGION_NAME", "kind": "sql#instance", "settings": { "tier": "MACHINE_TYPE", "availabilityType": "AVAILABILITY_TYPE", "settingsVersion": 0, "ipConfiguration": { "ipv4Enabled": false, "pscConfig": { "allowedConsumerProjects": [ALLOWED_PROJECTS], "pscEnabled": true } }, "kind": "sql#settings", "pricingPlan": "PER_USE", "replicationType": "ASYNCHRONOUS", "tier": "MACHINE_TYPE" } }
Para enviar o seu pedido, expanda uma destas opções:
Deve receber uma resposta JSON semelhante à seguinte:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-16T02:32:12.281Z", "operationType": "CREATE_REPLICA", "name": "OPERATION_ID", "targetId": "REPLICA_INSTANCE_NAME", "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
REST v1beta4
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
- PRIMARY_INSTANCE_NAME: o nome da instância principal.
- PROJECT_ID: o ID ou o número do projeto do Trusted Cloud projeto que contém a instância.
- REPLICA_INSTANCE_NAME: o nome da instância de réplica.
- REGION_NAME: o nome da região da instância da réplica.
- MACHINE_TYPE: o tipo de máquina da instância.
- AVAILABILITY_TYPE: ative a elevada disponibilidade para a instância. Para este parâmetro, especifique um dos seguintes valores:
REGIONAL
: ative a alta disponibilidade. Esta opção é recomendada para instâncias de produção. A instância comuta para outra zona na região selecionada.ZONAL
: não oferecem capacidade de comutação por falha. Este é o valor predefinido.
Para mais informações sobre como definir e remover a elevada disponibilidade para instâncias, consulte os artigos Configure uma instância existente para elevada disponibilidade e Desative a elevada disponibilidade para uma instância.
ALLOWED_PROJECTS: uma lista de IDs ou números de projetos permitidos, separados por vírgulas. Se um projeto não estiver incluído nesta lista, não pode usá-lo para criar uma instância e ativar o Private Service Connect para o mesmo.
O Cloud SQL não copia os projetos permitidos para a instância principal para a réplica. Para cada réplica, tem de criar um ponto final do Private Service Connect. Se estiver a usar o proxy Auth do Cloud SQL ou os conectores de linguagem do Cloud SQL, tem de criar uma zona DNS e um registo DNS para as réplicas.
Método HTTP e URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances
Corpo JSON do pedido:
{ "masterInstanceName": "PRIMARY_INSTANCE_NAME", "project": "PROJECT_ID", "databaseVersion": "POSTGRES_13", "name": "REPLICA_INSTANCE_NAME", "region": "REGION_NAME", "kind": "sql#instance", "settings": { "tier": "MACHINE_TYPE", "availabilityType": "AVAILABILITY_TYPE", "settingsVersion": 0, "ipConfiguration": { "ipv4Enabled": false, "pscConfig": { "allowedConsumerProjects": [ALLOWED_PROJECTS], "pscEnabled": true } }, "kind": "sql#settings", "pricingPlan": "PER_USE", "replicationType": "ASYNCHRONOUS", "tier": "MACHINE_TYPE" } }
Para enviar o seu pedido, expanda uma destas opções:
Deve receber uma resposta JSON semelhante à seguinte:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-16T02:32:12.281Z", "operationType": "CREATE_REPLICA", "name": "OPERATION_ID", "targetId": "REPLICA_INSTANCE_NAME", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
Configure réplicas de leitura para a autenticação de base de dados IAM
Se ativar a flagcloudsql.iam_authentication
na instância principal, o Cloud SQL para PostgreSQL ativa-a automaticamente nas réplicas de leitura. No entanto, se não
ativar esta flag na instância principal, o Cloud SQL para PostgreSQL não a ativa nas réplicas de leitura. Não pode usar as réplicas para a autenticação da base de dados do IAM.
Para configurar uma réplica de leitura para a autenticação da base de dados IAM:
-
Na Trusted Cloud consola, aceda à página Instâncias do Cloud SQL.
- Para abrir a página Vista geral de uma instância, clique no nome da instância.
- No mosaico Configuração, procure a flag
cloudsql.iam_authentication
. Se a flag não estiver na lista, não é necessário ativá-la na réplica de leitura. Se a flag estiver na lista, tem de a ativar na réplica de leitura. Se precisar de ativar a flag na réplica de leitura, avance para o passo seguinte. - Selecione Réplicas no menu de navegação SQL.
- Clique no nome da réplica que quer editar.
- Clique em Edit.
- Na secção Opções de configuração, expanda Flags.
- Selecione + Adicionar item.
- Introduza
cloudsql.iam_authentication
para o nome da flag. Certifique-se de que a opção Ativado está selecionada para esta sinalização. - Clique em Guardar.
Crie réplicas em cascata
Esta secção descreve como criar e gerir réplicas em cascata.
Para informações sobre o funcionamento das réplicas em cascata, consulte o artigo Réplicas em cascata.
Passos para criar uma réplica em cascata
Consola
-
Na Trusted Cloud consola, aceda à página Instâncias do Cloud SQL.
- Clique no separador Réplicas para a réplica que vai atuar como principal para a réplica que quer criar.
- Clique em Criar réplica.
- 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.
- Clique em Criar.
O Cloud SQL cria uma réplica. Regressa à página da instância da réplica principal.
- Siga os passos 4 a 6 para cada nova réplica em cascata que quer criar.
gcloud
- Crie a nova réplica especificando a réplica principal como a instância principal através da flag
--master-instance-name
: - REPLICA_NAME: o ID exclusivo da réplica que está a criar
- PARENT_REPLICA_NAME: o nome da réplica principal
- Depois de criar a réplica em cascata, 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.
gcloud sql instances create REPLICA_NAME \ --master-instance-name=PARENT_REPLICA_NAME \
curl
- 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": "PARENT_REPLICA_NAME", "project": "PROJECT_ID", "name": "REPLICA_NAME", "region": "REPLICA_REGION", "settings": { "tier": "MACHINE_TYPE", } }
- 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"
Resolver problemas
Problema | Resolução de problemas |
---|---|
A réplica de leitura não começou a ser replicada na criação. | Provavelmente, existe um erro mais específico nos ficheiros de registo. Inspeccione os registos nos Registos na nuvem para encontrar o erro real. |
Não é possível criar uma réplica de leitura: erro invalidFlagValue. | Uma das flags no pedido é inválida. Pode ser uma flag que
forneceu explicitamente ou uma que foi definida para um valor predefinido.
Primeiro, verifique se o valor da flag Se a flag |
Não é possível criar uma réplica de leitura: erro desconhecido. | Provavelmente, existe um erro mais específico nos ficheiros de registo.
Inspeccione os registos nos
Registos na nuvem para encontrar o erro real.
Se o erro for: |
O disco está cheio. | O tamanho do disco da instância principal pode ficar cheio durante a criação da réplica. Edite a instância principal para a atualizar para um tamanho de disco maior. |
O espaço em disco aumenta significativamente. | Um espaço que não é usado ativamente para acompanhar dados faz com que o PostgreSQL mantenha os segmentos WAL indefinidamente, o que faz com que o espaço em disco aumente indefinidamente. Se usar as funcionalidades de replicação e descodificação lógica no Cloud SQL, os slots de replicação são criados e eliminados automaticamente. Pode detetar as ranhuras de replicação não usadas consultando a vista do sistema pg_replication_slots e filtrando pela coluna active . Pode eliminar as posições não usadas para remover segmentos WAL através do comando pg_drop_replication_slot .
|
A instância da réplica está a usar demasiada memória. | A réplica usa memória temporária para colocar em cache operações de leitura pedidas com frequência, o que pode fazer com que use mais memória do que a instância principal.
Reinicie a instância da réplica para recuperar o espaço de memória temporário. |
A replicação foi interrompida. | O limite máximo de armazenamento foi atingido e o aumento automático do armazenamento não está ativado.
Edite a instância para ativar a autorização |
O atraso de replicação é consistentemente elevado. | A carga de escrita é demasiado elevada para a réplica processar. O atraso de replicação ocorre quando o segmento SQL numa réplica não consegue acompanhar o segmento de E/S. Alguns tipos de consultas ou cargas de trabalho podem causar um atraso de replicação elevado temporário ou permanente para um determinado esquema. Algumas das causas típicas
do atraso na replicação são:
Algumas soluções possíveis incluem:
|
Erros ao recriar índices no PostgreSQL 9.6. | Recebe um erro do PostgreSQL a informar que tem de reconstruir um índice específico. Esta ação só pode ser realizada na instância principal. Se
criar uma nova instância de réplica, recebe novamente o mesmo erro em breve.
Os índices de hash
não são propagados para réplicas em versões do PostgreSQL inferiores a 10.
Se tiver de usar índices de hash, atualize para o PostgreSQL 10 ou superior. Caso contrário, se também quiser usar réplicas, não use índices de hash no PostgreSQL 9.6. |
A consulta na instância principal está sempre em execução. | Depois de criar uma réplica, espera-se que a consulta SELECT * from pg_stat_activity where state = 'active' and pid = XXXX and username = 'cloudsqlreplica' seja executada continuamente na sua instância principal.
|
A criação de réplicas falha devido ao limite de tempo. | As transações não comprometidas de longa duração na instância principal podem fazer com que a criação de réplicas de leitura falhe.
Recrie a réplica depois de parar todas as consultas em execução. |
Se a instância principal e a réplica tiverem tamanhos de vCPU diferentes, podem ocorrer problemas de desempenho das consultas, uma vez que o otimizador de consultas tem em conta os tamanhos de vCPU. |
Para resolver este problema, conclua os seguintes passos:
Se for uma consulta específica, modifique-a. Por exemplo, pode alterar a ordem das associações para ver se obtém um melhor desempenho. |
O que se segue?
- Saiba como gerir réplicas.
- Saiba mais sobre as réplicas entre regiões.