Configurar o Cloud SQL para PostgreSQL para utilização em produção

Este documento explica como configurar o Cloud SQL para PostgreSQL para utilização em produção. O Cloud SQL para PostgreSQL é um serviço de SGBDR totalmente gerido que está integrado com o Google Cloud ecossistema. O Cloud SQL para PostgreSQL tem várias funcionalidades e capacidades principais:

  • Serve várias aplicações e utilizadores a nível global através da utilização das capacidades de segurança geridas da Google Cloud, incluindo a VPC e a encriptação automática de dados em repouso e em trânsito.Google Cloud
  • Suporta uma arquitetura de elevada disponibilidade através de instâncias primárias e de reserva, bem como comutação por falha automática entre elas.
  • Suporta cargas de trabalho de base de dados distribuídas, permitindo a separação de leitura/escrita entre o nó principal e as réplicas de leitura no mesmo cluster de base de dados.
  • Suporta cópias de segurança automáticas integradas com o Cloud Storage e manutenção automática da base de dados.
  • Suporta uma variedade de cargas de trabalho de processamento de transações online (OLTP).

Implementar uma instância do Cloud SQL para PostgreSQL

Pode configurar uma instância do Cloud SQL para PostgreSQL em alguns passos através da Google Cloud consola ou da Google Cloud CLI. Ambos os métodos são descritos aqui.

Consola

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

    Aceda a Instâncias

  2. Clique em Criar instância e, de seguida, em Escolher PostgreSQL.

  3. Na página Crie uma instância do PostgreSQL, indique os seguintes detalhes:

    • ID da instância: introduza um nome para a instância. O nome da instância é permanente e não pode ser alterado posteriormente.
    • Palavra-passe do utilizador predefinida: escolha a palavra-passe do utilizador postgres como a conta de administrador predefinida. (Pode criar utilizadores adicionais após a implementação da instância do PostgreSQL.)
    • Região e Zona: selecione uma região e uma zona. É uma prática recomendada implementar a instância do PostgreSQL na mesma região que os serviços Google Cloud associados (por exemplo, aplicações) ou numa proximidade geográfica dos utilizadores para reduzir a latência do processamento de dados. Depois de selecionar uma região, não pode modificá-la mais tarde.
    • Versão da base de dados: escolha a versão mais recente ou, se precisar, a versão disponível mais recente.
  4. Clique em Criar para implementar a instância do PostgreSQL. Em alternativa, clique em Mostrar opções de configuração para definir configurações adicionais.

    Criar uma instância do PostgreSQL.

    • Opções de configuração adicionais:

      • Conetividade: normalmente, liga a instância do PostgreSQL à rede através de um endereço IP público, um endereço IP privado e redes autorizadas. As redes autorizadas são ligações permitidas que pode definir para estabelecer uma ligação remota. Por exemplo, pode aprovar uma ligação a partir de um endereço IP específico de um cliente.

        Configurar uma ligação de rede.

      • Tipo de máquina e armazenamento: escolha o tipo de máquina por recursos atribuídos (vCPUs, RAM), tipo de armazenamento (SSD ou HDD) e capacidade de armazenamento. O aumento da capacidade de armazenamento também aumenta a taxa de transferência do disco suportada (MB/s) e os IOPs de leitura e gravação da sua base de dados. Ajuste a capacidade de armazenamento com base nos requisitos de débito do disco e IOPs esperados.

        Capacidade de armazenamento de 10 GB.Capacidade de armazenamento de 100 GB.

      • Cópias de segurança automáticas e alta disponibilidade: usa a funcionalidade de cópias de segurança automáticas, que está ativada por predefinição, para definir o período em que devem ser feitas cópias de segurança automáticas. Além disso, a opção de recuperação num determinado momento, que usa registos de gravação antecipada, também é necessária para criar uma réplica de leitura. Estes registos são atualizados regularmente e usam espaço de armazenamento. Para evitar problemas inesperados de armazenamento, recomendamos que ative os aumentos automáticos de armazenamento quando usar a recuperação num ponto específico no tempo. A alta disponibilidade está desativada por predefinição (várias zonas). Para ativar a comutação por falha automática, selecione a opção Alta disponibilidade (regional).

      • Flags: esta definição especifica o método do Cloud SQL para controlar as definições e os parâmetros da sua instância; é equivalente ao ficheiro postgresql.conf de uma instância do PostgreSQL não gerida. Para ver uma lista completa, consulte a documentação do produto. A alteração do valor de um sinalizador ou a definição de um novo sinalizador pode exigir o reinício de uma instância.

      • Manutenção: esta secção especifica o período de tempo preferencial para realizar tarefas de manutenção, incluindo correções de erros e atualizações de versões secundárias. Tenha em atenção que as operações de manutenção geralmente requerem o reinício de uma instância e podem causar uma breve interrupção do serviço. Pode inscrever-se para receber uma notificação por email sobre os próximos eventos de manutenção.

      • Etiquetas: nesta secção, define pares de chave/valor para categorizar a sua instância do PostgreSQL, por exemplo:

        Definir pares de chave/valor que categorizam a sua instância do PostgreSQL.

gcloud

  1. Crie a instância do PostgreSQL:

    gcloud sql instances create postgresql01 \
        --cpu=2 \
        --memory=7680MB \
        --region=us-central1 --zone=us-central1-a
    
  2. Atribua uma palavra-passe ao utilizador predefinido do PostgreSQL (exemplo de sintaxe):

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

    Pode especificar estas opções adicionais:

    • Versão da base de dados: uma das versões do PostgreSQL suportadas.
    • Tipo de armazenamento: SSD ou HDD como tipo de armazenamento.
    • Capacidade de armazenamento: as definições de armazenamento iniciais da instância.
    • Aumento automático do armazenamento: automatização do Cloud SQL para adicionar armazenamento adicional quando o espaço livre for insuficiente.
    • Alta disponibilidade: alta disponibilidade do Cloud SQL.
    • Cópias de segurança automáticas: o período de início das cópias de segurança.
    • Recuperação pontual: recuperação pontual e registo antecipado de escrita.
    • Período de manutenção: um período de uma hora durante o qual o Cloud SQL pode realizar manutenção disruptiva.
    • Hora da manutenção: a hora preferencial para fazer atualizações na instância do PostgreSQL. Pode especificar pré-visualização para atualizações anteriores ou produção para atualizações posteriores.
    • Flags da base de dados: as flags da base de dados PostgreSQL para controlar as definições e os parâmetros.

    O seguinte comando gcloud cria uma instância do Cloud SQL para PostgreSQL com algumas opções adicionais:

    gcloud sql instances create postgresql01 \
        --cpu=2 \
        --memory=7680MB \
        --region=us-central1 \
        --zone=us-central1-a \
        --database-version=POSTGRES_12 \
        --storage-type=SSD \
        --storage-size=100 \
        --storage-auto-increase \
        --availability-type=regional \
        --backup-start-time=23:30 \
        --enable-point-in-time-recovery \
        --maintenance-window-day=sun \
        --maintenance-window-hour=11 \
        --maintenance-release-channel=production \
        --database-flags max_connections=100
    

    Para mais informações, consulte o artigo Criar instâncias.

Seleção de instâncias

A seleção ou o dimensionamento da instância envolve a seleção de um tipo de máquina que possa suportar a sua carga de trabalho do Oracle® no Cloud SQL para PostgreSQL. Os tipos de instâncias estão divididos em dois grupos principais:

  • Máquinas com núcleo partilhado: rentáveis.
  • Instâncias de núcleo dedicado: suportam várias vCPUs e rácios de memória.

Para mais informações sobre os tipos de instâncias, consulte os preços do Cloud SQL.

Para dimensionar a sua instância, comece por analisar os recursos atribuídos à base de dados de origem e usados por esta. Pode obter as definições dos recursos da base de dados Oracle a partir da vista do sistema V$OSSTAT ou de um relatório AWR da Oracle (consulte os exemplos seguintes):

Memória física (número total de bytes de memória física no servidor da base de dados):

SQL> SELECT ROUND(MAX(VALUE)/1024/1024/1024) AS MEM_SIZE_GB
     FROM V$OSSTAT
     WHERE STAT_NAME = 'PHYSICAL_MEMORY_BYTES';

Memória atribuída:

SQL> SELECT NAME, VALUE, DISPLAY_VALUE FROM V$PARAMETER
     WHERE NAME LIKE '%sga%' OR NAME LIKE '%memory%';

Núcleos da CPU (número de núcleos da CPU disponíveis):

SQL> SELECT VALUE FROM V$OSSTAT
     WHERE STAT_NAME = 'NUM_CPU_CORES';

Núcleos da CPU (identificados por uma instância do Oracle através da vista V$LICENSE):

SQL> SELECT CPU_CORE_COUNT_CURRENT FROM V$LICENSE;

Exemplo de recurso de relatório AWR da Oracle (um relatório AWR da Oracle pode fornecer estatísticas adicionais sobre as características da carga de trabalho de uma instância específica da Oracle):

Exemplo de recurso de relatório AWR da Oracle.

Quando tiver as informações dos recursos da base de dados de origem, recomendamos que escolha o tipo de instância do Cloud SQL com a correspondência mais próxima e execute alguns testes de desempenho. Os resultados das referências ajudam a finalizar a seleção da instância.

Configuração de alta disponibilidade

Para implementar uma solução de recuperação de desastres, semelhante ao Data Guard da Oracle, o Cloud SQL para PostgreSQL oferece capacidades de alta disponibilidade que proporcionam uma comutação por falha automática da instância principal do cluster para a respetiva instância de reserva. A instância de espera está localizada numa zona diferente na mesma região que a instância principal. A instância em espera é mantida sincronizada através da replicação síncrona entre os discos persistentes das instâncias principal e em espera. Este método garante que todas as modificações de dados ao principal também são aplicadas ao suplente.

Em caso de falha primária, como uma instância sem resposta ou uma falha ao nível da zona, o Cloud SQL executa uma comutação por falha automática. A instância principal é monitorizada por batimentos cardíacos, que ocorrem em intervalos de 1 segundo, com uma comutação por falha ativada após aproximadamente 60 segundos sem batimentos cardíacos recebidos da instância principal. Neste ponto, a instância principal muda para a instância de reserva, fornecendo acesso aos dados às aplicações ou aos clientes de forma transparente, enquanto as réplicas de leitura existentes permanecem operacionais. Tenha em atenção que, ao contrário do Active Data Guard, a instância de espera não está aberta para leituras enquanto atua como uma instância de espera. Com o Cloud SQL, só é possível usar réplicas de leitura para descarregar leituras da instância principal.

Pode ativar a funcionalidade de alta disponibilidade (HA) do Cloud SQL para PostgreSQL quando cria a instância ou para uma instância do PostgreSQL existente. Seguem-se os passos:

Consola

  1. Na página de criação da instância, clique em Mostrar opções de configuração >Cópias de segurança automáticas e alta disponibilidade>Disponibilidade e, de seguida, selecione a opção Alta disponibilidade (regional).
  2. Para uma instância do PostgreSQL existente, edite a instância do PostgreSQL seguindo o passo anterior. Isto requer um reinício da base de dados.
  3. Para iniciar uma comutação por falha para fins de teste, aceda à página Cloud SQL e clique em Comutação por falha.

    A iniciar a comutação por falha para testes.

    Pode ativar a reposição da mesma forma.

gcloud

  1. Ative a HA definindo o parâmetro availability-type como regional:

    gcloud sql instances create postgresql01 \
        --cpu=2 \
        --memory=7680MB \
        --region=us-central1 \
        --zone=us-central1-a \
        --availability-type=regional
    
  2. Verifique se uma instância do PostgreSQL existente tem a HA configurada:

    gcloud sql instances describe INSTANCE_NAME
    

    Se o resultado deste comando incluir availabilityType: REGIONAL, significa que a HA já está ativada. Se o resultado incluir availabilityType: ZONAL, significa que a HA não está configurada e pode ser ativada através do comando patch:

    gcloud sql instances patch INSTANCE_NAME --availability-type REGIONAL
    
  3. Inicie um teste de comutação por falha da instância principal para a instância em espera:

    gcloud sql instances failover PRIMARY_INSTANCE_NAME
    

    Para reverter, execute o mesmo comando de comutação por falha no novo servidor principal.

Utilizadores e contas de administrador

Qualquer instalação do Cloud SQL para PostgreSQL inclui duas contas de utilizador predefinidas do PostgreSQL. Estas contas são postgres e cloudsqlimportexport.

conta postgres

A conta postgres é a conta de administrador e é equivalente aos utilizadores do Oracle SYS ou SYSTEM no Cloud PaaS. Uma vez que o Cloud SQL para PostgreSQL é um serviço gerido, o utilizador postgres, ao contrário dos utilizadores do Oracle SYS ou SYSTEM, tem acesso restrito a determinadas tabelas e procedimentos do sistema que requerem privilégios avançados.

O utilizador postgres faz parte da função cloudsqlsuperuser e tem os seguintes atributos (privilégios): CREATEROLE, CREATEDB e LOGIN. Não tem os atributos SUPERUSER nem REPLICATION.

conta cloudsqlimportexport

A conta cloudsqlimportexport é criada com o conjunto mínimo de privilégios necessários para operações de importação/exportação de CSV. Tem a opção de criar os seus próprios utilizadores para realizar estas operações, mas, se não o fizer, é usado o utilizador cloudsqlimportexport predefinido. O utilizador cloudsqlimportexport é um utilizador do sistema e não o pode usar diretamente.

Gestão da conta (adicionar, eliminar ou alterar a palavra-passe)

A gestão de contas implica a criação de novas contas de utilizador, a modificação da palavra-passe de uma conta existente e a eliminação de uma conta que já não é necessária. Pode realizar estas operações na conta através da consola do Google Cloud , da ferramentagcloud ou do cliente PostgreSQL.

Consola

  1. Liste as contas existentes na Google Cloud consola: aceda a Consola do Cloud SQL>Selecione a instância do PostgreSQL >Utilizadores.

    Apresentar contas existentes.

  2. Modificar a palavra-passe da conta ou eliminar a conta por completo clicando no ícone de três pontos (Mais) junto à conta.

    Neste ecrã, pode clicar em Criar conta de utilizador para criar um novo utilizador do PostgreSQL.

    Modificar a palavra-passe e eliminar uma conta.

gcloud

  1. Liste as contas de utilizador existentes:

    gcloud sql users list --instance=postgresql01
    

    O resultado é semelhante ao seguinte:

    NAME       HOST
    Postgres
    
  2. Crie a conta de utilizador appuser, defina a palavra-passe e elimine-a appuser:

    gcloud sql users create appuser \
        --instance=postgresql01 --password=PASSWORD
    
    gcloud sql users set-password appuser \
        --host=% --instance=postgresql01 --prompt-for-password
    
    gcloud sql users delete appuser --instance=postgresql01
    

PostgreSQL

  • Realize estas mesmas ações diretamente a partir de um cliente PostgreSQL padrão, por exemplo:

    postgres=> create user appuser with login password 'my_password';
    
    postgres=> alter user appuser password 'my_password';
    
    postgres=> drop user appuser;
    

    Pode configurar autorizações ao nível da base de dados do PostgreSQL (por exemplo, ler a partir de uma tabela ou uma vista específica) através dos comandos GRANT/REVOKE através do cliente PostgreSQL.

Monitorização e alertas

O Cloud Logging é a principal ferramenta de registo no Google Cloud. É usado para recolher e ver uma variedade de registos de monitorização de recursos, como o Cloud SQL para PostgreSQL.

O Cloud Logging permite-lhe ver registos do Cloud SQL para PostgreSQL filtrados por nível de evento (por exemplo, crítico, erro ou aviso), intervalo de tempo do evento e pesquisa de texto livre, como na captura de ecrã seguinte.

Ver registos no Cloud Logging.

Monitorização da instância de base de dados PostgreSQL

As principais ferramentas de monitorização da Oracle são o Enterprise Manager e o Grid/Cloud Control. Estas ferramentas permitem-lhe fazer a monitorização de instâncias da base de dados em tempo real ao nível da sessão da base de dados e da declaração SQL.

O Cloud SQL para PostgreSQL oferece capacidades de monitorização comparáveis através da Google Cloud consola. A partir daí, pode obter uma vista de resumo das instâncias da base de dados, incluindo a utilização da CPU, a utilização do armazenamento, a utilização da memória, as operações de leitura/escrita, as ligações ativas, as transações por segundo e os bytes de entrada/saída. Tenha em atenção que o Google Cloud Observability fornece métricas de monitorização adicionais para o Cloud SQL para PostgreSQL, como pedidos de comutação por falha automática e atraso de replicação entre a réplica principal e as réplicas de leitura.

O gráfico de exemplo seguinte mostra um gráfico de transações por segundo nas últimas 6 horas:

Gráfico de transações por segundo das últimas 6 horas.

Monitorizar réplicas de leitura

Pode monitorizar as réplicas de leitura através da Google Cloud consola da mesma forma que monitoriza a instância principal. Existem métricas específicas para verificar o estado de replicação entre as instâncias primária e de réplica de leitura. Estas métricas são usadas para preencher a página de vista geral da instância de réplica de leitura naGoogle Cloud consola.

Em alternativa, pode verificar o estado da replicação na linha de comandos:

gcloud sql instances describe REPLICA_NAME

Uma terceira opção é verificar o estado da replicação através de um cliente PostgreSQL. O seguinte comando do PostgreSQL verifica o estado da réplica de leitura:

postgres=> \x on
Expanded display is on.
postgres=> select * from pg_stat_replication;
-[ RECORD 1 ]----+-------------------------------------------
pid              | 74733
usesysid         | 16388
usename          | cloudsqlreplica
application_name | PROJECT_ID:REPLICA_NAME
client_addr      | REPLICA_IP
client_hostname  |
client_port      | 41660
backend_start    | 2020-09-28 06:59:38.783981+00
backend_xmin     |
state            | streaming
sent_lsn         | 0/2939FFA8
write_lsn        | 0/2939FFA8
flush_lsn        | 0/2939FFA8
replay_lsn       | 0/2939FFA8
write_lag        |
flush_lag        |
replay_lag       |
sync_priority    | 0
sync_state       | async
reply_time       | 2020-09-28 07:17:52.714969+00
postgres=>

Monitorização da base de dados PostgreSQL

Esta secção descreve algumas tarefas de monitorização adicionais que são consideradas rotineiras para um DBA do PostgreSQL.

Monitorização de sessões

As sessões do Oracle são monitorizadas através da consulta das vistas de desempenho dinâmico conhecidas como vistas "V$". As vistas V$SESSION e V$PROCESS são usadas frequentemente para obter estatísticas em tempo real sobre a atividade atual da base de dados através de declarações SQL. Pode monitorizar a atividade das sessões no PostgreSQL de forma semelhante, através de comandos do PostgreSQL e declarações SQL.

A vista dinâmica do PostgreSQL pg_stat_activity fornece informações detalhadas sobre a atividade da sessão da base de dados atual:

postgres=> \x on
postgres=> select * from pg_stat_activity where backend_type = 'client backend' and usename != 'cloudsqladmin';
-[ RECORD 1 ]----+-----------------------------------------------------------------------------------------------------
datid            | 14052
datname          | postgres
pid              | 74750
usesysid         | 16389
usename          | postgres
application_name | psql
client_addr      | CLIENT_IP
client_hostname  |
client_port      | 51904
backend_start    | 2020-09-28 07:01:30.214099+00
xact_start       | 2020-09-28 07:28:48.982115+00
query_start      | 2020-09-28 07:28:48.982115+00
state_change     | 2020-09-28 07:28:48.982117+00
wait_event_type  |
wait_event       |
state            | active
backend_xid      |
backend_xmin     | 88513
query            | select * from pg_stat_activity where backend_type = 'client backend' and usename != 'cloudsqladmin';
backend_type     | client backend
postgres=>

Monitorização de transações longas

Para identificar transações de longa duração que possam originar problemas de desempenho, consulte a vista dinâmica pg_stat_activity. Pode identificar consultas de execução prolongada aplicando filtros adequados em colunas como query_start e state.

Monitorização de fechaduras

Pode monitorizar os bloqueios da base de dados através da vista dinâmica pg_locks, que fornece informações em tempo real sobre qualquer contenção de bloqueios que possa originar problemas de desempenho.

Alertas

Pode usar alertas além da monitorização e do registo. Também pode criar alertas para condições.

Dimensionar

O Cloud SQL para PostgreSQL suporta opções de escalabilidade vertical e horizontal.

Aumenta a escala verticalmente adicionando mais recursos à instância do Cloud SQL, como aumentar o número de CPUs e memória atribuídos à instância. A taxa de transferência da rede da sua instância depende dos valores que escolher para a CPU e a memória.

O Cloud SQL suporta até 30 TB de espaço de armazenamento. Geralmente, a adição de capacidade de armazenamento aumenta a taxa de transferência e os IOPs de disco de uma instância. Tenha em atenção que a taxa de transferência de rede de uma instância do Cloud SQL inclui leituras/escritas dos seus dados (taxa de transferência do disco), bem como o conteúdo de consultas, cálculos e outros dados não armazenados na sua base de dados. É importante ter em consideração estes fatores quando dimensiona verticalmente a sua instância do Cloud SQL.

Pode dimensionar na horizontal criando réplicas de leitura. As réplicas de leitura permitem-lhe dimensionar as cargas de trabalho de leitura para instâncias separadas do Cloud SQL sem afetar o desempenho e a disponibilidade da instância principal.

Cópia de segurança e recuperação

Existem dois métodos de cópia de segurança da base de dados para o Cloud SQL para PostgreSQL: a pedido e automatizada. Pode fazer cópias de segurança a pedido em qualquer altura e estas são mantidas até as eliminar. As cópias de segurança automáticas usam um período de 4 horas e são retidas durante 7 dias.

Pode restaurar as cópias de segurança da base de dados do Cloud SQL para PostgreSQL na mesma instância, substituindo os dados existentes, ou numa nova instância. Além disso, o Cloud SQL para PostgreSQL permite-lhe restaurar uma base de dados PostgreSQL para um ponto específico no tempo desde que a recuperação num ponto específico no tempo esteja ativada e a opção de cópia de segurança automática esteja ativada.

O Cloud SQL para PostgreSQL oferece capacidades de clonagem de bases de dados. O clone tem de ser criado a partir da instância principal (ou seja, não pode ser criado a partir de uma réplica). Pode executar cópias de segurança, restauros e clones de bases de dados a partir da consolaGoogle Cloud ou da CLI gcloud.

Automatização

Pode usar a API Admin do Cloud SQL para automatizar completamente a administração de uma instância do Cloud SQL para PostgreSQL. A API Admin do Cloud SQL é uma API REST para controlar diferentes tipos de recursos, como instâncias, bases de dados, utilizadores, flags, operações, SslCerts, tiers e BackupRuns. Para mais informações, consulte a documentação da API.

O que se segue?