我正在尝试从本地计算机中的 docker 容器运行多节点 Elasticsearch。下面是我的 docker compose 文件:
version: '2.2'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.13.0
container_name: es01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms256m -Xmx256m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- C:/Docker/Elasticsearch/data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- esnet
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.13.0
container_name: es02
environment:
- node.name=es02
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms256m -Xmx256m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- C:/Docker/Elasticsearch/data02:/usr/share/elasticsearch/data
networks:
- esnet
es03:
image: docker.elastic.co/elasticsearch/elasticsearch:7.13.0
container_name: es03
environment:
- node.name=es03
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms256m -Xmx256m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- C:/Docker/Elasticsearch/data03:/usr/share/elasticsearch/data
networks:
- esnet
kibana:
image: docker.elastic.co/kibana/kibana:7.13.0
container_name: kibana
environment:
- "ELASTICSEARCH_HOSTS=http://es01:9200"
ports:
- '5601:5601'
networks:
- esnet
networks:
esnet:
driver: bridge
当我运行 docker compose 命令时,出现以下错误:
es01 | {"type": "server", "timestamp": "2021-05-29T12:08:16,409Z", "level": "WARN", "component": "o.e.c.r.a.DiskThresholdMonitor", "cluster.name": "es-docker-cluster", "node.name": "es01", "message": "high disk watermark [90%] exceeded on [6UfoOc1-QaCrrRlhLngSkA][es02][/usr/share/elasticsearch/data/nodes/0] free: 17.3gb[7.3%], shards will be relocated away from this node; currently relocating away shards totalling [0] bytes; the node is expected to continue to exceed the high
disk watermark when these relocations are complete", "cluster.uuid": "dpml3lE2Q0i7NRxFaQcGkQ", "node.id": "F_delTaoRfCASAlmu_Yd-Q" }
下面是我的docker资源截图:
下面是来自 http://127.0.0.1:9200/
的 docker 服务器消息{
"name" : "es01",
"cluster_name" : "es-docker-cluster",
"cluster_uuid" : "dpml3lE2Q0i7NRxFaQcGkQ",
"version" : {
"number" : "7.13.0",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "5ca8591c6fcdb1260ce95b08a8e023559635c6f3",
"build_date" : "2021-05-19T22:22:26.081971330Z",
"build_snapshot" : false,
"lucene_version" : "8.8.2",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
但是,我的 Kibana 无法工作。 :(
在评论部分,我已经提到了我的问题是什么,仅供将来参考,我在这里解释一下:
如果你的 Docker 使用 wsl 子系统那么
wsl -d docker-desktop
,这将进入 Docker 终端。sysctl -w vm.max_map_count=262144
重新启动 Docker,一切就绪。
注意:增加虚拟内存已经在这里得到解答:https://stackoverflow.com/a/66547784/596495
当您未将卷安装到
/usr/share/elasticsearch/data
时,也会显示此错误消息。 ElasticSearch 正在尝试将数据添加到容器的默认文件系统,但失败。
OP 已经安装了一卷,但搜索引擎将这篇文章放在顶部,所以我将其发布在这里。您可以通过使用 docker 命令的
-v
开关添加卷来解决此问题,或者在 docker-compose.yml
中添加卷:
volumes:
- ${HOST_DATA_DIR}/elasticsearch:/usr/share/elasticsearch/data
我一直在我的笔记本电脑上玩elasticsearch docker 容器。我不太关心实际的限制,因为我只是想让设置适用于小索引。实际上,您可以在运行 docker 容器时通过传递环境变量来调整这些水印。我知道我没有太多可用空间,所以我通过了(在撰写文件中,或
-e
与 docker run
):
cluster.routing.allocation.disk.watermark.low=600mb
cluster.routing.allocation.disk.watermark.high=500mb
cluster.routing.allocation.disk.watermark.flood_stage=400mb
这记录在:https://www.elastic.co/guide/en/elasticsearch/reference/8.13/modules-cluster.html
似乎还有一个特定于单节点设置的配置条目:
cluster.routing.allocation.disk.watermark.enable_for_single_data_node
根据文档,此条目的默认值在版本 8.0 中发生了更改,因此您可能会看到版本之间的不同行为。