Como usar um banco de dados PostgreSQL distribuído em um site?

2

Eu quero hospedar um site, o back-end será um servidor de banco de dados PostgreSQL. Eu gostaria de ter vários servidores da web, em diferentes data centers para redundância. Eu, então, arredondaria o DNS de cada servidor web para distribuir a carga.

Para fazer isso, devo também ter vários bancos de dados e usar algum tipo de replicação? Ou seria melhor ter um banco de dados e ter cada servidor da Web apontando para ele pela Internet?

Atualização 1

A ideia foi que vários servidores da Web devem ter vários servidores de banco de dados, para eliminar o ponto único de falha. Eu realmente gostaria de ter uma configuração duplicada em cada data center. Eu teria um servidor web e um servidor de banco de dados em cada data center. Eu não tinha certeza se isso era possível, então fiquei aberto à idéia de ter apenas um servidor de banco de dados ou ter todos os bancos de dados em um único local. Mas, idealmente, cada data center teria seu próprio.

    
por Anthony D 07.10.2009 / 16:05

2 respostas

3

Eu recentemente tentei descobrir isso também para um projeto semelhante. O que eu descobri é que não é assim tão fácil. Existem várias alternativas comerciais e de código aberto quando se trata de replicação. No entanto, a maioria deles não suporta várias soluções master-master, e muitas delas são difíceis de manter e configurar.

Você tem algumas alternativas para seguir em frente, dependendo de como a sua aplicação web está configurada e da quantidade de redundância que você precisa. O mais fácil é provavelmente fazer um warm standby (essa funcionalidade já está incluída na versão 8.3), mas em caso de falha, você terá um tempo de inatividade.

Outras soluções de replicação que analisei incluem:

Destes, achei o Bucardo o mais interessante, já que ele suporta master-master (não é multi), e parece ser bem fácil de configurar.

O Slony é um pouco difícil de configurar e também requer muita manutenção ao atualizar tabelas (as mudanças de DDL não são replicadas) e também é apenas um mestre-escravo, o que significa que você pode gravar somente em um banco de dados.

O PgCluster não parece ser mantido e não dá uma impressão séria na documentação e no site (o site não é atualizado desde 2005).

    
por 07.10.2009 / 16:53
1

Fazer o round robin global via DNS pode fazer com que suas conexões não sejam persistentes. Se o seu código não estiver ciente do nó, você deverá esperar gravações em qualquer um dos bancos de dados replicados.

Você pode fazer uma configuração de replicação multimestre com poucas soluções . Eu usei o PgCluster antes com sucesso. Há também um projeto interessante em Postgres-R .

Tenha em mente que a consistência é seu inimigo aqui. Se você escrever em um nó e, em seguida, ler de outro, sua solicitação poderá vencer seu commit no outro banco de dados.

Se a maior parte das suas consultas forem leituras, você poderá configurar um esquema de replicação normal e fazer com que seu código faça gravações em um banco de dados mestre central. É mais trabalho, mas torna o problema de consistência mais fácil de lidar. Você poderia usar algo como Slony para fazer replicação 'normal'.

Edit: Eu concordo com os comentários sobre o PgCluster sendo difícil de configurar e ter documentos ruins! Eu não criei um link para eles, pois o site deles está inativo enquanto escrevo isso.

    
por 07.10.2009 / 16:46