Criar uma configuração de alta disponibilidade

Selecione uma versão da documentação:

Nesta página, descrevemos como definir uma configuração de alta disponibilidade para o AlloyDB Omni. Esta página aborda apenas a criação de uma nova instância do AlloyDB Omni em uma configuração de alta disponibilidade. Ela não abrange a conversão de instâncias atuais para alta disponibilidade.

Antes de começar

  1. Leia sobre alta disponibilidade e resiliência de dados.

  2. Se você ainda não tiver um, crie um projeto do Google Cloud .

  3. Verifique se o faturamento está ativado no projeto.

  4. Abra o Cloud Shell no console do Google Cloud .

  5. No console do Google Cloud , clone o repositório de origem a seguir.

    git clone https://github.com/GoogleCloudPlatform/cloud-solutions.git
    

Instalação

Neste guia, implantamos um cluster do Patroni de três nós com o AlloyDB Omni e um cluster do etcd de três nós como o armazenamento de configuração. Na frente do cluster, usamos o HAProxy em um grupo gerenciado de instâncias para o endereço IP flutuante, de modo que o failover seja transparente para os clientes.

A configuração inicial é mostrada no diagrama a seguir:

Configuração em que o HAProxy gerencia a conexão entre os clientes e o nó principal

Figura 1. Configuração em que o HAProxy gerencia a conexão entre os clientes e o nó principal.

Se ocorrer uma interrupção, a configuração será alterada para o seguinte diagrama:

Configuração atualizada em que o nó principal com falha é substituído pelo nó em espera

Figura 2. Configuração atualizada em que o nó principal com falha é substituído pelo nó em espera.

Se o número de clientes que se conectam ao banco de dados se tornar um problema e você tiver problemas de desempenho devido ao alto número de conexões simultâneas, recomendamos adicionar o pool de conexões do lado do aplicativo. Se isso não for possível, adicione o pool de conexões do lado do banco de dados usando uma ferramenta como o PgBouncer.

Implantação

  1. No Cloud Shell e depois de clonar o repositório de soluções do Cloud, navegue até o diretório do Terraform.

    cd cloud-solutions/projects/alloydbomni-ha-patroni-etcd/terraform
    
  2. Crie e edite um arquivo terraform.tfvars. No arquivo, defina valores para as seguintes variáveis:

    project_id                   = "PROJECT_ID"
    region                       = "REGION"
    zones                        = [ZONES]
    node_count                   = 3
    cluster_name                 = "CLUSTER_NAME"
    replication_user_password    = "REPLICATION_USER_PASSWORD"
    postgres_super_user_password = "PG_SUPER_USER_PASSWORD"
    

    Substitua:

    • PROJECT_ID: o ID do seu projeto do Google Cloud .
    • REGION: a região do Google Cloud em que você quer implantar os recursos, por exemplo, us-central1.
    • ZONES: uma lista separada por vírgulas de zonas entre aspas na região especificada, por exemplo, "us-central1-a", "us-central1-b", "us-central1-c" ou "us-central1-a", "us-central1-c".
    • CLUSTER_NAME: o nome do cluster do Patroni e do AlloyDB Omni.
    • REPLICATION_USER_PASSWORD: a senha do usuário de replicação.
    • PG_SUPER_USER_PASSWORD: a senha do superusuário do PostgreSQL (postgres).

    Para mais informações sobre cada variável, consulte o arquivo de configuração de variáveis no GitHub.

  3. Execute o script do Terraform para criar todos os recursos.

    terraform init && terraform apply
    

    Esse script cria e configura o seguinte:

    • Três nós para o cluster etcd

    • Três nós para o cluster do Patroni

    • Um nó para HAProxy

Como configurar o Patroni para ser síncrono

Para que o Patroni use apenas a replicação síncrona no cluster de três nós, adicione itens de configuração como synchronous_mode, synchronous_node_count, synchronous_commit e synchronous_standby_names na seção de inicialização nos arquivos de configuração do Patroni. A configuração do Patroni é definida no modelo de script de inicialização e no arquivo /alloydb/config/patroni.yml nos nós do Patroni. Para usar a replicação síncrona, a configuração de inicialização do Patroni precisa ser assim:

bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
    maximum_lag_on_failover: 1048576
    synchronous_mode: true
    synchronous_node_count: 2
    postgresql:
      use_pg_rewind: true
      use_slots: true
      parameters:
        hot_standby: "on"
        wal_keep_segments: 20
        max_wal_senders: 8
        max_replication_slots: 8
        synchronous_commit: remote_apply
        synchronous_standby_names: '*'

Quando synchronous_mode está ativado, o Patroni usa a replicação síncrona entre a instância principal e as outras réplicas. O parâmetro synchronous_node_count é usado pelo Patroni para gerenciar o número de réplicas em espera síncronas. O Patroni gerencia o número preciso de réplicas em espera síncronas com base no parâmetro synchronous_node_count e ajusta o estado no armazenamento de configuração e no synchronous_standby_names à medida que os membros entram e saem. Para mais informações sobre replicação síncrona, consulte a seção Modos de replicação na documentação do Patroni.

A seguir