Перейти к содержанию

Требования и расчёт ресурсов

Страница перечисляет, чему должны соответствовать узлы кластера, в каком виде поставляется плагин и как рассчитать число инстансов, процессорных ядер, объём памяти и число дисков. Она нужна тому, кто готовит оборудование и операционную систему к установке S3R.

Порядок установки

Установка выполняется в таком порядке:

  1. Проверяются требования, выбирается поставка и рассчитываются ресурсы — эта страница.
  2. Выбирается схема избыточности и число площадок — страница Планирование топологии.
  3. Запускается кластер Picodata, устанавливается и настраивается плагин, кластер проходит начальное формирование, консоль публикуется через обратный прокси, установка проверяется. Эти действия выполняются вручную по странице Пошаговая установка либо ролью Ansible для Picodata по странице Установка ролью Ansible. В обоих случаях действия одни и те же.

Действия при сбое установки описаны на странице Если установка не завершается, обновление и удаление плагина — на странице Обновление и удаление.

Требования

Компонент Требование
СУБД Picodata той версии, под которую выпущена версия плагина (см. Соответствие версий S3R и Picodata). При несовпадении версий плагин не загружается и выводит обе версии
Ядро Linux 5.10 или новее
Подсистема ввода-вывода io_uring и открытие файлов с флагом O_DIRECT (проверка описана в разделе Шаг 1. Проверка узлов). Резервной реализации нет: если механизм недоступен, диск не монтируется и событие записывается в журнал
Файловая система Локальная, с поддержкой O_DIRECT и posix_fallocate: ext4 или XFS (см. Файловая система)
Тир Picodata Все три сервиса плагина назначаются на один тир. Каждый инстанс, на котором есть диски хранилища, получает слушатель s3r_storage в своей конфигурации

Контейнеры

Окружение контейнера проверяется отдельно. Профиль seccomp в ядре Linux может запрещать системные вызовы io_uring, а оверлейная файловая система может запрещать открытие файлов с флагом O_DIRECT. Эти причины независимы: отказ одного механизма не означает отказа другого.

Файловая система

Диски хранилища размещают на ext4 или XFS.

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

Возможность ZFS и btrfs Что делает S3R
Избыточность: зеркало, RAID-Z репликация или избыточное кодирование в группе размещения (см. Избыточность и домены отказа)
Контрольные суммы и проверка данных контрольные суммы фрагментов и фоновый контроль целостности (см. Фоновые процессы)
Сжатие сжатие объектов по настройке тенанта и бакета (см. Сжатие)

По той же причине диски не объединяют в аппаратный или программный RAID: каждый накопитель отдаётся плагину отдельным диском.

Поставка

Плагин поставляется архивом s3r_<версия>-<ОС>.tar.gz, например s3r_2.2.0-ubuntu_22.04.tar.gz. Доступ к репозиторию предоставляется по запросу.

Структура архива соответствует стандартной структуре плагина Picodata: директория s3r/2.2.0/ содержит библиотеку libs3r.so, файл манифеста manifest.yaml и поддиректорию миграций migrations/.

Поддерживаемые дистрибутивы

Архив собирается для следующих дистрибутивов:

Дистрибутив Версии
Альт p10, p11
Astra Linux 1.8
CentOS 8, 9
Debian 12 (bookworm), 13 (trixie)
Fedora 43, 44
РЕД ОС 7.3, 8.0
Ubuntu 22.04 (jammy), 24.04 (noble), 26.04 (resolute)

Архив для дистрибутива не гарантирует работу с любым его ядром

Если ядро не предоставляет io_uring, диск не открывается и это видно в журнале инстанса.

Ограничения:

  • Альт p9, Astra Linux 1.7 и ROSA Chrome не поддерживаются: их ядра не обеспечивают надёжную работу io_uring, а другой подсистемы ввода-вывода у хранилища нет.
  • Базовое ядро РЕД ОС 7.3 ниже версии 5.10. На ней устанавливается ядро из репозиториев дистрибутива не ниже 5.10: kernel-lt, kernel-ml или kernel-lt из репозитория extras/kernels6-73.

Соответствие версий S3R и Picodata

Под каждую выпущенную версию Picodata собирается соответствующая выпущенная версия плагина.

S3R Picodata
2.0.0 26.2.1
2.1.0 26.2.1
2.2.0 26.2.1

Расчёт ресурсов

Ресурс Сколько нужно Подробности
Инстансы ожидаемое число операций с метаданными в секунду, делённое на 10 000, но не меньше, чем требует схема избыточности Число инстансов
Процессорные ядра число рабочих потоков инстанса и ещё два ядра Процессорные ядра
Сеть отдельная сеть между узлами без потерь пакетов Сеть
Оперативная память около 320 байт и длина ключа на объект, на каждом инстансе репликасета Оперативная память
Диски не больше 2 × (k + m) − 1 дисков яруса на инстанс Диски

Число инстансов

Инстанс Picodata с плагином S3R размещается в пределах одного вычислительного узла. В многопроцессорных серверах промышленного уровня рассчитывайте на загрузку всех узлов NUMA сервера.

Число инстансов ограничено снизу двумя условиями.

Нагрузка. Один инстанс обслуживает в секунду до 10 000 операций с метаданными: записей, чтений, запросов атрибутов и листингов. Необходимое число инстансов определяется делением ожидаемой нагрузки на это значение.

Схема избыточности. Каждый репликасет должен быть заполнен, а группа размещения, распределённая по узлам, требует определённого числа узлов (см. Планирование топологии).

Планируйте k + m + 1 доменов отказа

Если доменов отказа ровно k + m, перезапуск одного инстанса останавливает создание новых групп. Владелец, чья группа запечатана (состояние sealed, см. Группы размещения), тогда записывает только на освободившееся место в экстентах этой группы.

Процессорные ядра

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

Ядер Чем заняты
1 транзакционный поток TX
число рабочих потоков пул рабочих потоков Tokio: разбор запросов, кодирование, сжатие и обмен фрагментами полос
1 фоновые операции, например создание снимков

Число рабочих потоков задаётся переменной окружения S3R_WORKER_THREADS. Подберите его так, чтобы инстансы сервера вместе не занимали больше ядер, чем у сервера есть. Пример: сервер с 48 логическими ядрами и четырьмя инстансами — по 12 ядер на инстанс, S3R_WORKER_THREADS=10.

Крупные объекты нагружают рабочие потоки (кодирование и передача фрагментов), мелкие — транзакционный поток. Транзакционный поток у инстанса один, поэтому при нагрузке мелкими объектами добавляйте инстансы, а не рабочие потоки.

Задайте число рабочих потоков явно

Без переменной S3R_WORKER_THREADS пул рассчитывается по числу ядер всего сервера, и при нескольких инстансах на сервере потоков запускается больше, чем ядер.

Оперативная память

Метаданные хранятся в памяти memtx. Расход памяти на один объект:

Объект Память
Содержимое размещено на дисках около 320 байт вместе с индексами и столько байт, сколько занимает ключ объекта
Размером до inline_max то же и дополнительно объём содержимого

Этот объём необходим каждому инстансу репликасета, потому что каждая реплика хранит полную копию данных.

Пример: 100 миллионов объектов с ключами длиной 80 байт требуют около 40 ГБ памяти.

Объём памяти под метаданные увеличивается двумя способами:

  • добавлением узлов, между которыми распределяются шарды метаданных;
  • увеличением параметра instance.memtx.memory.

Расход памяти каждого инстанса показывают консоль и запрос GET /v2/memory. Сведения собираются в момент запроса, и возраст каждого показания не превышает двух секунд. Неполные сведения выглядят так:

  • Инстанс в сети, но не ответил за секунду. Ответ сообщает, сколько инстансов ответило, а запись memory в сводке GET /v2/health получает статус предупреждения и содержит имя этого инстанса.
  • Инстанс отключён. В подсчёт он не входит: о нём сообщает запись instances той же сводки.

Диски

Сколько дисков на инстанс. На одном инстансе в ярусе со схемой избыточности k+m используется не больше 2 × (k + m) − 1 дисков: владелец пишет в одну группу яруса за раз. Конфигурация с большим числом дисков отклоняется (см. Группы размещения). Лишние диски размещают на дополнительных инстансах: например, при схеме 4+2 двенадцать дисков размещают на двух инстансах по шесть.

Сколько места на диске. Каждой первой группе, которую план начального формирования ставит на диск, нужно 2 × (1 + spare_extents) свободных экстентов этого диска, то есть 4 при значениях по умолчанию. Диск, на котором столько места нет, задерживает формирование (см. Начальное формирование).

Ёмкость диска и размер экстента выбираются по разделу Выбор ёмкости и размера экстента.

Сеть

Запись объекта крупнее inline_max передаёт его фрагменты на диски других узлов, а чтение собирает их оттуда. Поэтому сеть между узлами нагружена не меньше клиентской: на каждый записанный байт между узлами передаётся до (k + m) / k байт.

Требование Зачем
Отдельная сеть для обмена между узлами: адреса слушателя s3r_storage и Picodata клиентский трафик не вытесняет обмен фрагментами; порт s3r_storage недоступен клиентам (см. Сетевые порты)
Пропускная способность сети между узлами не меньше клиентской, умноженной на (k + m) / k иначе запись крупных объектов ограничена сетью, а не дисками
Отсутствие потерь пакетов между узлами участник, не принявший фрагмент в срок, пропускается; если таких больше, чем допускает кворум записи, запрос получает ошибку 5xx

Потери пакетов останавливают запись крупных объектов

При испытаниях потери 1–2 % кадров на приёме у одного узла снижали скорость записи объектов по 64 МиБ почти вдвое: узел с потерями отставал, остальные ждали его фрагменты до истечения срока. Потери возникали в сетевой карте при одновременной передаче с нескольких узлов и не отражались в её счётчиках ошибок. После включения управления потоком (flow control) на портах коммутаторов, обращённых к узлам хранения, потери прекратились.

Что проверить до ввода в эксплуатацию и при падении скорости записи:

  • долю повторных передач TCP на узлах (nstat TcpRetransSegs или метрика node_netstat_Tcp_RetransSegs экспортёра узла): под нагрузкой она должна оставаться в пределах долей процента;
  • счётчики отброшенных кадров на портах коммутаторов и сетевых карт (ethtool -S);
  • одинаковую загрузку узлов при записи: один узел, загруженный заметно больше остальных, — признак того, что он не успевает принимать фрагменты.