Три операционных узких места: ① дрейф brick — разные пути APFS по зонам ломают кворум replica при promote; ② rsync без backoff — шторм артефактов заполняет один brick, пока self-heal добавляет последовательный IO; ③ нет build lock — параллельные lane пишут в одно дерево promote, растёт риск split-brain.
① Репликационные тома и планирование brick (GlusterFS)
Производственный том назовите artifacts-rep3 с коэффициентом replica 3: по одному brick на зону доступности. Каждый brick — отдельный диск данных APFS, не системный том. Наблюдатели только с glusterd и метриками. Ограничьте performance.cache-size, чтобы индексация Xcode и self-heal не делили один NVMe в пик компиляции.
| Тип тома | Схема brick | Когда выбирать |
|---|---|---|
| replica 3 | 3 зоны × 1 brick | Продакшен CI и общий DerivedData |
| replica 2 | 2 узла Mac | Лабораторный стенд; не переживает двойной отказ |
| replica 3 arbiter | 2 data + 1 witness | Меж-WAN: меньше исходящего трафика |
② Матрица backoff rsync артефактов
Крупные blob могут жить в MinIO или JuiceFS; каталожные артефакты по-прежнему rsync в mount Gluster. Backoff — это снижение bwlimit числа параллельных job и увеличение интервала повторов, а не полная остановка.
| Сценарий | Стартовые параметры | Действие backoff |
|---|---|---|
| Дневная дельта | --bwlimit=35000 | Жёлтый порог диска → 22000; красный → пауза delete-фаз |
| Первичный seed | --partial-dir=/mnt/scratch/partial | Сдвиг на 30 мин от окон heal |
| Пик CI | Параллельность 1; --timeout=600 | Три сбоя → потолок повтора 900 с |
ionice -c2 -n4 rsync -az --delete-delay --bwlimit=35000 --timeout=600 \
--partial-dir=/mnt/scratch/partial "${GOLDEN}:/artifacts/" /mnt/gluster/artifacts/
③ Build lock (flock) для нескольких проектов
Используйте flock на /var/locks/build-${tenant} с TTL 1200 секунд. Пока lock удерживается, блокируйте второй rsync в то же поддерево Gluster. Согласуйте с матрицей rsync артефактов, чтобы delete-фазы не пересекали promote. Замораживайте рост веса канарейки, если любой brick пересёк красный водяной знак — зеркалируйте пробы из руководства OpenClaw Flagger canary.
Шесть шагов внедрения (минимально воспроизводимый контур)
- Инвентаризация томов, brick, точек монтирования и DAG источников rsync по тенанту.
- Создайте replica 3 и убедитесь, что
gluster volume infoпоказывает три здоровых brick. - Пропишите automount и лимиты client cache, чтобы индексация Xcode не голодала heal.
- Примените матрицу rsync с отдельным диском partial на узел.
- Разверните build lock и cron водяных знаков на каждом хосте brick.
- Подключите пробы OpenClaw, объединяющие глубину очереди heal и загрузку APFS.
- Репетируйте failover: выведите один brick offline, проверьте read-only CI, затем heal после freeze кворума.
④ Расширение 1 ТБ/2 ТБ и приёмка по водяным знакам диска
Расширяйте добавлением brick и командой add-brick— не меняйте один диск на месте. Приёмка должна включать inode, снимки и размер partial-dir, а не только процент ёмкости.
| Диск | Жёлтый порог | Красный порог | Действие |
|---|---|---|---|
| 1TB | ~78% | ~88% | Снизить rsync; heal вне пика |
| 2TB | ~72% | ~84% | Очистить partial-dir; пауза некритичных томов |
Перед add-brick зафиксируйте в runbook: drain всех lane, пауза rsync, снимок gluster volume status и свободный запас под heal не менее 15% на каждом существующем brick. На странице аренды clustervps сравните пакеты с диском 1 ТБ или 2 ТБ; на тарифах — стоимость второго и третьего узла под brick. После расширения повторите ночной прогон rsync с пониженным --bwlimit, прежде чем снова поднять параллельность CI.
performance.client-io-threads до двух и держите heal pending ниже 200 объектов в рабочий день.⑤ FAQ переключения при отказе
GlusterFS против MinIO и JuiceFS? Крупные неизменяемые объекты остаются в MinIO; кеши S3 с тяжёлыми метаданными — в JuiceFS; Gluster держит POSIX-рабочие пространства и инкрементальные деревья артефактов.
Можно ли продолжать rsync при offline brick? При replica 3 запись допустима, но немедленно снижайте bwlimit. При replica 2 — read-only и остановка CI до возврата кворума.
Heal или rsync первым после красного порога? Пауза rsync, очистка partial и build scratch, ожидание жёлтого, затем gluster volume heal чтобы IO не пикировал дважды.
Цифры для цитирования (runbook)
- Базовый rsync: старт 35000 KB/s; снижение до 22000 на жёлтом пороге.
- TTL build lock: 1200 секунд на тенанта для общих путей promote.
- Контракт диска: 1 ТБ жёлтый 78% / красный 88%; 2 ТБ жёлтый 72% / красный 84%.
Разверните топологию GlusterFS на параллельных lane clustervps
Межрегиональному кластеру Mac mini M4 нужно несколько bare-metal узлов под brick и CI. На странице аренды кластера выберите многоузловой пакет, сравните тарифы на тарифах и проверьте диски по таблицам двух порогов выше.