Подготовка хост-системы

Установку серверного решения IVA One должен выполнять технический специалист, обладающий соответствующими знаниями и навыками.

Требования к техническому специалисту
  • общее понимание о работе IPMI, iLO, DRAC или аналогичных технологий для удаленного управления сервером

  • общие навыки создания и управления виртуальными машинами, настройки CPU, памяти, подключения к LAN

  • общие навыки загрузки с виртуального CD-ROM (ISO-образа)

  • общие навыки создания загрузочного диска / флеш-накопителя

  • знание параметров сетевых настроек: IP-адрес, маска сети, шлюз

  • удаленный доступ к консоли управления с помощью SSH

  • общее понимание принципов IP-маршрутизации

Предварительная настройка и последующая установка IVA One выполняется из командной строки (консоли). В системе используется консоль Linux с оболочкой bash

Перед настройкой хост-системы необходимо добавить пользователя ОС в группу sudo

Настройка синхронизации времени с NTP-сервером

Обязательно для выполнения на всех серверах с IVA One и IVA ID

Корректное системное время критично для работы компонентов, использующих TLS, JWT или кластерные механизмы.
Настройка синхронизации времени исключает ошибки из-за рассинхронизации часов между узлами.

Для настройки синхронизации времени с NTP-серверов необходимо:

  1. установить systemd-timesyncd, выполнив команду:

    sudo apt install systemd-timesyncd -y
  2. запустить службу синхронизации времени с помощью команды:

    sudo systemctl enable systemd-timesyncd --now
  3. проверить, что синхронизация включена, с помощью команды:

    timedatectl status

    Пример вывода команды:

    System clock synchronized: yes
    NTP service: active
    RTC in local TZ: no
  4. настроить собственный NTP-сервер, отредактировав файл /etc/systemd/timesyncd.conf:

    • открыть файл /etc/systemd/timesyncd.conf, выполнив команду:

      sudo nano /etc/systemd/timesyncd.conf
    • внести следующие изменения:

      [Time]
      NTP=<NTP_SERVER>
      FallbackNTP=ntp.ubuntu.com

      где <NTP_SERVER> — имя доступного NTP-сервера (допускается указать публичный NTP-сервер: 0.ru.pool.ntp.org, 1.ru.pool.ntp.org и др.)

    • сохранить изменения и закрыть файл

  5. применить изменения, выполнив команду:

    sudo systemctl restart systemd-timesyncd

Настройка Transparent Huge Pages (THP)

Обязательно для: PostgreSQL, OpenSearch, серверов с IVA ID

По умолчанию в операционных системах Linux-семейства включена функция Transparent Huge Pages (THP), которая позволяет ядру объединять маленькие страницы памяти в более крупные для повышения производительности.
Для баз данных, работающих в оперативной памяти, это может приводить к непредсказуемым паузам при фоновой дефрагментации памяти. Данный процесс критичен в системах чувствительных к задержкам.

Рекомендуется установить режим madvise, отключающий использование THP по умолчанию, но сохраняющий возможность включить использование THP для приложений, которые запрашивают данную функцию.

Для настройки THP необходимо:

  1. создать файл systemd юнита, выполнив команду:

    sudo tee /etc/systemd/system/disable-thp.service > /dev/null <<EOF
    [Unit]
    Description=Set Transparent Huge Pages to madvise
    After=network.target
    
    [Service]
    Type=oneshot
    ExecStart=/bin/sh -c "echo madvise > /sys/kernel/mm/transparent_hugepage/enabled"
    ExecStart=/bin/sh -c "echo madvise > /sys/kernel/mm/transparent_hugepage/defrag"
    RemainAfterExit=true
    
    [Install]
    WantedBy=multi-user.target
    EOF
  2. применить изменения, выполнив следующие команды:

    sudo systemctl daemon-reexec
    sudo systemctl daemon-reload
    sudo systemctl enable --now disable-thp

Увеличение лимита на количество mmap-областей

Обязательно при использовании OpenSearch

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

По умолчанию в большинстве дистрибутивов Linux данное значение является слишком низким

Для увеличения лимита, необходимо выполнить следующие действия:

  1. настроить значения ядра операционной системы, выполнив команды:

    # cоздание файла изменения параметра ядра
    sudo tee -a /etc/sysctl.conf > /dev/null <<EOF
    vm.max_map_count=262144
    EOF
  2. применить изменения с помощью команды:

    sudo sysctl -p
  3. выполнить проверку:

    sudo cat /proc/sys/vm/max_map_count

    Пример вывода:

    262144

Увеличение лимита открытых файлов

Обязательно при использовании OpenSearch

Рекомендуется при использовании PostgreSQL, MinIO

Лимит ulimit -n определяет максимальное количество открытых файловых дескрипторов, включая файлы, сетевые соединения и сокеты, которые может использовать процесс.
Увеличение этого значения до 65536 необходимо для стабильной работы высоконагруженных сервисов, чтобы избежать ошибок типа too many open files при большом числе одновременных соединений или операций с файлами.

Для увеличения лимита необходимо выполнить следующие действия:

  1. настроить значения ядра операционной системы:

    sudo tee -a /etc/sysctl.conf > /dev/null <<EOF
    fs.file-max = 65536
    EOF
  2. применить изменения, выполнив команду:

    sudo sysctl -p
  3. проверить лимит с помощью команды:

    sudo cat /proc/sys/fs/file-max

Отключение Swapping

Обязательно для PostgreSQL, OpenSearch, серверов с IVA ID, DiskStorage

Рекомендуется для MinIO

Valkey — это высокопроизводительная СУБД типа key-value, хранящая данные в оперативной памяти, что обеспечивает очень высокую скорость доступа и обработки.
Сброс данных СУБД на дисковый swap-раздел существенно снижает производительность и вызывает высокие задержки доступа к данным.

Для исключения снижения производительности необходимо отключить swap-раздел, либо минимизировать его использование.

Порядок выполняемых действия:

  1. проверить используемые swap-разделы с помощью команды:

    sudo cat /proc/swaps

    Пример вывода:

    Filename                                Type            Size            Used            Priority
    /swap.img                               file            1971196         0               -2
    Название тома в конкретном случае может отличаться
  2. отключить использование swap-разделов, выполнив команду:

    sudo swapoff -a
  3. для постоянного отключения swap-разделов необходимо отредактировать файл /etc/fstab, закомментировав соответствующие строки:

    sudo nano /etc/fstab

    Пример fstab:

    #/swap.img      none    swap    sw      0       0
    Название тома в конкретном случае может отличаться
  4. если отключение swap-разделов невозможно, то необходимо настроить их минимальное использование, задав параметру ядра swappiness значение 1:

    sudo tee sysctl -w vm.swappiness=1
  5. для сохранения заданного значения после перезагрузки ОС необходимо отредактировать файл /etc/sysctl.d/iva.conf:

    sudo tee -a /etc/sysctl.conf > /dev/null <<EOF
    vm.swappiness=1
    EOF
  6. применить изменения с помощью команды:

    sudo sysctl -p
  7. выполнить проверку лимита с помощью команды:

    sudo cat /proc/sys/vm/swappiness
Для стабильной работы системы рекомендуется отключать swap-раздел

Размер очереди TCP-соединений (TCP Backlog)

Обязательно для выполнения на всех серверах с IVA One и IVA ID

Если к Valkey одновременно пытается подключиться большое количество клиентов, стандартный лимит ядра на очередь входящих соединений (backlog) может быть превышен.
Это приведет к тому, что новые клиенты будут получать ошибки Connection refused.

Для увеличения максимального размера очереди необходимо увеличить значение net.core.somaxconn.

Рекомендованное значение 65535

Порядок выполняемых действия:

  1. настроить значения ядра операционной системы:

    sudo tee -a /etc/sysctl.conf > /dev/null <<EOF
    net.core.somaxconn = 65536
    EOF
  2. применить изменения с помощью команды:

    sudo sysctl -p
  3. выполнить проверка лимита с помощью команды:

    sudo cat /proc/sys/net/core/somaxconn
    Необходимо убедиться, что в конфигурационном файле Valkey параметр tcp-backlog установлен в высокое значение, но не превышающее значение net.core.somaxconn, установленное на хосте

В сетях с высокой задержкой (более 50 мс) для повышения производительности системы рекомендуется увеличить размеры TCP-буферов.

Для этого необходимо:

  1. настроить значения ядра операционной системы:

    sudo tee -a /etc/sysctl.conf > /dev/null <<EOF
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    net.ipv4.tcp_rmem = 4096 87380 16777216
    net.ipv4.tcp_wmem = 4096 65536 16777216
    EOF
  2. применить изменения, выполнив команду:

    sudo sysctl -p
    Во время эксплуатации может потребоваться подстройка под конкретный профиль нагрузки

Управление выделением памяти (Memory Overcommit)

Обязательно при использовании Valkey

Valkey использует системные вызовы fork() для создания фоновых процессов, которые сохраняют данные на диск (команды BGSAVE и BGREWRITEAOF).
При вызове fork() ядро ОС должно убедиться, что в системе достаточно памяти для дочернего процесса. По умолчанию, ядро может отказать в выделении памяти (совокупный объем памяти, выделенный родительскому и дочернему процессам, превышает доступный объем RAM), даже если реально используется меньшее количество памяти благодаря механизму Copy-on-Write, что приведет к сбою сохранения данных.

Для исключения такой ситуации требуется разрешить ядру ОС позволять контролировать выделение памяти, задав параметру vm.overcommit_memory значение 1.

Порядок выполняемых действий:

  1. настроить значения ядра операционной системы:

    sudo tee -a /etc/sysctl.conf > /dev/null <<EOF
    vm.overcommit_memory = 1
    EOF
  2. применить изменения, выполнив команду:

    sudo sysctl -p
  3. выполнить проверку с помощью команды:

    sudo cat /proc/sys/vm/overcommit_memory

Конфигурация разделяемой памяти (Shared Memory)

Обязательно для PostgreSQL, Valkey, OpenSearch, серверов с IVA ID, DiskStorage

СУБД PostgreSQL использует большой сегмент разделяемой памяти (shared memory) для кэширования данных (shared_buffers), межпроцессорного взаимодействия и других внутренних задач.

Если в ОС лимиты ядра на размер или количество сегментов разделяемой памяти слишком низкие, то СУБД PostgreSQL не сможет запуститься, выдав ошибку о невозможности выделить память

Для эффективной работы СУБД PostgreSQL необходимо увеличить лимиты ядра для разделяемой памяти shmmax (максимальный размер одного сегмента) и shmall (общий размер всех сегментов в страницах):

  • kernel.shmmax — значение (в байтах) должно быть больше, чем значение настройки shared_buffers в СУБД PostgreSQL

    Рекомендуется устанавливать значение, равное половине объема RAM хоста
  • kernel.shmall — значение должно быть достаточно большим

    Рекомендованное значение shmmax / PAGE_SIZE

Пример расчета:

sudo free -b
               total        used        free      shared  buff/cache   available
Mem:     16768593920   506261504 16267616256      671744   267583488 16262332416

16768593920/2 = 8384296960

sudo getconf PAGE_SIZE
4096

8384296960/4096 = 2046947

Настройка значений ядра ОС:

sudo tee -a /etc/sysctl.conf > /dev/null <<EOF
kernel.shmmax = 8384296960
kernel.shmall = 2046947
EOF

Применение изменений:

sudo sysctl -p

Выполнение проверки:

sudo ipcs -lmb