為什么要搭建集群?
凡事都要講究個為什么。在搭建集群之前,我們首先先問一句,為什么我們需要搭建集群?它有什么優勢呢?
高可用性
Elasticsearch 作為一個搜索引擎,我們對它的基本要求就是存儲海量數據並且可以在非常短的時間內查詢到我們想要的信息。所以第一步我們需要保證的就是 Elasticsearch 的高可用性,什么是高可用性呢?它通常是指,通過設計減少系統不能提供服務的時間。假設系統一直能夠提供服務,我們說系統的可用性是 100%。如果系統在某個時刻宕掉了,比如某個網站在某個時間掛掉了,那么就可以它臨時是不可用的。所以,為了保證 Elasticsearch 的高可用性,我們就應該盡量減少 Elasticsearch 的不可用時間。
那么怎樣提高 Elasticsearch 的高可用性呢?這時集群的作用就體現出來了。假如 Elasticsearch 只放在一台服務器上,即單機運行,假如這台主機突然斷網了或者被攻擊了,那么整個 Elasticsearch 的服務就不可用了。但如果改成 Elasticsearch 集群的話,有一台主機宕機了,還有其他的主機可以支撐,這樣就仍然可以保證服務是可用的。
存儲空間
另外,既然是群集,那么存儲空間肯定也是聯合起來的,假如一台主機的存儲空間是固定的,那么集群它相對於單個主機也有更多的存儲空間,可存儲的數據量也更大。所以綜上所述,我們需要一個集群!
開始搭建
下載Elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.2-linux-x86_64.tar.gz
tar -zxvf elasticsearch-7.3.2-linux-x86_64.tar.gz
我們將解壓出來的文件復制三份出來elasticsearch1、elasticsearch2、elasticsearch3,啟動三個節點搭建集群
更改配置文件
依次打開三個elasticsearch中config目錄下的下elasticsearch.yml配置文件
vim config/elasticsearch.yml
需要修改的位置如下
#配置文件中未改動的位置我就不展示了
#第一個配置文件改動如下
#集群名稱(必須一樣)
cluster.name: my-application
#節點名稱(必須不一樣)
node.name: node-1
#是否可以選舉為主節點
node.master: true
#是否存儲數據
node.data: true
#本機的IP地址
network.host: 0.0.0.0
#發布地址
network.publish_host: 127.0.0.1
#服務的端口號(在本地配置多個時,請注意修改為不一樣的端口)
http.port: 9200
#服務發現端口
transport.tcp.port: 9300
#集群發現IP集合
discovery.seed_hosts: ["127.0.0.1:9300","127.0.0.1:9301","127.0.0.1:9302"]
#集群選舉設置
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
#開啟跨域訪問
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: "Authorization"
#第二個配置文件改動如下
cluster.name: my-application
node.name: node-2
node.master: true
node.data: true
network.host: 0.0.0.0
network.publish_host: 127.0.0.1
http.port: 9201
transport.tcp.port: 9301
discovery.seed_hosts: ["127.0.0.1:9300","127.0.0.1:9301","127.0.0.1:9302"]
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: "Authorization"
#第三個配置文件改動如下
cluster.name: my-application
node.name: node-3
node.master: true
node.data: true
network.host: 0.0.0.0
network.publish_host: 127.0.0.1
http.port: 9202
transport.tcp.port: 9302
discovery.seed_hosts: ["127.0.0.1:9300","127.0.0.1:9301","127.0.0.1:9302"]
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: "Authorization"
啟動集群
依次啟動三個elasticsearch節點
bin/elasticsearch
通過elasticsearch-head訪問 看到如下界面就代表搭建成功。elasticsearch-head安裝請參考上一篇博客 安裝Elasticsearch

添加用戶安全認證
在6.8之前免費版本並不包含安全認證功能,之后版本有開放一些基礎認證功能,對於普通用戶來說是夠用的
- 新增配置,每個集群節點都需要設置。
vim config/elasticsearch.yml
# 在文件的末尾追加
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
- 生成TLS 和身份驗證,將會在config下生成elastic-certificates.p12文件,將此文件傳到其他兩個節點的config目錄,注意文件權限
bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass ""
-
啟動集群,es 集群不啟動,下面的添加密碼操作執行不了。
-
創建Elasticsearch 集群密碼。
在主節點上執行就行,數據會自動同步到其他節點
bin/elasticsearch-setup-passwords interactive
執行完會看到如下界面,設置密碼就行了。

再次訪問elasticsearch-head 發現需要輸入帳號密碼,安裝用戶認證成功。手動安裝elasticsearch-head是不支持用戶認證登陸的,請選擇chrome插件方式安裝,請參考上一篇博客 安裝Elasticsearch

