Перейти к основному содержимому
Версия: 3.0

Установка в режиме кластера

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.