Настройка ограничения на количество открытых файловых дескрипторов на хосте с сервером RuBackup

При увеличении количества входящих соединений (если число клиентов/медиа серверов в группировке растёт и/или на клиентах включена функция многопоточной передачи данных) сервер RuBackup может достичь предела выделенных лимитов на открытые файловые дескрипторы. Сетевые соединения также используют файловые дескрипторы.

Ограничения на количество открытых файловых дескрипторов устанавливает администратор узла, на котором запущен сервер RuBackup. Достижение этого ограничения приводит к ошибкам при выполнении резервного копирования/восстановления. Иногда сервер RuBackup может аварийно завершить работу.

1. Зависимость количества файловых дескрипторов

В зависимости от способа запуска сервера RuBackup, максимальное число (лимит) открытых дескрипторов будет разным.

Чтобы рассчитать необходимое количество файловых дескрипторов, учтите следующее:

  • В режиме простоя сервер использует около 100 файловых дескрипторов.

  • Каждый подключённый клиент РК или медиасервер добавляет по два открытых файловых дескриптора на сервере.

  • Выполнение любой задачи на стороне клиента РК при выключенном параметре network_parallelism [1] требует двух дополнительных файловых дескриптора на сервере.

  • При активированном параметре network_parallelism клиент РК открывает N соединений к серверу, где N — значение, заданное для этого параметра. В рамках каждого сетевого соединения, как правило, на стороне сервера требуется запросить информацию из базы данных, поэтому требуемое число открытых файловых дескрипторов будет N*2.

2. Расчёт необходимого количества файловых дескрипторов

Проверьте, рассчитав по формулам, число нужных вам файловых дескрипторов и убедитесь, что на узле сервера RuBackup их достаточно.

Пример 1. Общая формула для расчёта необходимого количества файловых дескрипторов:
МСКЛКЛ

где:

  • МС — число медиасерверов;

  • КЛ — число клиентов;

  • N — значение, заданное для сетевого параллелизма, параметра network_parallelism. Если сетевой параллелизм выключен, то N=2.

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

Рассмотрим пример расчёта необходимого количества файловых дескрипторов для системы, состоящей из одного сервера RuBackup, двух медиасерверов и 50 клиентов. Предположим, что сетевой параллелизм отключён.

Необходимое количество файловых дескрипторов рассчитывается следующим образом:

100 (для основного сервера)+2*2 (для медисерверов)+50*2 (для клиентов в простое)+50*2 (для клиентов с задачами одновременно) = 304

Таким образом, общее количество необходимых файловых дескрипторов составляет 304.

Стандартное значение лимита — 1024, будет достаточным.

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

Рассмотрим пример расчёта необходимого количества файловых дескрипторов для системы, состоящей из одного сервера RuBackup, двух медиасерверов и 50 клиентов. Предположим, что сетевой параллелизм включён со значением 40.

Необходимое количество файловых дескрипторов рассчитывается следующим образом:

100 (для основного сервера) + 2*2 (для медиасерверов) + 50*2 (для клиентов в простое) + 50*40 (для всех клиентов с задачами одновременно)= 2204

Таким образом, общее количество необходимых файловых дескрипторов составляет 2204.

Стандартное значение лимита в 1024 будет недостаточным для такой системы, поэтому рекомендуется увеличить лимит. Желательно установить лимит в 3000 файловых дескрипторов для запаса.

3. Способы настройки ограничения количества открытых файловых дескрипторов

Настройка ограничения количества открытых файловых дескрипторов производится в зависимости от способа запуска сервера.

3.1. Настройка ограничения количества открытых файловых дескрипторов при ручном запуске сервера

Для настройки ограничения количества открытых файловых дескрипторов при ручном запуске сервера:

  1. Остановите сервер (в случае ручного запуска сервера):

    rubackup_server stop
  2. Для проверки текущего лимита выполните:

    sudo ulimit -n

    По умолчанию ограничение количества открытых файловых дескрипторов установлено 1024 файла.

  3. Изменение лимита открытых файловых дескрипторов возможно выполнить для текущей сессии пользователя root или установить постоянное значение.

    1. Для временного изменения лимита открытых файловых дескрипторов только в текущей сессии пользователя root необходимо выполнить команду:

      ulimit -n N

      где N — это желаемое значение лимита открытых файловых дескрипторов.

      Внесённые изменения будут отменены после завершения текущей сессии.

    2. Для установки постоянного лимита открытых файловых дескрипторов:

      • отредактируйте файл /etc/security/limits.conf:

        sudo nano /etc/security/limits.conf

        и добавив строки:

        root hard nofile N
        root soft nofile N

        где N — это желаемое значение лимита открытых файловых дескрипторов;

      • сохраните изменения;

      • завершите сессию и откройте новую сессию;

      • проверьте значение лимита открытых файловых дескрипторов:

        ulimit -n
  4. Перезапустите сервер:

    rubackup_server start

3.2. Настройка ограничения количества открытых файловых дескрипторов при запуске сервисов сервера

Для настройки ограничения количества открытых файловых дескрипторов при запуске сервисов сервера:

  1. Для проверки текущего лимита выполните:

    sudo ulimit -n

    По умолчанию ограничение количества открытых файловых дескрипторов задаётся в службе systemd и стандартное значение — 1024 файла.

  2. Для изменения лимита открытых файловых дескрипторов:

    • откройте файл /etc/systemd/system/rubackup_server.service:

      sudo nano /etc/systemd/system/rubackup_server.service
    • отредактируйте секцию [Service], добавив строку:

      LimitNOFILE=N

      где N — это желаемое значение лимита открытых файловых дескрипторов;

    • сохраните изменения.

  3. Загрузите обновленный конфигурационный файл сервиса в службу systemd:

    systemctl daemon-reload
  4. Перезапустите сервис сервера RuBackup:

    systemctl stop rubackup_server
    
    systemctl start rubackup_server

1. Параметр задает количество потоков, которые будут передавать блоки данных на медиасервер