Skip to content

Виправлення періодичної втрати даних

Проблема

Дані (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 - рівень логування для реплікації

Перевірка

Перевірити поточний стан

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

Якщо дані все ще втрачаються

  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 персистентністю