Часть 1. Знакомство с продуктом
Зачем мы настраивали эту систему?
Нам нужно было развернуть отказоустойчивое хранилище для кластера Hyper-V с двумя нодами Windows Server 2019. Требования:
высокая доступность — виртуальные машины должны работать даже при падении одной ноды СХД;
производительность — Fibre Channel (FC) вместо iSCSI, чтобы избежать задержек;
бюджетность — без дорогих проприетарных решений вроде Dell EMC.
Наш "джентльменский" набор:
СХД AIC HA202-PV (тот самый "ноунейм" 2U с 24 дисками, купленный по цене б/у велосипеда);
Fibre Channel-адаптеры QLogic (найденные в глубинах серверной, покрытые пылью, но еще живые);
2 кастомных сервера с ОС Windows Server 2019 на борту;
безграничный оптимизм и запас крепкого кофе
В защиту нашей СХД стоит сказать, что конфигурация выдалась не такой уж и слабенькой:
Процессор |
Intel Xeon Gold 6148 CPU @ 2.40Ghz x2 |
Оперативная память |
DDR4 64GB DIMM 2933 MHz x2 |
NVMe SSD |
Samsung PM1733 7.68 TB |
А вот и наш подопытный:

Недостатки у таких габаритов тоже нашлись, для него просто катастрофически необходима стойка 1200 мм. В крайнем случае можно рассмотреть предыдущую модель СХД от этого производителя, вот ссылка: https://www.aicipc.com/en/productdetail/51300IC

Кстати стоит упомянуть, что бэкплейн от плат расширения стоит дорабатывать, так как сам вырез в СХД под бэкплейн чуть короче самого бэкплейна.

Почему именно ESOS?
Когда мы начали искать решение, вариантов было три:
купить дорогую СХД, что было нецелесообразно для масштаба проекта;
использовать что-то бесплатное и потратить кучу времени;
притвориться, что не слышали задачи.
Мы выбрали второй вариант, потому что:
ESOS позиционируется как готовое решение для SAN;
поддерживает FC (а у нас как раз были эти загадочные адаптеры);
имеет встроенную поддержку кластеризации;
и главное - бесплатный!
Что скрывается под капотом?
ESOS — это не просто сборка Linux для хранения данных. Это тщательно подобранный набор инструментов, где каждый компонент решает конкретную задачу:
SCST —«сердце» системы, превращающее ваш сервер в полноценную SAN;
Pacemaker — мозг, отвечающий за отказоустойчивость;
LVM + MDADM — гибкие инструменты работы с дисками;
мощный сетевой стек — от обычного iSCSI до Fibre Channel.
Первые впечатления:
Установка прошла на удивление гладко. "Вау" – подумал я – "это же почти как настоящий NetApp, только бесплатно"! Настроил RAID, создал LUN'ы, подключил к Hyper-V... Казалось, вот оно, счастье!
Но, как это часто бывает в IT, настоящие проблемы начались после слов "ну вот, теперь всё работает".
Первое же тестирование отказоустойчивости (совместно с коллегами) превратилось в комедию ошибок.
Выдергиваем кабель питания из активной ноды ESOS (как взрослые серьезные админы). С гордым видом наблюдаем, как Hyper-V должен переключиться на резервную ноду.
...Проходит минута...
...Две...
Виртуальные машины начинают падать как мухи, а мы – лихорадочно гуглить ошибки.
В тот момент мы поняли, что "готовое решение" оказалось таким же готовым, как полуфабрикаты в ближайшем магазине – теоретически съедобно, но лучше не рисковать.
Что же пошло не так?
LUN'ы отказывались автоматически переподключаться;
MPIO в Windows вел себя как капризный ребенок;
а самое главное – никакой реальной отказоустойчивости "из коробки" не оказалось.
Но мы не ищем легких путей! Впереди были недели экспериментов, литры выпитого кофе и десятки переписанных конфигов. И знаете что? В конце концов у нас получилось заставить эту систему работать так, как надо!
Хотите узнать, как мы превратили этот "зоопарк" в стабильную отказоустойчивую систему? Читайте дальше – мы подробно разберем все проблемы и наши нестандартные решения.
Часть 2. Решение проблем
Ожидание: "готовое" решение после настройки по документации.
Реальность: хаотичный запуск сервисов, сломанные XFS после сбоя и ручная синхронизация конфигов. Рассказываю, как мы это победили.
Проблема №1: Хаос в порядке запуска сервисов
Из коробки ESOS управляется кучей скриптов, но при настройке всех сервисов строго по официальной инструкции мы столкнулись с хаотичным порядком инициализации. Система могла:
пытаться собрать RAID до инициализации multipath;
запускать SCST до монтирования основных разделов;
игнорировать зависимости между сервисами.
Результат: При перезагрузке нода превращалась в "кирпич" в 7 случаях из 10.
Наше решение: Отказались от встроенных скриптов и написали свой контроллер инициализации:
#!/bin/bash
# Проверка инициализации multipath с ретраями
check_multipath() {
for ((i=1; i<=3; i++)); do
if multipath -v3 &>/dev/null && [ $(multipath -l | wc -l) -gt 0 ]; then
return 0
fi
/etc/rc.d/rc.multipath restart
sleep 5
done
exit 1
}
# Проверка сбора RAID
check_mdraid() {
for ((i=1; i<=3; i++)); do
if grep -q "active" /proc/mdstat && [ $(lsblk | grep -c 'raid') -gt 0 ]; then
return 0
fi
/etc/rc.d/rc.mdraid restart
sleep 5
done
exit 1
}
# Жесткая последовательность
/etc/rc.d/rc.multipath start
sleep 3
check_multipath
/etc/rc.d/rc.mdraid start
sleep 3
check_mdraid
exit 0
Ключевые моменты:
строгий порядок: сначала multipath, потом RAID;
проверки с ретраями вместо надежды на "авось";
задержки между операциями (да, sleep — это костыль, но работающий!).
После этого ноды стали подниматься стабильно даже после hard reboot.
Логичный вопрос, который может возникнуть: “А почему не systemd? Зачем эти костыли?”. На это есть сразу несколько причин:
Архитектурная несовместимость
ESOS построена на BusyBox + SysVinit, а systemd требует полной перестройки инициализации системы.
-
Ядро ESOS скомпилировано без поддержки cgroups (ключевой зависимости systemd).
2. Отсутствие зависимостей
3. Конфликт с существующей инициализацией и компонентами
Чтобы не ломать изначальную структуру, остановились на более простом и стабильном варианте.
Проблема №2: XFS timeline и "сломанные" диски
Следующий сюрприз: при тестах отказоустойчивости (принудительное падение активной ноды) разделы на /dev/md127 отказывались монтироваться на backup-ноде с ошибками:
XFS (md127): metadata I/O error in "log I/O"
XFS (md127): log mount/recovery failed
Диагноз: При резком обрыве работы лог XFS оставался в несогласованном состоянии. Ручное выполнение xfs_repair помогало, но для кластера это неприемлемо.
Решение: Автоматический "лекарь" дисков, интегрированный в Pacemaker:

#!/bin/bash
DEVICE="/dev/md127"
if ! mount | grep -q "$DEVICE"; then
if ! xfs_repair -n "$DEVICE"; then
xfs_repair -L "$DEVICE" || true
fi
fi
Интеграция в кластер (crm):

primitive repair_disk anything \
params binfile="/etc/repair_disk" \
op start timeout=120s interval=30s \
meta target-role=Started
colocation repair_with_scst_group inf: repair_disk scst_group
order scst_after_repair inf: repair_disk scst_group
Важно:
скрипт привязан к группе SCST и запускается при переносе ресурсов;
xfs_repair -L принудительно очищает лог;
таймауты подобраны эмпирически под наше железо.
Проблема №3: Консистентность конфигурации
Ручная настройка SCST – неразумный подход. Каждый раз пришлось бы переключиться между нодами. Решение – автоматическая синхронизация:

#!/bin/bash
current_dc=$(crm_mon -1 2>/dev/null | grep -i 'p_scst' | awk '$print $4$'
if [ "$current_dc" == "mzf-node0.mzf.com" ]; then
scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \
root@172.16.16.1:/etc/scst.conf /etc/scst.conf
scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \
root@172.16.16.1:/etc/fstab /etc/fstab
if [ $? -eq 0 ]; then
sed -i \
-e 's/50:01:43:80:18:6b:cf:34/21:00:00:24:ff:76:60:d6/g' \
-e 's/50:01:43:80:18:6b:cf:36/21:00:00:24:ff:76:60:d7/g' \
-e 's/21:00:00:24:ff:24:84:4e/21:00:00:24:ff:24:84:4f/g' \
-e 's/21:00:00:24:ff:40:89:6c/21:00:00:24:ff:40:89:6d/g' \
/etc/scst.conf
exit 0
else
echo "Ошибка копирования файла!" >&2
exit 1
fi
else
exit 0
fi
Особенности:
скрипт запускается только на standby-ноде;
замена WWID необходима из-за разных FC-карт в серверах;
синхронизация fstab для одинаковых обозначений дисков.
"Готовое" решение потребовало трёх нестандартных доработок, но доказало жизнеспособность подхода.
Главный итог: даже минималистичные системы типа ESOS можно превратить в отказоустойчивую платформу, если:
не бояться лезть в системные слои;
автоматизировать восстановление;
жёстко тестировать сценарии "грязного падения".
Часть 3. Испытание на прочность – как мы тестировали отказоустойчивость
Когда все настройки были завершены, настал самый ответственный момент — проверить, действительно ли наша система хранения будет работать так, как задумано. Мы устроили ей настоящий экзамен по всем правилам.
Что мы хотели узнать:
Что будет, если мы просто переведем сервисы на другую ноду в штатном режиме?
Как система поведет себя при настоящей аварии?
Выдержит ли она максимальную нагрузку?
Описание процесса тестирования:
Для тестирования отказоустойчивости нашли два кастомных сервера подключенных к СХД по Fibre Channel с доступом к дискам через MPIO были добавлены в кластер Hyper-V. Создана виртуальная машина на Windows Server, на которой развернута тестовая база 1C в режиме СУБД с использованием MSSQL.
Начинаем тестирование с самого элементарного – штатное переключение на резервную ноду нашей СХД.
Запускаем нашу тестовую базу 1C, производим ручное переключение на резервную ноду методом перемещения crm resource move scst_group mzf-node1.mzf.com. Видим, что ВМ доступна, не реагирует на какие-либо нажатия мыши, но буквально через 10-15 секунд все стабилизировалось, и снова в строю. Возвращаемся на первую ноду, выполняем аналогично перемещение crm resource move scst_group mzf-node0.mzf.com. При этом не замечаем никаких перебоев с нашей ВМ.Разобравшись со штатными ситуациями, где результат нас вполне устроил, переходим к тестированию с имитацией аварийных случаев.
2.1 Все так же запускаем 1С на нашей тестовой ВМ, и делаем вид, что работаем, выполняя типовые операции в базе, переключаясь по разным вкладкам, открывая отчеты. В это время, зайдя на Management Interface (megaRAC) нашей СХД, выключаем активную ноду через питание, 10…. 15…. 20…. секунд, и вот ВМ опять отзывается на нажатия мыши, 1С продолжает открывать интересующие нас отчеты.
2.2 Нас также интересует вопрос, а что если в какой-то день наша FC-карта просто перестанет работать, или это может быть даже SFP-модуль, ведь соединение с серверами настроено именно через Fibre Channel.
Вернувшись к штатному состоянию работы нашей СХД, и начав опять делать вид что работаем в 1С, просто задеваем оптический патч-корд, и получается так, что он вылетает из нашей FC-карты, установленной в СХД. ВМ все так же не отвечает на нажатия мыши, как и в предыдущих сценариях тестирования, но уже прошла минута, а ВМ все висит, но спустя примерно еще секунд тридцать ВМ начала откликаться на мышь, а в 1C успешно продолжилась наша работа.
2.3 Остался последний, но не менее важный этап аварийного тестирования, а именно выход из строя одного из дисков в нашем массиве. Т.к. предварительно мы собрали RAID5, было принято решение просто достать один диск из СХД во время все тех же работ в 1С – перемещение по вкладкам и открытие отчетов.
Вынимаем корзину с диском, наша ВМ все так же продолжает стабильно работать, как и база 1С, в которой без промедления открываются отчеты.
3. Напоследок протестируем, как ведет себя СХД при максимальной нагрузке на диски.
Для нагрузочного тестирования использовали программу Diskspd, установленную на одном из Windows серверов, к которому подключено наше хранилище.
Запустили тест на случайную запись (4K, 64 потока, глубина очереди 32)diskspd -b4K -d60 -o32 -t64 -h -r -w100 -L -Z1G -c10G G:\testfile.dat
После этого – тест на смешанную нагрузку (70% read / 30% write):diskspd -b8K -d120 -o64 -t32 -h -r -w30 -L -Z1G -c50G G:\testfile.dat
Во время нагрузочного тестирования наша ВМ работала стабильно, без зависаний, но с небольшой задержкой на выполнение каких либо операций, что объясняется максимальной нагрузкой на диски.
Итоговая таблица с этапами и результатами тестирования
Этап тестирования |
Сценарий |
Действия |
Результат |
Штатные ситуации |
Плановый Перевод сервисов |
Перевод на вторую ноду |
15 сек на переход |
Обратный переход |
ВМ не замечают изменений |
||
Аварийные тесты |
Имитация реальных сбоев |
Отключение питания на рабочей ноде |
Восстановление на резервную ноду за 15-20 сек |
Отключение кабелей FC |
Восстановление на резервную ноду за 1-2 минуты |
||
Работа на одной ноде |
Штатная работа |
||
Отключение диска из массива путем физического извлечения |
Штатная работа |
||
Нагрузочное тестирование |
Проверка предельных возможностей |
Максимальная нагрузка на диски |
Стабильная работа |
Вывод
Система показала себя хорошо: после аварии она восстанавливалась за 15-20 секунд. Единственное — при резком отключении оптических патч-кордов, время восстановления может занять до 2х минут (при этом ВМ остается в рабочем состоянии), не отвечая на какие-либо действия, пока не произойдет переключение на резервную ноду, что вполне нормально.
После тестов мы получили систему, которая:
автоматически восстанавливается после большинства аварий;
позволяет проводить обслуживание без остановки работы.
Главный урок: даже самая простая система может стать по-настоящему надёжной, если правильно её настроить и тщательно проверить. Тесты заняли больше времени, чем сама настройка, но зато теперь мы уверены в результате.
Остался вопрос на миллион: стоит ли нести это в прод?
➜ Да — если доработать мониторинг и валидацию данных.
➜ Нет — если SLA требует 99.999% uptime без рисков и бюджет позволяет приобрести СХД от именитых вендоров.
Ваше мнение решающее! Пишите в комментариях:
Какие компоненты вызывают больше всего доверия/опасений?
Какие тесты обязательны перед выкаткой?
Какие альтернативы предложили бы вы?
Комментарии (0)
falcon4fun
15.09.2025 18:24даже самая простая система может стать по-настоящему надёжной
Апхахахааха. В деда мороза тоже верите? А в Йетти?
Hyper-V - раз. Два - какое-то говносторадж. Зачем-то FC.
Еще и Броадком, мой любимый. Люблю, когда из-за отказа вентилятора на сетевухе кидает CPU IERR и ошибку PCIE слота (часто без указания, чтобы все поперебирать). Ничто так не бодрит по утрам. А драйвера то какие. Закачаешься. На пару с фирмварами. Когда скучно жить и можно играть "в угадай что сегодня пошло не так"Какая-то дикая дичь (и то, если очень тактично стесняться в выражениях), на которой я бы даже лабу не развернул.
Первое: MSA Gen4-Gen5 стоит на сдачу с пачки сухариков за базу на вторичке. Да даже Gen6 стоит примерно ничего новый. С гарантией и джибиками.
Второе: Hyper-V и отказоустойчивость? Удачи. Просто за ручки возьмитесь там и поищите ее. Сложно перечислить все причины по которым умеет падать Hyper-V WSFC:
Виртуалка, вставшая раком, которая ни в какую не мигрируется. И еще из-за которой не работает Live Migration, т.к. вмки рестартуют при миграции, и только Quick Migration вариант. Весело бывает 100 виртуалок и овнершип CSV выносить
Отвал CSV по рандомным причинам, вроде высокого латенси одного из дисков, например, после бэкапа Вимом (баг 5-ти летней давности)
Отвал CSV просто потому что переименовал маунтпоинт не с овнер ноды, а потом решил снести пустой CSV - за компанию отваливаются соседние CSV, просто потому что.
Отвал CSV просто при миграции овнершипа на другую ноду.
Заглючившая ВМка может снестись вместе с RHS-ом, унеся жизнь еще 3-4-5 десятков ВМок (а порой и всей сотни), на пару с отвалов CSV.
Шанс примерно 1 к 10, что при отвале сети около минуты, оно не крешнет VM World-ы всех ВМок и ВМки нормально оживут, а не выпадут в "Paused-Critical", даже со всеми твиками iSCSI и MPIO согласно Best Practices вендров.
Шанс примерно 1 к 5, что при отказе одной ноды все нормально перезапустится на второй ноде без каких-либо косяков.
И прочий миллион причин, который я видел за свою жизнь. Казалось бы - ну нечему падать уже больше. Ага, ага. Hyper-V - это ESXi.
Продолжать?
Третье: 2 ноды. Ну ок. Промолчу. Чего не одну то?
Четвертое: На MSA еще и афтермаркет гарантия будет. А на это говно - нет.
Пятое: MSA работает без бубна. Имеет также тонну документации и кучу форумов.
Шестое: Какой-то ESOS посос в засос. Писос в целом.
Седьмое: FC. Осталось к этому купить свитчи и найти нормальных сетевиков, которые хотя бы смогут настроить FC. Тут в iSCSI порты no-drop прописать не могут всякие сетевички, просто загуглив "BP iscsi". А здесь FC.
Не, ну если цель клиента или фирму сделать на 146% зависящей от тебя - вы справились с задачей. У коллег также кондей в серверной по 10 раз ходят заправлять за 2 года. Обслуживающая организация спит уже походу на мешке с евросами только на одной такой фирме. Зачем же эту золотую трасу менять и сами блоки?
Придя в любую компанию и увидев это костыльное нечто собраное кем-то на коленке, выкинул бы нахер, купил бы MSA x050/x060, напихал дисков, настроил и забыл. А на этот колхозняк еще 20 ректальных свечек придется поставить при плановом мейнтенансе или блэкауте: поднимется или нет, когда в реальном мире можно выдернуть из Компеллента кабель питания (один из двух БП), а оно сделает "у меня лапки" и вырубится к херам (Реддиту привет. И моим знакомым из одного ДЦ - тоже. Экспиренс незабываемый)
Примерно такой же уровень колхозняка видел, когда в одну фирму пришел и увидел NetApp подключеный прямым коннектом в серваки и ответ бывшего админа "ну тут это, чо-то фейловер ниоч как-то работает УЖЕ КАК 8 ЛЕТ. Не ну в целом то работает ж.".
"Ниоч" оказалось "не работает вообще". WSFC и MSSQL просто раком встает, если выдернуть один из контроллеров. Оказалось ни в одной документации нет того, что сторадж можно подключать прямыми линками в сервера, но прошлый админ решил "я лучше знаю"З.Ы. Даже при учете всей хардвары этой говнины, я крайне сомневаюсь, что она выжмет стабильные 50-80к 4К IOPS.
стоит ли нести это в прод?
В голос. Пристрелите эту больную клячу. Пусть умрет спокойно.
Какие компоненты вызывают больше всего доверия/опасений?
Ээээ. Все? Там еще видел кастомные сервера фигируриют. Я уже точно не хочу знать, что там за больные и убогие. Надеюсь, хоть не фул тавер
Какие тесты обязательны перед выкаткой?
Справка из наркодиспансера. Справка от психолога. И результат теста на IQ.
Какие альтернативы предложили бы вы?
А в анкете надо отвечать честно или чтобы поржать? :D
LabsTech
15.09.2025 18:24Оборудование на вторичке это лотерея, в которую можно и не выиграть
HP ушел из России, т.п вам будут оказывать менеджеры, которые вам продали msa из серого импорта.
У меня все!!!
krids
15.09.2025 18:24HP ушел из России, т.п вам будут оказывать менеджеры, которые вам продали msa из серого импорта.
Покупайте у нормальных системных интеграторов (а не у перекупных "рогов и копыт") и т.п. вам будут обеспечивать его сертифицированные сервисные инженеры (в том числе из ушедших вендоров) и даже on-site.
V-core
Поясните пожалуйста
Где стоял еsos?
Схд не видна из hyper-v?
Если предположить что у вас куча дисков и всего 2 ноды можно построить кластер и без схд.
Metrika42 Автор
ESOS установлен на СХД AIC
в Hyper-v не видна, диски от СХД добавлены в хранилище, в Диспетчере отказоустойчивости кластеров
Если построить кластер без СХД, то в случае выхода одной ноды, не будет быстрой миграции на вторую, и мы лишаемся отказоустойчивости.