Перейти к основному содержимому

Задание 1: Настройка Pangolin Pooler в обычном режиме

После выполнения данной лабораторной работы вы научитесь:

  • настраивать Pangolin Pooler для работы в обычном режиме;
  • создавать и управлять списком пользователей для аутентификации;
  • запускать и проверять работу пулера соединений;
  • использовать консоль управления для мониторинга и администрирования.

Изучение конфигурационных файлов​

  1. Получите список конфигурационных файлов 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
  2. Проверьте права доступа к конфигурационным файлам:

    [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
  3. Просмотрите текущую конфигурацию:

    [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 = 6544
    listen_addr = *
    auth_type = scram-sha-256
    auth_file = /etc/pangolin-pooler/userlist.txt
    auth_proxy = off
    auth_failure_threshold = 3
    auth_inactivity_period = 60
    auth_last_size = 10
    log_audit = 1
    logfile = /pgerrorlogs/srv2/pangolin-pooler/pangolin-pooler.log
    pidfile = /var/run/pangolin-pooler/pangolin-pooler.pid
    admin_users = pgbouncer
    max_client_conn = 200
    pool_mode = transaction
    min_pool_size = 0
    default_pool_size = 105
    max_db_connections = 105
    max_user_connections = 105
    ignore_startup_parameters = extra_float_digits
    unix_socket_dir =
    ndc_suspending_timeout = 0

    client_tls_crl_file =
    server_tls_crl_file =
    server_tls_protocols = secure
    server_tls_ciphers = secure
    server_tls_sslmode = verify-full
    client_tls_protocols = secure
    client_tls_ciphers = secure
    client_tls_sslmode = prefer
    server_tls_cert_file = /pg_ssl/pgbouncer.crt
    server_tls_key_file = /pg_ssl/pgbouncer.key
    client_tls_cert_file = /pg_ssl/server.crt
    client_tls_key_file = /pg_ssl/server.key
    server_tls_ca_file = /pg_ssl/root.crt
    client_tls_ca_file = /pg_ssl/root.crt
    server_tls_ca_path = /pg_ssl/root_dir
    client_tls_ca_path = /pg_ssl/root_dir

Настройка конфигурационного файла​

  1. Выключите параметр сквозной аутентификации:

    [student@srv1 ~]$ sudo vi /etc/pangolin-pooler/pangolin-pooler.ini
    auth_proxy = off
  2. В файле /etc/pangolin-manager/postgres.yml поменяйте вход для пользователя student на SCRAM-SHA-256:

    [student@srv1 ~]$ sudo vi /etc/pangolin-manager/postgres.yml
    pg_hba:
    - hostssl all student 0.0.0.0/0 scram-sha-256
  3. Перечитайте сервис:

    [student@srv1 ~]$ sudo systemctl reload pangolin-manager.service
  4. Добавьте пароль для пользователя student:

    [student@sv1 ~]$ sudo su - postgres
    [postgres@sv1 ~]$ psql
    psql (15.15)
    SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
    Type "help" for help.
    postgres=# \password student
    Enter new password for user "student": <password>
    Enter it again: <password>

Создание списка пользователей​

  1. Проверьте тип аутентификации в СУБД:

    student=> SHOW password_encryption;
    password_encryption
    ---------------------
    scram-sha-256
    (1 row)
  2. Добавьте пользователя 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="
  3. Проверьте содержимое файла пользователей:

    [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="

Проверка работы пулера​

  1. Перезапустите пулер и проверьте его статус:

    [student@srv1 ~]$ sudo systemctl restart pangolin-pooler.service
    [student@srv1 ~]$ sudo systemctl status pangolin-pooler.service
    Вывод команды:

    ● pangolin-pooler.service - Pangolin Pooler connection pooling for PostgreSQL
    Loaded: 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 ago
    Process: 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.303s
    CGroup: /system.slice/pangolin-pooler.service
    └─276297 /opt/pangolin-pooler/bin/pangolin-pooler -d /etc/pangolin-pooler/pangolin-pooler.ini

    Sep 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.
  2. Проверьте прослушиваемые порты:

    [student@srv1 ~]$ sudo ss -tlnp | grep pool
    LISTEN 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))
  3. Просмотрите журнал работы:

    [student@srv1 ~]$ sudo tail /pgerrorlogs/srv1/pangolin-pooler/pangolin-pooler.log
    2026-09-10 14:22:09.490 UTC [288234] LOG listening on 0.0.0.0:6544
    2026-09-10 14:22:09.490 UTC [288234] LOG listening on [::]:6544
    2026-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

Проверка работы пула соединений​

  1. Подключитесь к пулеру, указав после опции -p номер порта, прослушиваемый пулером:

    [student@srv1 ~]$ psql -p 6544 -h srv1
  2. Проверьте PID серверного процесса:

    student=> SELECT pg_backend_pid();
    pg_backend_pid
    ----------------
    7359
    (1 row)
  3. Выйдите из сеанса и подключитесь снова, проверьте PID:

    student=> \q
    [student@srv1 ~]$ psql -p 6544 -h srv1
    student=> SELECT pg_backend_pid();

    Ожидаемый результат: PID должен остаться тем же.

  4. Проверьте состояние серверных процессов:

    [student@srv1 ~]$ ps f -C postgres
    PID TTY STAT TIME COMMAND
    7597 ? 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_level
    7600 ? Ss 0:00 \_ postgres: Pobeda: logger
    7601 ? Ss 0:00 \_ postgres: Pobeda: checkpointer
    7602 ? Ss 0:00 \_ postgres: Pobeda: background writer
    7603 ? Ss 0:00 \_ postgres: Pobeda: startup recovering 0000000B0000000000000021
    7604 ? Ss 0:00 \_ postgres: Pobeda: idle sessions terminator
    7606 ? Ss 0:00 \_ postgres: Pobeda: integrity check launcher
    7607 ? Ss 0:00 \_ postgres: Pobeda: license checker
    7608 ? Ss 0:01 \_ postgres: Pobeda: authproc
    8308 ? S 0:00 \_ postgres: Pobeda: authworker postgres <IP-Address1>(42148)
    7609 ? Ss 0:00 \_ postgres: Pobeda: password policy cache
    7618 ? Ss 0:00 \_ postgres: Pobeda: patroni postgres 127.0.0.1(46858) idle
    7622 ? Ss 0:02 \_ postgres: Pobeda: walreceiver streaming 0/21000070
    7359 ? Ss 0:00 \_ postgres: Pobeda: student student <IP-Address1>(53396) idle

Настройка и использование консоли управления​

  1. Добавьте административного пользователя:

    [student@srv1 ~]$ sudo -u postgres sed -i -e 's/^.*admin_users =.*$/admin_users = student/' /etc/pangolin-pooler/pangolin-pooler.ini
  2. Перезапустите сервис:

    [student@srv1 ~]$ sudo systemctl restart pangolin-pooler.service
  3. Подключитесь к консоли управления через административного пользователя:

    [student@srv1 ~]$ psql -p 6544 -d pgbouncer
  4. Проверьте состояние пулов:

    student=> SHOW POOLS \gx
    -[ RECORD 1 ]---------+----------
    database | pgbouncer
    user | pgbouncer
    cl_active | 1
    cl_waiting | 0
    cl_active_cancel_req | 0
    cl_waiting_cancel_req | 0
    ...
  5. Просмотрите статистику:

    student=> SHOW STATS \gx
    -[ RECORD 1 ]-----------------+----------
    database | pgbouncer
    total_server_assignment_count | 0
    total_xact_count | 1
    total_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 немедленно: