Настройка кластерного режима
Кластерный режим позволяет подключить несколько агентов автоматизации или серверов сбора аналитики, чтобы распределить нагрузку и обеспечить отказоустойчивость системы. Это особенно полезно при работе с большими объемами информации, поскольку помогает предотвратить потерю данных и улучшить масштабируемость.
За настройку кластерного режима отвечает конфигурационный файл: cluster.json.
Общий вид файла для настройки агентов автоматизации:
{
"components": {
"excluded":[
"com.infomaximum.subsystem.automationagent"
]
},
"network": {
"current": {
"name": 1,
"port": 7000,
"ssl":{
"cert_chain_path":"ssl/n1.crt",
"private_key_path":"ssl/n1.key"
}
},
"nodes": [
{
"name": 2,
"target": "192.168.1.2:7000",
"ssl_certificate_path":"ssl/n2.crt"
}
]
}
}
Для обеспечения отказоустойчивости и масштабируемости сервера сбора аналитики настройка кластера выполняется аналогично настройке агентов автоматизации.
Общий вид файла для настройки сервера сбора аналитики:
{
"components": {
"included":[
"com.infomaximum.subsystem.automationwebhook"
]
},
"network": {
"current": {
"name": 3,
"port": 7003,
"ssl":{
"cert_chain_path":"ssl/n1.crt",
"private_key_path":"ssl/n1.key"
}
},
"nodes": [
{
"name": 1,
"target": "127.0.0.1:7001",
"ssl_certificate_path":"ssl/n2.crt"
}
]
}
}
Если требуется объединить агенты автоматизации и сервера сбора аналитики в едином кластере, их можно настроить в одном файле cluster.json, выделив их на отдельные порты для изоляции.
Общий вид файла:
{
"components": {
"excluded": [
"com.infomaximum.subsystem.automationagent",
"com.infomaximum.subsystem.automationwebhook"
]
},
"network": {
"current": {
"name": 1,
"port": 7001,
"ssl":{
"cert_chain_path":"ssl/n1.crt",
"private_key_path":"ssl/n1.key"
}
},
"nodes": [
{
"name": 2,
"target": "127.0.0.1:7002",
"ssl_certificate_path":"ssl/n2.crt"
},
{
"name": 3,
"target": "127.0.0.1:7003",
"ssl_certificate_path":"ssl/n3.crt"
}
]
}
}
Для обеспечения стабильной и безопасной работы в кластерном режиме передача данных между узлами кластера должна осуществляться через отдельный порт, изолированный от порта, используемого для веб-интерфейса. Выделение работы кластера на отдельный порт, на котором функции взаимодействия с сервером ограничены, улучшает безопасность и изоляцию системы.
При настройке работы кластера по протоколу HTTPS для выделенного порта необходимо использовать отдельный SSL-сертификат, который отличается от сертификата, применяемого для веб-интерфейса. Такой подход обеспечивает:
- Шифрование данных между узлами
- Аутентификацию нод с использованием SSL-сертификатов
- Изоляцию взаимодействия, разделяя доступ к веб-интерфейсу и внутреннюю связь кластера
Сетевая настройка кластера из двух нод
Для настройки кластера из двух нод необходимо указать параметры соединения для каждой ноды в файле cluster.json. Рассмотрим пример настройки для агентов автоматизации.
Предположим, есть два сервера с DNS-именами:
- n1.local — основной сервер
- n2.local — внешний агент
Настройка по протоколу HTTP
Для сервера n1.local укажите, что его внутреннее имя «1» ("name": 1
). В имени можно указать только число от 1 до 127.
Откройте порт 7000 ("port": 7000
) для приема запросов от других нод.
В блоке "nodes"
опишите, какие есть доступные ноды и как к ним обращаться. Укажите, что есть нода с внутренним именем «2» ("name": 2
) и что к ней можно подключиться по URL: "n2.local:7000"
(host-name: n2.local, подключение происходит к порту 7000).
В этом URL не описаны протоколы HTTP и HTTPS.
Пример:
cluster.json (n1.local)
{
"network": {
"current": {
"name": 1,
"port": 7000,
},
"nodes": [
{
"name": 2,
"target": "n2.local:7000"
}
]
}
}
Для сервера n2.local укажите, что его внутреннее имя "2"
("name": 2
) и откройте порт 7000 ("port": 7000
) для приема запросов от других нод.
В блоке "nodes"
опишите, какие есть доступные ноды и как к ним обращаться. Укажите, что есть нода с внутренним именем "1"
и что к ней можно подключиться по URL: "n1.local:7000"
.
Пример:
cluster.json (n2.local)
{
"network": {
"current": {
"name": 2,
"port": 7000,
},
"nodes": [
{
"name": 1,
"target": "n1.local:7000"
}
]
}
}
В приведенных примерах опущена настройка активных модулей: поле "components"
. Ее нужно описать в отдельном файле.
Настройка по протоколу HTTPS
Добавьте в блок "current"
блок "ssl"
и поля в нем:
"cert_chain_path"
— файл с сертификатом Proceset сервера"private_key_path"
— файл с приватным ключом Proceset сервера"trust_certs"
— набор доверенных сертификатов
В этом блоке указываются настройки для HTTPS-сервера, т.е. необходимо подключить HTTPS-сервер на ноде n1.local на порте 7000 с сертификатом n1.crt
и приватным ключом n1.key
.
При наличии блока "ssl"
кластер полностью переходит в «зашифрованный» режим: нода настраивает HTTPS-сервер и подключается к другим нодам только по HTTPS, аутентификация проходит на основе «клиентских» сертификатов.
В поле "trust_certs"
укажите сертификат не вашей активной ноды, а сертификат удаленного сервера: n2.crt
. В итоге получается перекрестный обмен сертификатами между нодами для проверки соединения и гарантии того, что подключение происходит к доверенной стороне.
Пример:
cluster.json (n1.local)
{
"network": {
"current": {
"name": 1,
"port": 7000,
"ssl":{
"cert_chain_path":"ssl/n1.crt",
"private_key_path":"ssl/n1.key",
"trust_certs": [
"ssl/n2.crt"
]
}
},
"nodes": [
{
"name": 2,
"target": "n2.local:7000"
}
]
}
}
Настройка HTTPS-сервера n2.local аналогична настройке HTTPS-сервера n1.local.
Подключите HTTPS-сервер на ноде n2.local на порте 7000, с сертификатом n2.crt
и приватным ключом: n2.key
.
Укажите, что есть нода: "1"
, к которой можно подключиться по DNS-имени n1.local на порт 7000.
В поле "trust_certs"
укажите сертификат удаленного сервера: n1.crt
cluster.json (n2.local)
{
"network": {
"current": {
"name": 2,
"port": 7000,
"ssl":{
"cert_chain_path":"ssl/n2.crt",
"private_key_path":"ssl/n2.key",
"trust_certs": [
"ssl/n1.crt"
]
}
},
"nodes": [
{
"name": 1,
"target": "n1.local:7000"
}
]
}
}
Пример генерации самоподписанных сертификатов для работы в кластерном режиме
Следующие примеры описаны для генерации сертификатов на OC Linux.
Имена выходных файлов соответствуют инструкции из предыдущего пункта: Сетевая настройка кластера из двух нод.
Сгенерируйте приватный ключ и сертификат для сервера n1.local.
openssl req -x509 -nodes -newkey rsa:2048 -outform PEM -subj "/CN=n1.local" -keyout n1.key -out n1.crt
Сгенерируйте приватный ключ и сертификат для сервера n2.local.
openssl req -x509 -nodes -newkey rsa:2048 -outform PEM -subj "/CN=n2.local" -keyout n2.key -out n2.crt
Была ли статья полезна?