Соединение между серверами (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.