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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM