Почему монолитный шлюз проигрывает multi-AZ
HowTo для трёх+ выделенных Mac на clustervps: два шлюза по AZ и отдельный воркер или notifier. Один хост для всего автоматизма даёт скоррелированные аварии и ротацию секретов «на выходные». См. также rsync и артефакты между узлами Mac mini M4 — те же идеи канонического пути и таймаутов применимы к очередям webhook.
- Ретраи: параллельный шторм рвёт TLS раньше очереди OpenClaw.
- Пробы: разные
curlу LB — «зелёный» флот при мёртвых API. - Секреты: один bearer на всех — ротация на выходные.
Матрица: один шлюз или разделение по AZ
| Топология | Когда выбирать | На что смотреть |
|---|---|---|
| Один шлюз Mac | Ранние прототипы и демо при малом трафике. | Любой затык диска или апгрейд TLS глушит все AZ сразу. |
| Пара шлюзов на AZ | Боевой OpenClaw с разными сменами операторов. | Нужны явные веса DNS и общий runbook без «тайных» отличий. |
| Шлюз + отдельный notifier | Плотные исходящие webhook или жёсткий compliance-лог. | Скew часов должен укладываться в считанные секунды между узлами. |
Сверьте с тарифами Mac и главной: запас RAM/SSD на AZ и возможность слить узел без простоя всей сетки.
HowTo: разнести шлюзы clustervps по зонам доступности
- Заморозить периметр. Hostname, mTLS, статические IP OpenClaw — сверить с DNS и firewall до любых переключений.
- Клонировать конфиг, не состояние. launchd/agents и env на второй Mac; SQLite и локальные очереди пустые до cutover.
- Веса DNS. С 10% на новый шлюз, 30 минут наблюдения, далее +20% с фиксацией метрик.
- Drain в runbook. Один шаг read-only для шлюза без остановки воркеров.
- Chaos в паре. Днём гасите один шлюз — второй держит хвост webhook и дисковые лимиты.
Одинаковые SSH/jump под справку; новый узел — через покупку без обязательного логина.
HowTo: объединить health-пробы в один честный сигнал
Один составной URL на шлюз: диск, heartbeat launchd, исходящий TLS к партнёру webhook, срок сертификата — в одном JSON с отдельными флагами.
#!/usr/bin/env bash
set -euo pipefail
/usr/bin/curl -fsS --max-time 4 https://hooks.partner.example/ping >/dev/null
/usr/sbin/diskutil apfs list | /usr/bin/grep -q Container
/usr/bin/printf '{"disk":true,"webhook":true,"queue_depth":0}\n'
Тот же путь на всех шлюзах — соседние Mac дергают peer при обслуживании; в JSON добавляйте метку AZ для планировщика OpenClaw. После инцидента см. fan-out rsync, promote и пороги диска.
HowTo: рассылать дайджесты ошибок webhook, а не шум
Notifier только агрегирует: шлюзы → Redis/файл; окна по 5 минут, дедуп кодов HTTP → один Slack/email; воркеры смотрят дайджест, не сырой лог.
- Метаданные: correlation id, AZ, число ретраев.
- Fallback: если дайджест не ушёл — счётчик на диск.
- Текст: короткие фразы, stack trace только при критике.
HowTo: ротировать токены с накатной проверкой
Теневой секрет в хранилище → канареечный шлюз рядом со старым → сутки реальных webhook → промоут по тегу ревизии на все шлюзы → отзыв старого после двух интервалов «ровных» метрик.
Воркеры читают токен из файла с атомарным rename; лог ротации: актор + тикет. Календарь: 90 дней или чаще при публичных webhook; таблица «какой Mac последним подтвердил доставку».
Чек-лист многоузловой кооперации
- Runbook: одинаковые unit-имена и пути логов на шлюзах.
- Время: дрейф
sntp< 2 с на всех Mac. - Replay-очередь: лимит диска + алерт high-water.
- Проба p95: ~200 мс на составной endpoint.
- Дайджест: быстрее эскалации «сверху».
- Токены: ≥12 ч overlap старого и нового.
- SSH: jump в справке; ёмкость — тарифы раз в квартал.
FAQ
TLS на AZ? Терминируйте локально; выпуск из одного профиля CA, чтобы продления совпадали.
Пробы скрывают деград? HTTP 200 + "status":"degraded" для жёлтого дашборда.
Сравните тарифы, справку и главную — до логина в консоль
Откройте тарифы и конфигурации Mac, загляните в справочный центр или вернитесь на главную страницу: ссылки публичные, команде не нужен вход, чтобы согласовать следующий шаг закупки или архитектуры.