docker - Dockerized Elasticsearch 节点不适用于 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}]]
有人试过这个配置吗?任何帮助,将不胜感激。谢谢 :-)
解决方案
我找到了解决方案。如果有人试图做同样的事情,这可能会有所帮助。
正如我在对@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
成功了!
推荐阅读
- python - 自动频道转发电报
- mysql - 输入框中的大写单词不匹配
- c# - 为什么 Window.Resources 用于参考库中的控件?
- android - 无论我在 Play 管理中心选择什么许可证响应,Android LVL 库总是返回“允许用户访问”
- go - 通过 golang 客户端调用 grpcweb 包装的服务器函数?
- python - 如何在覆盖现有数据的同时将 df 写入工作表?
- python - 如何检查输入字符串是否包含特定字母并且在Python中可以被3整除
- python - 在带有 Python 的 Azure 函数中使用 DefaultAzureCredential()
- javascript - 如何获取动态输入字段的值并在 Django 视图中处理它们
- sql - 在 SQL Server 中高效更新