2

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

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

4

3 回答 3

3

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

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

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

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成功了!

于 2019-06-07T16:06:14.320 回答
0

默认情况下,elasticsearch 仅将传输和 http 端口绑定到 localhost ( local )。所以你的 docker 暴露的端口不工作。您需要绑定到特定的 ip 或使用 0.0.0.0 为所有或站点,如下所述:https ://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#network-interface -价值观

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

于 2019-06-07T10:50:28.193 回答
0

我使用 docker compose 和 docker 容器中的两个 elasticsearch 节点以及在主机上运行的 Liferay 进行本地工作设置。我正在使用根据docker hub 提供的Liferay 文档修改的 elasticsearch 6.8.2 图像,网址为: 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
于 2019-12-28T18:07:23.070 回答