guard/docs/disaster_recovery.md
loki5512344 15f474486a
feat!: universal redesign — drop Minecraft stack, single-crate architecture
- remove Java plugins (velocity/paper), dashboard, all MC-specific code
  (handshake, death_code, varint, hostname-HMAC); available in history pre-v0.2
- merge crates/* into one package with src/bin/{rampart,rampart-manager,rampart-cli}
- ProtocolHandler trait + registry (no implementations yet), universal PoW kept
- XDP: universal L3/L4 filter (xdp/core/) + pluggable hook API (xdp/hooks/),
  fix IPv6 saddr bug; clang build verified
- docs: bilingual knowledge base (docs/kb/: attacks x4, defense-levels,
  practice x3), rewrite README/architecture for universal concept
- TODO.md v4.0: <=300-line module limit, competitor benchmark section (ref/)
- deploy/CI/docs cleanup: no MC references, new binary names

cargo build/clippy(-D warnings)/test green (55 tests)
2026-08-24 01:50:22 +02:00

149 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Disaster Recovery - Rampart
> Что делать, когда что-то пошло не так.
## Схема failover
```
Redis упал:
Edge: продолжает автономно на локальном кэше блэклиста
Manager: API отдаёт пустые списки / ошибки → рестарт Redis
Manager упал:
Edge: продолжает фильтрацию (фильтрация не зависит от Manager)
Управление (CLI/API) недоступно до восстановления
Edge нода упала:
Клиенты за ней теряют соединение
При нескольких edge → DNS round-robin на живые
Если edge одна — сервис недоступен
Полный сбой дата-центра:
Edge в других ДЦ продолжают работу
Баны/ноды не синхронизируются до восстановления Redis
```
---
## 1. Redis упал
### Симптомы
- Edge перестал синхронизировать блэклист
- Manager API отдаёт пустые списки nodes/servers/blacklist
### Влияние
- **Edge:** работает с локальным кэшем; новые баны не распространяются между нодами.
- **Manager:** данные из Redis недоступны.
### Действия
```bash
redis-cli ping || systemctl restart redis
# Поднять новый (пароль должен совпадать):
docker run -d --name rampart-redis -p 6379:6379 \
redis:7-alpine redis-server --requirepass "$REDIS_PASSWORD"
systemctl restart rampart-manager # переподключится
# Edge переподключается сам (retry в драйвере); иначе:
systemctl restart rampart
```
### Предотвращение
- AOF + RDB persistence включены
- Регулярные бэкапы: `redis-cli SAVE`
---
## 2. Manager упал
### Симптомы
- `rampart-cli` команды падают с ошибкой соединения
- `/api/v1/health` не отвечает
### Влияние
- Edge продолжает фильтровать трафик автономно.
### Действия
```bash
systemctl status rampart-manager
journalctl -u rampart-manager -n 50 --no-pager
systemctl restart rampart-manager
# Не стартует? Частая причина — env:
# JWT_SECRET < 32 байт или API_PASSWORD=changeme → процесс выходит с ошибкой.
journalctl -u rampart-manager -e | grep ERROR
```
---
## 3. Edge нода упала
### Симптомы
- Клиенты теряют соединение, метрики :9090 пропали
### Действия
```bash
systemctl status rampart
journalctl -u rampart -n 50 --no-pager
dmesg | grep -i "oom\|rampart" # OOM kill?
systemctl restart rampart
# Не стартует — проверь конфиг и логи (см. runbook.md §2)
```
### Предотвращение
- Минимум 2 edge ноды + DNS round-robin
- systemd `Restart=always`
- Несколько edge нод за одним DNS-именем
---
## 4. ClickHouse упал
### Влияние
Только потеря аналитики: события буферизуются и пишутся асинхронно,
фильтрация не зависит от ClickHouse.
### Действия
```bash
curl http://localhost:8123/ping || systemctl restart clickhouse-server
df -h /var/lib/clickhouse # диск полон?
```
---
## 5. Полный сбой инфраструктуры
```bash
# 1. Поднять Manager на новой VDS
docker compose up -d redis && cargo run --release --bin rampart-manager
# 2. Восстановить Redis из бэкапа
redis-cli --pipe < /backup/rampart-redis-$(date +%Y-%m-%d).rdb
# 3. Edge ноды переподключатся автоматически
# 4. Проверить
rampart-cli doctor
```
---
## 6. Cheatsheet быстрых команд
```bash
systemctl restart rampart rampart-manager redis clickhouse-server
journalctl -u rampart -n 50 -f
htop -p $(pgrep -d',' rampart)
iftop -i eth0
ss -s | grep TCP
```
---
*Версия: 2.0 | Август 2026*