PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Uma visão geral da replicação em nível de volume para PostgreSQL usando DRBD


A replicação é o compartilhamento de dados transacionais em vários servidores para garantir a consistência entre nós de banco de dados redundantes. Um mestre fará inserções ou atualizações e as aplicará ao seu conjunto de dados, enquanto os escravos alterarão seus dados de acordo com as alterações feitas no conjunto de dados mestre. O mestre é comumente referido como primário e registra as alterações feitas em um Write Ahead Log (WAL). Por outro lado, os escravos são chamados de secundários e replicam seus dados dos logs REDO - neste caso o WAL.

Existem pelo menos 3 abordagens de replicação no PostgreSQL:

Replicação integrada ou replicação de streaming.


Nesta abordagem, os dados são replicados do nó primário para o nó secundário. No entanto, ele vem com uma série de contratempos que são:
  • Dificuldades na introdução de um novo secundário. Isso exigirá que você replique todo o estado, o que pode consumir muitos recursos.
  • Falta de monitoramento e failover integrados. Um secundário deve ser promovido a primário em caso de falha deste último. Muitas vezes, essa promoção pode resultar em inconsistência de dados durante a ausência do principal.

Reconstruindo a partir do WAL


Essa abordagem de alguma forma emprega a abordagem de replicação de streaming, pois os secundários são reconstruídos a partir de um backup feito pelo primário. O primário realiza um backup completo do banco de dados após cada dia, além de um backup incremental a cada 60 segundos. A vantagem dessa abordagem é que nenhuma carga adicional é submetida ao primário até que os secundários estejam próximos o suficiente do primário, de modo que eles comecem a transmitir o Write Ahead Log (WAL) para alcançá-lo. Com essa abordagem, você pode adicionar ou remover réplicas sem afetar o desempenho do banco de dados PostgreSQL.

Replicação em nível de volume para PostgreSQL (espelhamento de disco)


Esta é uma abordagem genérica que não se aplica apenas ao PostgreSQL, mas também a todos os bancos de dados relacionais. Faremos uso do Distributed Replicated Block Device (DRBD), um sistema de armazenamento replicado distribuído para Linux. Destina-se a operar espelhando o conteúdo armazenado no armazenamento de um servidor para outro. Uma ilustração simples da estrutura é mostrada abaixo.

O DRBD pode ser considerado como uma abstração do dispositivo de disco que hospeda o banco de dados PostgreSQL, mas o sistema operacional nunca saberá que seus dados também estão localizados em outro servidor. Usando essa abordagem, você não apenas pode compartilhar os dados, mas também o sistema de arquivos para mais de 1 servidor. As gravações no DRBD são, portanto, distribuídas entre todos os servidores, onde cada servidor gravará informações em um disco rígido físico local (dispositivo de bloco). Quando uma operação de gravação é aplicada ao primário, ela é posteriormente registrada no DRBD e depois distribuída aos servidores DRBD secundários. Por outro lado, se o secundário receber as operações de gravação por meio do DRBD, elas serão gravadas no dispositivo físico local. Em caso de suporte a failover, o DRBD oferece alta disponibilidade de dados, pois as informações são compartilhadas entre um nó primário e vários nós secundários que são alinhados de forma síncrona no nível do bloco.

A configuração do DRBD exigiria um recurso adicional conhecido como Heartbeat, que discutiremos em outro artigo, para aprimorar o suporte ao failover automático. O pacote basicamente gerencia a interface nos vários servidores e configura automaticamente um dos servidores secundários para primário em caso de falha.

Instalação e configuração do DRBD


O método preferencial na instalação do DRBD é usar os pacotes de instalação binários pré-compilados. Certifique-se de que a versão do kernel dos pacotes corresponda ao seu kernel atual ativo.

Os arquivos de configuração para todos os nós primários ou secundários devem ser idênticos. Além disso, se for necessário atualizar sua versão do kernel, certifique-se de que o kernel-module-drdb correspondente esteja disponível para sua nova versão do kernel.

Configuração do DRBD para o nó primário


Este é o primeiro passo em que você precisará criar um dispositivo de bloco DRBD e um sistema de arquivos com o qual você pode armazenar seus dados. O arquivo de configuração pode ser encontrado em /etc/drbd.conf. O arquivo define vários parâmetros para a configuração do DRBD que incluem:tamanhos de blocos, definição de informações de segurança dos dispositivos DRBD que você deseja criar e frequência de atualizações. As configurações podem ser restritas a serem globais ou vinculadas a um determinado recurso. As etapas envolvidas são:

  1. Taxa de sincronização que define a taxa na qual os dispositivos são vinculados de forma síncrona em segundo plano após uma substituição de disco, falha ou configuração inicial. Isso pode ser definido editando o parâmetro de taxa no bloco de sincronização:
    syncer{
    rate 15M
    }

  2. Configuração de autenticação para garantir que apenas hosts com o mesmo segredo compartilhado possam ingressar no grupo de nós DRBD. A senha é um mecanismo de troca de hash com suporte no DRBD.
    cram-hmac-alg “sha1”
    shared-secret “hash-password-string”

  3. Configurando as informações do host. As informações do nó, como o host, podem ser encontradas no arquivo drbd.conf de cada um dos nós. Alguns dos parâmetros a serem configurados são:
    • Endereço:endereço IP e número da porta do host que contém o dispositivo DRBD.
    • Dispositivo:o caminho do dispositivo de bloco lógico criado pelo DRBD.
    • Disco:refere-se ao dispositivo de bloco que armazena os dados.
    • Meta-disco:armazena os metadados do dispositivo DRBD. Seu tamanho pode ser de até 128 MB. Você pode configurá-lo para ser o disco interno para que o DRBD use um dispositivo de bloco físico para armazenar essas informações nas últimas seções do disco.

    Uma configuração simples para o primário:
    on drbd-one {
    device /dev/drbd0;
    disk /dev/sdd1;
    address 192.168.103.40:8080;
    meta-disk internal;
    }

    A configuração deve ser repetida com os secundários com o endereço IP correspondente ao host correspondente.
    on drbd-two {
    device /dev/drbd0;
    disk /dev/sdd1;
    address 192.168.103.41:8080;
    meta-disk internal;
    }

  4. Criando os metadados para os dispositivos usando este comando:
    $ drbdadm create create-md all
    Esse processo é obrigatório antes de você iniciar o nó principal.
  5. Inicie o DRBD com este comando:
    $ /etc/init.d/drbd start
    Isso permite que o DRBD inicie, inicialize e crie os dispositivos definidos pelo DRBD.
  6. Marque o novo dispositivo como primário e inicialize o dispositivo usando este comando:
    $ drbdadm -- --overwrite-data-of-peer primary all
    Crie um sistema de arquivos no dispositivo de bloco para tornar utilizável um dispositivo de bloco padrão criado pelo DRBD.
  7. Torne o primário pronto para uso montando o sistema de arquivos. Estes comandos devem prepará-lo para você:
    $ mkdir /mnt/drbd
    $ mount /dev/drbd0 /mnt/drbd
    $ echo “DRBD Device” > /mnt/drbd/example_file

Configuração do DRBD para o nó secundário


Você pode usar as mesmas etapas acima, exceto para criar o sistema de arquivos em um nó secundário, pois as informações são transferidas automaticamente do nó primário.

  1. Copie o arquivo /etc/drbd.conf do nó primário para o nó secundário. Este arquivo contém as informações e configurações necessárias.

  2. No dispositivo de disco subjacente, crie os metadados DRBD usando o comando:
    $ drbdadm create-md all

  3. Inicie o DRBD com o comando:
    $ /etc/init.d/drbd start
    O DRBD começará a copiar dados do nó primário para o nó secundário e o tempo depende do tamanho dos dados a serem transferidos. Se você visualizar o arquivo /proc/drbd, poderá visualizar o progresso.
    $ cat /proc/drbd
    version: 8.0.0 (api:80/proto:80)
      SVN Revision: 2947 build by [email protected], 2018-08-24 16:43:05
       0: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r---
           ns:252284 nr:0 dw:0 dr:257280 al:0 bm:15 lo:0 pe:7 ua:157 ap:0
           [==>.................] sync'ed: 12.3% (1845088/2097152)K
           finish: 0:06:06 speed: 4,972 (4,580) K/sec
           resync: used:1/31 hits:15901 misses:16 starving:0 dirty:0 changed:16
           act_log: used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0

  4. Monitore a sincronização usando o comando watch em intervalos específicos
    $ watch -n 10 ‘cat /proc/drbd‘

Gerenciamento de instalação do DRBD


Para acompanhar o status do dispositivo DRBD, usamos o arquivo /proc/drbd.

Você pode definir o estado de todos os dispositivos locais como primários usando o comando
$ drbdadm primary all

Tornar um dispositivo primário secundário
$ drbdadm secondary all

Para desconectar nós DRBD
$ drbdadm disconnect all

Reconecte os nós DRBD
$ drbd connect all
Baixe o whitepaper hoje PostgreSQL Management &Automation with ClusterControlSaiba o que você precisa saber para implantar, monitorar, gerenciar e dimensionar o PostgreSQLBaixe o whitepaper

Configurando PostgreSQL para DRBD


Isso envolve selecionar um dispositivo para o qual o PostgreSQL armazenará dados. Para uma nova instalação, você pode optar por instalar o PostgreSQL inteiramente no dispositivo DRBD ou em um diretório de dados a ser localizado no novo sistema de arquivos e deve estar no nó primário. Isso ocorre porque o nó primário é o único com permissão para montar um sistema de arquivos de dispositivo DRBD como leitura/gravação. Os arquivos de dados Postgres são frequentemente arquivados em /var/lib/pgsql enquanto os arquivos de configuração são armazenados em /etc/sysconfig/pgsql.

Configurando o PostgreSQL para usar o novo dispositivo DRBD


  1. Se você tiver algum PostgreSQL em execução, interrompa-o com este comando:
    $  /etc/init.d/postgresql -9.0

  2. Atualize o dispositivo DRBD com os arquivos de configuração usando os comandos:
    $ mkdir /mnt/drbd/pgsql/sysconfig
    $ cp /etc/sysconfig/pgsql/* /mnt/drbd/pgsql/sysconfig

  3. Atualize o DRBD com o diretório de dados do PostgreSQL e os arquivos do sistema usando:
    $ cp -pR /var/lib/pgsql /mnt/drbd/pgsql/data

  4. Crie um link simbólico para o novo diretório de configuração no sistema de arquivos do dispositivo DRBD em /etc/sysconfig/pgsql usando o comando:
    $ ln -s /mnt/drbd/pgsql/sysconfig  /etc/sysconfig/pgsql

  5. Remova o diretório /var/lib/pgsql, desmonte /mnt/drbd/pgsql e monte o dispositivo drbd em /var/lib/pgsql.

  6. Inicie o PostgreSQL com o comando:
    $ /etc/init.d/postgresql -9.0 start

Os dados do PostgreSQL agora devem estar presentes no sistema de arquivos em execução no seu dispositivo DRBD no dispositivo configurado. O conteúdo dos bancos de dados também é copiado para o nó DRBD secundário, mas não pode ser acessado, pois o dispositivo DRBD trabalhando no nó secundário pode estar ausente.

Recursos importantes com a abordagem DRBD

  • Os parâmetros de ajuste são altamente personalizáveis.
  • As implantações existentes podem ser facilmente configuradas com DRBD sem perda de dados.
  • As solicitações de leitura são igualmente equilibradas
  • A autenticação de segredo compartilhado protege a configuração e seus dados.