docs: Add documentation for periodic data loss fix
This commit is contained in:
116
docs/DB_DATA_LOSS_FIX.md
Normal file
116
docs/DB_DATA_LOSS_FIX.md
Normal 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 персистентністю
|
||||
|
||||
Reference in New Issue
Block a user