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

Gerenciamento de conexões no PostgreSQL:um guia

O desempenho é sempre importante em qualquer sistema. Você precisará fazer bom uso dos recursos disponíveis para garantir o melhor tempo de resposta possível e existem diferentes maneiras de fazer isso. Toda conexão com um banco de dados consome recursos, portanto, uma dessas maneiras é ter um bom gerenciador de conexões entre seu aplicativo e o banco de dados. Neste blog, falaremos sobre o pgBouncer, um pool de conexões para PostgreSQL, e mostraremos como implementá-lo para melhorar o desempenho do PostgreSQL.

Conexão Poolers

Dependendo do tráfego de seus sistemas, 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

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

Como o PgBouncer funciona

O PgBouncer atua como um servidor PostgreSQL, então você só precisa acessar seu banco de dados usando as informações do PgBouncer (Endereço IP/Hostname e Porta), e o PgBouncer criará uma conexão com o servidor PostgreSQL, ou reutilize um se existir.

Quando o PgBouncer recebe uma conexão, ele realiza a autenticação, que depende do método especificado no arquivo de configuração. O PgBouncer suporta todos os mecanismos de autenticação que o servidor PostgreSQL suporta. Depois disso, o PgBouncer verifica se há uma conexão em cache, com a mesma combinação de nome de usuário+banco de dados. Se uma conexão em cache for encontrada, ele retorna a conexão ao cliente, caso contrário, cria uma nova conexão. Dependendo da configuração do PgBouncer e do número de conexões ativas, pode ser possível que a nova conexão seja enfileirada até que possa ser criada, ou até mesmo abortada.

O comportamento do PgBouncer depende do modo de pool configurado:

  • pooling de sessão (padrão):Quando um cliente se conecta, uma conexão de servidor será atribuída a ele para todo o durante o qual o cliente permanece conectado. Quando o cliente se desconectar, a conexão do servidor será colocada de volta no pool.

  • pool de transações:Uma conexão de servidor é atribuída a um cliente somente durante uma transação. Quando o PgBouncer perceber que a transação terminou, a conexão do servidor será colocada de volta no pool.

  • conjunto de instruções:A conexão do servidor será colocada de volta no pool imediatamente após a conclusão de uma consulta. As transações com vários extratos não são permitidas nesse modo, pois seriam interrompidas.

Como implementar o PgBouncer usando o ClusterControl

Para isso, vamos supor que você tenha seu cluster PostgreSQL em execução e esteja usando o ClusterControl para gerenciá-lo, caso contrário, você pode seguir esta postagem do blog para implantar facilmente o PostgreSQL para alta disponibilidade.

Vá para ClusterControl -> Selecione PostgreSQL Cluster -> Cluster Actions -> Add Load Balancer -> PgBouncer. Lá você pode implantar um novo nó PgBouncer que será implantado no nó do banco de dados selecionado ou até mesmo importar um nó PgBouncer existente.

Você precisará especificar o endereço IP ou nome do host, porta de escuta e PgBouncer credenciais. Ao pressionar Deploy PgBouncer, o ClusterControl acessará o nó, instalará e configurará tudo sem nenhuma intervenção manual.

Você pode monitorar o progresso na Seção de Atividade do ClusterControl. Quando terminar, você precisa criar o novo Pool. Para isso, vá para ClusterControl -> Selecione o cluster PostgreSQL -> Nodes -> PgBouncer Node.

Aqui você precisará adicionar as seguintes informações:

  • Nome do host do PgBouncer:Selecione os hosts do nó para criar o pool de conexões.

  • Nome do pool:os nomes do pool e do banco de dados devem ser os mesmos.

  • Nome de usuário: Selecione um usuário do nó principal do PostgreSQL ou crie um novo.

  • Modo Pool:Pode ser um dos modos que mencionamos anteriormente:sessão (padrão), transação, ou agrupamento de declarações.

  • Tamanho do Pool:Tamanho máximo dos pools para este banco de dados. O valor padrão é 20.

  • Máximo de conexões de banco de dados:Configure um máximo de todo o banco de dados. O valor padrão é 0, o que significa ilimitado.

Agora, você poderá ver o Pool na seção Node.

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

Conclusão

Usar o PgBouncer como um pool de conexões é uma boa maneira de melhorar o desempenho do banco de dados fazendo bom uso dos recursos disponíveis no servidor.

Você também pode melhorar essa topologia usando uma combinação de PgBouncer + HAProxy para obter alta disponibilidade para seu cluster PostgreSQL. Todas essas coisas podem ser feitas a partir da mesma interface do usuário do ClusterControl.