116 lines
4.5 KiB
Markdown
116 lines
4.5 KiB
Markdown
# Виправлення періодичної втрати даних
|
||
|
||
## Проблема
|
||
|
||
Дані (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 персистентністю
|