Cluster != Replicação

Hoje um e-mail na lista do PostgreSQL me levou inspirou a escrever este texto. A questão é que muitas pessoas confundem replicação com clustering. A confusão não é a tôa… a palavra Cluster possui vários significados diferentes dependendo do contexto. Temos a idéia de tabelas clusterizadas, que possuem significado diferente no Oracle e PostgreSQL por exemplo e por sua vez não tem nada a ver com o conceito de cluster de SGDB. O PostgreSQL chama de Cluster o conjunto de banco de dados gerenciados por uma única instância (conjunto de datafiles, arquivos de controle e processos no servidor que formam um SGDB). O PGCluster apesar do nome, é uma solução de replicação e não de clustering! Algumas soluções proprietárias também gostam de adotar o status de Cluster, quando na verdade se tratam de soluções de replicação. O princípio da replicação é a de ter cópias de dados em mais de um banco de dados que possam ser sincronizadas entre si. O princípio do cluster é ter vários SGDBs se comportando como se fossem uma só instância de forma transparente para a aplicação. Veja por exemplo que o conceito de Grid, que a Oracle adotou como buzz word, não existe de fato em banco de dados!

Quando falamos em Cluster de banco de dados, pensamos em 3 tipos de clusters:

  • Shared All: Onde a memória (shared buffers) e os discos (datafiles) são compartilhados por cada nó do cluster;
  • Shared Disc: Onde apenas os disco são compartilhados pelos nós do cluster;
  • Shared Nothing: Onde cada nó tem a sua própria memória e discos;

Quando falamos em Replicação de banco de dados, pensamos em 4 tipos de replicação orientados por 2 paradigmas distintos:

  • Replicação sincrona: onde todas as réplicas possuem sempre os mesmo dados;
  • Replicação assíncrona: onde as réplicas podem ser sincronizadas depois que um alteração nos dados é realizada;
  • Replicação MultiMaster: onde é possível realizar leitura e gravação em qualquer réplica;
  • Replicação Master/Slave: onde apenas a réplica master permite gravação, enquanto as demais réplicas só permitem leitura;

Vejamos algumas diferenças entre replicação e cluster:

A replicação pode ser parcial ou total (em relação aos objetos do banco de dados), enquanto o cluster é sempre total em relação a uma instância do banco de dados (no caso do PostgreSQL seria em relação a um cluster criado pelo initdb).

  • A replicação pode ocorrer em apenas uma parte dos dados de cada réplica enquanto no cluster toda a instância (datafiles + processos no servidor) do SGDB de cada nó deve fazer parte do cluster;
  • A replicação pode ser assincrona ou síncrona enquanto o cluster sempre trabalha de forma síncrona.
  • A replicação pode ser MultiMaster ou Master/Slave, e no Cluster todos os nós podem realizar operações de leitura e escrita (o equivalente a um MultiMaster).
  • Técnicas de replicação, em geral não são boas para aumentar a escalabilidade horizontal de bancos de dados com alto volume de gravação (OLTP) enquanto os clusters shared all tem esta capacidade;
  • A replicação guarda uma cópia dos dados replicados em cada instância do banco de dados enquanto o cluster mantém apenas uma cópia dos dados compartilhado para todos os nós do cluster. Note que, em algumas implementações de clusters, técnicas de replicação são combinadas para se evitar o Storage como ponto vulnerável no caso de tolerância a falha.

Em princípio, parece que uma uma replicação MultiMaster síncrona é equivalente a um Cluster Shared Nothing. No entanto, note que um Cluster Shared Nothing cada nó possui apenas uma fatia do banco de dados em seu storage enquanto na replicação MultiMaster síncrona, cada nó possui uma cópia completa dos dados. Cada técnica de cluster e replicação tem diversos tipos de implementações servindo para diferentes propósitos e com diferentes limitações. Saber distinguir cada um deles é fundamental para saber por onde começar a procurar por uma solução adequada para cada tipo de problema, seja ele de alta disponibilidade, balanceamento de carga ou de bancos de dados distribuídos.

O PostgreSQL conta hoje com várias soluções de Replicação Assíncrona Master/Slave que vai do Stand By (implementado no PostgreSQL padrão), Slony I e outros. O PgPool I e II é não são exatamente soluções de replicação e sim de pool de conexões com suporte a um tipo de replicação síncrona. A única solução de replicação MultiMaster Síncrona existente hoje é o PGCluster. O projeto do Slony II pretendia ser uma nova implementação deste tipo mas foi abandonado devida a alta complexidade do projeto. O PGCluster II pretende ser uma implementação de Cluster Shared All (no mesmo estilo do Oracle RAC), mas o projeto ainda é muito recente para se saber se ele será bem sucedido.

Para saber mais veja:

Compartilhe

Você pode gostar

Sobre minha saída da Timbira

Há 14 anos, durante o PGConf.Brasil 2009, lá na UNICAMP em Campinas/SP, 4 pessoas se reuniram e idealizaram a criação da primeira empresa dedicada exclusivamente

Split brain

Já tem algum tempo que eu pensava em fazer isso e chegou a hora. Este blog vai se dividir em 2 partes a partir de

plugins premium WordPress