不同於單節點,Elasticsearch Cluster是以多個Elasticsearch節點透過網路同步達到集群化,可以快速且穩定的切割及同步資料,確保服務及資料都具高可用性,以下示範 Ubuntu 三個節點安裝。
確認安裝環境
Linux - Ubuntu 22.04
Memory : 8G
OpenJDK:17
Elasticsearch:8.14.1
前置作業
# 更新
$ apt update
# 安裝Java的Open JDK 17版本
$ apt install openjdk-17-jre-headless
# 確認安裝成功
$ java -version
下載最新版本 ELK 8.14.1 安裝包
下載 Elasticsearch, logstash, Kibana 的 deb 檔,並透過 deb 檔進行安裝:
$ sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.14.1-amd64.deb
$ sudo wget https://artifacts.elastic.co/downloads/logstash/logstash-8.14.1-amd64.deb
$ sudo wget https://artifacts.elastic.co/downloads/kibana/kibana-8.14.1-amd64.deb
$ dpkg -i elasticsearch-8.14.1-amd64.deb
$ dpkg -i kibana-8.14.1-amd64.deb
$ dpkg -i logstash-8.14.1-amd64.deb
Elasticsearch 設定
調校記憶體使用量
# 查看主記憶體使用情況
$ free -h
# 建議設定為 Mem total值 的一半 (如範例,應設為 3 ~ 3.9g)
$ vi /etc/elasticsearch/jvm.options
# 修改設定
-Xms3g
-Xmx3g
YML 檔 設定
3 個節點都要設定一樣
$ vi /etc/elasticsearch/elasticsearch.yml
# 修改:不同的集群使用不同的 cluster.name
cluster.name: ELK8-cluster
# 修改:節點主機名稱,預設是主機名/hostname
node.name: ${HOSTNAME}
# 修改:修改資料預設儲存路徑(可依據實際環境調整路徑)
path.data: /data/es
# log 路徑
path.logs: /var/log/elasticsearch
# 取消註解符號 "#"
bootstrap.memory_lock: true
network.host: 0.0.0.0
# 取消註解 "#"、設定集群IP
discovery.seed_hosts: ["10.99.1.69","10.99.1.89","10.99.1.124"]
cluster.initial_master_nodes:["10.99.1.69","10.99.1.89","10.99.1.124"]
# disable security features
xpack.security.enabled: false
http.host: 0.0.0.0
執行與驗證
執行ES
啟動
$ systemctl start elasticsearch
$ systemctl enable elasticsearch
$ systemctl status elasticsearch
$ systemctl stop elasticsearch
首次啟動後需重設elastic密碼
# 自定密碼
$ /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic -i
Cluster 是否成功啟動
$ curl -k "http://10.99.1.69:9200/_cat/nodes?v"
Kibana 設定
修改權限
$ chown -R kibana. /etc/kibana
設定 Kibana yml 檔
$ vi /etc/kibana/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
server.publicBaseUrl: "http://0.0.0.0:5601"
xpack.security.enabled: false
啟動
$ systemctl start kibana
$ systemctl enable kibana
$ systemctl status kibana
驗證
$ curl -X GET "http://0.0.0.0:5601"
透過瀏覽器輸入 http://localhost:5601