Виправлення періодичної втрати даних¶
Проблема¶
Дані (MicroDAO, агенти) періодично зникають з бази даних, що призводить до помилок на сайті: - "MicroDAO не знайдено" - "Агенти не знайдені" (0 агентів) - "Помилка завантаження агентів"
Причини¶
- PostgreSQL перезапускається і втрачає дані через проблеми з персистентністю
- Міграції не застосовуються при перезапуску (initdb.d працює тільки при першому створенні)
- Відновлення з бекапу не працює через активні з'єднання до БД
- 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 - рівень логування для реплікації
Перевірка¶
Перевірити поточний стан¶
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
Якщо дані все ще втрачаються¶
-
Перевірити бекапи:
bash ls -lh /opt/microdao-daarion/db_backups/ -
Перевірити логи PostgreSQL:
bash docker logs daarion-postgres --since 1h | grep -i "error\|fatal\|panic" -
Перевірити volume персистентність:
bash docker volume inspect daarion_pgdata -
Запустити 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 персистентністю