Эта документация была автоматически переведена ИИ.
Перед развертыванием кластерного приложения необходимо выполнить следующие подготовительные работы.
Для работы приложения NocoBase в кластерном режиме требуется поддержка следующих плагинов:
| Функция | Плагин |
|---|---|
| Адаптер кэша | Встроенный |
| Адаптер синхронных сигналов | @nocobase/plugin-pubsub-adapter-redis |
| Адаптер очереди сообщений | @nocobase/plugin-queue-adapter-redis или @nocobase/plugin-queue-adapter-rabbitmq |
| Адаптер распределенной блокировки | @nocobase/plugin-lock-adapter-redis |
| Распределитель Worker ID | @nocobase/plugin-workerid-allocator-redis |
Прежде всего, убедитесь, что вы получили лицензии на вышеуказанные плагины (вы можете приобрести соответствующие лицензии через платформу коммерческих плагинов).
Другие системные компоненты, помимо самого экземпляра приложения, могут быть выбраны специалистами по эксплуатации в соответствии с потребностями вашей команды.
Поскольку текущий кластерный режим ориентирован только на экземпляры приложений, база данных временно поддерживает только один узел. Если у вас есть архитектура базы данных типа «мастер-подчиненный» (master-slave) или аналогичная, вам потребуется реализовать ее самостоятельно с помощью промежуточного ПО, обеспечив при этом прозрачность для приложения NocoBase.
Кластерный режим NocoBase требует использования промежуточного ПО для обеспечения связи и координации между кластерами, включая:
Если все компоненты промежуточного ПО используют Redis, вы можете запустить единый сервис Redis во внутренней сети кластера (или в Kubernetes). Также можно включить отдельный сервис Redis для каждой функции (кэш, синхронные сигналы, очередь сообщений и распределенная блокировка).
Рекомендации по версиям
redis-stack, включающая функцию Bloom Filter.NocoBase использует каталог storage для хранения системных файлов. В многоузловом режиме вам следует монтировать облачный диск (или NFS) для обеспечения общего доступа между несколькими узлами. В противном случае локальное хранилище не будет автоматически синхронизироваться, и приложение не сможет работать корректно.
При развертывании с использованием Kubernetes, пожалуйста, обратитесь к разделу Развертывание в Kubernetes: Общее хранилище.
Кластерный режим требует использования балансировщика нагрузки для распределения запросов, а также для проверки работоспособности и обеспечения отказоустойчивости экземпляров приложений. Выбор и настройка этой части осуществляется в соответствии с эксплуатационными потребностями вашей команды.
В качестве примера рассмотрим самостоятельно настроенный Nginx. Добавьте следующее содержимое в файл конфигурации:
Это означает, что запросы будут обратно проксироваться и распределяться между различными узлами сервера для обработки.
Для промежуточного ПО балансировки нагрузки, предоставляемого другими облачными провайдерами, пожалуйста, обратитесь к документации по конфигурации, предоставленной конкретным провайдером.
Все узлы в кластере должны использовать одинаковую конфигурацию переменных окружения. Помимо базовых переменных окружения NocoBase, необходимо также настроить следующие переменные окружения, связанные с промежуточным ПО.
Когда приложение работает на многоядерном узле, вы можете включить многоядерный режим для этого узла:
Если вы развертываете поды приложения в Kubernetes, вы можете игнорировать эту конфигурацию и контролировать количество экземпляров приложения через количество реплик пода.
Некоторые системные коллекции в NocoBase используют глобально уникальные ID в качестве первичных ключей. Чтобы избежать конфликтов первичных ключей в кластере, каждый экземпляр приложения должен получить уникальный Worker ID через распределитель Worker ID. Текущий диапазон Worker ID составляет 0–31, что означает, что одно и то же приложение может одновременно работать максимум на 32 узлах. Подробнее о дизайне глобально уникальных ID см. в @nocobase/snowflake-id.
Как правило, все связанные адаптеры могут использовать один и тот же экземпляр Redis, но лучше использовать разные базы данных, чтобы избежать потенциальных конфликтов ключей, например:
В настоящее время каждый плагин использует свои собственные переменные окружения Redis. В будущем мы рассмотрим возможность унификации и использования REDIS_URL в качестве резервной конфигурации.
Если вы используете Kubernetes для управления кластером, вы можете настроить вышеуказанные переменные окружения в ConfigMap или Secret. Дополнительную информацию можно найти в разделе Развертывание в Kubernetes.
После завершения всех вышеуказанных подготовительных работ вы можете перейти к процессу эксплуатации, чтобы продолжить управление экземплярами приложения.