Files
hpnn-proto/docs/CHANGE_POOL_4_MEMBERS_PLAN.md

4.9 KiB

План внедрения: расширение пула до четырёх бэкендов

Дата: 2026-08-16 Основание: стенд шага 2 (STEP2_SUMMARY.md)

Контекст

Стенд работает с пулом из двух членов — по одному бэкенду в каждом приватном сегменте. На двух членах не видны свойства, ради которых на шаге 2 введена таблица слотов: при выбытии единственного «соседа» оставшийся член тривиально забирает все слоты, и минимальное возмущение раскладки нечем измерить.

Задача: добавить по одному бэкенду в каждый приватный сегмент (всего четыре члена пула) и оставить алгоритм балансировки symmetric_l4.

Состав изменения

Новые контейнеры

Контейнер Сеть Адрес MAC ID члена
hpnn-be3 priv2 10.20.0.3 02:42:0a:14:00:03 3
hpnn-be4 priv3 10.30.0.3 02:42:0a:1e:00:03 4

Образ и маршруты — те же, что у существующих бэкендов: через балансировщик маршрутизируются только клиентские префиксы и соседний приватный сегмент, default остаётся на шлюзе Docker (профиль A).

Файлы

Файл Изменение
docker-compose.yml сервисы be3, be4
lb/topology.env BE3_*, BE4_*
lb/pipeline.sh правила DNAT (таблица 12) и adjacency (таблица 21) для новых членов
lb/entrypoint.sh статические ARP-записи для вторых бэкендов на портах-источниках проб
lb/hc-config.sh члены пула 3 и 4
scripts/verify.sh проверки обобщаются с двух членов на четыре

Алгоритм балансировки не меняется: multipath(symmetric_l4, …) уже стоит в листенере, менять нечего.

Что произойдёт автоматически

Раскладка слотов пересчитается сама: демон опросит новых членов, переведёт их в up и зальёт таблицу слотов на четверых. Ожидаемое распределение — по 256 слотов на члена (1024 / 4).

Отдельная проверка: минимальное возмущение на четырёх членах

На двух членах проверка была вырожденной — оставшийся член забирал все слоты, поэтому «чужих» переехавших слотов было ровно ноль. На четырёх членах ситуация содержательнее: слоты выбывшего распределяются между тремя оставшимися, и порядок заполнения меняется.

Классический Maglev гарантирует малое, а не нулевое возмущение. Поэтому проверка формулируется как порог: доля слотов, сменивших владельца среди оставшихся членов, должна быть заметно меньше доли слотов выбывшего члена (25 %). Фактическое значение измеряется при реализации и фиксируется в итогах вместе с порогом.

Верификация

  1. make health — четыре члена up, по 256 слотов, сумма 1024.
  2. Балансировка с клиента: в 20 запросах встречаются все четыре бэкенда.
  3. make slots — счётчики пакетов растут у всех четырёх.
  4. Транзит между сегментами работает для новых бэкендов тоже.
  5. Отказ одного члена: его слоты уходят к трём оставшимся, трафик без ошибок.
  6. Минимальное возмущение: измерить долю переехавших чужих слотов.
  7. make verify — полный автоматический прогон.

Артефакты

  1. Этот план.
  2. docs/CHANGE_POOL_4_MEMBERS_SUMMARY.md — итоги и измеренные значения.
  3. Обновление README.md и docs/MANUAL_TEST_PLAN.md под новый состав пула.