Dockerized Elasticsearch узлы недоступны для Liferay 7.1 - PullRequest
1 голос
/ 06 июня 2019

Liferay не может распознать мой кластер Elasticsearch при запуске.Вот моя конфигурация docker-compose:

version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.1.1
    container_name: es01
    environment:
      - node.name=es01
      - discovery.seed_hosts=es02
      - cluster.initial_master_nodes=es01,es02
      - cluster.name=liferay-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata01:/usr/share/elasticsearch/data
    ports:
      - "9299:9200"
      - "9399:9300"
    expose:
      - "9299"
    networks:
      - esnet
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.1.1
    container_name: es02
    environment:
      - node.name=es02
      - discovery.seed_hosts=es01
      - cluster.initial_master_nodes=es01,es02
      - cluster.name=liferay-cluster2
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    ports:
      - "9298:9200"
      - "9398:9300"
    expose:
      - "9298"      
    volumes:
      - esdata02:/usr/share/elasticsearch/data
    networks:
      - esnet

volumes:
  esdata01:
    driver: local
  esdata02:
    driver: local

networks:
  esnet:

com.liferay.portal.search.elasticsearch6.configuration.ElasticsearchConfiguration.config содержимое файла

transportAddresses="127.0.0.1:9299"
logExceptionsOnly="false"
operationMode="REMOTE"
indexNamePrefix="myprefix-"
clusterName="liferay-cluster"

При запуске docker-compose яЯ могу получить доступ к двум моим кластерам ES: http://127.0.0.1:9299/ и http://127.0.0.1:9298/

Однако, когда Liferay запускается, он не может получить доступ к узлам ES:

NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{vUNCF_HNRtu_tYUjkqhXvg}{127.0.0.1}{127.0.0.1:9299}]]

Кто-нибудь пробовал эту конфигурацию?Любая помощь будет оценена.Спасибо: -)

Ответы [ 2 ]

1 голос
/ 07 июня 2019

Я нашел решение.Это может помочь, если кто-то пытается сделать то же самое.

Как я уже сказал в своем комментарии к @ibexit, я использую два док-кластеризованных ES-кластера и два отдельных портала Liferay (не в контейнерах) на одном и том жемашина (режим разработки).

Я изменил транспортный адрес в конфигурационном файле Liferay OSGi, так как он должен соответствовать транспортному TCP-порту, на котором работает ES:

transportAddresses="127.0.0.1:9301"
logExceptionsOnly="false"
operationMode="REMOTE"
indexNamePrefix="myprefix-"
clusterName="liferay-cluster"

Я также добавил свойство network.publish_host=127.0.0.1 в моем ESкластеры (без этого свойства Liferay не смог обнаружить узлы ES)

Вот мой docker-compose.yml :

Использование ES 6.1.4

version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.1.4
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=liferay-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - transport.tcp.port=9301
      - network.publish_host=127.0.0.1
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata01:/usr/share/elasticsearch/data
    ports:
      - "9201:9200"
      - "9301:9301"
    networks:
      - esnet
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.1.4
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=liferay-cluster2
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - transport.tcp.port=9302
      - network.publish_host=127.0.0.1
    ulimits:
      memlock:
        soft: -1
        hard: -1
    ports:
      - "9202:9200"
      - "9302:9302"
    volumes:
      - esdata02:/usr/share/elasticsearch/data
    networks:
      - esnet

volumes:
  esdata01:
    driver: local
  esdata02:
    driver: local

networks:
  esnet:

network.publish_host сделали свое дело!

0 голосов
/ 07 июня 2019

По умолчанию ,asticsearch привязывает транспортный порт и порт http только к localhost ( local ).Таким образом, ваши порты, открытые докером, не работают.Вам необходимо привязать к определенному IP-адресу или использовать 0.0.0.0 для всех или site , как описано здесь: https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#network-interface-values

Пожалуйста, имейте в виду, что включение этого запускает запуск узла в производствережим сопровождается несколькими проверками начальной загрузки.Пожалуйста, смотрите документы, если вам нужна дополнительная информация по этим темам или ищите SO.

...