N8n Database: Архитектура, Типы, Управление и Интеграция
N8n — это инструмент автоматизации рабочих процессов с открытым исходным кодом, который использует внутреннюю базу данных для хранения критически важной информации. Понимание архитектуры, типов и принципов работы с базой данных N8n является фундаментальным для развертывания, масштабирования и администрирования платформы. База данных служит хранилищем для конфигураций, выполненных рабочих процессов, учетных данных пользователей и системных данных.
Архитектура и роль базы данных в N8n
N8n спроектирован как приложение, не зависящее от состояния (stateless). Это означает, что все состояние, необходимое для работы, сохраняется во внешней базе данных. Такая архитектура обеспечивает возможность горизонтального масштабирования (запуска нескольких экземпляров воркеров), высокой доступности и упрощает процедуры резервного копирования и восстановления. Основные сущности, хранящиеся в базе данных, включают:
- Workflows (Рабочие процессы): Полные определения рабочих процессов, включая узлы, связи, параметры и настройки.
- Execution Data (Данные выполнений): История запусков каждого рабочего процесса, включая статус (успех, ошибка), начальные и завершающие временные метки, а также данные, которые передавались между узлами (если режим сохранения данных активирован).
- Credentials (Учетные данные): Зашифрованные данные для подключения к внешним сервисам (API-ключи, токены, логины и пароли).
- User Information (Информация о пользователях): Данные учетных записей пользователей, роли и настройки (при использовании облачной или корпоративной версии с аутентификацией).
- Settings and Instances (Настройки и экземпляры): Системные настройки, информация о webhook-идентификаторах, метрики.
DB_TYPE: Тип СУБД (postgresdb,mysqldb,sqlite).DB_POSTGRESDB_HOST,DB_POSTGRESDB_PORT,DB_POSTGRESDB_DATABASE,DB_POSTGRESDB_USER,DB_POSTGRESDB_PASSWORD: Параметры подключения для PostgreSQL.DB_MYSQLDB_HOST,DB_MYSQLDB_PORT,DB_MYSQLDB_DATABASE,DB_MYSQLDB_USER,DB_MYSQLDB_PASSWORD: Параметры подключения для MySQL/MariaDB.DB_SQLITE_DATABASE: Путь к файлу SQLite (по умолчанию./database.sqlite).EXECUTIONS_DATA_PRUNE: Включение автоматической очистки старых данных выполнений (true/false).EXECUTIONS_DATA_MAX_AGE: Максимальный возраст (в часах) данных выполнений перед удалением (например,168для 7 дней).
Поддерживаемые типы баз данных
N8n поддерживает несколько систем управления базами данных (СУБД), что позволяет адаптировать его к различным инфраструктурным требованиям. Выбор базы данных влияет на производительность, надежность и сложность администрирования.
| Тип базы данных | Рекомендуемый сценарий использования | Ключевые особенности в контексте N8n |
|---|---|---|
| SQLite | Разработка, тестирование, персональное использование, простые развертывания. | База данных по умолчанию. Не требует отдельного сервера. Все данные хранятся в одном файле (например, database.sqlite). Не подходит для многопользовательского или производственного использования из-за ограничений параллелизма. |
| PostgreSQL | Производственные развертывания, высокая доступность, масштабирование. | |
| MySQL | Производственные развертывания (альтернатива PostgreSQL). | Полностью поддерживается. Хороший выбор, если в организации уже используется стек технологий на основе MySQL. Требует версии 5.7 или выше с движком InnoDB. |
| MariaDB | Производственные развертывания (как замена MySQL). | Полная совместимость с MySQL. Поддерживается аналогичным образом. |
Настройка подключения к базе данных
Подключение N8n к выбранной базе данных осуществляется через переменные окружения или конфигурационный файл ~/.n8n/.n8n. Основные переменные для настройки:
Пример переменных окружения для развертывания N8n с PostgreSQL в Docker:
DB_TYPE=postgresdb DB_POSTGRESDB_HOST=postgres DB_POSTGRESDB_PORT=5432 DB_POSTGRESDB_DATABASE=n8n DB_POSTGRESDB_USER=n8n_user DB_POSTGRESDB_PASSWORD=secure_password N8N_ENCRYPTION_KEY=your_super_secure_encryption_key
Миграции базы данных и управление схемой
N8n использует систему миграций для управления схемой базы данных. При обновлении версии N8n на новую, скрипты миграции автоматически применяются к базе данных для добавления новых таблиц, изменения колонок или индексов. Этот процесс происходит при запуске приложения. Крайне важно:
- Всегда создавать полную резервную копию базы данных перед обновлением N8n.
- Проверять заметки о выпуске (changelog) на предмет критических изменений в схеме БД.
- Обеспечивать, чтобы все запущенные экземпляры N8n были остановлены во время обновления, чтобы избежать конфликтов миграции.
Резервное копирование и восстановление
Регулярное резервное копирование базы данных N8n является обязательной процедурой. Стратегия резервного копирования зависит от используемой СУБД:
- PostgreSQL/MySQL/MariaDB: Использование встроенных утилит (
pg_dump,mysqldump) для создания дампов SQL. Рекомендуется настроить автоматическое ежедневное резервное копирование с хранением нескольких поколений копий. - SQLite: Копирование файла
database.sqliteв безопасное место. Необходимо убедиться, что в момент копирования N8n не производит запись в базу данных.
Для восстановления необходимо остановить N8n, развернуть резервную копию базы данных и запустить N8n заново. Если используется шифрование учетных данных (через N8N_ENCRYPTION_KEY), необходимо сохранять тот же ключ шифрования, иначе все сохраненные учетные данные станут нечитаемыми.
Производительность и оптимизация
С ростом количества рабочих процессов и истории выполнений производительность базы данных может снижаться. Ключевые рекомендации по оптимизации:
- Регулярная очистка данных выполнений: Активация параметров
EXECUTIONS_DATA_PRUNEиEXECUTIONS_DATA_MAX_AGEдля автоматического удаления старых записей. Можно настроить отдельное задание в N8n для очистки базы данных. - Индексация: N8n создает базовые индексы. Для больших инсталляций может потребоваться анализ запросов и создание дополнительных индексов под конкретную нагрузку.
- Выделение ресурсов: Для PostgreSQL/MySQL необходимо обеспечить достаточный объем оперативной памяти и быстрые диски (SSD). Настройка пула соединений в конфигурации СУБД.
- Разделение данных: В крайних случаях можно рассмотреть партиционирование таблиц с данными выполнений по дате.
Интеграция и расширенное использование
База данных N8n может быть интегрирована с внешними системами мониторинга (например, Prometheus) для отслеживания метрик. Прямое манипулирование данными в базе (помимо резервного копирования/восстановления) не рекомендуется, так как может привести к нарушению целостности данных. Для программного управления рабочими процессами следует использовать REST API N8n. Внутренняя структура базы данных может меняться от версии к версии, поэтому любые внешние скрипты, работающие напрямую с таблицами, требуют тщательного сопровождения.
Ответы на часто задаваемые вопросы (FAQ)
Какую базу данных выбрать для production-окружения?
Для production настоятельно рекомендуется использовать PostgreSQL. Он демонстрирует наилучшую производительность и стабильность под нагрузкой, обладает развитыми механизмами репликации и отказоустойчивости. MySQL/MariaDB также являются допустимыми вариантами. SQLite не должен использоваться в production.
Как перенести данные с SQLite на PostgreSQL?
Процесс миграции включает несколько шагов: 1) Создание дампа данных из SQLite с помощью специализированных инструментов (например, sqlite3 и скриптов конвертации). 2) Создание пустой базы данных в PostgreSQL. 3) Настройка N8n на использование PostgreSQL с указанием новой пустой базы. 4) Запуск N8n для инициализации схемы. 5) Импорт данных из дампа в таблицы PostgreSQL, соблюдая порядок и целостность. Из-за сложности рекомендуется рассмотреть возможность создания новых рабочих процессов в чистой PostgreSQL-инсталляции и переноса только критических учетных данных вручную.
Почему важно устанавливать переменную N8N_ENCRYPTION_KEY при использовании внешней БД?
Переменная N8N_ENCRYPTION_KEY задает ключ, которым шифруются все учетные данные перед сохранением в базе данных. Если этот ключ не установлен или меняется между запусками, N8n не сможет расшифровать ранее сохраненные учетные данные, что приведет к сбоям в рабочих процессах. Этот ключ должен быть строго секретным и постоянным для одной инсталляции.
Как очистить историю выполнений рабочих процессов?
Существует два основных способа: 1) Автоматический: Установить переменные окружения EXECUTIONS_DATA_PRUNE=true и EXECUTIONS_DATA_MAX_AGE= (возраст в часах). N8n будет автоматически удалять старые выполнения. 2) Вручную через интерфейс: В разделе «Executions» можно удалить отдельные выполнения или все выполнения для конкретного рабочего процесса. Для массового удаления можно использовать SQL-запросы к базе данных (с осторожностью).
Можно ли запустить несколько экземпляров N8n (воркеров) с одной базой данных?
Да, это одна из ключевых целей использования внешней СУБД. Несколько экземпляров N8n (в режиме «worker» или «webhook») могут подключаться к одной и той же базе данных PostgreSQL или MySQL. Это позволяет распределять нагрузку по выполнению рабочих процессов. Важно настроить правильный режим запуска (N8N_MODE=worker или N8N_MODE=webhook) и использовать единую очередь (например, Redis) для координации, если это требуется.
Где физически хранятся файлы, загруженные через узел «Read/Write Files from Disk»?
Эти файлы по умолчанию хранятся на локальной файловой системе того сервера (контейнера), на котором запущен экземпляр N8n, в папке, указанной в переменной N8N_USER_FOLDER. Они НЕ хранятся в базе данных. Для обеспечения отказоустойчивости и согласованности при использовании нескольких воркеров эту папку необходимо размещать на общем сетевым хранилище (NFS, S3 через FUSE и т.д.), доступном всем экземплярам.
Добавить комментарий