Проблемы с подключением Apache Ignite между сервером и клиентом - PullRequest
0 голосов
/ 24 апреля 2018

У меня установлен сервер Apache Ignite на экземпляре AWS EC2.Я использую ведро s3 для обнаружения клиента.У меня есть несколько микро-сервисов, развернутых в Docker-контейнере, и они взаимодействуют с сервером Ignite.Проблема, с которой я сталкиваюсь, заключается в том, что когда мой микросервис регистрирует себя на сервере Ignite в качестве клиента, он работает отлично.Он регистрируется в приватном диапазоне IP-адресов контейнеров-докеров, который недоступен для сервера Ignite.Теперь, когда сервер Ignite проверяет пульс клиента, он не может достичь.Может кто-нибудь сказать, какой будет наилучший подход для использования ignite с контейнерной архитектурой.

enter image description here

вывод: когда сервер пытается проверить состояние клиента

 (wrn) <visor>: Failed to connect to node (is node still alive?). Make sure that each ComputeTask and cache Transaction has a timeout
 set in order to prevent parties from waiting forever in case of
 network issues [nodeId=8b04f5a6-6b1d-498b-98b2-1044b8c25f3a,
 addrs=[/172.17.0.4:47100, /127.0.0.1:47100]]

Ответы [ 2 ]

0 голосов
/ 03 августа 2018

Вы можете переслать имя хоста в контейнер воспламенения через системную переменную среды в вашей конфигурации воспламенения:

<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
    <property name="addresses">
        <list>
            <value>#{systemEnvironment['IGNITE_HOST'] ?: '127.0.0.1'}:47500..47509</value>
        </list>
    </property>
</bean>

Пример docker-compose.yml для 2-х сообщенных сервисов зажигания:

version: "3"
services:
  ignite:
    image: image_name1
    networks:
      - net
  face:
    image: image_name2
    depends_on:
      - ignite
    networks:
      - net
    environment:
      IGNITE_HOST: 'ignite'

Узел воспламенения "face" может соединиться с другим узлом воспламенения "ignite", используя адрес ignite:47500..47509

0 голосов
/ 01 августа 2018

1) Пусть ignite знает адрес вашего EC2 ip

TcpDiscoverySpi spi = //whatever
spi.setLocalAddress( /* ip on ec2 subnet */ );

2) Запустите docker в режиме сети "host", в отличие от режима по умолчанию "bridge"

Этидва шага должны разрешить двунаправленные TCP-рукопожатия между членами вашего кластера Ignite

...