背景:最早的需求是在个人项目的技术栈中增加ES这部分,考虑在自己的电脑直接Windows部署或者虚拟机部署,方便快捷,但是廉颇老矣,不能忍受每次启动项目时机箱的轰鸣,所以想在最便宜的云服务器上搞一个,这篇文章用来记录部署过程遇到的问题。
1. Docker安装elasticsearch
docker pull elasticsearch:7.17.2
2. 根据需求创建对应配置的容器
2.1. 创建数据目录
mkdir -p /data/elasticsearch/config
mkdir -p /data/elasticsearch/data
2.2. 创建配置文件
echo "http.host: 0.0.0.0">>/mydata/elasticsearch/config/elasticsearch.yml
2.3. 创建容器
**注意点:按照你的需求指定-e ES_JAVA_OPTS="-Xms64m -Xmx128m" **
-e ES_JAVA_OPTS="-Xms64m -Xmx128m": 这里设置了一个环境变量ES_JAVA_OPTS,其值为-Xms64m -Xmx128m。这个环境变量是用来传递给 Elasticsearch 进程的 Java 虚拟机(JVM)选项,用于控制 JVM 启动时的最小和最大堆内存分配。-
-Xms64m: 设置初始堆内存大小为 64MB。 -
-Xmx128m: 设置最大堆内存大小为 128MB。docker run -d \ --name elasticsearch -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-Xms64m -Xmx128m" \ -v /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /data/elasticsearch/data:/usr/share/elasticsearch/data \ -v /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins \ elasticsearch:7.17.2
-
3. 测试连接
4. 问题排查 使用docker logs -f <container_id>排查问题
4.1 启动docker后CPU飙升然后发现对应容器挂掉
4.1.1 权限问题 使用chmod增加文件权限
chmod -R 777 /data/elasticsearch
4.1.2 设置JVM内存过大,或者没有设置
我这台机器的配置是极低的所以使用了初始值64m, 最大值128为最大值,你可以根据自己的需求调整,官网设置的默认好像是1G
-e ES_JAVA_OPTS="-Xms64m -Xmx128m"
4.1.3 另外我参考的文章会有ES配置的问题
他们强调elasticsearch.yml中的"http.host: 0.0.0.0" 是有空格的,我这里没有测试不做参考
4.2 docker所在网络配置问题
4.2.1 docker网络问题
这个问题我没解决我创建了一个elasticsearch的网络进行配置,但是发现只有使用默认的桥接才可以,暂时不考虑这里的设置了就,已经满足我的需求,这里看了下调整docker容器所在网络可以如下设置
docker network disconnect elasticsearch <es_docker_id>
docker network disconnect bridge <es_docker_id>