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

Escalando o PostgreSQL usando poolers de conexão e balanceadores de carga

A escalabilidade é a propriedade de um sistema para lidar com uma quantidade crescente de demandas adicionando recursos. Os motivos para essa quantidade de demandas podem ser temporários, por exemplo, se você estiver lançando um desconto em uma venda, ou permanentes, por aumento de clientes ou funcionários. De qualquer forma, você deve poder adicionar ou remover recursos para gerenciar essas mudanças nas demandas ou no aumento do tráfego.

Existem diferentes abordagens disponíveis para dimensionar seu banco de dados. Neste blog, veremos quais são essas abordagens e como dimensionar seu banco de dados PostgreSQL usando Connection Poolers e Load Balancers.

Escala horizontal e vertical

Existem duas maneiras principais de dimensionar seu banco de dados.

  • Escala horizontal (scale-out):É realizado adicionando mais nós de banco de dados criando ou aumentando um cluster de banco de dados. Ele pode ajudar você a melhorar o desempenho de leitura equilibrando o tráfego entre os nós.
  • Escala vertical (scale-up):É realizado adicionando mais recursos de hardware (CPU, Memória, Disco) a um nó de banco de dados existente. Pode ser necessário alterar algum parâmetro de configuração para permitir que o PostgreSQL use um recurso de hardware novo ou melhor.

Conexões Poolers e Load Balancers

Na escala horizontal e vertical, pode ser útil adicionar uma ferramenta externa para reduzir a carga em seu banco de dados, o que melhorará o desempenho. Talvez não seja suficiente, mas é um bom ponto de partida. Para isso, é uma boa ideia implementar um pool de conexões e um balanceador de carga. Eu disse “e” porque eles são projetados para diferentes funções.

Um pool de conexões é um método de criar um pool de conexões e reutilizá-las evitando abrir novas conexões com o banco de dados o tempo todo, o que aumentará consideravelmente o desempenho de suas aplicações. O PgBouncer é um popular pool de conexões projetado para PostgreSQL.

Usar um Load Balancer é uma forma de ter Alta Disponibilidade em sua topologia de banco de dados e também é útil para aumentar o desempenho equilibrando o tráfego entre os nós disponíveis. Para isso, o HAProxy é uma boa opção para o PostgreSQL, pois é um proxy de código aberto que pode ser usado para implementar alta disponibilidade, balanceamento de carga e proxy para aplicativos baseados em TCP e HTTP.

Como implementar uma combinação de HAProxy, PgBouncer e PostgreSQL

Uma combinação de ambas as tecnologias, HAProxy e PgBouncer, é provavelmente a melhor maneira de dimensionar e melhorar o desempenho em seu ambiente PostgreSQL. Então, veremos como implementá-lo usando a seguinte arquitetura:

Vamos supor que você tenha o ClusterControl instalado, se não, você pode ir para o site oficial, ou mesmo consulte a documentação oficial para instalá-lo.

Primeiro, você precisa implantar seu cluster PostgreSQL com HAProxy na frente dele. Para isso, siga as etapas nesta postagem do blog para implantar o PostgreSQL e o HAProxy usando o ClusterControl.

Neste ponto, você terá algo assim:

Agora, você pode instalar o PgBouncer em cada nó do banco de dados ou em uma máquina externa .

Para obter o software PgBouncer você pode ir para a seção de download do PgBouncer, ou usar os repositórios RPM ou DEB. Para este exemplo, usaremos o CentOS 8 e o instalaremos a partir do repositório oficial do PostgreSQL.

Primeiro, baixe e instale o repositório correspondente do site PostgreSQL (caso ainda não o tenha instalado):

$ wget https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

$ rpm -Uvh pgdg-redhat-repo-latest.noarch.rpm

Em seguida, instale o pacote PgBouncer:

$ yum install pgbouncer

Quando estiver concluído, você terá um novo arquivo de configuração localizado em /etc/pgbouncer/pgbouncer.ini. Como arquivo de configuração padrão, você pode usar o seguinte exemplo:

$ cat /etc/pgbouncer/pgbouncer.ini

[databases]

world = host=127.0.0.1 port=5432 dbname=world

[pgbouncer]

logfile = /var/log/pgbouncer/pgbouncer.log

pidfile = /var/run/pgbouncer/pgbouncer.pid

listen_addr = *

listen_port = 6432

auth_type = md5

auth_file = /etc/pgbouncer/userlist.txt

admin_users = admindb

E o arquivo de autenticação:

$ cat /etc/pgbouncer/userlist.txt

"admindb" "root123"

Este é apenas um exemplo básico. Para obter todos os parâmetros disponíveis, você pode verificar a documentação oficial.

Então, neste caso, instalei o PgBouncer no mesmo nó do banco de dados, escutando todos os endereços IP, e ele se conecta a um banco de dados PostgreSQL chamado “world”. Também estou gerenciando os usuários permitidos no arquivo userlist.txt com uma senha de texto simples que pode ser criptografada, se necessário.

Para iniciar o serviço PgBouncer, basta executar o seguinte comando:

$ pgbouncer -d /etc/pgbouncer/pgbouncer.ini

Agora, execute o seguinte comando usando suas informações locais (porta, host, nome de usuário e nome do banco de dados) para acessar o banco de dados PostgreSQL:

$ psql -p 6432 -h 127.0.0.1 -U admindb world

Password for user admindb:

psql (12.4)

Type "help" for help.



world=#

Esta é uma topologia básica. Você pode melhorá-lo, por exemplo, adicionando dois ou mais nós do balanceador de carga para evitar um único ponto de falha e usando alguma ferramenta como “Keepalived”, para garantir a disponibilidade. Também pode ser feito usando ClusterControl.

Para obter mais informações sobre o PgBouncer e como usá-lo, consulte esta postagem do blog.

Conclusão

Se você precisar dimensionar seu cluster PostgreSQL, adicionar HAProxy e PgBouncer é uma boa maneira de dimensionar horizontalmente e verticalmente ao mesmo tempo, pois você pode adicionar mais nós de espera ativa para equilibrar o tráfego e você melhorará o desempenho reutilizando conexões abertas.

O ClusterControl fornece uma ampla gama de recursos, desde monitoramento, alerta, failover automático, backup, recuperação pontual, verificação de backup até dimensionamento de réplicas de leitura. Isso pode ajudá-lo a dimensionar seu banco de dados PostgreSQL de maneira horizontal ou vertical a partir de uma interface de usuário amigável e intuitiva.