﻿# Установка PGBouncer

> [HTML Version](pgbouncer-installation.html)

PGBouncer — программа, управляющая пулом соединений PostgreSQL. Любое конечное приложение может подключиться к PGBouncer, как если бы это был непосредственно сервер PostgreSQL. PGBouncer создаст подключение к реальному серверу, либо задействует одно из ранее установленных подключений. 

Назначение PGBouncer — минимизировать издержки, связанные с установлением новых подключений к PostgreSQL. Вы также можете ознакомиться с руководством в [официальной документации PGBouncer](https://www.pgbouncer.org/faq.html).

Установка состоит из нескольких этапов:

1. [Установка PGBouncer](#install-pgbouncer).

2. [Настройка PGBouncer](#configure-pgbouncer).

3. [Добавление пользователей](#add-users).

4. [Задание LimitNOFILE в файле pgbouncer.service](#set-limitnofile).

5. [Подключение к PGBouncer](#connect-to-pgbouncer).

## Шаг 1. Установка PGBouncer

Установите PGBouncer на узел с PostgreSQL, используя следующую команду:

````
sudo apt-get install pgbouncer -y

## ````
Шаг 2. Настройка PGBouncer

1. Переместите конфигурационный файл по умолчанию:

````
sudo mv /etc/pgbouncer/pgbouncer.ini\{,.original\}

2. ````
Создайте и откройте для редактирования новый конфигурационный файл:

````
sudo nano /etc/pgbouncer/pgbouncer.ini

3. ````
Добавьте пример конфигураций в файл:

````
\[databases\]  
postgres = host=127.0.0.1 port=5432 dbname=elma365  
\* = host=127.0.0.1 port=5432  
  
\[pgbouncer\]  
logfile = /var/log/postgresql/pgbouncer.log  
pidfile = /var/run/postgresql/pgbouncer.pid  
listen\_addr = \*  
listen\_port = 6432  
unix\_socket\_dir = /var/run/postgresql  
auth\_type = md5  
auth\_file = /etc/pgbouncer/userlist.txt  
admin\_users = postgres  
ignore\_startup\_parameters = extra\_float\_digits,geqo  
pool\_mode = session  
server\_reset\_query = DISCARD ALL  
max\_client\_conn = 10000  
default\_pool\_size = 800  
reserve\_pool\_size = 150  
reserve\_pool\_timeout = 1  
max\_db\_connections = 1000  
pkt\_buf = 8192  
listen\_backlog = 4096  
log\_connections = 0  
log\_disconnections = 0

````
где:

- \[OBJECT\] — список адресов через запятую, где прослушивать соединения TCP. Если вы установите \[OBJECT\], будут прослушивать все адреса;

- \[OBJECT\] — порт для прослушивания, по умолчанию установлено \[OBJECT\];

- \[OBJECT\] — режим работы;

- \[OBJECT\] — режим аутентификации пользователей;

- \[OBJECT\] — максимально допустимое количество клиентских подключений;

- \[OBJECT\] — размер пула открытых подключений к базам данных;

- \[OBJECT\] — размер резервного пула открытых подключений к базам данных;

- \[OBJECT\] — максимально допустимое количество открытых подключений к базам данных;

- \[OBJECT\] — определяет имена баз данных, к которым могут подключаться клиенты PgBouncer. Указывает, куда будут маршрутизироваться эти подключения.

Настройка включения TLS в PGBouncer

  
Для включения поддержки TLS в PGBouncer дабавьте в файл конфигурации \[OBJECT\] следующие параметры:

- \[OBJECT\] — задайте режим работы TLS, выставив \[OBJECT\];

- \[OBJECT\] — укажите путь до файла корневого CA;

- \[OBJECT\] — укажите путь до файла сертификата сервера;

- \[OBJECT\] — укажите путь до файла закрытого ключа.

````
\[databases\]  
postgres = host=127.0.0.1 port=5432 dbname=elma365  
\* = host=127.0.0.1 port=5432  
  
\[pgbouncer\]  
logfile = /var/log/postgresql/pgbouncer.log  
pidfile = /var/run/postgresql/pgbouncer.pid  
listen\_addr = \*  
listen\_port = 6432  
unix\_socket\_dir = /var/run/postgresql  
auth\_type = md5  
auth\_file = /etc/pgbouncer/userlist.txt  
admin\_users = postgres  
ignore\_startup\_parameters = extra\_float\_digits,geqo  
pool\_mode = session  
server\_reset\_query = DISCARD ALL  
max\_client\_conn = 10000  
default\_pool\_size = 800  
reserve\_pool\_size = 150  
reserve\_pool\_timeout = 1  
max\_db\_connections = 1000  
pkt\_buf = 8192  
listen\_backlog = 4096  
log\_connections = 0  
log\_disconnections = 0  
client\_tls\_sslmode = require  
client\_tls\_ca\_file = /etc/ssl/certs/rootCA.pem  
client\_tls\_key\_file = /etc/ssl/private/selfsigned.key  
client\_tls\_cert\_file = /etc/ssl/certs/selfsigned.crt

````
  
Подробнее о настройке TLS в PGBouncer читайте в [официальной документации PGBouncer](https://www.pgbouncer.org/config.html#tls-settings).

## Шаг 3. Добавление пользователей

Добавьте в файл \[OBJECT\] имена пользователей и пароли, с которыми PGBouncer подключается к базе. Для этого:

1. Создайте файл \[OBJECT\], выполнив команду:

````
sudo nano /etc/pgbouncer/userlist.txt

2. ````
Добавьте в файл \[OBJECT\] пользователя и пароль для подключения к PostgreSQL. Пользователь **elma365** был ранее создан при развёртывании PostgreSQL. Подробнее об этом читайте в статьях [«PostgreSQL»](postgresql.md) и [«Кластер PostgreSQL»](configure-postgresql.md).

````
"elma365" "SecretPassword"

## ````
Шаг 4. Задание LimitNOFILE в файле pgbouncer.service

Добавьте в файл сервиса PGBouncer в секцию **Service** параметр \[OBJECT\].

1. Откройте файл \[OBJECT\], выполнив команду:

````
sudo nano /lib/systemd/system/pgbouncer.service

2. ````
Задайте лимит на открытие файлов \[OBJECT\] равным \[OBJECT\].

Пример добавления LimitNOFILE в pgbouncer.service

````
  
\[Unit\]  
Description=connection pooler for PostgreSQL  
Documentation=man:pgbouncer(1)  
Documentation=https://www.pgbouncer.org/  
After=network.target  
\#Requires=pgbouncer.socket  
  
\[Service\]  
Type=notify  
User=postgres  
ExecStart=/usr/sbin/pgbouncer /etc/pgbouncer/pgbouncer.ini  
ExecReload=/bin/kill -HUP \$MAINPID  
KillSignal=SIGINT  
LimitNOFILE=15000  
  
\[Install\]  
WantedBy=multi-user.target
````

3. ````
Перезапустите PGBouncer, выполнив команду:

````
sudo systemctl daemon-reload  
sudo systemctl restart pgbouncer

## ````
Шаг 5. Подключение к PGBouncer

Строка подключения к PGBouncer:

````
postgresql://elma365:SecretPassword@<postgresql-server-address>:6432/elma365?sslmode=disable

````
Строка подключения к PGBouncer с TLS:

````
postgresql://elma365:SecretPassword@<postgresql-server-address>:6432/elma365?sslmode=require
````