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

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

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

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

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

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

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

./resbook.sh create --name jgroups-dns --group gs-cluster-1 --class_name jgroups_dns
./resbook.sh enable --name jgroups-dns --group gs-cluster-1

Никаких дополнительных настроек не требуется.

Настройка GossipRouter#

Вот схема подключения при использовании GossipRouter и двух кластеров:

Схема

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

Внимание

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

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

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

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

    ./resbook.sh create --name gossiprouter --group gs-cluster-1 --class_name gossiprouter
    
  2. Выполните ./resgroup.sh init_spec и ./resgroup.sh init_values:

    $ ./resgroup.sh init_spec --name gs-cluster-1
    
    ... # оставьте значения по умолчанию
    
    $ ./resgroup.sh init_values --name gs-cluster-1
    
    ...
    Введите список GossipRouter, если такие требуются, или пропустите поле:gossipa.example.ru[12001],gossipb.example.ru[12001]
    ... # установка значений для других книг ресурсов
    Установка значений для книги ресурсов: gossiprouter
    ...
    Введите порт gossip_router:12001
    Введите внешний ip(external_ip):10.10.0.1
    ...
    

    В списке GossipRouter в примере указано два хоста, подключение к которым осуществляется через порт 12001. Предполагается, что по одному из хостов можно подключиться к роутеру в локальном кластере, а по другому - в удаленном.

    Совет

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

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

    Внимание

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

  3. Включите книгу ресурсов.

    ./resbook.sh enable --name gossiprouter --group gs-cluster-1