Elasticsearch使用系列-Docker搭建Elasticsearch集群

Elasticsearch使用系列-ES簡介和環境搭建

Elasticsearch使用系列-ES增刪查改基本操作+ik分詞

Elasticsearch使用系列-基本查詢和聚合查詢+sql插件

Elasticsearch使用系列-.NET6對接Elasticsearch

Elasticsearch使用系列-Docker搭建Elasticsearch集群

一、系統環境準備

這裡準備三台機器,系統均為CentOS7.9:172.16.2.84,172.16.2.85,172.16.2.86

1.調高jvm執行緒數限制

#修改sysctl.conf
vi /etc/sysctl.conf

#修改max_map_count調大,如果沒有這個設置,則新增一行
vm.max_map_count=262144

#改完保存後, 執行下面命令讓sysctl.conf文件生效
sysctl -p

2.安裝docker環境

參照://www.cnblogs.com/wei325/p/15139701.html

二、docker掛載方式搭建集群

1.配置文件

es1配置文件 elasticsearch.yml

# ======================== Elasticsearch Configuration =========================
# 配置es的集群名稱,es會自動發現在同一網段下的es,如果在同一網段下有多個集群,就可以用這個屬性來區分不同的集群
cluster.name: elasticsearch
# 節點名稱
node.name: node-1
# 指定該節點是否有資格被選舉成為node
node.master: true
# 指定初始主節點
cluster.initial_master_nodes: ["172.16.2.84:9300"]
# 指定該節點是否存儲索引數據,默認為true
node.data: true
# 設置綁定的ip地址還有其他節點和該節點交換的ip地址,本機ip
network.host: 0.0.0.0
network.publish_host: 172.16.2.84 # 指定http埠 http.port: 9200 # 設置節點間交互的tcp埠,默認是9300 transport.tcp.port: 9300 # 設置集群中master節點的初始列表,可以通過這些節點來自動發現新加入集群的節點 discovery.zen.ping.unicast.hosts: ["172.16.2.84:9300","172.16.2.84:9300","172.16.2.85:9300"] # 如果要使用head,那麼需要解決跨域問題,使head插件可以訪問es http.cors.enabled: true http.cors.allow-origin: "*"

es2配置文件 elasticsearch.yml

# ======================== Elasticsearch Configuration =========================
# 配置es的集群名稱,es會自動發現在同一網段下的es,如果在同一網段下有多個集群,就可以用這個屬性來區分不同的集群
cluster.name: elasticsearch
# 節點名稱
node.name: node-2
# 指定該節點是否有資格被選舉成為node
node.master: true
# 指定初始主節點
cluster.initial_master_nodes: ["172.16.2.84:9300"]
# 指定該節點是否存儲索引數據,默認為true
node.data: true
# 設置綁定的ip地址還有其他節點和該節點交換的ip地址,本機ip
network.host: 0.0.0.0
network.publish_host: 172.16.2.85 # 指定http埠 http.port: 9200 # 設置節點間交互的tcp埠,默認是9300 transport.tcp.port: 9300 # 設置集群中master節點的初始列表,可以通過這些節點來自動發現新加入集群的節點 discovery.zen.ping.unicast.hosts: ["172.16.2.84:9300","172.16.2.85:9300","172.16.2.85:9300"] # 如果要使用head,那麼需要解決跨域問題,使head插件可以訪問es http.cors.enabled: true http.cors.allow-origin: "*"

es3配置文件 elasticsearch.yml

# ======================== Elasticsearch Configuration =========================
# 配置es的集群名稱,es會自動發現在同一網段下的es,如果在同一網段下有多個集群,就可以用這個屬性來區分不同的集群
cluster.name: elasticsearch
# 節點名稱
node.name: node-3
# 指定該節點是否有資格被選舉成為node
node.master: true
# 指定初始主節點
cluster.initial_master_nodes: ["172.16.2.84:9300"]
# 指定該節點是否存儲索引數據,默認為true
node.data: true
# 設置綁定的ip地址還有其他節點和該節點交換的ip地址,本機ip
network.host: 0.0.0.0
network.publish_host: 172.16.2.86 # 指定http埠 http.port: 9200 # 設置節點間交互的tcp埠,默認是9300 transport.tcp.port: 9300 # 設置集群中master節點的初始列表,可以通過這些節點來自動發現新加入集群的節點 discovery.zen.ping.unicast.hosts: ["172.16.2.84:9300","172.16.2.84:9300","172.16.2.86:9300"] # 如果要使用head,那麼需要解決跨域問題,使head插件可以訪問es http.cors.enabled: true http.cors.allow-origin: "*"

注意:配置冒號後面都有一個空格

2.創建掛載目錄

為了防止容器刪掉數據丟失,需要進行數據文件掛載

#創建es配置目錄
mkdir /home/es/config -p
#創建es數據目錄
mkdir /home/es/data 
#創建es插件目錄
mkdir /home/es/plugins
#授權目錄
chmod -R 777 /home/es

然後把上面的elasticsearch.yml配置文件分別放到三台機器的 /home/es/config目錄下

3.docker啟動命令

三台機器分別啟動執行命令

1.拉取鏡像

#拉取es鏡像,指定版本
docker pull elasticsearch:7.16.3

2.啟動es

3台機器分別執行以下命令,注意,先啟動主節點,這裡是172.16.2.84機器。

docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d --name es7.16.3 -p 9200:9200 -p 9300:9300 -v /home/es/data:/usr/share/elasticsearch/data -v /home/es/plugins:/usr/share/elasticsearch/plugins -v /home/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:7.16.3

-e ES_JAVA_OPTS=”-Xms256m -Xmx256m”  因為測試機器,把記憶體設為256m

-d 後台運行

–name 給啟動的容器起名稱

-p 9200:9200 -p 9300:9300 映射docker的埠,9200是http的埠,9300是內部通訊的埠

-v 目錄掛載

elasticsearch:7.16.3  es鏡像名稱,用這個鏡像啟動為容器

 

 

集群搭建完成!

三、es head插件查看集群狀態

kibana也能查看es的集群狀態,但是沒那麼直觀,這裡安裝head瀏覽器插件查看

1.打開連接

 Google瀏覽器訪問://extb.cqttech.com/search/elasticsearch%2520head

 根據提示下載安裝Google雙核瀏覽器

 

 下面的位置打開使用

 

 

 輸入集群中任意一個es地址都可以