Docker 简单部署 ElasticSearch【包括集群的搭建】
一、ElasticSearch是什么?
Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
不过,Elasticsearch不仅仅是Lucene和全文搜索,我们还能这样去描述它:
分布式的实时文件存储,每个字段都被索引并可被搜索
分布式的实时分析搜索引擎
可以扩展到上百台服务器,处理PB级结构化或非结构化数据
拉取镜像
docker pull elasticsearch:7.2.0 docker pull mobz/elasticsearch-head:5 docker pull kibana:7.2.0
运行容器
ElasticSearch的默认端口是9200,我们把宿主环境9200端口映射到Docker容器中的9200端口,就可以访问到Docker容器中的ElasticSearch服务了,同时我们把这个容器命名为es。
docker run -d --restart=always --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.2.0
配置跨域
进入容器
由于要进行配置,因此需要进入容器当中修改相应的配置信息。
docker exec -it es /bin/bash
进行配置
# 显示文件 ls 结果如下: LICENSE.txt README.textile config lib modules NOTICE.txt bin data logs plugins # 进入配置文件夹 cd config # 显示文件 ls 结果如下: elasticsearch.keystore ingest-geoip log4j2.properties roles.yml users_roles elasticsearch.yml jvm.options role_mapping.yml users # 修改配置文件 vi elasticsearch.yml # 加入跨域配置 http.cors.enabled: true http.cors.allow-origin: "*"
重启容器
由于修改了配置,因此需要重启ElasticSearch容器。
docker restart es
展示如下:
运行kibana容器
#docker run -it -d -e ELASTICSEARCH_URL=http://192.168.100.10:9200 --restart=always --name kibana -p 5601:5601 kibana:7.2.0
docker run -d --restart=always --name kibana --link es:elasticsearch -p 5601:5601 kibana:7.2.0
如果遇到如下情况:请查看日志(docker logs kibana)
错误:
我这里的修改如下:
运行Head容器:
docker run -d --restart=always --name es_head -p 9100:9100 mobz/elasticsearch-head:5
展示如下:
参考:https://www.cnblogs.com/stellar/p/9967347.html
后来发现dejavu 这个工具也不错:docker run --name=dejavu -p 1358:1358 -d appbaseio/dejavu 运行效果如下:
ES集群配置
#创建数据文件挂载目录,并开放通信端口
pwd
mkdir -p ES/config
cd ES
mkdir data1
mkdir data2
mkdir data3
sudo chmod 777 data1
sudo chmod 777 data2
sudo chmod 777 data3
cd config
sudo ufw allow 9300 #firewall-cmd --add-port=9300/tcp
sudo ufw allow 9301 #firewall-cmd --add-port=9301/tcp
sudo ufw allow 9302 #firewall-cmd --add-port=9302/tcp
使用vi命令在config下分别创建如下文件:es1.yml,es2.yml,es3.yml
es1.yml
cluster.name: hzmt-es-cluster
node.name: es-node1
network.bind_host: 0.0.0.0
network.publish_host: 192.168.100.19
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.minimum_master_nodes: 2
discovery.seed_hosts: ["192.168.100.19:9300","192.168.100.19:9301","192.168.100.19:9302"]
cluster.initial_master_nodes: ["es-node1","es-node2","es-node3"]
es2.yml
cluster.name: hzmt-es-cluster
node.name: es-node2
network.bind_host: 0.0.0.0
network.publish_host: 192.168.100.19
http.port: 9201
transport.tcp.port: 9301
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.minimum_master_nodes: 2
discovery.seed_hosts: ["192.168.100.19:9300","192.168.100.19:9301","192.168.100.19:9302"]
cluster.initial_master_nodes: ["es-node1","es-node2","es-node3"]
es3.yml
cluster.name: hzmt-es-cluster
node.name: es-node3
network.bind_host: 0.0.0.0
network.publish_host: 192.168.100.19
http.port: 9202
transport.tcp.port: 9302
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.minimum_master_nodes: 2
discovery.seed_hosts: ["192.168.100.19:9300","192.168.100.19:9301","192.168.100.19:9302"]
cluster.initial_master_nodes: ["es-node1","es-node2","es-node3"]
注:本机虚拟机ip:192.168.100.19 读者请自行更改
调高JVM线程数限制数量,修改配置vi /etc/sysctl.conf 修改配置vim /etc/sysctl.conf, 增加vm.max_map_count=262144 , 然后启动配置sysctl -p 这一步是为了防止启动容器时,报出如下错误:
bootstrap checks failed max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
启动ElasticSearch集群容器
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 -v /root/ES/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /root/ES/data1:/usr/share/elasticsearch/data --name ES01 elasticsearch:7.2.0 docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9201:9201 -p 9301:9301 -v /root/ES/config/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /root/ES/data2:/usr/share/elasticsearch/data --name ES02 elasticsearch:7.2.0 docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9202:9202 -p 9302:9302 -v /root/ES/config/es3.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /root/ES/data3:/usr/share/elasticsearch/data --name ES03 elasticsearch:7.2.0
注:设置-e ES_JAVA_OPTS="-Xms256m -Xmx256m" 是因为/etc/elasticsearch/jvm.options 默认jvm最大最小内存是2G,读者启动容器后 可用docker stats命令查看
在浏览器地址栏访问http://192.168.100.19:9200/_cat/nodes?pretty 查看节点状态
注:节点名称带表示为主节点*
参考:
https://www.cnblogs.com/stellar/p/9967347.html
https://blog.csdn.net/belonghuang157405/article/details/83301937
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2016-12-24 cmd for 循环拷贝文件