Страницы

Сохранить статью у себя в соцсети:

понедельник, 10 сентября 2012 г.

§ Pgbouncer. Quick setup.

Быстрая настройка PgBouncer.

PgBouncer это мультиплексор соединений в PostgreSQL. Не вдаваясь в длинные подробности, его применение позволяет сэкономить расход памяти и уменьшить количество соединений с PostgreSQL.
В данном случае выполняется настройка PgBouncer в режиме мультиплексирования на уровне транзакций, т.е. соединение будет закрываться по закрытию транзакции. При использовании такого режима становится невозможным использование определенных возможностей PostgreSQL, например таких как SET/RESET, LISTEN/NOTIFY, WITH HOLD CURSOR, PREPARE / DEALLOCATE, PRESERVE/DELETE ROWS, LOAD и UDF c состоянием сессии. Если используется что-либо из вышеперечисленного, то лучше использовать мультиплексирование на уровне сессий (pool_mode = session). Итак приступим, выполняем установку необходимым способом в зависимости от пакетного менеджера. В моем случае это Paludis из Gentoo Linux. 
# echo '=dev-db/pgbouncer-1.5.2 ~amd64' >> /etc/paludis/keywords.conf
# cave resolve pgbouncer -x

Установка проста и не вызывает сложностей, далее переходим к настройке. Суть настройки сводится к следующему алгоритму определений:
  • подключение к базе;
  • системные настройки демона (хранение логов, pid-файл, размещение сокет и т.п.);
  • способ аутентификации;
  • настройки пулов.
Приступаем к правке конфигурации. Ниже приведены наиболее важные опции, остальные можно оставить закоментированными. Также следует отметить что в путях используется /run вместо старого /var/run.
# vi /etc/pgbouncer.conf
[databases]
pulscen_stat = host=localhost port=5432 dbname=app_db user=app_user password=app_user_pw
[pgbouncer]
logfile = /var/log/pgbouncer/pgbouncer.log
pidfile = /run/pgbouncer/pgbouncer.pid
listen_addr = 172.31.18.20
listen_port = 6432
unix_socket_dir = /run/pgbouncer
auth_type = trust
auth_file = /etc/userlist.txt
pool_mode = transaction
server_reset_query = DISCARD ALL
max_client_conn = 100
default_pool_size = 40
reserve_pool_size = 10

Теперь нужно сдампить реквизиты с которыми будет выполняться подключение к PostgreSQL, для этого нам нужна роль под которой приложение ходит в базу данных. Возьмем данные из pgauth_id и пропишем в userlist.txt
# psql91 -qAtX -F' ' -U postgres -c 'select rolname,rolpassword from pg_authid'
postgres md5e188468785cb6aeafa6023a2716d7a8b
app_user md56ae0480d6db5c4c55b67cfc4bbaf417a
# echo '"app_user" "md56ae0480d6db5c4c55b67cfc4bbaf417a"' > /etc/userlist.txt

Теперь запускаем PgBouncer и выполняем проверку подключения к базе через PgBouncer.
# /etc/init.d/pgbouncer start
# tail /var/log/pgbouncer/pgbouncer.log
2012-09-04 09:49:49.815 24162 LOG File descriptor limit: 1024 (H:4096), max_client_conn: 100, max fds possible: 150
2012-09-04 09:49:49.815 24164 LOG listening on 172.31.18.20:6432
2012-09-04 09:49:49.815 24164 LOG listening on unix:/run/pgbouncer/.s.PGSQL.6432
2012-09-04 09:49:49.815 24164 LOG process up: pgbouncer 1.5.2, libevent 2.0.19-stable (epoll), adns: evdns2
2012-09-04 09:50:49.820 24164 LOG Stats: 0 req/s, in 0 b/s, out 0 b/s,query 0 us

Сервис запущен, выполняем проверку подключения
# psql91 -h 172.31.18.20 -p 6432 -U app_user app_db
# tail /var/log/pgbouncer/pgbouncer.log
2012-09-04 09:50:02.316 24164 LOG C-0x1f375d0: app_db/app_user@172.31.18.20:55103 login attempt: db=app_db user=app_user
2012-09-04 09:50:02.335 24164 LOG S-0x1f54f80: app_db/app_user@127.0.0.1:5432 new connection to server

На этом всё. На главную "Virtualizing Linux".

Комментариев нет:

Отправить комментарий

Популярные сообщения

Профиль в Google+ Яндекс цитирования Яндекс.Метрика