116 lines
4.6 KiB
Markdown
116 lines
4.6 KiB
Markdown
# Виправлення проблеми з періодичною втратою даних
|
||
|
||
## Проблема
|
||
|
||
Дані в базі даних "відвалюються" через деякий час (щоденна помилка). 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`
|
||
|