docs: Add database stability fix documentation
This commit is contained in:
115
docs/DB_STABILITY_FIX.md
Normal file
115
docs/DB_STABILITY_FIX.md
Normal file
@@ -0,0 +1,115 @@
|
||||
# Виправлення проблеми з періодичною втратою даних
|
||||
|
||||
## Проблема
|
||||
|
||||
Дані в базі даних "відвалюються" через деякий час (щоденна помилка). PostgreSQL контейнер перезапускається і втрачає дані.
|
||||
|
||||
## Причини
|
||||
|
||||
1. **PostgreSQL не завершується коректно**: Логи показують "database system was interrupted; last known up at"
|
||||
2. **Відсутність автоматичного відновлення**: Немає механізму для автоматичного відновлення даних
|
||||
3. **Недостатні налаштування PostgreSQL**: Відсутні налаштування для правильного завершення роботи
|
||||
|
||||
## Виправлення
|
||||
|
||||
### 1. Покращено конфігурацію PostgreSQL
|
||||
|
||||
**`docker-compose.db.yml`**:
|
||||
- Додано `command` з налаштуваннями для правильного завершення
|
||||
- Додано `checkpoint_timeout=15min` для частіших checkpoint'ів
|
||||
- Додано `wal_level=replica` та `max_wal_size=1GB` для кращої персистентності
|
||||
|
||||
### 2. Створено скрипт моніторингу
|
||||
|
||||
**`scripts/monitor-db-stability.sh`**:
|
||||
- Автоматично перевіряє стан БД кожні 5 хвилин
|
||||
- Виявляє втрату даних
|
||||
- Автоматично відновлює з бекапу
|
||||
- Застосовує міграції та синхронізує агентів
|
||||
|
||||
### 3. Налаштовано автоматичний моніторинг
|
||||
|
||||
**Cron job** (кожні 5 хвилин):
|
||||
```bash
|
||||
*/5 * * * * /opt/microdao-daarion/scripts/monitor-db-stability.sh >> /var/log/db-stability-monitor.log 2>&1
|
||||
```
|
||||
|
||||
### 4. Існуючі механізми
|
||||
|
||||
- **Health check**: `scripts/db-health-check.sh` (кожні 30 хвилин)
|
||||
- **Backups**: Автоматичні бекапи кожні 12 годин
|
||||
- **Migrations**: Автоматичне застосування при виявленні проблем
|
||||
|
||||
## Використання
|
||||
|
||||
### Перевірити стан вручну
|
||||
|
||||
```bash
|
||||
cd /opt/microdao-daarion
|
||||
bash scripts/monitor-db-stability.sh
|
||||
```
|
||||
|
||||
### Перевірити логи моніторингу
|
||||
|
||||
```bash
|
||||
tail -f /var/log/db-stability-monitor.log
|
||||
```
|
||||
|
||||
### Перевірити cron
|
||||
|
||||
```bash
|
||||
crontab -l | grep monitor-db-stability
|
||||
```
|
||||
|
||||
## Процес відновлення
|
||||
|
||||
Коли монітор виявляє втрату даних:
|
||||
|
||||
1. Перевіряє наявність бекапу
|
||||
2. Відновлює БД з бекапу
|
||||
3. Застосовує всі міграції
|
||||
4. Синхронізує агентів НОДА2
|
||||
5. Видаляє тестових агентів
|
||||
6. Логує результат
|
||||
|
||||
## Налаштування PostgreSQL
|
||||
|
||||
Додані параметри для кращої персистентності:
|
||||
|
||||
- `shared_buffers=256MB` - буфер для кешування
|
||||
- `max_connections=200` - максимальна кількість підключень
|
||||
- `checkpoint_timeout=15min` - частіші checkpoint'и
|
||||
- `wal_level=replica` - рівень WAL для реплікації
|
||||
- `max_wal_size=1GB` - максимальний розмір WAL
|
||||
|
||||
## Перевірка після проблеми
|
||||
|
||||
```bash
|
||||
# 1. Перевірити логи PostgreSQL
|
||||
docker logs daarion-postgres --tail 50
|
||||
|
||||
# 2. Перевірити дані
|
||||
docker exec daarion-postgres psql -U postgres -d daarion -c "SELECT COUNT(*) FROM microdaos;"
|
||||
docker exec daarion-postgres psql -U postgres -d daarion -c "SELECT COUNT(*) FROM agents;"
|
||||
|
||||
# 3. Перевірити моніторинг
|
||||
tail -20 /var/log/db-stability-monitor.log
|
||||
|
||||
# 4. Запустити монітор вручну
|
||||
bash scripts/monitor-db-stability.sh
|
||||
```
|
||||
|
||||
## Запобігання повторенню
|
||||
|
||||
1. **Автоматичний моніторинг**: Кожні 5 хвилин
|
||||
2. **Покращена конфігурація**: Правильне завершення PostgreSQL
|
||||
3. **Автоматичне відновлення**: З бекапу при виявленні проблем
|
||||
4. **Health checks**: Регулярні перевірки здоров'я БД
|
||||
|
||||
## Поточний стан
|
||||
|
||||
- ✅ Моніторинг налаштовано (кожні 5 хвилин)
|
||||
- ✅ PostgreSQL конфігурацію покращено
|
||||
- ✅ Автоматичне відновлення працює
|
||||
- ✅ Логи зберігаються в `/var/log/db-stability-monitor.log`
|
||||
|
||||
Reference in New Issue
Block a user