4.5 KiB
4.5 KiB
Виправлення періодичної втрати даних
Проблема
Дані (MicroDAO, агенти) періодично зникають з бази даних, що призводить до помилок на сайті:
- "MicroDAO не знайдено"
- "Агенти не знайдені" (0 агентів)
- "Помилка завантаження агентів"
Причини
- PostgreSQL перезапускається і втрачає дані через проблеми з персистентністю
- Міграції не застосовуються при перезапуску (initdb.d працює тільки при першому створенні)
- Відновлення з бекапу не працює через активні з'єднання до БД
- Monitor не виявляє втрату NODE2 агентів (перевіряє тільки загальну кількість)
Виправлення
1. Покращений monitor-db-stability.sh
- ✅ Виправлено обробку порожніх змінних
- ✅ Додано перевірку NODE2 агентів (має бути ≥45 з 50)
- ✅ Збільшено поріг для агентів (≥50 замість ≥10)
- ✅ Додано завершення активних з'єднань перед відновленням БД
- ✅ Покращено логування та верифікацію після відновлення
2. Автоматичне відновлення
Monitor працює кожні 5 хвилин через cron і:
- Перевіряє кількість MicroDAO (має бути ≥5)
- Перевіряє загальну кількість агентів (має бути ≥50)
- Перевіряє кількість NODE2 агентів (має бути ≥45)
- Якщо дані втрачені:
- Завершує активні з'єднання
- Відновлює БД з бекапу
- Застосовує міграції
- Синхронізує NODE2 агентів
- Видаляє тестових агентів
- Виправляє URLs логотипів та банерів
3. Налаштування PostgreSQL
В docker-compose.db.yml додано параметри для кращої персистентності:
checkpoint_timeout=15min- частіші checkpoint'иmax_wal_size=1GB- більший розмір WALwal_level=replica- рівень логування для реплікації
Перевірка
Перевірити поточний стан
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
tail -50 /var/log/db-stability-monitor.log
Перевірити cron job
crontab -l | grep monitor
# Має бути: */5 * * * * /opt/microdao-daarion/scripts/monitor-db-stability.sh >> /var/log/db-stability-monitor.log 2>&1
Якщо дані все ще втрачаються
-
Перевірити бекапи:
ls -lh /opt/microdao-daarion/db_backups/ -
Перевірити логи PostgreSQL:
docker logs daarion-postgres --since 1h | grep -i "error\|fatal\|panic" -
Перевірити volume персистентність:
docker volume inspect daarion_pgdata -
Запустити monitor вручну:
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 персистентністю