PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

PostgreSQL Connection Pooling:Част 2 – PgBouncer

Когато става въпрос за обединяване на връзки в света на PostgreSQL, PgBouncer е може би най-популярната опция. Това е много проста помощна програма, която прави точно едно нещо – стои между базата данни и клиентите и говори протокола PostgreSQL, емулирайки PostgreSQL сървър. Клиент се свързва с PgBouncer с точно същия синтаксис, който би използвал, когато се свързва директно с PostgreSQL – PgBouncer е по същество невидим.

PgBouncer се поддържа от почти всеки доставчик на PostgreSQL DBaaS и се използва широко в общността. В тази публикация в блога ще обясним как работи PgBouncer, плюсовете и минусите на използването му и как да настроите пулера за връзки. Ако искате да научите повече за обединяването на връзки като цяло или се чудите дали е подходящо за вашето внедряване, вижте нашата публикация за PostgreSQL Connection Pooling:Част 1 – Плюсове и минуси.

Серия за обединяване на връзки на PostgreSQL

  • Част 1 – Плюсове и минуси
  • Част 2 – PgBouncer
  • Част 3 – Pgpool-II
  • Част 4 – PgBouncer срещу Pgpool-II

Как работи PgBouncer?

Когато PgBouncer получи клиентска връзка, той първо извършва удостоверяване от името на сървъра на PostgreSQL. PgBouncer поддържа всички механизми за удостоверяване, които PostgreSQL сървърът поддържа, включително конфигурация за достъп, базирана на хост (забележка:не можем да маршрутизираме връзки за репликация през PgBouncer). Ако е предоставена парола, удостоверяването може да се извърши по два начина:

  1. PgBouncer първо проверява файла userslist.txt – този файл посочва набор от (потребителско име, криптирани пароли md5) кортежи. Ако потребителското име съществува в този файл, паролата се съпоставя с дадената стойност. Не се осъществява връзка със сървъра на PostgreSQL.
  2. Ако е настроено преминаване на удостоверяване и потребителят не е намерен във файла userslist.txt, PgBouncer търси auth_query. Той се свързва с PostgreSQL като предварително дефиниран потребител (чиято парола трябва да присъства във файла userslist.txt) и изпълнява заявката за удостоверяване, за да намери паролата на потребителя и я съпоставя с предоставената стойност.

След като удостоверяването е успешно:

  1. PgBouncer проверява за кеширана връзка със същата комбинация потребителско име+база данни.
  2. Ако бъде намерена кеширана връзка, тя връща връзката към клиента.
  3. Ако не бъде намерена кеширана връзка, тя създава нова връзка, при условие че създаването на нова връзка не:
    • Увеличете броя на връзките до> pool_size
    • Увеличете броя на връзките от клиента до> max_client_connections
    • Увеличете броя на връзките към базата данни до> max_db_connections
    • Увеличете броя на връзките от потребителя до> max_user_connections
  4. Всички тези стойности могат да бъдат дефинирани в настройките на PgBouncer.
  5. Ако създаването на нова връзка би нарушило някоя от настройките, PgBouncer поставя връзката на опашка, докато може да бъде създадена нова, освен ако нарушава ограничението max_client_connections.
    Забележка – Времето на стъпките след удостоверяване се различава леко в зависимост от режима на PgBouncer. В режим на обединяване на транзакции или изрази, стъпките след удостоверяване се изпълняват само когато клиентът започне да изпълнява транзакция/изявление. По-долу обсъждаме повече за режимите на обединяване.
  6. Ако нарушава ограничението max_client_connections, прекратява връзката.

Въз основа на обединяването режим, PgBouncer чака възможност да върне връзката обратно към базата данни:

  • В режим на обединяване на сесии връзката се връща към пула само когато клиент затвори сесията.
  • В режим на обединяване на транзакции, връзка се връща към пула само когато клиентът завърши транзакция (обикновено се изпълнява или връщане назад, или комит). В резултат на това базирани на сесия функции не се поддържат в този режим. Няма гаранция, че две транзакции, извършени на една и съща клиентска PgBouncer връзка, ще се изпълняват в една и съща PgBouncer сървърна връзка.
  • В режим на обединяване на оператори, връзка се връща към пула веднага щом операторът бъде изпълнен. Тук автоматичното завършване е винаги включено.

Преди да върне връзката обратно към базата данни, PgBouncer изпълнява заявка за нулиране, за да я лиши от цялата информация за сесията – това прави безопасно споделянето на връзки между клиенти. Възможно е да конфигурирате тази заявка въз основа на нуждите на приложението.

Режимът на обединяване на транзакции се използва най-често, въпреки че режимът на обединяване на сесии може да бъде полезен за определени работни натоварвания. Можете да прочетете повече за PgBouncer на тяхната Wiki страница.

PostgreSQL Connection Pooling:Част 2 – PgBouncerClick To Tweet

Защо да изберете PgBouncer?

Има много причини PgBouncer да е най-популярният избор, когато става въпрос за обединяване на връзки в PostgreSQL. Ето някои от най-добрите функции и плюсове, които PgBouncer предлага:

  • Режими на обединяване – Като дава на потребителите правомощието да решават кога връзката да се върне към пула, PgBouncer е в състояние да поддържа широк спектър от случаи на употреба. И тъй като тази настройка е на ниво пул, можете да използвате режим на транзакция (по-добра производителност) за обичайните си връзки към база данни и режим на сесия само когато имате нужда от функции като подготвени оператори!
  • Лесна настройка и използване – PgBouncer е един от най-лесните PostgreSQL пулери за свързване за настройка от кутията и също така не изисква промени в кода от страна на клиента.
  • Пропускане на удостоверяване – PgBouncer е един от малкото пулери за свързване на „междууер“, които могат сигурно да удостоверяват автентичността на потребител, без да имат достъп до техните пароли (в обикновен текст или криптирана форма). Това прави PgBouncer по-сигурен и много по-лесен за поддръжка – не е необходимо да актуализирате PgBouncer всеки път, когато потребител актуализира паролата си.
  • Лека – Това е един процес и всички команди от клиента и отговори от сървъра преминават през PgBouncer без никаква обработка. Така че не е необходимо да „вижда“ цялото съдържание наведнъж и следователно поддържа много малък отпечатък на паметта.
  • Мащабируемост и производителност – Както ще обсъдим по-подробно в последната част от нашата поредица, PgBouncer може значително да подобри транзакциите в секунда, които вашият PostgreSQL сървър може да поддържа, и се мащабира много добре за много голям брой клиенти.

Какво не прави PgBouncer?

PgBouncer, макар и страхотен пул за свързване, не поддържа автоматично балансиране на натоварването или висока наличност. Той препоръчва използването на други общи инструменти на Linux, като HAProxy, за създаване на архитектура, която поддържа тези функции.

Разгледайте примерната архитектура на PostgreSQL за четене с балансирано натоварване по-долу:

Забележка – Главният възел (че всички тези подчинени ще се копира от) не е показано на диаграмата.

Как да настроите PgBouncer

Ако имате внедряване на ScaleGrid PostgreSQL, можете да настроите PgBouncer с няколко щраквания. Отидете на изгледа с подробности за вашия PostgreSQL клъстер и щракнете върху иконата PgBouncer. След като изберете „Enable PgBouncer“, ще ви бъдат представени опции за конфигурация, за да персонализирате режима на обединяване и размера на пула – можете да приемете настройките по подразбиране (не се притеснявайте, можете да ги промените по всяко време без прекъсване) и щракнете върху Активиране!

И това е всичко! Готови сте.

Ако имате внедряване без ScaleGrid, PgBouncer се разпространява като част от хранилището на PostgreSQL и може да бъде инсталиран с помощта на съответните мениджъри на пакети. За по-подробни инструкции или за изграждане от източник, можете да следвате инструкциите от техния блог.

Веднъж инсталиран, PgBouncer изисква от вас само да настроите няколко конфигурационни параметъра, за да стартирате и работите:

  1. Списък с (потребителско име, криптирана парола с md5) за удостоверяване на клиенти или настройка за преминаване на удостоверяване за по-сигурно внедряване.
  2. Интерфейси/IP:портове за слушане за входящи връзки.
  3. Дефиниции на пул. „Пул“ е име, което клиентите използват като име на база данни, когато се свързват с PgBouncer – може да бъде съпоставено с пълен низ за връзка (хост, порт, dbname и потребител). Най-простата дефиниция е от формата:
    * = host=
    Това ще създаде динамични пулове за всяка комбинация dbname+user и ще се свърже с дефинирания хост, използвайки порта, dbname и потребителското име, предоставени от потребителя.

И това е всичко! Можете да работите много бързо с PgBouncer. Има обаче много повече настройки, които трябва да бъдат настроени за всяка производствена дистрибуция – те са извън обхвата на тази публикация в блога, но можете да прочетете повече за тях в този преглед на конфигурациите на PgBouncer.

PgBouncer обаче не е единствената опция за обединяване на PostgreSQL връзки – в следващата ни публикация ще обсъдим Pgpool-II, който вероятно е основният конкурент на PgBouncer. Очаквайте нашата четвърта публикация от тази серия от четири части, където сравняваме PgBouncer срещу Pgpool-II.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получа min/max от две цели числа в Postgres/SQL?

  2. Колко записа мога да съхранявам в 5 MB PostgreSQL на Heroku?

  3. Как да проверите дали таблица съществува в дадена схема

  4. Формулата на коефициента на корелация на Пиърсън в SQL

  5. Как да надстроя PostgreSQL от версия 9.6 до версия 10.1 без загуба на данни?