Vários Servidores Postgres (um escritor, vários leitores) com Disco Compartilhado

5

Este é o cenário:

  1. Um disco shard (Gluster)
  2. Vários servidores Postgres

Requisitos:

  1. Use o disco compartilhado para armazenar os arquivos do banco de dados
  2. Use uma configuração que forneça eficiência máxima

Resultados até agora,

  1. É possível usar um disco compartilhado para armazenar os dados como este documento diz. Mas também diz que "Outro problema é que o servidor em espera nunca deve acessar o armazenamento compartilhado enquanto o servidor principal estiver em execução". Isso significa que todos os servidores (exceto o mestre) não são utilizados, o que é quase inaceitável para nós.

  2. Como estamos usando o disco compartilhado, não deve haver replicação. Foi encontrado neste documento que algumas configurações (modos Raw e Master / Slave) são bom o bastante. Mas o outro problema é que eles podem causar o problema acima.

Problemas:

  1. Há muita documentação na web que me deixou confuso sobre seus requisitos e recursos. Meu entendimento é correto?
  2. Em caso afirmativo, existe alguma possibilidade de atingir esse design (com pgpool ou qualquer outra ferramenta)
  3. Em caso afirmativo, você poderia nomear as ferramentas e / ou as palavras-chave para que eu possa encontrar mais informações.

Note (para aqueles que estão interessados em fechar perguntas o máximo que puderem) - Isso aconteceu antes para mim. Alguns dizem que estou procurando respostas baseadas em opinião. Na verdade eu não sou. O que estou procurando é o nome da tecnologia ou algum tipo de palavra-chave, não importa o quê. Para que, ao usá-los, eu possa procurar mais informações. Às vezes, você precisa saber algumas palavras-chave para pesquisar e encontrar as informações.

Obrigado antecipadamente.

    
por Rad 14.08.2014 / 06:38

1 resposta

7

Não é possível executar vários servidores PostgreSQL a partir do mesmo diretório de dados, mesmo que todos, exceto um, sejam somente leitura. Absolutamente 100% sem suporte. Não pode ser feito. Desista agora.

Alguém pode um dia adicionar esse recurso, mas envolveria grandes alterações no PostgreSQL, já que o Pg depende muito de memória compartilhada e sinais para sincronização entre processos. Além disso, o shared_buffers contém buffers "sujos" que ainda não foram escritos; estes podem ser escritos de forma preguiçosa porque o PostgreSQL sabe que todos os backends irão ler de lá e só irão para o disco se os dados não estiverem em shared_buffers .

É possivelmente prático fazer isso com pequenas mudanças no PostgreSQL se todos os servidores forem somente leitura, mas eu não o investiguei porque é um uso bastante desinteressante -case.

As referências ao armazenamento compartilhado que você viu são somente para failover, não para operação simultânea. O manual é bem específico de que você precisa garantir que haja um cercamento apropriado para impedir o acesso simultâneo ao armazenamento por vários servidores de banco de dados e que a corrupção principal ocorrerá se você não o fizer.

Você precisará confiar na replicação ou usar outro mecanismo de banco de dados que ofereça suporte ao armazenamento compartilhado (e lide com o impacto no desempenho resultante).

Separadamente, embora: os bancos de dados geralmente sejam limitados por E / S. O armazenamento compartilhado não ganha nada se você agora tiver dois servidores com capacidade de 1000tps em vez de um servidor que pode fazer 2000. Ou, dadas as despesas de sincronização de um sistema de armazenamento compartilhado sem um barramento de baixa latência (pense Infiniband / Myrinet ), mais como dois servidores com capacidade de 200tps cada.

    
por 14.08.2014 / 07:24