本文紀錄 Linux 安裝及配置 Elasticsearch 單節點以及 cluster 流程:

Download and Install

前往 Elasticsearch 下載頁面,選擇 platform Linux 並且解壓縮

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.16.2-linux-x86_64.tar.gz
tar -zxvf elasticsearch-7.16.2-linux-x86_64.tar.gz -C /opt/mudule
cd /opt/module/elasticsearch-7.16.2/

建立 Elasticsearch sys user 及配置權限

Elasticsearch 基於安全考量,不允許使用 root 運行,因此需要創建 elasticsearch sys user 用於運行 elasticsearch

useradd esuser
passwd esuser

//若建立錯誤可刪除再重建
userdel -r esuser

設定執行文件夾權限,讓 elasticsearch sys user 可以執行

chown -R esuser:esuser /opt/module/elasticsearch-7.16.2/

單節點設定檔文件

開啟 elasticsearch.yml ,以下是一個 Node 的設定參考:

開啟 elasticsearch.yml 文件,進行設定

vim /opt/modules/elasticsearch-7.16.2/config/elasticsearch.yml

單節點設定參考 (這台 host 給予一個 etc/hosts 設為 eshost01,如果純粹單一節點可以用 0.0.0.0 表示為本機 IP)

cluster.name: elasticsearch
node.name: node01
network.host: eshost01
http.port: 9200
cluster.initial_master_nodes: ["node01"]

多節點設定文件

單一 Elasticsearch 提供服務,因為單台機器容量有限、出現故障及不可用,併發處理能力有限,因此容易產生不可用的情況,所以通常只會在測試環境中使用。

在生產環境,為了符合高可用原則,都會將 Elasticsearch 以 Cluster 方式來運行。

Elasticsearch 的 Cluster 的 Node 沒有數量限制,只要超過 2 Node 就可視為一個 Cluster。

一個 Cluster 需要指定 cluster_name,在該 Cluster 的 Node 都是透過這個名稱來聚集,每一個 Node 都是一個獨立運行的 Elasticsearch service。

在其他機器依照上方步驟及設定,先下載安裝及設定權限

接著進行配置 elasticsearch.yml

Master node 主要負責管理 cluster, node 及 index ,不負責管理 document。Data node 負責管理 document;Node 不建議身兼多職。

# 集群名稱(同樣的 cluster 要保持一致)
cluster.name: elasticsearch

# 節點名稱 (在集群內,每個節點名稱必須各自唯一,不能重複)
node.name:node02

# 節點身份,預設為 master & data 為 true,建議做區隔
node.master: false
node.data: true

# 可以被推選為 master node 的節點列表,這裡先把當前節點推選為主節點
# cluster.inintial_master_nodes: ["node-1001", "node-1002", "node-1003"]
 cluster.inintial_master_nodes: ["node01"]
 
# 本節點 IP 位置
network.host: eshost2

# 本節點 http port
http.port: 9200

# tcp 監聽 port 
transport.tcp.port: 9200

# 跨域配置
http.cors.enabled: true
http.cors.allow-origin: "*"
http.max_content_length: 200mb

# --Discovery 發現其他機器--
# 第一台機器不用加,這裡設定的是候選 master node 位置,在啟動服務後可以被選為 master node
discovery.seed_hosts:["eshost1:9200", "eshost2:9200", "eshost3:9200"]
gateway.recover_after_nodes: 2
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5


network.tcp.keep_alive: true
network.tcp.no_delay: true
transport.tcp.compress: true

# ----依照主機規格可調整以下參數----

# cluster 同時啟動數據任務數(default 2)
cluster.routing.allocation.cluster_concurrent_rebalance: 16

# 調控 新增/刪除 node 及負載平衡時,併發恢復的線程數 (default 2)
cluster.routing.allocation.cluster_concurrent_recoveriew: 16
# 初始化數據恢復時,並發線程數 (default 4)
cluster.routing.allocation.cluster_initial_primaries_recoveries: 16


系統配置

調整系統配置,調高 es user 的資料夾文件數量限制,以避免 Elasticsearch 會產生大量文件會超過系統預設。

vim /etc/security/limits.conf

設定參考

# 調整每個 process 可以開啟文件數的限制
esuser soft nofile 65536
esuser hard nofile 65536

調整系統配置,設定使用者的執行緒限制

vim /etc/security/limits.d/20-nproc.conf

設定參考

# 調整每個 process 可以開啟文件數的限制
esuser soft nofile 65536
esuser hard nofile 65536

調整系統配置

vim /etc/sysctl.conf

設定參考

# 一個進程可以擁有的 VMA(虛擬內存區塊)數量,預設為 65536
vm.max_map_count=655360

重新加載系統配置

sysctl -p

啟動 Elasticsearch 服務

前面提到,Elasticsearch 不允許 root 用戶執行服務,因此前面設定完成後,要切換到 elasticsearch sys user 並且啟動服務,要記得將該文件夾權限設定為 esuser

su esuser
cd /opt/module/elasticsearch-7.16.2/
bin/elasticsearch

查看 Cluster 健康狀況

request GET 
'http://eshost1:9200/_cluster/health'

response

{
    "cluster_name": "elasticsearch",
    "status": "green", //健康狀況
    "timed_out": false,
    "number_of_nodes": 3, //cluster 中的 node 數量
    ...
}

查看 Cluster node 狀況

request GET 
'http://eshost1:9200/_cat/nodes'