Установка и настройка внешнего сервера NATS
Требования к параметрам внешнего сервера NATS
Перед установкой внешнего сервера NATS необходимо проверить серверное оборудование на соответствие следующим требованиям:
| Параметр | Требование |
|---|---|
Процессор |
не менее 4 ядер |
Оперативная память |
не менее 8 ГБ |
Жесткий диск |
не менее 8 ГБ |
|
Указанные требования к параметрам внешнего сервера NATS:
|
| Минимальные требования к параметрам внешнего сервера NATS приведены согласно официальной документации NATS |
Установка внешнего сервера NATS
Установить внешний сервер NATS можно следующими способами:
Установка внешнего сервера NATS по документации NATS и его настройка
Чтобы установить внешний сервер NATS, необходимо выполнить действия согласно официальной документации NATS.
Для упрощения взаимодействия, тестирования и управления внешним сервером NATS рекомендуется использовать инструменты командной строки NATS согласно официальной документации NATS.
| Чтобы внешний сервер NATS работал в фоновом режиме, необходимо запустить его как сервис или как контейнер Docker |
Требования к настройке внешнего сервера NATS, установленного по официальной документации NATS:
-
включить JetStream
-
создать и настроить стрим с именем federation и темой federation.events.>:
-
без ограничения максимального размера сообщения (Maximum Message Size)
-
без ограничения максимального количества сообщений (Max Messages)
-
с общим лимитом хранилища стрима (Stream Storage Limit) в 1 ГБ
-
для политики удержания данных (Retention Policy) указать limits
-
для политики отбрасывания (Discard Policy) выбрать значение old
-
-
указать максимальный размер полезной нагрузки для всего внешнего сервера NATS Max Payload Size — 4194304 байт
Рекомендации к настройке внешнего сервера NATS, установленного по официальной документации NATS:
-
в явном виде указать директорию для логирования, иначе лог-файлы будут записываться в syslog (если он настроен)
-
если в качестве места хранения данных подсистемы JetStream выбран диск, то явно указать путь к месту хранения данных, иначе папка с данными будет создана в /tmp/
-
ограничить размер используемой оперативной памяти и жесткого диска
-
настроить firewall (см. открытие соответствующих сетевых портов)
-
настроить TLS для безопасного соединения
| Сертификаты для Платформы IVA MCU (клиент NATS) и внешнего сервера NATS должны быть подписаны одним корневым сертификатом. Сертификаты и ключи должны быть выпущены в формате .pem |
Установка внешнего сервера NATS с помощью скрипта
Установка и настройка внешнего сервера NATS возможна с помощью скрипта, который можно скачать с официального файлового хранилища компании IVA Technologies. Скрипт устанавливает один сервер NATS, настраивает его как службу, а также устанавливает инструменты командной строки NATS.
| Скрипт не предусматривает настройку кластера и федерации серверов NATS |
Сервер перед установкой NATS должен быть подготовлен и соответствовать требованиям:
-
установлена ОС Debian / Astra Linux 1.7 / Astra Linux 1.8
-
установлены sudo и wget
-
у сервера должен быть выход в Интернет на момент запуска и работы скрипта
-
настроен firewall (см. открытие соответствующих сетевых портов)
Скрипт во время установки и настройки сервера NATS указывает порт 4222 TCP для подключения клиентов
Чтобы установить сервер NATS с помощью скрипта, необходимо:
-
на сервере от имени администратора запустить скрипт командой:
sudo bash setup_nats_server_v1.34.sh -
в ходе установки задать значения лимита памяти JetStream и лимита файлового хранилища JetStream
Пример вывода:
[2026-03-30 19:11:06] Введите значения для JetStream (например: 2G, 3G)... max_mem (лимит памяти JetStream) [2G]: max_file (лимит файлового хранилища JetStream) [3G]: -
после завершения установки и настройки скрипт выводит информацию:
-
где находятся лог-файл и конфигурационный файл
-
формирует сертификаты и ключ для настройки полей Keystore брокера сообщений и Truststore брокера сообщений в Платформе IVA MCU
Пример вывода:
ИНФОРМАЦИЯ О РАЗМЕЩЕНИИ: - Лог-файл: /var/log/nats/nats-server.log - Сертификаты: /etc/nats/certs/ - Порт NATS: 4222 - Конфигурация: /etc/nats/nats-server.conf ФАЙЛЫ TRUSTSTORE И KEYSTORE (PEM в каталоге скрипта): - Truststore: /root/truststore.txt (содержимое CA) - Keystore: /root/keystore.txt (CA + клиентский сертификат + ключ)
-
Проверки внешнего сервера NATS и интеграции с Платформой IVA MCU
Проверки работы внешнего сервера NATS и интеграции с Платформой IVA MCU необходимо выполнять после настройки серверов федерации.
Проверки на стороне Платформы IVA MCU
Проверка статуса синхронизации серверов федерации
Чтобы проверить статус синхронизации серверов федерации Платформ IVA MCU, необходимо:
Войти в веб-панель администрирования →
Перейти в раздел Федеративные связи →
Выбрать домен и нажать кнопку Федеративные связи → Выбрать удаленный сервер федерации → Статус синхронизации → Убедиться, что статус Успешно
Если статус синхронизации серверов федерации Неудача, то необходимо:
-
перезапустить синхронизацию:
Войти в веб-панель администрирования → Перейти в раздел Федеративные связи → Выбрать домен и нажать кнопку Федеративные связи → Выбрать удаленный сервер федерации → Нажать кнопку Синхронизировать -
перейти в веб-панель администрирования удаленного головного сервера федерации, скачать dump-файл и проверить лог-файл ivcs-server.log на наличие ошибок:
Ошибка №1 |
|
Ошибка №2 |
|
Ошибка №3 |
|
Ошибка №4 |
|
Ошибка №5 |
|
Ошибка №6 |
|
Решение |
|
Все перечисленные ошибки чаще всего возникают из-за некорректно указанных сертификатов и ключей в системных настройках NATS Платформы IVA MCU в полях Keystore брокера сообщений и Truststore брокера сообщений. Необходимо проверить, что:
При некорректно заполненных полях Truststore брокера сообщений и Keystore брокера сообщений Платформы в лог-файлах сервера NATS будут присутствовать записи об ошибке TLS handshake. Примеры лог-файла внешнего сервера NATS с ошибкой:
или
Если в лог-файле ivcs-server.log содержится ошибка 2 и в логах сервера NATS нет ошибок, то вероятно в системных настройках NATS в поле Keystore брокера сообщений не указан корневой сертификат. В случае возникновения ошибки 4 также стоит проверить открыт ли порт сервера NATS, по которому головной сервер Платформы IVA MCU должен выполнять подключение |
|
Проверка функционирования федерации
|
Администраторов головных серверов федерации, созданных по умолчанию при установке систем, нельзя добавлять в мероприятия в качестве федеративных участников. Проверку функционирования федерации рекомендуется проводить с участием вновь созданных пользователей |
Чтобы проверить функционирование федерации, необходимо:
-
создать новое мероприятие на сервере 1 федерации, пригласив в него пользователя из сервера 2 федерации
-
убедиться, что у пользователя из сервера 2 федерации в списке мероприятий отображается созданное мероприятие
-
если мероприятие не отображается, то необходимо скачать dump-файлы с каждого головного сервера федерации и проверить лог-файлы ivcs-server.log на наличие ошибок:
Ошибка |
Описание |
|
Ошибка возникает в случае, если на внешнем сервере NATS не создан стрим с именем federation и темой federation.events.>. Чтобы устранить ошибку, необходимо:
|
Проверки работы внешнего сервера NATS
Все проверки работы внешнего сервера NATS необходимо выполнять в консоли управления сервера NATS.
Если был настроен TLS, то к каждой команде необходимо добавлять:
--server <nats-server> --tlscert <path_client_cert> --tlskey <path_client_key> --tlsca <path_ca_cert>,
где:
<nats-server> — адрес внешнего сервера NATS, например nats://nats-server-test.local:4222 или nats://127.0.0.1:4222
<path_client_cert> — путь до места хранения клиентского сертификата (путь в скрипте по установке внешнего сервера NATS /etc/nats/certs/client-cert.pem)
<path_client_key> — путь до места хранения клиентского ключа (путь в скрипте по установке внешнего сервера NATS /etc/nats/certs/client-key.pem)
<path_ca_cert> — путь до корневого сертификата (путь в скрипте по установке внешнего сервера NATS /etc/nats/certs/ca-cert.pem)
Проверка активности JetStream
Чтобы проверить успешность запуска JetStream, необходимо:
-
открыть лог-файл nats-server.log внешнего сервера NATS (путь в скрипте по установке внешнего сервера NATS
/var/log/nats/nats-server.log) -
найти секцию JetStream и убедиться, что отсутствует запись JetStream Shutdown, что подтвердит успешность запуска JetStream
Пример вывода:
[1991] 2026/03/13 17:54:07.892567 [INF] Starting nats-server
[1991] 2026/03/13 17:54:07.893033 [INF] Version: 2.12.5
[1991] 2026/03/13 17:54:07.893037 [INF] Git: [0f6c831]
[1991] 2026/03/13 17:54:07.893039 [INF] Name: nats-js-node-1
[1991] 2026/03/13 17:54:07.893042 [INF] Node: el50GUtN
[1991] 2026/03/13 17:54:07.893043 [INF] ID: NCRZTMELDLORFCEDYE3WD7YOSQJGEPXS24AXAD5LHIZHYZCBPP7AE7TJ
[1991] 2026/03/13 17:54:07.893049 [INF] Using configuration file: /etc/nats/nats-server.conf (sha256:b0dde763f63b579615c5219db34f5d537fedea87a8a1cd7f920082fc00cb6158)
[1991] 2026/03/13 17:54:07.893966 [INF] Starting http monitor on 0.0.0.0:8222
[1991] 2026/03/13 17:54:07.894080 [INF] Starting JetStream
[1991] 2026/03/13 17:54:07.894163 [INF] _ ___ _____ ___ _____ ___ ___ _ __ __
[1991] 2026/03/13 17:54:07.894166 [INF] _ | | __|_ _/ __|_ _| _ \ __| /_\ | \/ |
[1991] 2026/03/13 17:54:07.894167 [INF] | || | _| | | \__ \ | | | / _| / _ \| |\/| |
[1991] 2026/03/13 17:54:07.894169 [INF] \__/|___| |_| |___/ |_| |_|_\___/_/ \_\_| |_|
[1991] 2026/03/13 17:54:07.894170 [INF]
[1991] 2026/03/13 17:54:07.894172 [INF] https://docs.nats.io/jetstream
[1991] 2026/03/13 17:54:07.894174 [INF]
[1991] 2026/03/13 17:54:07.894175 [INF] ---------------- JETSTREAM ----------------
[1991] 2026/03/13 17:54:07.894177 [INF] Strict: true
[1991] 2026/03/13 17:54:07.894186 [INF] Max Memory: 1.86 GB
[1991] 2026/03/13 17:54:07.894194 [INF] Max Storage: 2.79 GB
[1991] 2026/03/13 17:54:07.894196 [INF] Store Directory: "/var/lib/nats/jetstream"
[1991] 2026/03/13 17:54:07.894200 [INF] API Level: 3
[1991] 2026/03/13 17:54:07.894202 [INF] -------------------------------------------
[1991] 2026/03/13 17:54:07.894387 [INF] Took 302.476µs to start JetStream
[1991] 2026/03/13 17:54:07.894432 [INF] Listening for client connections on 0.0.0.0:4222
[1991] 2026/03/13 17:54:07.894549 [INF] Server is ready
Проверка приема и передачи сообщений брокером сообщений
Для проверки приема и передачи сообщений брокером сообщений необходимо:
-
в терминальном окне 1 выполнить команду:
sudo nats pub "someSubject" "Some message"Пример вывода:
19:59:51 Published 12 bytes to "someSubject" -
в терминальном окне 2 подписаться на ранее указанную тему someSubject командой:
sudo nats sub "someSubject"Пример вывода:
20:11:10 Subscribing on someSubject -
в терминальном окне 1 отправить сообщение по указанной теме someSubject командой:
sudo nats pub "someSubject" "Some message" -
убедиться, что в терминальном окне 2 отобразится информация о новом сообщении:
[#1] Received on "someSubject" Some message -
если в терминальном окне 2 сообщение не отобразилось, то это означает, что внешний сервер NATS настроен некорректно. Необходимо скачать лог-файл внешнего сервера NATS для изучения проблемы. При необходимости включить расширенное логирование debug и / или трассировку trace
Проверка наличия стрима federation
Чтобы убедиться в наличии стрима federation, необходимо выполнить команду:
sudo nats stream ls
Пример вывода команды:
╭────────────────────────────────────────────────────────────────────────────────────╮
│ Streams │
├────────────┬─────────────┬─────────────────────┬──────────┬─────────┬──────────────┤
│ Name │ Description │ Created │ Messages │ Size │ Last Message │
├────────────┼─────────────┼─────────────────────┼──────────┼─────────┼──────────────┤
│ federation │ │ 2026-03-06 19:07:26 │ 163 │ 366 KiB │ 1h22m45s │
╰────────────┴─────────────┴─────────────────────┴──────────┴─────────┴──────────────╯
Если в выводе команды нет стрима с именем federation, то его необходимо создать.
Проверка настроенных параметров стрима federation
Для проверки настроенных параметров стрима federation необходимо выполнить команду:
sudo nats stream info federation
Пример вывода команды:
Information for Stream federation created 2026-03-13 18:21:43
Subjects: federation.events.>
Replicas: 1
Storage: File
Options:
Retention: Limits
Acknowledgments: true
Discard Policy: Old
Duplicate Window: 2m0s
Direct Get: true
Allows Batch Publish: false
Allows Counters: false
Allows Msg Delete: true
Allows Per-Message TTL: false
Allows Purge: true
Allows Schedules: false
Allows Rollups: false
Limits:
Maximum Messages: unlimited
Maximum Per Subject: unlimited
Maximum Bytes: 1.0 GiB
Maximum Age: unlimited
Maximum Message Size: unlimited
Maximum Consumers: unlimited
State:
Host Version: 2.12.5
Required API Level: 0 hosted at level 3
Messages: 4
Bytes: 10 KiB
First Sequence: 1 @ 2026-03-13 18:34:58
Last Sequence: 4 @ 2026-03-13 18:35:54
Active Consumers: 2
Number of Subjects: 2
Убедиться в правильности настроек параметров стрима federation:
-
в строке Subjects должна быть указана тема federation.events.>. Если это не так, то необходимо пересоздать стрим с правильной темой
Удалить неверно созданный стрим можно командой:
sudo nats stream delete <stream_name>где <stream_name> — имя стрима, в данном случае federation
-
в строке Active Consumers после выполнения настроек на стороне Платформы IVA MCU должно быть указано столько подписчиков, сколько головных серверов Платформы входит в состав федерации. Если это не так, то необходимо перезапустить службу ivcs-server.service на каждом головном сервере федерации. В случае, если перезапуск службы ivcs-server.service не разрешил проблему, необходимо изучить лог-файл ivcs-server.log на каждом головном сервере федерации, а также лог-файл внешнего сервера NATS
|
Параметры стрима должны соответствовать настройкам. Если настройки не соблюдены, то необходимо внести изменения в стрим командой:
где <stream_name> — имя стрима, в данном случае federation |
Проверка наличия сообщений для темы стрима
После попытки создания мероприятия с федеративным пользователем в Платформе IVA MCU можно проверить наличие сообщений в теме federation.events.> стрима federation с помощью команды:
sudo nats stream view federation
Пример вывода:
[10] Subject: federation.events.vjXe96Ccjcs16lDILxdhwu/OQ1pJMSUSOIXaRJfWzSA13GFoJiaAhmGvq4/Qu3eq Received: 2026-03-10 09:21:52
{"fromCompanyID":"MCU_YQVIK5pL8e00+lgjg6RT0IakUBFjXYjoT0arZYEv7D1WUWTU+ZVCBdf6ruf1fgHc_ivcs.su@80","toCompanyID":"MCU_vjXe96Ccjcs16lDILxdhwu/OQ1pJMSUSOIXaRJfWzSA13GFoJiaAhmGvq4/Qu3eq_ivcs.su@80","type":"federation.conference.participant.update","payload":"{\"conferenceId\":\"f959c76d-7429-4318-9761-6cd4a9f271f9\",\"conferenceSessionId\":\"48216e9d-f057-42e3-8847-628b770a5d37\",\"participant\":{\"profileId\":\"28b5a323-05d4-4064-9f4f-811d7edf9fbe\",\"conferenceSessionParticipantId\":\"a973e65f-cec6-4286-acc8-b677d0693415\",\"name\":\"Mobile user3\",\"email\":\"mobileuser3@testivcs.su\",\"isRegistered\":false,\"isLocal\":false,\"inviteResponseType\":\"APPROVE\",\"settings\":{\"role\":\"MODERATOR\",\"dialAtStart\":false,\"informBySms\":false,\"interpreterLanguagesPair\":[],\"customPermissions\":[]}},\"domainId\":\"6a310898-e3a7-4562-9b6b-995b7f9fff17\",\"domainHost\":\"dev-stand-06.hi-tech.org\",\"eventId\":\"dd113da2-1a22-456c-b5f8-647f465e06f0\",\"eventDate\":1773123711982,\"eventType\":\"FEDERATION_CONFERENCE_PARTICIPANT_UPDATE\"}","serviceKey":"MCU","eventId":"b7321d5d-0b67-4b94-8600-7783c2172dbe","eventDate":1773123711984,"eventType":"FEDERATION_EVENT_WRAPPED","jsSubject":"federation.events.vjXe96Ccjcs16lDILxdhwu/OQ1pJMSUSOIXaRJfWzSA13GFoJiaAhmGvq4/Qu3eq"}
Если вывод пустой, то необходимо проверить:
-
настройки сервера NATS
При необходимости, на стороне внешнего сервера NATS можно включить расширенное логирование debug и трассировку trace.
Проверка наличия подписчиков стрима
После выполнения настроек на стороне Платформы IVA MCU можно проверить наличие подписчиков стрима с помощью команды:
sudo nats consumer list federation
Пример вывода:
╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Consumers │
├───────────────────────────────────────────────────────────────────────────┬─────────────┬─────────────────────┬─────────────┬─────────────┬───────────────┤
│ Name │ Description │ Created │ Ack Pending │ Unprocessed │ Last Delivery │
├───────────────────────────────────────────────────────────────────────────┼─────────────┼─────────────────────┼─────────────┼─────────────┼───────────────┤
│ federationDURABLE_CONSUMER_FEDERATION7b43303e-5b4d-4bec-9a94-786bda34ffd5 │ │ 2026-03-30 14:13:37 │ 0 │ 0 │ 1d1h29m42s │
│ federationDURABLE_CONSUMER_FEDERATIONb0aca8c7-c172-4ad9-8f19-894b181b9252 │ │ 2026-03-28 08:09:01 │ 0 │ 0 │ 1h40m8s │
╰───────────────────────────────────────────────────────────────────────────┴─────────────┴─────────────────────┴─────────────┴─────────────┴───────────────╯
Если подписчиков нет, то необходимо проверить:
-
настройки сервера NATS
При необходимости, на стороне внешнего сервера NATS можно включить расширенное логирование debug и трассировку trace.
По подписчику можно получить дополнительную информацию командой:
sudo nats consumer info federation <consumer_name>
где <consumer_name> — имя подписчика, например, federationDURABLE_CONSUMER_FEDERATION7b43303e-5b4d-4bec-9a94-786bda34ffd5
Пример вывода:
Information for Consumer federation > federationDURABLE_CONSUMER_FEDERATION0fdafe06-25ab-4f01-acfb-9efaf881ef32 created 2026-03-27 13:50:55
Configuration:
Name: federationDURABLE_CONSUMER_FEDERATION0fdafe06-25ab-4f01-acfb-9efaf881ef32
Delivery Subject: _INBOX.dMce6bSqHVMIs4e8gGqjyc
Filter Subject: federation.events.MgSurYS4BNBby+feFn+M7clW5Lt7Gr+gyhk+mexeMa2ZjtZ/Lv+0JyeigDNQ8Pz7
Deliver Policy: New
Deliver Queue Group: IVAMCU_CLIENT_QUEUE_federation_MgSurYS4BNBby+feFn+M7clW5Lt7Gr+gyhk+mexeMa2ZjtZ/Lv+0JyeigDNQ8Pz7
Ack Policy: Explicit
Ack Wait: 1.00s
Replay Policy: Instant
Maximum Deliveries: 10,240
Max Ack Pending: 1
Flow Control: false
Backoff: 1s, 5s, 10s
State:
Host Version: 2.12.5
Required API Level: 0 hosted at level 3
Last Delivered Message: Consumer sequence: 175 Stream sequence: 3,466 Last delivery: 1h46m27s ago
Acknowledgment Floor: Consumer sequence: 175 Stream sequence: 3,466 Last Ack: 1h46m27s ago
Outstanding Acks: 0 out of maximum 1
Redelivered Messages: 0
Unprocessed Messages: 0
Active Interest: Active using Queue Group IVAMCU_CLIENT_QUEUE_federation_MgSurYS4BNBby+feFn+M7clW5Lt7Gr+gyhk+mexeMa2ZjtZ/Lv+0JyeigDNQ8Pz7
