神坑:ElasticSearch8集群启动报错“Device or resource busy”(Docker方式)

昨天在Docker中配置ElasticSearcch8集群模式时,先初步配置了master主节点。然后主节点启动就报错,看日志,提示“Device or resource busy”。异常第一句大概这个样子:

Exception in thread "main" java.nio.file.FileSystemException: 
/usr/share/elasticsearch/config/elasticsearch.yml.Dym72YkCRZ-GMAliqWE2IA.tmp -> 
/usr/share/elasticsearch/config/elasticsearch.yml: Device or resource busy

直译过来就是“elasticsearch.yml”文件系统异常:设备或资源忙。

搜索了一下,大概就是因为Linux系统中挂载映射目录时,引起的文件占用问题。

然后从这个角度来搜索各种解决方案,然后国内的解决方案统一都是:先别使用Docker -v映射elasticsearch.yml到容器中。应当先创建容器,然后使用docker cp命令把elasticsearch.yml从宿主机中拷贝到容器中!

然而道理说不通啊,因为我单机模式节点启动是成功的,凭啥集群了这个“elasticsearch.yml”会被系统占用而不能读取呢?

最后我搜啊搜啊搜,搜到了github的elasticsearch官方项目的问题提交区(issues),里面也是一群大佬在各种分析底层源代码,各种debug、反汇编,神讨论,但还是不能解决问题。

最后,在这个问题页面的下面,有人写了一句话,就解决了这个问题!说明这个就是elasticsearch本身的bug呗!

解决方案如下:

 关键点:

在“elasticsearch.yml”文件中,只要配置了xpack的安全选项,就能正常启动了!

也就是在配置文件中添加最关键的一句:

# 开启x-pack插件,用于添加账号密码、安全控制等配置
xpack.security.enabled: false #最关键的一句
xpack.security.transport.ssl.enabled: false
xpack.security.enrollment.enabled: true

原文网址(超链接):Elasticsearch fails to start in Docker, when `elasticsearch.yml` is bind mount · Issue #85463 · elastic/elasticsearch · GitHub

最后把我的master的“elasticsearch.yml”完整贴出来:

#集群名称
cluster.name: elasticsearch-cluster#节点名称
node.name: masternode#设置绑定的ip地址,可以使ipv4或者ipv6 绑定这台机器的任何一个ip
network.bind_host: 0.0.0.0#设置其他节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址
network.publish_host: 0.0.0.0#设置对外服务的http端口,默认为9200
http.port: 9200
#设置节点之间的tcp端口,默认是9300(ElasticSearch8新配置)
transport.profiles.default.port: 9300#开发环境,暂时关闭x-pack安全控制配置
xpack.security.enabled: false#是否允许跨域REST请求
http.cors.enabled: true
#允许REST请求来自何处
http.cors.allow-origin: "*"#初始master节点
cluster.initial_master_nodes: ['masternode']#节点角色设置(ElasticSearch8新配置)
node.roles: [master]#集群的节点列表(ElasticSearch8新配置)
discovery.seed_hosts: ["172.18.0.11:9300","172.18.0.12:9300","172.18.0.13:9300"]#*****************下面elasticsearch8中不能设置!!!**********************
#集群中一直正常运行的,有成为master节点资格的最少节点数,默认为1
#discovery.zen.minimum_master_nodes: 1

注意:里面有几项是elasticsearch8中新的配置方式,这也是我排了好久的坑才配置对的!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/7773.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CMake快速入门

CMake快速入门 CMake 官网:CMake CMake 是一个 跨平台 的安装编译工具,可以用简单的语句来描述 所有平台 的安装(编译过程)CMake 可以说已经成为 大部分C开源项目的标配 1. 为什么要使用CMake? 比如说有一个开源项目,里面有很多 C 的源代…

三、eureka-server端和客户端配置文件讲解

常用配置文件设置 通过这张图理解为什么要进行文件配置 server 中常用的配置 server:port: 8761spring:application:name: eureka-servereureka:client:service-url: #eureka 服务端和客户端的交互地址,集群用,隔开defaultZone: http://localhost:8761/eureka #自己注册自…

人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码)

人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码) 目录 人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码) 1. 前言 2. 项目说明 (1)开发版本 (2)依赖库说明(O…

【花雕】全国青少年机器人技术一级考试试卷(实操真题之三)

随着科技的不断进步,机器人技术已经成为了一个重要的领域。在这个领域中,机械结构是机器人设计中至关重要的一部分,它决定了机器人的形态、运动方式和工作效率。对于青少年机器人爱好者来说,了解机械结构的基础知识,掌…

银河麒麟系统安装mysql数据库[mysql-5.7.28-linux-glibc2.12-x86_64]

银河麒麟系统安装mysql数据库 1.1 准备材料 mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz MySQL5.7下载地址 https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz 1.1 安装前准备工作 1、检查是否已经安装MySQL [rootlocalhost ~]# rpm …

Django Vue corsheaders跨域问题

跨域问题 记录一下在我自己的django-vue项目里面出现的跨域问题 我的项目之前一直是在本地跑的,因为需要上线测试,所以我就运行在同一个vlan里面 ip段:192.168.1.0/24 突然发现存在跨域问题,我django的接口访问被拦截了。 检查…

MAVEN的学习

MAVEN的作用是什么? 依赖管理:方便快捷的管理项目的资源(jar包),避免版本冲突问题统一项目结构:提供标准、统一的项目结构项目构建:标准跨平台(Linux、windows、MacOS)的…

EMC学习笔记(十三)背板的EMC设计

背板的EMC设计 1.背板槽位的排列1.1 单板信号的互联要求1.2 单板板位结构1.2.1 板位结构影响1.2.2 板间互联电平、驱动器件的选择 2.背板的EMC设计2.1 接插件的信号排布与EMC设计2.1.1 接插件的选型2.1.2 接插件模型与针信号排布 2.2 阻抗匹配2.3 电源、地分配 1.背板槽位的排列…

bug--两个表格,数据来自于同一个抽屉表格,现在让两个表格的数据 不能一样--处理checked 和 disabled

步骤一、拿到表格数据 步骤二、处理 checked,要区分是A表 还是B表,这个区分要在 A表、B表 数据展示的组件里(根源)区分 : 点击A表,抽屉表格中A 已选的状态 是 checked 且 disabled,B 已选的 抽…

terser用于ES6的压缩JS工具

https://www.npmjs.com/package/terser uglify-es不再维护,uglify-js也不支持ES6。 terser是uglify-es的一个分支,主要保留了与uglify和uglify-js3. npm install terser -gterser [input files] [options] terser-webpack-plugin 使用terser-webpack-pl…

QWebEngine应用---cookies存储及自动登录

什么是cookies? 浏览器Cookie指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据,当前主流网站和浏览器都使用Cookies来实现自动登录 QWebEngineCookieStore QWebEngine基于Chromium内核,和Chrome浏览器一样支持…

合宙Air724UG Cat.1模块硬件设计指南--外部SPI Flash

概述 我们可以通过标准的SPI接口和QSPI接口来外挂flash。区别如下 使用标准SPI接口外挂flash,需要自己实现flash驱动,和自己移植文件系统 使用QSPI接口外挂flash,不需要自己实现flash驱动,也不需要移植文件系统 。通过mount接口挂…