Задание 1: Настройка Pangolin Pooler в обычном режиме
После выполнения данной лабораторной работы вы научитесь:
- настраивать Pangolin Pooler для работы в обычном режиме;
- создавать и управлять списком пользователей для аутентификации;
- запускать и проверять работу пулера соединений;
- использовать консоль управления для мониторинга и администрирования.
Изучение конфигурационных файлов
-
Получите список конфигурационных файлов Pangolin Pooler:
[student@srv1 ~]$ rpm -qc pangolin-pooler/etc/pangolin-pooler/pangolin-pooler.ini/etc/pangolin-pooler/userlist.txt/usr/lib/systemd/system/pangolin-pooler.service -
Проверьте права доступа к конфигурационным файлам:
[student@srv1 ~]$ sudo -u postgres ls -l /etc/pangolin-pooler/итого 8-rw------- 1 postgres postgres 1272 апр 27 09:01 pangolin-pooler.ini-rw------- 1 postgres postgres 147 апр 27 09:01 userlist.txt -
Просмотрите текущую конфигурацию:
[student@srv1 ~]$ sudo -u postgres egrep -v '^($|#|;)' /etc/pangolin-pooler/pangolin-pooler.ini[databases]* = host=<IP-Address1> port=5433 auth_port=5544 auth_pool_size=1[pgbouncer]listen_port = 6544listen_addr = *auth_type = scram-sha-256auth_file = /etc/pangolin-pooler/userlist.txtauth_proxy = offauth_failure_threshold = 3auth_inactivity_period = 60auth_last_size = 10log_audit = 1logfile = /pgerrorlogs/srv2/pangolin-pooler/pangolin-pooler.logpidfile = /var/run/pangolin-pooler/pangolin-pooler.pidadmin_users = pgbouncermax_client_conn = 200pool_mode = transactionmin_pool_size = 0default_pool_size = 105max_db_connections = 105max_user_connections = 105ignore_startup_parameters = extra_float_digitsunix_socket_dir =ndc_suspending_timeout = 0client_tls_crl_file =server_tls_crl_file =server_tls_protocols = secureserver_tls_ciphers = secureserver_tls_sslmode = verify-fullclient_tls_protocols = secureclient_tls_ciphers = secureclient_tls_sslmode = preferserver_tls_cert_file = /pg_ssl/pgbouncer.crtserver_tls_key_file = /pg_ssl/pgbouncer.keyclient_tls_cert_file = /pg_ssl/server.crtclient_tls_key_file = /pg_ssl/server.keyserver_tls_ca_file = /pg_ssl/root.crtclient_tls_ca_file = /pg_ssl/root.crtserver_tls_ca_path = /pg_ssl/root_dirclient_tls_ca_path = /pg_ssl/root_dir
Настройка конфигурационного файла
-
Выключите параметр сквозной аутентификации:
[student@srv1 ~]$ sudo vi /etc/pangolin-pooler/pangolin-pooler.iniauth_proxy = off -
В файле
/etc/pangolin-manager/postgres.ymlпоменяйте вход для пользователяstudentнаSCRAM-SHA-256:[student@srv1 ~]$ sudo vi /etc/pangolin-manager/postgres.ymlpg_hba:- hostssl all student 0.0.0.0/0 scram-sha-256 -
Перечитайте сервис:
[student@srv1 ~]$ sudo systemctl reload pangolin-manager.service -
Добавьте пароль для пользователя
student:[student@sv1 ~]$ sudo su - postgres[postgres@sv1 ~]$ psqlpsql (15.15)SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)Type "help" for help.postgres=# \password studentEnter new password for user "student": <password>Enter it again: <password>
Создание списка пользователей
-
Проверьте тип аутентификации в СУБД:
student=> SHOW password_encryption;password_encryption---------------------scram-sha-256(1 row) -
Добавьте пользователя student в файл аутентификации:
[student@srv1 ~]$ psql "user=postgres password=<password>" -AtF ' ' -c \"SELECT '\"' || usename || '\"', '\"' || passwd || '\"' FROM pg_shadow WHERE usename = 'student'" \| sudo -u postgres tee -a /etc/pangolin-pooler/userlist.txt"student" "SCRAM-SHA-256$4096:yneziuqF1mX965PglPl53A==$fnslspmqzw14Sqi8GwfATTFtv1lZD7UF3vy/5AS2anA=:37uO5da3tteyqsiTzEGz5XiKXNNEhISqbLOa7/BhGgM=" -
Проверьте содержимое файла пользователей:
[student@srv1 ~]$ sudo -u postgres cat /etc/pangolin-pooler/userlist.txt"pgbouncer" "SCRAM-SHA-256$4096:6dSZcvwPBkjQxyYISRYwtg==$mhVRh0ny/2d9KTIqq3Kef19eRihnktgkVBh16XACzTE=:INzsKgwAIYvJVr5DxZ15FZGNw7uYRUAHPGtstbJVU7E=""student" "SCRAM-SHA-256$4096:yneziuqF1mX965PglPl53A==$fnslspmqzw14Sqi8GwfATTFtv1lZD7UF3vy/5AS2anA=:37uO5da3tteyqsiTzEGz5XiKXNNEhISqbLOa7/BhGgM="
Проверка работы пулера
-
Перезапустите пулер и проверьте его статус:
[student@srv1 ~]$ sudo systemctl restart pangolin-pooler.service[student@srv1 ~]$ sudo systemctl status pangolin-pooler.serviceВывод команды:
● pangolin-pooler.service - Pangolin Pooler connection pooling for PostgreSQLLoaded: loaded (/usr/lib/systemd/system/pangolin-pooler.service; enabled; preset: disabled)Active: active (running) since Wed 2026-09-09 12:19:35 UTC; 1 day 1h agoProcess: 276292 ExecStartPre=/bin/mkdir -p /var/run/pangolin-pooler (code=exited, status=0/SUCCESS)Process: 276294 ExecStartPre=/bin/chown -R postgres:postgres /var/run/pangolin-pooler (code=exited, status=0/SUCCESS)Process: 276295 ExecStart=/opt/pangolin-pooler/bin/pangolin-pooler -d ${POOLERCONF} (code=exited, status=0/SUCCESS)Process: 276299 ExecStartPost=/bin/sleep 1 (code=exited, status=0/SUCCESS)Main PID: 276297 (pangolin-pooler)Tasks: 2 (limit: 22804)Memory: 7.6M (peak: 9.6M)CPU: 8.303sCGroup: /system.slice/pangolin-pooler.service└─276297 /opt/pangolin-pooler/bin/pangolin-pooler -d /etc/pangolin-pooler/pangolin-pooler.iniSep 09 12:19:34 srv1 systemd[1]: Starting Pangolin Pooler connection pooling for PostgreSQL...Sep 09 12:19:35 srv1 systemd[1]: Started Pangolin Pooler connection pooling for PostgreSQL. -
Проверьте прослушиваемые порты:
[student@srv1 ~]$ sudo ss -tlnp | grep poolLISTEN 0 128 0.0.0.0:6544 0.0.0.0:* users:(("pangolin-pooler",pid=276297,fd=10))LISTEN 0 128 [::]:6544 [::]:* users:(("pangolin-pooler",pid=276297,fd=11)) -
Просмотрите журнал работы:
[student@srv1 ~]$ sudo tail /pgerrorlogs/srv1/pangolin-pooler/pangolin-pooler.log2026-09-10 14:22:09.490 UTC [288234] LOG listening on 0.0.0.0:65442026-09-10 14:22:09.490 UTC [288234] LOG listening on [::]:65442026-09-10 14:22:09.490 UTC [288234] LOG process up: PgBouncer 1.24.0, libevent 2.1.12-stable (epoll), adns: evdns2, tls: OpenSSL 3.5.5 27 Jan 2026
Проверка работы пула соединений
-
Подключитесь к пулеру, указав после опции
-pномер порта, прослушиваемый пулером:[student@srv1 ~]$ psql -p 6544 -h srv1 -
Проверьте PID серверного процесса:
student=> SELECT pg_backend_pid();pg_backend_pid----------------7359(1 row) -
Выйдите из сеанса и подключитесь снова, проверьте PID:
student=> \q[student@srv1 ~]$ psql -p 6544 -h srv1student=> SELECT pg_backend_pid();Ожидаемый результат: PID должен остаться тем же.
-
Проверьте состояние серверных процессов:
[student@srv1 ~]$ ps f -C postgresPID TTY STAT TIME COMMAND7597 ? S 0:00 /usr/pangolin-6.7/bin/postgres -D /pgdata/06/data/ --config-file=/pgdata/06/data/postgresql.conf --listen_addresses=0.0.0.0 --port=5433 --cluster_name=Pobeda --wal_level7600 ? Ss 0:00 \_ postgres: Pobeda: logger7601 ? Ss 0:00 \_ postgres: Pobeda: checkpointer7602 ? Ss 0:00 \_ postgres: Pobeda: background writer7603 ? Ss 0:00 \_ postgres: Pobeda: startup recovering 0000000B00000000000000217604 ? Ss 0:00 \_ postgres: Pobeda: idle sessions terminator7606 ? Ss 0:00 \_ postgres: Pobeda: integrity check launcher7607 ? Ss 0:00 \_ postgres: Pobeda: license checker7608 ? Ss 0:01 \_ postgres: Pobeda: authproc8308 ? S 0:00 \_ postgres: Pobeda: authworker postgres <IP-Address1>(42148)7609 ? Ss 0:00 \_ postgres: Pobeda: password policy cache7618 ? Ss 0:00 \_ postgres: Pobeda: patroni postgres 127.0.0.1(46858) idle7622 ? Ss 0:02 \_ postgres: Pobeda: walreceiver streaming 0/210000707359 ? Ss 0:00 \_ postgres: Pobeda: student student <IP-Address1>(53396) idle
Настройка и использование консоли управления
-
Добавьте административного пользователя:
[student@srv1 ~]$ sudo -u postgres sed -i -e 's/^.*admin_users =.*$/admin_users = student/' /etc/pangolin-pooler/pangolin-pooler.ini -
Перезапустите сервис:
[student@srv1 ~]$ sudo systemctl restart pangolin-pooler.service -
Подключитесь к консоли управления через административного пользователя:
[student@srv1 ~]$ psql -p 6544 -d pgbouncer -
Проверьте состояние пулов:
student=> SHOW POOLS \gx-[ RECORD 1 ]---------+----------database | pgbounceruser | pgbouncercl_active | 1cl_waiting | 0cl_active_cancel_req | 0cl_waiting_cancel_req | 0... -
Просмотрите статистику:
student=> SHOW STATS \gx-[ RECORD 1 ]-----------------+----------database | pgbouncertotal_server_assignment_count | 0total_xact_count | 1total_query_count | 1...
Подведем итоги
Вопрос 1
Вопрос 1: Посмотрите на вывод команды:
[student@srv1 ~]$ sudo systemctl status pangolin-pooler
○ pangolin-pooler.service - Pangolin Pooler connection pooling for PostgreSQL
Loaded: loaded (/usr/lib/systemd/system/pangolin-pooler.service; disabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: inactive (dead)
Выберите команды, с помощью которых systemd запустит сервис pangolin-pooler немедленно: