Postgres com arquitetura pgpool


9

Abaixo está um exemplo da arquitetura pgpool:

insira a descrição da imagem aqui

Isso implica que você só precisa ter o pgpool em um único servidor; isso é verdade? Quando olho para a configuração, também vejo que você configura back-end pgpool.conf; então isso implica ainda mais. Mas, não explica por que vejo o pgpool nos servidores de back-end também.

Ao examinar a documentação , também vejo:

Se você estiver usando o PostgreSQL 8.0 ou posterior, é altamente recomendável instalar a função pgpool_regclass em todo o PostgreSQL a ser acessado pelo pgpool-II, pois é usada internamente pelo pgpool-II.

Então, eu não tenho certeza do que pensar; se é uma boa prática ter o pgpool em todos os back-end ou apenas em um servidor dedicado?


se você estiver indo para alta disponibilidade, você provavelmente quer dois servidores pgpool em frente de pelo menos 2 servidores PostgreSQL (todos em caixas diferentes)
Neil McGuigan

Respostas:


10

Geralmente você não instalaria o Pgpool nos servidores back-end. O que você vê na sua foto é a configuração mais comum. O Pgpool é um servidor autônomo que fica basicamente na frente dos bancos de dados. Os dois servidores Postgres geralmente são configurados com replicação de streaming; sendo um o mestre e o outro o escravo.

Isso permite que o Pgpool balanceie todas as consultas de leitura entre os dois (ou mais) bancos de dados. Quaisquer consultas que envolvam gravações serão roteadas para o servidor mestre, que por sua vez é replicado para o escravo.

Como @Neil McGuigan disse , você também pode ter vários servidores Pgpool para obter melhor alta disponibilidade. Tecnicamente, você pode instalar o Pgpool nos servidores de banco de dados nessa configuração, mas isso seria uma prática ruim. A execução de vários servidores Pgpool é uma configuração muito mais complexa. Se esta é sua primeira vez no Pgpool, eu começaria com um servidor Pgpool antes de colocar dois no trabalho.

Em qualquer uma das configurações, seu servidor de aplicativos pensa que está apenas se conectando a um único banco de dados Postgres.

Sobre pgpool_regclass, que realmente deve ser uma pergunta separada, esta é da FAQ do Pgpool :

Se você estiver usando o PostgreSQL 8.0 ou posterior, é altamente recomendável instalar a função pgpool_regclass em todo o PostgreSQL a ser acessado pelo pgpool-II, pois é usada internamente pelo pgpool-II. Sem isso, o tratamento de nomes de tabelas duplicados em esquema diferente pode causar problemas (tabelas temporárias não são um problema).

Se você estiver usando o PostgreSQL 9.4.0 ou posterior e o pgpool-II 3.3.4 ou posterior, 3.4.0 ou posterior, não será necessário instalar o pgpool_regclass, pois o PostgreSQL 9.4 incorporou o pgpool_regclass como a função "to_regclass".

Se você precisar disso, são apenas alguns códigos SQL executados no servidor mestre do Postgres para adicionar uma função que o Pgpool usa.

Com regclass, há uma etapa adicional que você deve executar (eu estava pensando em insert_lock). Se você estiver compilando a partir do código-fonte (geralmente a maioria das distribuições tem versões realmente desatualizadas do Pgpool), você também precisará compilar uma biblioteca do Postgres.

Se você compilou a partir do código-fonte, precisará ir para a .../pgpool-II-3.X.X/src/sql/pgpool-regclasspasta e fazer a ./configure; make.

Copie o arquivo pgpool-regclass.so no diretório de extensão do Postgres. No meu servidor Ubuntu 14.04 (apenas usando o pacote Postgres 9.3 instalar), situa-se em: /usr/lib/postgresql/9.3/lib. Lembre-se de fazer isso para todos os servidores Postgres.

Quando isso estiver concluído, você poderá executar pgpool-regclass.sqlno mestre. Isso apenas mapeia a pgpool_regclassfunção para a biblioteca que você copiou.


1

Como em todo o resto, existem várias maneiras de realizar sua implantação de alta disponibilidade. Aqui vou sugerir algo da minha experiência (minha própria implementação de HA):

  1. É sempre melhor ter várias instâncias do pgpool2 em vez de uma única. A razão é óbvia: o único pgpool2 é o único ponto de falha. Como o pgpool introduziu o recurso watchdog, é fácil de realizar.
  2. Geralmente é um pouco melhor ter instâncias do pgpool2 em máquinas separadas do que compartilhar a mesma máquina entre o back-end do PostgreSQL e o pgpool2. Mas não há desvantagem significativa, mesmo se você executá-los no mesmo servidor que o PostgreSQL. (Na minha implementação de alta disponibilidade, todas as máquinas executam uma instância do PostgreSQL e uma instância do pgpool2.)

Finalmente, recomendo este tutorial passo a passo que o levará do zero (instalando o servidor PostgreSQL ...) para concluir a implementação de alta disponibilidade. O tutorial mencionado descreve a implementação que eu uso.

Espero que tenha ajudado.

ATUALIZAÇÃO: Obrigado @Moshe Katz - o link mudou. Agora atualizado aqui, no post original também.


2
O site apontado por você itenlight.com/blog/2016/05/05/18/… parece estar inativo. Você pode dar uma olhada?
User6807024

Parece que o artigo está agora disponível em fatdragon.me/blog/2016/05/postgresql-ha-pgpool-ii-part-1
Moshe Katz
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.