适用于Liferay 7.1的Dockerized Elasticsearch节点不可用

时间:2019-06-06 15:42:47

标签: docker elasticsearch liferay liferay-7 liferay-7.1

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}]]

有人尝试过这种配置吗?任何帮助,将不胜感激。谢谢:-)

3 个答案:

答案 0 :(得分:1)

我找到了解决方案。如果有人尝试做同样的事情可能会有所帮助。

正如我在对@ibexit的评论中所说,我正在同一台机器(开发模式)上运行两个dockerized ES集群和两个单独的Liferay门户(不在容器中)。

我更改了Liferay OSGi配置文件中的传输地址,因为它必须与运行ES的传输tcp端口相匹配:

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

我还在ES群集中​​添加了属性network.publish_host=127.0.0.1(没有该属性,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做到了!

答案 1 :(得分:0)

默认情况下,elasticsearch仅将传输端口和http端口绑定到本地主机( local )。因此,您的码头工人暴露的端口无法正常工作。您需要绑定到特定的IP或对所有站点或站点使用0.0.0.0,如此处所述:https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#network-interface-values

请记住,启用此功能将在生产模式下启动节点,然后进行多次引导检查。如果您需要有关此主题的更多信息或进行搜索,请参阅文档。

答案 2 :(得分:0)

我使用docker compose的工作本地设置以及docker容器中的两个elasticsearch节点以及在主机上运行的Liferay。我正在使用根据Liferay docs修改过的Elasticsearch 6.8.2图像,该图像可从docker hub上获取,网址为https://hub.docker.com/repository/docker/ktorek/liferay7-elasticsearch

我正在使用gradle工作区。因此,我已配置:configs/local/osgi/configs/com.liferay.portal.search.elasticsearch6.configuration.ElasticsearchConfiguration.config

operationMode=REMOTE
clusterName=docker-cluster
transportAddresses=127.0.0.1:9300,127.0.0.1:9301

我使用transportAddresses配置已经浪费了很多时间,因为据记录它使用方括号和方括号transportAddresses=["192.168.1.1:9300","192.168.1.2:9300"],但是它不起作用。上面列出的配置包含实际的工作配置语法。

我的docker-compose.yml

version: '3.7'
services:

  es01:
    container_name: "es01"
    image: ktorek/liferay7-elasticsearch:latest
    environment:
      - node.name=es01
      - node.data=true
      - cluster.name=docker-cluster
      - xpack.security.enabled=false
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "discovery.zen.ping.unicast.hosts=es02"
    ports:
      - "9300:9300"
      - "9200:9200"
    networks:
      - mynetwork
    volumes:
      - es01-data:/usr/share/elasticsearch/data
    ulimits:
      memlock:
        soft: -1
        hard: -1

  es02:
    container_name: "es02"
    image: ktorek/liferay7-elasticsearch:latest
    environment:
      - node.name=es02
      - node.data=true
      - cluster.name=docker-cluster
      - xpack.security.enabled=false
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "discovery.zen.ping.unicast.hosts=es01"
    ports:
      - "9301:9300"
      - "9201:9200"
    networks:
      - mynetwork
    volumes:
      - es02-data:/usr/share/elasticsearch/data
    ulimits:
      memlock:
        soft: -1
        hard: -1
networks:
  mynetwork:
    name: mynetwork
    driver: bridge
    ipam:
      config:
        - subnet: 172.30.29.0/24