You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Elasticsearch OSS 7.9.3多节点集群失败及java.nio.file.NoSuchFileException异常排查求助

解决Elasticsearch OSS 7.9.3 Docker多节点集群异常问题

你现在遇到了两个核心问题:cgroup文件读取报错和集群仅识别单个节点,咱们一步步来解决:


1. 修复cgroup路径读取错误(解决日志中的NoSuchFileException)

日志里的NoSuchFileException是因为你配置的cgroup参数名写错了。你用的es.cgroups.hierarchy.override=/不符合ES的配置规范,正确的参数应该是node.cgroups.hierarchy.override,对应的环境变量写法如下:

- node.cgroups.hierarchy.override=/

这个参数会让ES跳过Docker的容器级cgroup,直接读取根cgroup的统计信息,避免找不到特定容器cgroup文件的问题。


2. 修复多节点集群发现问题(解决单节点集群)

你的docker-compose.yml里有几个配置错误,导致节点之间无法互相发现:

(1)修正网络绑定参数

你写的es_network_host是错误的,ES的官方配置项是network.host,对应的环境变量要改成:

- network.host=0.0.0.0

设置为0.0.0.0可以让ES监听容器内所有网卡地址,这样其他节点才能通过Docker服务名(es01/es02)访问到它。之前指定es01或es02作为绑定地址,会导致节点只能监听容器内hostname对应的本地地址,跨节点通信自然会失败。

(2)检查数据卷权限

Elasticsearch容器内的进程默认用elasticsearch用户(UID/GID 1000)运行,你挂载的本地数据卷目录需要确保权限正确,否则节点无法写入数据,也会影响集群初始化。提前执行以下命令修正权限:

sudo chown -R 1000:1000 /home/centos/dev/dockerdata/es01 /home/centos/dev/dockerdata/es02

(3)确认节点发现配置

你写的discovery.seed_hosts=es01,es02和cluster.initial_master_nodes=es01,es02是正确的,Docker Compose默认会创建内部网络,服务名可以直接解析,只要network.host配置正确,节点就能互相找到对方。


修正后的docker-compose.yml示例

version: '3.7'
services:
  es01:
    image: es-oss:latest
    container_name: es01
    environment:
      - jvm_args_memory=512m
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02
      - network.host=0.0.0.0
      - node.cgroups.hierarchy.override=/
      - bootstrap.memory_lock=true
      - log_level_root=debug
      - log_level_sample=debug
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - /home/centos/dev/dockerdata/es01:/var/lib/esdata
    ports:
      - "9200:9200"
      - "9300:9300"
  es02:
    image: es-oss:latest
    container_name: es02
    environment:
      - jvm_args_memory=512m
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02
      - network.host=0.0.0.0
      - node.cgroups.hierarchy.override=/
      - bootstrap.memory_lock=true
      - log_level_root=debug
      - log_level_sample=debug
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - /home/centos/dev/dockerdata/es02:/var/lib/esdata

验证步骤

  1. 先清理原有容器和错误数据:
docker-compose down -v
  1. 修正数据卷权限(如果还没做):
sudo chown -R 1000:1000 /home/centos/dev/dockerdata/es01 /home/centos/dev/dockerdata/es02
  1. 重新启动集群:
docker-compose up -d
  1. 访问http://localhost:9200/_cat/nodes?v查看节点列表,正常情况下应该能看到es01和es02两个节点。

内容的提问来源于stack exchange,提问作者SST

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 19:52:47