Установка в режиме кластера
iQBot устанавливают на несколько серверов в двух случаях: чтобы отказ сервера не останавливал обслуживание клиентов и чтобы обрабатывать больше диалогов, чем выдерживает один сервер. Для этого есть два варианта установки, они описаны в отдельных статьях. Установка на один сервер описана в разделах Установка iQBot на Linux и Установка iQBot в Docker, эта статья дополняет её.
Два варианта кластера
| Резервный узел | Распределение нагрузки | |
|---|---|---|
| Для чего | Отказ сервера не останавливает обслуживание надолго | Больше диалогов в секунду и отказоустойчивость |
| Как работает | Платформа запущена на одном из двух узлов, на втором запускается при отказе | Диалоги обрабатывают несколько равноправных узлов одновременно, узлы связаны через Redis |
| Узлы | 2 | От 2 одинаковых узлов |
| Что нужно кроме узлов | Единый виртуальный адрес, база данных с репликой | Балансировщик, Redis, база данных с репликой |
| Как вносят изменения в ботов | Сразу, на единственном работающем узле | В Studio любого узла, остальные узнают через Redis без перезапуска |
| Отказ узла | Пауза на время запуска резервного узла | Диалоги продолжаются на оставшихся узлах |
Как выбрать. Резервный узел проще в установке и сопровождении, он подходит, если один сервер справляется с нагрузкой, а нужна защита от его отказа. Распределение нагрузки нужно, когда один сервер не справляется; оно же даёт отказоустойчивость без паузы на переключение, но требует Redis и балансировщик.
Общие требования
Для обоих вариантов одинаково следующее.
- Одна база данных. Все узлы работают с одной PostgreSQL 13 или новее. В ней хранятся боты, диалоги, пользователи, ключ подписи токенов и обученные модели NLU, поэтому на узлах iQBot своих данных нет. Включите
IQB_IQBFS_STORAGE=database: в этом режиме боты и настройки лежат в базе, а не на диске узла. - Отказоустойчивая база данных. iQBot подключается к базе по одному адресу из
IQB_DATABASE_URLи перечня серверов не понимает. Поэтому нужен адрес, который сам следует за основным сервером PostgreSQL. Обычно для этого используют Patroni с HAProxy или виртуальный адрес, управляемый средствами репликации, либо управляемую базу данных вашей инфраструктуры. Базу и пользователя создайте на основном сервере, как в шаге 1 раздела Установка iQBot на Linux, реплика получит их через репликацию. После переключения базы проверьте/status. Если ядро не восстановило подключение само, перезапустите службуiqbot. - Одинаковая версия и настройки. На всех узлах стоит одна версия платформы и одинаковый файл
.env.IQB_EXTERNAL_URLуказывает на общий адрес, по которому работают iQChannels и администраторы, а не на адрес отдельного узла. - Языковой сервер. Ему нужно около 1,3 ГБ памяти на язык при векторах размерности 100 (около 4 ГБ при 300). Его ставят на каждом узле или выносят на отдельный сервер и указывают одним адресом в
IQB_MODULE_NLU_LANGUAGESOURCES, см. Установка iQBot на Linux. - Состав узла. Узел — это ядро, Studio, NLU, Messaging и языковой сервер вместе; что и когда стоит выносить на отдельные серверы, описано в разделе Размещение компонентов.
- Ресурсы. Для каждого узла ориентируйтесь на раздел Требования к серверам. Число подключений к базе растёт вместе с числом узлов: у каждого узла свой пул.
Redis нужен только для распределения нагрузки: через него узлы обмениваются заданиями, инвалидацией кэша файлов, событиями realtime и блокировками (переменные IQB_CLUSTER_ENABLED, IQB_REDIS_URL, IQB_REDIS_SCOPE, описаны в статье о распределении нагрузки). В схеме с резервным узлом работает один узел, и Redis не нужен: переменные кластера не задавайте.
Что передаётся между узлами через базу данных в любом варианте: состояние диалога клиента (текущий процесс и звено, переменные сессии и пользователя), пользователи и роли, обученные модели NLU. На стенде диалог клиента переходил с узла на узел: бот помнил, на каком шаге остановился, а модель, обученная на одном узле, начала распознавать фразы на другом без перезапуска.
С чего начать
- Кластер с резервным узлом: два узла, платформа работает на одном.
- Кластер с распределением нагрузки: несколько диалоговых узлов за балансировщиком.
Если для вашего проекта нужна другая схема, обратитесь в службу технической поддержки: support@iqstore.ru.