Три узких места до стабильного контура артефактов
На выделенном Apple Silicon узкое горло чаще дают не гигагерцы CPU, а случайный IOPS по APFS, рост inode и конкурирующие потоки CI. Ниже — типовые провалы при совместном использовании SeaweedFS и rsync между регионами.
- 1. Шторм мелких файлов. Поток мелких needle без батчинга и без лимита на стороне filer раздувает журнал метаданных и выбивает кэш, пока rsync ещё копирует крупные блобы — растёт задержка SSH и VNC на том же NVMe.
- 2. Рассинхрон метаданных. Filer и volume живут на разных Mac mini M4; при сетевом джиттере между локациями clustervps появляются «полузелёные» каталоги артефактов, если нет явного build lock вокруг promote.
- 3. Диск без водяных знаков. Без порогов df и inode для 1 ТБ и 2 ТБ томов команда узнаёт о переполнении только по падению weed volume или обрыву rsync на ночной синхронизации.
Матрица: SeaweedFS против узкого rsync для межрегионального CI
Таблица фиксирует границу ответственности: когда держать истину в объектном слое, а когда — в золотом каталоге на узле после сериализованного rsync.
| Критерий | SeaweedFS volume + filer | Только rsync между узлами |
|---|---|---|
| Мелкие файлы и метаданные | Распределённые needle, отдельный том filer под метаданные | Миллионы файлов бьют по inode APFS на одном узле |
| Репликация между регионами | Явный defaultReplicaPlacement и отдельные volume на локацию | Ручные окна rsync и риск перекрытия с интерактивом |
| Лимиты полосы | Очереди на стороне клиента S3 API и compaction по расписанию | Прямой --bwlimit и счётчик параллельных сессий |
| Build lock | Обязателен вокруг compaction и снапшотов метаданных filer | Естественный flock вокруг каждого promote |
Топология: master, volume и filer на нескольких Mac mini M4
На каждом clustervps-узле выделяйте отдельный APFS-том под weed volume -dir, не смешивая его с Derived Data и журналами OpenClaw. Master держите в зоне с устойчивой задержкой до volume; filer монтируйте с отдельным диском под хранилище метаданных, чтобы журнал не конкурировал с needle на NVMe.
| Компонент | Ключевые параметры | Заметка по эксплуатации |
|---|---|---|
| weed volume | -max число томов, -dir NVMe, -mserver список, -publicUrl внешний адрес узла |
Ограничьте max с запасом под 1 ТБ / 2 ТБ; следите за свободными inode |
| weed filer | Метка -dataCenter, кэш метаданных, политика defaultReplicaPlacement |
Резервное копирование каталога метаданных — вне окна CI |
| weed master | Кворум peer-узлов, мониторинг задержки до volume | Падение кворума означает режим только чтения до восстановления |
Синхронизация: rsync, полоса, параллелизм и стык с filer
Для золотого артефакта после успешной сборки используйте rsync --delete --partial --numeric-ids и явный --bwlimit, согласованный с ночным restic в матрице restic и rclone. Число одновременных rsync на пару регионов держите в пределах двух-трёх, иначе TCP начнёт душить filer и интерактивные сессии SSH.
Поток в SeaweedFS через S3 API на filer разводите с rsync по календарю: пока идёт promote под flock, запрещайте тяжёлый weed compact на затронутых volume.
Масштабирование: новые volume-узлы и рост filer
Добавление Mac mini M4 как нового volume требует обновления меток rack и dataCenter, затем постепенного пересчёта replica placement без немедленной полной перебалансировки. Для filer рост шардов метаданных планируйте заранее: вертикальное масштабирование NVMe дешевле аварийного переноса каталога под нагрузкой CI.
Если команда удваивает число параллельных пайплайнов, сначала увеличьте запас по inode и ужесточите водяные знаки диска, затем — параллелизм rsync, и только потом — число одновременных загрузок в filer.
Катастрофоустойчивость: эксплуатационный FAQ
- Потеря filer при живых volume. Остановить запись из CI, восстановить метаданные из резервной копии, проверить replica на каждом volume; не запускать массовый
rsync --deleteдо завершения проверки. - Расхождение реплик после сетевого разрыва. Использовать диагностику master, затем управляемый repair; держать build lock до единого «зелёного» статуса по шарду.
- Диск 1 ТБ против 2 ТБ. На 1 ТБ смещайте алерты раньше из-за служебных снапшотов APFS; на 2 ТБ контролируйте также рост локального кэша клиентов filer и временных каталогов CI.
Шесть шагов внедрения на кластере clustervps
- Инвентаризация томов: зафиксировать df, inode и каталоги weed на каждом Mac mini M4 до любых изменений.
- Топология: развернуть master, затем volume с явным
-publicUrlи отдельным-dirна NVMe. - Filer: включить defaultReplicaPlacement, вынести хранилище метаданных на отдельный том, задать резервное копирование каталога.
- Rsync-контур: описать
--bwlimit, число параллельных заданий и исключения для временных каталогов CI. - Build lock: обернуть promote, крупный rsync и compact в flock с таймаутом и журналом владельца.
- Приёмка: пройти чек-лист водяных знаков 1 ТБ / 2 ТБ ниже и зафиксировать результаты в runbook смены.
Чек-лист приёмки водяных знаков 1 ТБ и 2 ТБ
- Снимок df и inode до и после ночного окна; отклонение более десяти процентных пунктов — разбор по узлу clustervps.
- Свободный резерв APFS не ниже согласованного минимума; учёт снапшотов, если локальные снапшоты включены на томе CI.
- Очередь compaction weed volume пуста к началу рабочего окна CI; иначе сдвинуть окно или снизить bwlimit rsync.
- Корреляция с OpenClaw: при росте диска сверить с логами и webhook, нет ли утечки поколений артефактов.
Итог для платформенной команды
Связка SeaweedFS и дисциплинированного rsync на межрегиональном кластере Mac mini M4 работает, когда топология разводит метаданные filer и данные volume, синхронизация уважает полосу и build lock, а масштабирование идёт через измеримые водяные знаки диска. Закрепите матрицу в репозитории рядом с базовой серией rsync и держите FAQ по отказам в общем runbook с clustervps.
--dry-run на копии каталога и сверьте версию weed на всех узлах одного контура.
Два и более узла под SeaweedFS, rsync и CI
Оформите несколько выделенных Mac mini M4 в разных локациях clustervps, разведите volume и filer по узлам и согласуйте полосу с командой сети; тарифы и конфигурации — на странице заказа.