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}]]
有人尝试过这种配置吗?任何帮助,将不胜感激。谢谢:-)
答案 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