docs: Add documentation for periodic data loss fix

This commit is contained in:
Apple
2025-12-05 02:36:49 -08:00
parent 02a0ea9540
commit 70b528f5cf

116
docs/DB_DATA_LOSS_FIX.md Normal file
View File

@@ -0,0 +1,116 @@
# Виправлення періодичної втрати даних
## Проблема
Дані (MicroDAO, агенти) періодично зникають з бази даних, що призводить до помилок на сайті:
- "MicroDAO не знайдено"
- "Агенти не знайдені" (0 агентів)
- "Помилка завантаження агентів"
## Причини
1. **PostgreSQL перезапускається** і втрачає дані через проблеми з персистентністю
2. **Міграції не застосовуються** при перезапуску (initdb.d працює тільки при першому створенні)
3. **Відновлення з бекапу не працює** через активні з'єднання до БД
4. **Monitor не виявляє втрату NODE2 агентів** (перевіряє тільки загальну кількість)
## Виправлення
### 1. Покращений monitor-db-stability.sh
- ✅ Виправлено обробку порожніх змінних
- ✅ Додано перевірку NODE2 агентів (має бути ≥45 з 50)
- ✅ Збільшено поріг для агентів (≥50 замість ≥10)
- ✅ Додано завершення активних з'єднань перед відновленням БД
- ✅ Покращено логування та верифікацію після відновлення
### 2. Автоматичне відновлення
Monitor працює кожні 5 хвилин через cron і:
1. Перевіряє кількість MicroDAO (має бути ≥5)
2. Перевіряє загальну кількість агентів (має бути ≥50)
3. Перевіряє кількість NODE2 агентів (має бути ≥45)
4. Якщо дані втрачені:
- Завершує активні з'єднання
- Відновлює БД з бекапу
- Застосовує міграції
- Синхронізує NODE2 агентів
- Видаляє тестових агентів
- Виправляє URLs логотипів та банерів
### 3. Налаштування PostgreSQL
В `docker-compose.db.yml` додано параметри для кращої персистентності:
- `checkpoint_timeout=15min` - частіші checkpoint'и
- `max_wal_size=1GB` - більший розмір WAL
- `wal_level=replica` - рівень логування для реплікації
## Перевірка
### Перевірити поточний стан
```bash
docker exec daarion-postgres psql -U postgres -d daarion -c "
SELECT
(SELECT COUNT(*) FROM microdaos) as microdaos,
(SELECT COUNT(*) FROM agents) as agents,
(SELECT COUNT(*) FROM agents WHERE node_id = 'node-2-macbook-m4max') as node2_agents;
"
```
### Перевірити логи monitor
```bash
tail -50 /var/log/db-stability-monitor.log
```
### Перевірити cron job
```bash
crontab -l | grep monitor
# Має бути: */5 * * * * /opt/microdao-daarion/scripts/monitor-db-stability.sh >> /var/log/db-stability-monitor.log 2>&1
```
## Якщо дані все ще втрачаються
1. **Перевірити бекапи:**
```bash
ls -lh /opt/microdao-daarion/db_backups/
```
2. **Перевірити логи PostgreSQL:**
```bash
docker logs daarion-postgres --since 1h | grep -i "error\|fatal\|panic"
```
3. **Перевірити volume персистентність:**
```bash
docker volume inspect daarion_pgdata
```
4. **Запустити monitor вручну:**
```bash
cd /opt/microdao-daarion
bash scripts/monitor-db-stability.sh
```
## Очікуваний результат
- MicroDAO: 9
- Агенти: 59 (9 core + 50 NODE2)
- NODE2 агенти: 50
- Monitor працює кожні 5 хвилин
- Автоматичне відновлення при втраті даних
## Статус
✅ Monitor покращено
✅ Перевірка NODE2 агентів додана
✅ Автоматичне відновлення працює
✅ URLs логотипів/банерів виправляються автоматично
Проблема має бути вирішена. Якщо дані все ще втрачаються, потрібно перевірити:
- Чи працює cron job
- Чи є актуальні бекапи
- Чи є проблеми з volume персистентністю