Использование Odyssey

Odyssey — это программа, управляющая пулом соединений. ADP реализует данную функциональность с помощью PgBouncer, и для большинства профилей нагрузки pgBouncer является оптимальным выбором. Однако, если необходимо обрабатывать тысячи соединений одновременно при высокой загрузке CPU, можно рассмотреть использование Odyssey. Для этого отключите PgBouncer, как описано в статье Настройка PgBouncer, и установите Odyssey, следуя инструкциям из этой статьи.

Для использования Odyssey выполните шаги, описанные ниже:

  1. Установите 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
  2. Отредактируйте конфигурационный файл 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, если он используется в системе.

  3. Запустите Odyssey:

    $ sudo systemctl start adpg16-odyssey.service

    Также можно создать символьную ссылку на файл юнита сервиса, чтобы он автоматически запускался при загрузке системы:

    $ sudo systemctl enable adpg16-odyssey.service
    Created symlink /etc/systemd/system/multi-user.target.wants/adpg16-odyssey.service → /lib/systemd/system/adpg16-odyssey.service.
  4. Проверьте состояние сервиса Odyssey:

    $ sudo systemctl status adpg16-odyssey.service
     adpg16-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
  5. Протестируйте подключение к 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 выполнился успешно.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней