Использование Odyssey
Odyssey — это программа, управляющая пулом соединений. ADP реализует данную функциональность с помощью PgBouncer, и для большинства профилей нагрузки pgBouncer является оптимальным выбором. Однако, если необходимо обрабатывать тысячи соединений одновременно при высокой загрузке CPU, можно рассмотреть использование Odyssey. Для этого отключите PgBouncer, как описано в статье Настройка PgBouncer, и установите Odyssey, следуя инструкциям из этой статьи.
Для использования Odyssey выполните шаги, описанные ниже:
-
Установите Odyssey. Пакет для установки Odyssey находится в репозитории ADP, поэтому вы можете установить его командой
apt install:$ sudo apt install -y adpg16-odysseyСоответствующий файл юнита systemd можно найти по пути /usr/lib/systemd/system/adpg16-odyssey.service:
$ cat /usr/lib/systemd/system/adpg16-odyssey.service[Unit] Description=Advanced multi-threaded PostgreSQL connection pooler and request router After=network.target [Service] User=odyssey Group=odyssey Type=simple ExecStart=/usr/bin/odyssey /etc/adpg16-odyssey/odyssey.conf LimitNOFILE=100000 LimitNPROC=100000 [Install] WantedBy=multi-user.target -
Отредактируйте конфигурационный файл Odyssey, расположенный по пути /etc/adpg16-odyssey/odyssey.conf, в соответствии с вашими требованиями. Для получения информации о параметрах конфигурации обратитесь к документации Odyssey. Например, для Odyssey, который установлен с ADPG на один хост, имеющий 8 CPU, в режиме пула
transaction, можно использовать следующую конфигурацию:unix_socket_dir "/tmp" unix_socket_mode "0666" log_format "%p %t %l [%i %s] (%c) %m\n" log_to_stdout yes log_session yes log_query no client_max 20000 coroutine_stack_size 24 resolvers 8 workers 8 cache_coroutine 12000 daemonize no locks_dir "/tmp/odyssey" listen { host "127.0.0.1" port 25432 backlog 10000 } storage "local" { type "local" } storage "postgres_server" { type "remote" host "127.0.0.1" port 5432 } database default { user default { authentication "none" storage "postgres_server" pool "transaction" client_fwd_error yes pool_ttl 3600 pool_size 100 min_pool_size 100 client_max 60000 # Pool settings pool_discard no pool_smart_discard no log_debug no } } database "console" { user default { authentication "none" pool "session" storage "local" } }ВАЖНО-
Порт
6432, прослушиваемый Odyssey по умолчанию, в ADP зарезервирован для сервиса Balancer. Для Odyssey рекомендуется использовать порт25432. -
Необходимо добавить порт, прослушиваемый Odyssey, в список портов-исключений firewall, если он используется в системе.
-
-
Запустите Odyssey:
$ sudo systemctl start adpg16-odyssey.serviceТакже можно создать символьную ссылку на файл юнита сервиса, чтобы он автоматически запускался при загрузке системы:
$ sudo systemctl enable adpg16-odyssey.serviceCreated symlink /etc/systemd/system/multi-user.target.wants/adpg16-odyssey.service → /lib/systemd/system/adpg16-odyssey.service.
-
Проверьте состояние сервиса Odyssey:
$ sudo systemctl status adpg16-odyssey.serviceadpg16-odyssey.service - Advanced multi-threaded PostgreSQL connection pooler and request router Loaded: loaded (/lib/systemd/system/adpg16-odyssey.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2026-02-10 07:07:02 UTC; 10s ago Main PID: 7922 (odyssey) Tasks: 20 (limit: 19050) Memory: 3.2M CPU: 14ms CGroup: /system.slice/adpg16-odyssey.service └─7922 "odyssey: version 217 listening and accepting new connections " Feb 10 07:07:10 eek-cl4-host-1 odyssey[7922]: 7922 2026-02-10T07:07:10Z info [none none] (stats) worker[0]: msg (2 allocated, 0 cached, 2 freed, 0 cache_size), coroutines (1 active, 0 cached), clients_processed: 0 Feb 10 07:07:10 eek-cl4-host-1 odyssey[7922]: 7922 2026-02-10T07:07:10Z info [none none] (stats) worker[1]: msg (2 allocated, 0 cached, 2 freed, 0 cache_size), coroutines (1 active, 0 cached), clients_processed: 0 Feb 10 07:07:10 eek-cl4-host-1 odyssey[7922]: 7922 2026-02-10T07:07:10Z info [none none] (stats) worker[2]: msg (2 allocated, 0 cached, 2 freed, 0 cache_size), coroutines (1 active, 0 cached), clients_processed: 0 Feb 10 07:07:10 eek-cl4-host-1 odyssey[7922]: 7922 2026-02-10T07:07:10Z info [none none] (stats) clients 0 Feb 10 07:07:10 eek-cl4-host-1 odyssey[7922]: 7922 2026-02-10T07:07:10Z info [none none] (stats) worker[5]: msg (2 allocated, 0 cached, 2 freed, 0 cache_size), coroutines (1 active, 0 cached), clients_processed: 0 Feb 10 07:07:10 eek-cl4-host-1 odyssey[7922]: 7922 2026-02-10T07:07:10Z info [none none] (stats) logger: msg (2 allocated, 0 cached, 29 freed, 0 cache_size), coroutines (1 active, 0 cached) Feb 10 07:07:10 eek-cl4-host-1 odyssey[7922]: 7922 2026-02-10T07:07:10Z info [none none] (stats) worker[7]: msg (2 allocated, 0 cached, 2 freed, 0 cache_size), coroutines (1 active, 0 cached), clients_processed: 0 Feb 10 07:07:10 eek-cl4-host-1 odyssey[7922]: 7922 2026-02-10T07:07:10Z info [none none] (stats) worker[3]: msg (2 allocated, 0 cached, 2 freed, 0 cache_size), coroutines (1 active, 0 cached), clients_processed: 0 Feb 10 07:07:10 eek-cl4-host-1 odyssey[7922]: 7922 2026-02-10T07:07:10Z info [none none] (stats) worker[6]: msg (2 allocated, 0 cached, 2 freed, 0 cache_size), coroutines (1 active, 0 cached), clients_processed: 0 Feb 10 07:07:10 eek-cl4-host-1 odyssey[7922]: 7922 2026-02-10T07:07:10Z info [none none] (stats) worker[4]: msg (2 allocated, 0 cached, 2 freed, 0 cache_size), coroutines (1 active, 0 cached), clients_processed: 0 -
Протестируйте подключение к ADP, запустив psql. Порт должен соответствовать значению
portиз секцииlistenконфигурации Odyssey:$ psql -U postgres -d postgres -h localhost -p 25432Выполните произвольный запрос:
SELECT relname, relfilenode FROM pg_class LIMIT 5;relname | relfilenode ---------------------+------------- pg_statistic | 2619 pg_type | 0 pg_toast_1255 | 0 pg_toast_1255_index | 0 pg_toast_1247 | 0
Запрос к базе данных postgres через Odyssey выполнился успешно.