# Соединение между серверами (JGroups) Сервера приложений связываются друг с другом через библиотеку JGroups. В gs-ctk есть два способа установления связи: 1. **JGroups DNS**: добавляется книга ресурсов из одного ресурса - сервиса, при помощи которого сервера приложений могут отправлять запросы на раскрутку соединения. 2. **GossipRouter**: добавляется книга ресурсов, поднимающая дополнительный роутер сообщений между серверами. Прямого соединения между серверами не происходит. Первый способ не требует поднятия дополнительного пода (запросы обрабатываются любым доступным сервером приложений), но менее надежен и требует поддержки соединения между подами серверов приложений, а значит не подойдет, если нужно создать единый логический кластер GlobalERP на нескольких Kubernetes-кластерах с межсетевым экраном между ними. ## Настройка JGroups DNS Достаточно добавить книгу ресурсов 'jgroups_dns'. ```bash ./configmgr.sh configure_resbook --config-path config.yaml --resgroup gs-cluster-1 --resbook jgroups-dns --classname jgroups_dns ``` ```text Настройка книги ресурсов: jgroups-dns (класс jgroups_dns) ========================================================= JGroups DNS не требует дополнительных настроек. Книга ресурсов настроена! Следующие действия: - Список книг ресурсов можно получить при помощи команды `./configmgr.sh list_resbooks --config config.yaml --resgroup gs-cluster-1` - Удалить книгу ресурсов: `./configmgr.sh remove_resbook --config config.yaml --resgroup gs-cluster-1 --resbook jgroups-dns` ``` ```yaml apiVersion: global-system.ru/v1 kind: GlobalConfiguration metadata: name: config spec: type: advanced resgroups: - name: gs-cluster-1 resbooks: - type: jgroups_dns name: jgroups-dns ... ``` ## Настройка GossipRouter Вот схема подключения при использовании GossipRouter и двух кластеров: ![Схема](img/GossipRouter.svg) Как можно увидеть, кластера друг с другом не общаются, а подключаются к GossipRouter'ам по их публичным IP/доменам, что упрощает настройку сети. ```{attention} Механизм авторизации соединений не предусмотрен, следовательно вы должны обеспечить безопасность подключения к GossipRouter. Например: - настроить фильтры на межсетевом экране, чтобы не допустить неполномочного подключения к GossipRouter - шифровать соединение (к примеру, с помощью VPN) при передаче по публичным каналам связи ``` 1. Добавьте книгу ресурсов 'gossiprouter'. ```bash ./configmgr.sh configure_resbook --config config.yaml --resgroup gs-cluster-1 --resbook gossiprouter --classname gossiprouter ``` ```text Настройка книги ресурсов: gossiprouter (класс gossiprouter) =========================================================== Введите внешний ip(external_ip):10.10.0.1 Введите внешний порт:12001 Введите максимальный размер кучи Java (java -Xmx):800M Введите запрос CPU для globalserver:1 Введите запрос MEMORY для globalserver:1G Введите лимиты CPU для globalserver:1 Введите лимиты MEMORY для globalserver:1G Введите запрос CPU для systemagent:1 Введите запрос MEMORY для systemagent:250M Введите лимиты CPU для systemagent:1 Введите лимиты MEMORY для systemagent:500M Дополнительно отсылать метрики во внешнюю систему[да,нет]:нет Книга ресурсов настроена! Следующие действия: - Список книг ресурсов можно получить при помощи команды `./configmgr.sh list_resbooks --config config.yaml --resgroup gs-cluster-1` - Удалить книгу ресурсов: `./configmgr.sh remove_resbook --config config.yaml --resgroup gs-cluster-1 --resbook gossiprouter` ``` 2. Измените параметр `gossiprouters` группы ресурсов: ```bash ./configmgr.sh configure_resgroup --config config.yaml --resgroup gs-cluster-1 ``` ```text Настройка группы ресурсов: gs-cluster-1 ======================================= ... Введите адрес к дополнительному GossipRouter или пропустите поле:10.10.0.1 Введите порт к дополнительному GossipRouter:12001 Добавлен GossipRouter 10.10.0.1:12001 Введите адрес к дополнительному GossipRouter или пропустите поле:cluster2.example.ru Введите порт к дополнительному GossipRouter:12001 Добавлен GossipRouter cluster2.example.ru:12001 Введите адрес к дополнительному GossipRouter или пропустите поле: ... Группа ресурсов настроена! ... ``` ```yaml apiVersion: global-system.ru/v1 kind: GlobalConfiguration metadata: name: config spec: type: advanced resgroups: - name: gs-cluster-1 gossiprouters: - host: 10.10.0.1 port: 12001 - host: cluster2.example.ru port: 12001 resbooks: - type: gossiprouter name: gossiprouter service: type: ip external_ip: 10.10.0.1 ... ``` В списке GossipRouter в примере указано два хоста, подключение к которым осуществляется через порт 12001. Предполагается, что по одному из хостов можно подключиться к роутеру в локальном кластере, а по другому - в удаленном. ```{tip} Вы можете использовать IP-адреса вместо доменов и наоборот и использовать любое число роутеров, в том числе всего один (помните, что кластер может разорваться при отказе единственного роутера). ``` Также мы указали для книги ресурсов порт (12001) и внешний IP (10.10.0.1), при помощи которых можно подключиться к роутеру. ```{attention} Сервера приложений должны свободно подключаться к поднятым gs-ctk роутерам по именам и портам из списка, используя протокол TCP. ```