Elasticsearch 叢集安裝
1 相關概念
1.1 單機 & 叢集
單臺 Elasticsearch 伺服器提供服務,往往都有最大的負載能力,超過這個閾值,伺服器效能就會大大降低甚至不可用,所以生產環境中,一般都是執行在指定伺服器叢集中。
除了負載能力,單點伺服器也存在其他問題:
- 單臺機器儲存容量有限
- 單伺服器容易出現單點故障,無法實現高可用
- 單服務的併發處理能力有限
配置伺服器叢集時,叢集中節點數量沒有限制,大於等於 2 個節點就可以看做是叢集了。一般出於高效能及高可用方面來考慮叢集中節點數量都是 3 個以上。
1.2 叢集 Cluster
一個叢集就是由一個或多個伺服器節點組織在一起,共同持有整個的資料,並一起提供索引和搜尋功能。一個 Elasticsearch 叢集有一個唯一的名字標識,這個名字預設就是”elasticsearch”。這個名字是重要的,因為一個節點只能通過指定某個叢集的名字,來加入這個叢集。
1.3 節點 Node
叢集中包含很多伺服器, 一個節點就是其中的一個伺服器。 作為叢集的一部分,它儲存資料,參與叢集的索引和搜尋功能。
一個節點也是由一個名字來標識的,預設情況下,這個名字是一個隨機的漫威漫畫角色的名字,這個名字會在啟動的時候賦予節點。這個名字對於管理工作來說挺重要的,因為在這個管理過程中,你會去確定網路中的哪些伺服器對應於 Elasticsearch 叢集中的哪些節點。 一個節點可以通過配置叢集名稱的方式來加入一個指定的叢集。預設情況下,每個節點都會被安排加入到一個叫做“elasticsearch”的叢集中,這意味著,如果你在你的網路中啟動了若干個節點,並假定它們能夠相互發現彼此,它們將會自動地形成並加入到一個叫做
“elasticsearch”的叢集中。
在一個叢集裡,只要你想,可以擁有任意多個節點。而且,如果當前你的網路中沒有執行任何 Elasticsearch 節點,這時啟動一個節點,會預設建立並加入一個叫做“elasticsearch”的叢集。
2 Windows 叢集
去官網下載要安裝的版本,這裡安裝的是elasticsearch-7.16.2-windows-x86_64.zip
https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-16-2
2.1 部署叢集
- 建立 elasticsearch-cluster 資料夾,解壓安裝包,在內部複製三個 elasticsearch 服務
- 修改叢集檔案目錄中每個節點的 config/elasticsearch.yml 配置檔案
-
node-1001 節點
#節點 1 的配置資訊: #叢集名稱,節點之間要保持一致 cluster.name: my-elasticsearch #節點名稱,叢集內要唯一 node.name: node-1001 node.master: true node.data: true #ip 地址 network.host: localhost #http 埠 http.port: 1001 #tcp 監聽埠 transport.tcp.port: 9301 #discovery.seed_hosts: ["localhost:9301", "localhost:9302","localhost:9303"] #discovery.zen.fd.ping_timeout: 1m #discovery.zen.fd.ping_retries: 5 #叢集內的可以被選為主節點的節點列表 #cluster.initial_master_nodes: ["node-1", "node-2","node-3"] #跨域配置 #action.destructive_requires_name: true http.cors.enabled: true http.cors.allow-origin: "*"
-
node-1002 節點
#節點 2 的配置資訊: #叢集名稱,節點之間要保持一致 cluster.name: my-elasticsearch #節點名稱,叢集內要唯一 node.name: node-1002 node.master: true node.data: true #ip 地址 network.host: localhost #http 埠 http.port: 1002 #tcp 監聽埠 transport.tcp.port: 9302 discovery.seed_hosts: ["localhost:9301"] discovery.zen.fd.ping_timeout: 1m discovery.zen.fd.ping_retries: 5 #叢集內的可以被選為主節點的節點列表 #cluster.initial_master_nodes: ["node-1", "node-2","node-3"] #跨域配置 #action.destructive_requires_name: true http.cors.enabled: true http.cors.allow-origin: "*"
-
node-1003 節點
#節點 3 的配置資訊: #叢集名稱,節點之間要保持一致 cluster.name: my-elasticsearch #節點名稱,叢集內要唯一 node.name: node-1003 node.master: true node.data: true #ip 地址 network.host: localhost #http 埠 http.port: 1003 #tcp 監聽埠 transport.tcp.port: 9303 #候選主節點的地址,在開啟服務後可以被選為主節點 discovery.seed_hosts: ["localhost:9301", "localhost:9302"] discovery.zen.fd.ping_timeout: 1m discovery.zen.fd.ping_retries: 5 #叢集內的可以被選為主節點的節點列表 #cluster.initial_master_nodes: ["node-1", "node-2","node-3"] #跨域配置 #action.destructive_requires_name: true http.cors.enabled: true http.cors.allow-origin: "*"
2.2 啟動叢集
- 啟動前先刪除每個節點中的 data 目錄中所有內容(如果存在)
- 分別雙擊執行 bin/elasticsearch.bat, 啟動節點伺服器,啟動後,會自動加入指定名稱的叢集
2.3 測試叢集
檢視叢集狀態
node-1001 節點
node-1002 節點
node-1003 節點
status欄位指示著當前叢集在總體上是否工作正常。它的三種顏色含義如下:
green
所有的主分片和副本分片都正常執行。
yellow
所有的主分片都正常執行,但不是所有的副本分片都正常執行
red
有主分片沒能正常執行。
向叢集中的 node-1001 節點增加索引
向叢集中的 node-1002 節點查詢索引
3 Linux單機
3.1 軟體下載
軟體下載地址: https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-16-2
下載 LINUX X86_64
3.2 軟體安裝
- 解壓軟體
將下載的軟體解壓縮
# 解壓縮
tar -zxvf elasticsearch-7.16.2-linux-x86_64.tar.gz -C /opt/module
# 改名
mv elasticsearch-7.16.2 es
- 建立使用者
因為安全問題, Elasticsearch 不允許 root 使用者直接執行,所以要建立新使用者,在 root 使用者中建立新使用者
useradd es #新增 es 使用者
passwd es #為 es 使用者設定密碼
userdel -r es #如果錯了,可以刪除再加
chown -R es:es /opt/module/es #資料夾所有者
- 修改配置檔案
修改/opt/module/es/config/elasticsearch.yml 檔案
# 加入如下配置
cluster.name: elasticsearch
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["node-1"]
修改/etc/security/limits.conf
# 在檔案末尾中增加下面內容
# 每個程序可以開啟的檔案數的限制
es soft nofile 65536
es hard nofile 65536
修改/etc/security/limits.d/20-nproc.conf
# 在檔案末尾中增加下面內容
# 每個程序可以開啟的檔案數的限制
* soft nofile 65536
* hard nofile 65536
# 作業系統級別對每個使用者建立的程序數的限制
* hard nproc 4096
# 注: * 帶表 Linux 所有使用者名稱稱
修改/etc/sysctl.conf
# 在檔案中增加下面內容
# 一個程序可以擁有的 VMA(虛擬記憶體區域)的數量,預設值為 65536
vm.max_map_count=655360
重新載入
sysctl -p
3.3 啟動軟體
使用 ES 使用者啟動
cd /opt/module/es/
#啟動
bin/elasticsearch
#後臺啟動
bin/elasticsearch -d
啟動時,會動態生成檔案,如果檔案所屬使用者不匹配,會發生錯誤,需要重新進行修改使用者和使用者組
關閉防火牆
#暫時關閉防火牆
systemctl stop firewalld
#永久關閉防火牆
systemctl enable firewalld.service #開啟放貨搶永久性生效,重啟後不會復原
systemctl disable firewalld.service #關閉防火牆,永久性生效,重啟後不會復原
3.4 連線測試
瀏覽器中輸入地址: http://linux1:9200/
4 Linux 叢集
1 軟體安裝
1) 解壓軟體
將下載的軟體解壓縮
# 解壓縮
tar -zxvf elasticsearch-7.16.2-linux-x86_64.tar.gz -C /opt/module
# 改名
mv elasticsearch-7.16.2 es-cluster
將軟體分發到其他節點: linux2, linux3
2) 建立使用者
因為安全問題, Elasticsearch 不允許 root 使用者直接執行,所以要在每個節點中建立新使用者,在 root 使用者中建立新使用者。如果已是非root使用者登入,跳過這步。
useradd es #新增 es 使用者
passwd es #為 es 使用者設定密碼
userdel -r es #如果錯了,可以刪除再加
chown -R es:es /opt/module/es-cluster #資料夾所有者
3) 修改配置檔案
修改/opt/module/es/config/elasticsearch.yml 檔案,分發檔案
# 加入如下配置
#叢集名稱
cluster.name: cluster-es
#節點名稱, 每個節點的名稱不能重複
node.name: node-1
#ip 地址, 每個節點的地址不能重複
network.host: hadoop101
#是不是有資格主節點
node.master: true
node.data: true
http.port: 9200
# head 外掛需要這開啟這兩個配置
http.cors.allow-origin: "*"
http.cors.enabled: true
http.max_content_length: 200mb
#es7.x 之後新增的配置,初始化一個新的叢集時需要此配置來選舉 master
cluster.initial_master_nodes: ["node-1"]
#es7.x 之後新增的配置,節點發現
discovery.seed_hosts: ["hadoop101:9300","hadoop102:9300","hadoop103:9300"]
gateway.recover_after_nodes: 2
network.tcp.keep_alive: true
network.tcp.no_delay: true
transport.tcp.compress: true
#叢集內同時啟動的資料任務個數,預設是 2 個
cluster.routing.allocation.cluster_concurrent_rebalance: 16
#新增或刪除節點及負載均衡時併發恢復的執行緒個數,預設 4 個
cluster.routing.allocation.node_concurrent_recoveries: 16
#初始化資料恢復時,併發恢復執行緒的個數,預設 4 個
cluster.routing.allocation.node_initial_primaries_recoveries: 16
修改/etc/security/limits.conf ,分發檔案
# 在檔案末尾中增加下面內容
* soft nofile 65536
* hard nofile 65536
修改/etc/security/limits.d/20-nproc.conf,分發檔案
# 在檔案末尾中增加下面內容
* soft nofile 65536
* hard nofile 65536
* hard nproc 4096
# 注: * 帶表 Linux 所有使用者名稱稱
修改/etc/sysctl.conf
# 在檔案中增加下面內容
vm.max_map_count=655360
重新載入
sysctl -p
2 啟動軟體
分別在不同節點上啟動 ES 軟體
cd /opt/module/es-cluster
#啟動
bin/elasticsearch
#後臺啟動
bin/elasticsearch -d