Перейти к основному содержанию
`Ctrl`+`K`

# Соединение между серверами (JGroups)

Сервера приложений связываются друг с другом через библиотеку JGroups. В gs-ctk есть два способа установления связи:

1. JGroups DNS: добавляется книга ресурсов из одного ресурса - сервиса, при помощи которого сервера приложений могут отправлять запросы на раскрутку соединения.

2. GossipRouter: добавляется книга ресурсов, поднимающая дополнительный роутер сообщений между серверами. Прямого соединения между серверами не происходит.

Первый способ не требует поднятия дополнительного пода (запросы обрабатываются любым доступным сервером приложений), но менее надежен и требует поддержки соединения между подами серверов приложений, а значит не подойдет, если нужно создать единый логический кластер GlobalERP на нескольких Kubernetes-кластерах с межсетевым экраном между ними.

## Настройка JGroups DNS

Достаточно добавить книгу ресурсов „jgroups_dns“.

    ./configmgr.sh configure_resbook --config-path config.yaml --resgroup gs-cluster-1 --resbook jgroups-dns --classname jgroups_dns

    Настройка книги ресурсов: 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`

    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 и двух кластеров:

Как можно увидеть, кластера друг с другом не общаются, а подключаются к GossipRouter’ам по их публичным IP/доменам, что упрощает настройку сети.

Внимание

Механизм авторизации соединений не предусмотрен, следовательно вы должны обеспечить безопасность подключения к GossipRouter. Например:

- настроить фильтры на межсетевом экране, чтобы не допустить неполномочного подключения к GossipRouter

- шифровать соединение (к примеру, с помощью VPN) при передаче по публичным каналам связи

1. Добавьте книгу ресурсов „gossiprouter“.

       ./configmgr.sh configure_resbook --config config.yaml --resgroup gs-cluster-1 --resbook gossiprouter --classname gossiprouter

       Настройка книги ресурсов: 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` группы ресурсов:

       ./configmgr.sh configure_resgroup --config config.yaml --resgroup gs-cluster-1

       Настройка группы ресурсов: 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 или пропустите поле:
       ...

       Группа ресурсов настроена!

       ...

       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. Предполагается, что по одному из хостов можно подключиться к роутеру в локальном кластере, а по другому - в удаленном.

Совет

Вы можете использовать IP-адреса вместо доменов и наоборот и использовать любое число роутеров, в том числе всего один (помните, что кластер может разорваться при отказе единственного роутера).

Также мы указали для книги ресурсов порт (12001) и внешний IP (10.10.0.1), при помощи которых можно подключиться к роутеру.

Внимание

Сервера приложений должны свободно подключаться к поднятым gs-ctk роутерам по именам и портам из списка, используя протокол TCP.