Приложение 6. Установка и настройка NATS
NATS - это совокупность продуктов с открытым кодом предоставляющий для ИТ инфраструктуры функционал:
- по хранению данных в формате ключ:значение (key:value)
- по хранению больших объектов (в том числе файлов)
- по предоставлению решений для модели издатель:подписчик (pub/sub)
NATS включает в себя функционал масштабирования, позволяющий организовать распределенное хранение и гарантированную доступность данных.
Планирование
Для обеспечения отказоустойчивости необходимо построение инфраструктуры из серверов NATS на нечетном количестве узлов. Минимальное количество узлов для отказоустойчивого решения - 3.
NATS Server может работать и в режиме одного инстанса, но мы не рекомендуем такое решение для продуктовых сред.
Хранение данных в NATS может потребовать достаточно много дискогово пространства. Необходимо заранее спланировать инфраструктуру, чтобы переполнение разделов не привело к деградации остальных сервисов. Правильнее всего, выделить под nats отдельный раздел и монтировать его в /opt/nats. В этом случае переполнение никак не повлияет на работу системы.
Хранение больших объектов(файлов) включает в себя хранение метаданных, поэтому максимальный размер хранимых файлов меньше предоставленного раздела. Кроме того, файловая система используется для хранения данных ключ:значение
и очередей сообщений (pub/sub).
Определение размера раздела зависимсит от действующей в Вашей компании политики глубины хранения оперативных данных (отчетов). Мы рекомендуем начинать с размера в 10 ГБ.
Типовая схема
Ниже приведена типовая схема с указанием стартовых параметров по размерам файловой системы. Реальные размеры файловой системы зависят от функционала инсталяции.
Совмещение компонентов NATS с другими компонентами системы Luxms BI возможно. Но мы рекомендуем использовать выделенные хосты для развертывания.
Установка и настройка
Установка NATS производится с помощью пакета, который мы собираем из исходного кода проекта.
Пакет содержит единый исполняемый бинарник и конфигурационные файлы, сервис, необходимый для развертывания распределенного хранилища.
Для ОС, основанных на DEB-пакетах, необходимо выполнить команды:
apt -y install nats-server
Для ОС, основаных на RPM-пакетах, необходимо выполнить команду:
dnf -y install nats-server
Проверяем, что nats-server может быть запущен:
# nats-server -v
nats-server: v2.9.11
При установке единственного экземпляра NATS Server-а дополнительной настройки конфигурации не требуется. Сервис работоспособен сразу после его запуска.
При развертывании кластерного решения необходима дополнительная корректировка конфигурационного файла.
Настройка кластера
Конфигурационный файл, поставляемый пакетом, содержит закомментированный блок параметров cluster
.
Необходимо удалить символы комментирования и указать в параметре routes
правильный список серверов кластера, за исключением адреса хоста, на котором выполняется настройка:
На всех серверах необходимо отредактировать конфигурационный файл /opt/nats/nats-server.conf
:
# Example config file
server_name: host1.local
port: 4222
#monitor_port: 8222
accounts: {
SYS: {
users: [
{ user: "x", pass: "y" }
]
},
}
system_account: SYS
#cluster {
# name: nats-cluster
# port: 6222
# Routes are actively solicited and connected to from this server.
# routes: [
# nats-route://host2.local:6222
# nats-route://host3.local:6222
# ]
#}
max_payload: 16MB
jetstream: enabled
jetstream {
store_dir: /opt/nats
max_mem: 1G
}
Изменяем значение параметра server_name
на более осмысленное, рекомендуем использовать FQDN хоста. Обязательно, на всех хостах должно быть уникальное значение для server_name
, в противном случае, кластер не запустится корректно.
Для выполнения команд с административными привилегиями необходимо авторизованное подключение к контексту SYS. Необходимо поменять имя подключения и пароль после установки.
Настройка фильтра сетевых соединений
При использовании фаерволов необходимо обеспечить сетевую доступность между хостами с установленным NATS Server и компонентами Luxms BI.
- При использовании FirewallD необходимо выполнить следующие команды.
- Для обеспечения сетевой доступности сервисов NATS, исключив команду с собственным адресом хоста.
а) На первом сервере NATS (192.168.0.10):
sudo firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.0.20/32 port port=6222 protocol=tcp accept'
sudo firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.0.30/32 port port=6222 protocol=tcp accept'
sudo firewall-cmd --runtime-to-permanent
б) На втором сервере NATS (192.168.0.20):
sudo firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.0.10/32 port port=6222 protocol=tcp accept'
sudo firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.0.30/32 port port=6222 protocol=tcp accept'
sudo firewall-cmd --runtime-to-permanent
в) На третьем сервере NATS (192.168.0.30):
sudo firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.0.10/32 port port=6222 protocol=tcp accept'
sudo firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.0.20/32 port port=6222 protocol=tcp accept'
sudo firewall-cmd --runtime-to-permanent
- Для обеспечения доступа Java-компонентов Luxms BI
На всех серверах NATS:
sudo firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.0.100/32 port port=4222 protocol=tcp accept'
sudo firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.0.200/32 port port=4222 protocol=tcp accept'
sudo firewall-cmd --runtime-to-permanent
- При использовании UFW необходимо выполнить следующие команды,
- Для обеспечения сетевой доступности сервисов NATS, исключив команду с собственным адресом хоста.
а) На первом сервере NATS (192.168.0.10):
sudo ufw allow proto tcp from 192.168.0.20 to any port 6222
sudo ufw allow proto tcp from 192.168.0.30 to any port 6222
б) На втором сервере NATS (192.168.0.20):
sudo ufw allow proto tcp from 192.168.0.10 to any port 6222
sudo ufw allow proto tcp from 192.168.0.30 to any port 6222
в) На третьем сервере NATS (192.168.0.30):
sudo ufw allow proto tcp from 192.168.0.10 to any port 6222
sudo ufw allow proto tcp from 192.168.0.20 to any port 6222
- Для обеспечения доступа Java-компонентов Luxms BI
На всех серверах NATS:
sudo ufw allow proto tcp from 192.168.0.100/32 to any port 4222
sudo ufw allow proto tcp from 192.168.0.200/32 to any port 4222
- При использовании IPTables необходимо выполнить следующие команды,
- Для обеспечения сетевой доступности сервисов NATS, исключив команду с собственным адресом хоста.
а) На первом сервере NATS (192.168.0.10):
sudo iptables -I INPUT -p tcp -m tcp \
-s 192.168.0.20,192.168.0.30 \
--dport 6222 \
-j ACCEPT
б) На втором сервере NATS (192.168.0.20):
sudo iptables -I INPUT -p tcp -m tcp \
-s 192.168.0.10,192.168.0.30 \
--dport 6222 \
-j ACCEPT
в) На третьем сервере NATS (192.168.0.30):
sudo iptables -I INPUT -p tcp -m tcp \
-s 192.168.0.10,192.168.0.20 \
--dport 6222 \
-j ACCEPT
- Для обеспечения доступа Java-компонентов Luxms BI
На всех серверах NATS:
sudo iptables -I INPUT -p tcp -m tcp \
-s 192.168.0.100,192.168.0.200 \
--dport 4222
-j ACCEPT
Не забываем сохранить правила с помощью iptables-save. В зависимости от системы и ее версии, варианты использования последней различаются. Подробнее читайте в документации к операционной системе.
Запуск сервисов
Для активации автоматического запуска NATS сервера после установки и корректировки конфигурационного файла необходимо выполнить команду:
systemctl enable nats-server --now
Проверка работоспособности кластера
После запуска сервера можно проверить его работоспособность в журнале сервиса, мы должны увидеть примерно следующее:
# journalctl -u nats-server
Cluster name is test-nats
Listening for route connections on 0.0.0.0:6222
192.168.0.20:6222 - rid:4 - Route connection created
Для проверки работоспособности функционала pub/sub можно на одном сервере запустить подписку из командной строки:
nats sub -s 127.0.0.1 "test-subject"
А на другом сервере отправить сообщение:
nats pub -s 127.0.0.1 "test-subject" "Test message"
В итоге, сообщение должно быть получено на первом сервере.
Встроенный мониторинг
Для включения мониторинга в кофигурационном файле необходимо снять комментарий с параметра monitor_port
и перезапустить сервис.
По адресу http://(адрес сервера nats):8222 можно получить список метрик в формате json. Также данные метрики могут быть переданы в Prometheus с помощью экспортера prometheus-nats-exporter и визуализированы с помощью Grafana.
Подробнее настройка мониторинга изложена в официальной документации продукта:
Полезные команды
Для получения информации по статусу и состоянию сервера NATS можно использовать CLI-интерфейс, выполнив следующие команды
Server Info
# nats --user=x --password=y server info
Server information for NDD2QZ3ERNLOVTRH2KA7OFM5Y46NX4EHHTNWD2PUALOOQ4TPOQWO4WU3
Process Details:
Version: 2.9.11
Git Commit:
Go Version: go1.19.4
Start Time: 2023-04-13 11:52:41.605030061 +0000 UTC
Uptime: 13d20h28m53s
Connection Details:
Auth Required: true
TLS Required: false
Host: 0.0.0.0:4222
Client URLs:
JetStream:
Domain:
Storage Directory: /tmp/jetstream
Max Memory: 954 MiB
Max File: 63 GiB
Active Acconts: 1
Memory In Use: 0 B
File In Use: 29 MiB
API Requests: 2,636
API Errors: 40
Limits:
Max Conn: 65536
Max Subs: 0
Max Payload: 1.0 MiB
TLS Timeout: 2s
Write Deadline: 10s
Statistics:
CPU Cores: 4 0.00%
Memory: 26 MiB
Connections: 3
Subscriptions: 177
Msgs: 58,403,928 in 114,840,129 out
Bytes: 26 GiB in 52 GiB out
Slow Consumers: 1
Server Ping
Для проверки доступности и работоспособности сервера:
# nats --user=x --password=y server ping
NDD2QZ3ERNLOVTRH2KA7OFM5Y46NX4EHHTNWD2PUALOOQ4TPOQWO4WU3 rtt=752.387µs
---- ping statistics ----
1 replies max: 0.00 min: 0.00 avg: 0.00