虽然这不是一个直接的编程语言问题,但这是我在设置本地开发环境时遇到的一个问题,因此它与此密切相关,我相信其他软件工程师也会遇到这个问题。因此,我没有在我的开发机器上安装Elasticsearch(重复安装多个节点),而是尝试创建一个可重用的Docker环境,但没有成功。
我在Docker中定义了一个Elasticsearch集群,使用Docker网络。基本上这个https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html,但为了完整起见,我运行:
docker network create elastic
docker run --name es01 --net elastic -p 9200:9200 -it docker.elastic.co/elasticsearch/elasticsearch:8.9.0
一切都很好,所以我添加了第二个节点:
docker run -e ES_JAVA_OPTS="-Xms1g -Xmx1g" -e ENROLLMENT_TOKEN="<token>" --name es02 -p 9201:9200 --net elastic -it docker.elastic.co/elasticsearch/elasticsearch:8.9.0
这也很好,我看到集群中的第二个节点使用GET /_cluster/health
运行。
所以现在我control-c
退出交互模式,并使用docker start es02
重新启动容器,但它没有启动。docker ps
仅显示es 01。再次以交互方式运行它(-i
),我看到:
- 错误:跳过安全自动配置,因为节点似乎不是第一次启动。该节点可能已经是群集的一部分,此自动设置实用程序仅用于为新群集配置安全性。*
这就是我的问题所在。我想它可能仍然在获取ENROLLMENT_TOKEN
环境变量,这会导致它认为需要注册,所以我提交了容器并创建了一个没有-e
开关的新容器。同样的错误。
我尝试在没有xpack安全性的情况下创建容器,添加-e "xpack.security.enabled=false"
:
- 错误:跳过安全自动配置,因为似乎已经配置了安全。*
大概是因为elasticsearch.yml默认包含true
。不管怎样,有人遇到过这个吗?认识到这个问题吗?任何想法都欢迎!
P.S.我在Windows、Mac和Ubuntu上看到了同样的行为(Vagrant框)。
1条答案
按热度按时间b4lqfgs41#
我能拼凑起来的解决方案是一个小黑客,但它会完成工作。
创建或启动您的第一个/主节点,如原始帖子中所述。
生成注册令牌
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node
启动第二个独立容器
docker run -p 9201:9200 -p 9301:9300 -d --name es02 --ip 172.18.0.5 -e ES_JAVA_OPTS="-Xms1g -Xmx1g" --net elastic -it docker.elastic.co/elasticsearch/elasticsearch:8.9.0
登录到刚刚创建的新es 02容器
docker exec -it es02 /bin/bash
删除配置、密码和数据:
仅使用群集名称重新添加配置文件,然后使用之前创建的注册令牌启动节点:
让设置发生-你会看到很多JSON在屏幕上飞行。当它停止时,
control-c
和exit
现在可以正常启动和停止第二个节点。