版本說明:
Windows 10 專業版
elasticsearch-7.1.1(Windows X64)
ES通常以叢集方式工作,這樣做不僅能夠提高 ES的搜尋能力還可以處理大資料搜尋的能力,同時也增加了系統的容錯能力及高可用,ES可以實作PB級資料的搜尋。
從上圖總結以下概念:
結點 ES叢集由多個伺服器組成,每個伺服器即為一個Node結點(該服務隻部署了一個ES程序)。
分片 當我們的文檔量很大時,由于記憶體和硬碟的限制,同時也為了提高ES的處理能力、容錯能力及高可用能力,我們将索引分成若幹分片,每個分片可以放在不同的伺服器,這樣就實作了多個伺服器共同對外提供索引及搜尋服務。一個搜尋請求過來,會分别從各分片去查詢,最後将查詢到的資料合并傳回給使用者。
副本 為了提高ES的高可用同時也為了提高搜尋的吞吐量,我們将分片複制一份或多份存儲在其它的伺服器,這樣即使目前的伺服器挂掉了,擁有副本的伺服器照常可以提供服務。
主結點 一個叢集中會有一個或多個主結點,主結點的作用是叢集管理,比如增加節點,移除節點等,主結點挂掉後ES會重新選一個主結點。
結點轉發 每個結點都知道其它結點的資訊,我們可以對任意一個結點發起請求,接收請求的結點會轉發給其它結點查詢資料。
搭建叢集
下邊的例子實作建立一個2結點的叢集,并且索引的分片我們設定2片,每片一個副本。
下邊的例子實作建立一個2結點的叢集,并且索引的分片我們設定2片,每片一個副本。
1.結點的三個角色
主結點:master節點主要用于叢集的管理及索引 比如新增結點、分片配置設定、索引的新增和删除等。
資料結點: data 節點上儲存了資料分片,它負責索引和搜尋操作。
用戶端結點:client 節點僅作為請求用戶端存在,client的作用也作為負載均衡器,client 節點不存資料,隻是将請求均衡轉發到其它結點。
通過下邊兩項參數來配置結點的功能:
node.master: #是否允許為主結點
node.data: #允許存儲資料作為資料結點
node.ingest: #是否允許成為協調節點,
四種組合方式:
master=true,data=true:即是主結點又是資料結點
master=false,data=true:僅是資料結點
master=true,data=false:僅是主結點,不存儲資料
master=false,data=false:即不是主結點也不是資料結點,此時可設定ingest為true表示它是一個用戶端。
2.建立結點 1
解壓elasticsearch-7.1.1.zip ,結點1對外服務的http端口是:9200 ;叢集管理端口是9300;結點名:es_node_1,elasticsearch.yml内容如下
#叢集名稱
cluster.name: es-cluster
#節點名稱
node.name: es_node_1
#給節點添加額外屬性,暫時沒用
node.attr.rack: r1
#資料存儲位置
path.data: D:\o99o\Elasticsearch\elasticsearch-7.1.1_cluster_node1\data
#日志存儲位置
path.logs: D:\o99o\Elasticsearch\elasticsearch-7.1.1_cluster_node1\logs
#網絡綁定,這裡我綁定 0.0.0.0,支援外網通路
network.host: 127.0.0.1
#對外服務http端口,預設9200
http.port: 9200
#單點傳播節點清單
discovery.seed_hosts: ["127.0.0.1:9300","127.0.0.1:9301"]
#手動指定可以成為mater的所有節點的name或者ip,這些配置将會在第一次選舉中進行計算
cluster.initial_master_nodes: ["127.0.0.1:9300"]
#控制叢集在達到多少個節點之後才會開始資料恢複,通過這個設定可以避免叢集自動互相發現的初期,
#shard分片不全的問題,假如es叢集内一共有5個節點,就可以設定為5,
#那麼這個叢集必須有5個節點啟動後才會開始資料分片,如果設定為3,
#就有可能另外兩個節點沒存儲資料分片
gateway.recover_after_nodes: 2
#删除索引時給出索引名
action.destructive_requires_name: true
#叢集節點之間通信端口
transport.tcp.port: 9300
#是否可以成為master節點
node.master: true
#是否允許該節點存儲資料,預設開啟
node.data: true
#用來在真正對文檔進行索引之前做預處理
#如移除某個字段,重命名某個字段等
node.ingest: true
#設定一台伺服器能運作的節點數
node.max_local_storage_nodes: 2
# 安裝head插件時的必要參數:
http.cors.enabled: true
http.cors.allow-origin: "*"
#允許跨域通路頭部資訊
http.cors.allow-headers: "X-Requested-With,Content-Type, Content-Length, Authorization"
xpack.ml.enabled: false
3.建立結點2
解壓elasticsearch-7.1.1.zip ,結點1對外服務的http端口是:9202 ;叢集管理端口是9302;結點名:es_node_2,elasticsearch.yml内容如下
#叢集名稱
cluster.name: es-cluster
#節點名稱
node.name: es_node_2
#給節點添加額外屬性,暫時沒用
node.attr.rack: r2
#資料存儲位置
path.data: D:\o99o\Elasticsearch\elasticsearch-7.1.1_cluster_node2\data
#日志存儲位置
path.logs: D:\o99o\Elasticsearch\elasticsearch-7.1.1_cluster_node2\logs
#網絡綁定,這裡我綁定 0.0.0.0,支援外網通路
network.host: 127.0.0.1
#對外服務http端口,預設9200
http.port: 9201
#單點傳播節點清單
discovery.seed_hosts: ["127.0.0.1:9300","127.0.0.1:9301"]
#手動指定可以成為mater的所有節點的name或者ip,這些配置将會在第一次選舉中進行計算
cluster.initial_master_nodes: ["127.0.0.1:9300"]
#控制叢集在達到多少個節點之後才會開始資料恢複,通過這個設定可以避免叢集自動互相發現的初期,
#shard分片不全的問題,假如es叢集内一共有5個節點,就可以設定為5,
#那麼這個叢集必須有5個節點啟動後才會開始資料分片,如果設定為3,
#就有可能另外兩個節點沒存儲資料分片
gateway.recover_after_nodes: 2
#删除索引時給出索引名
action.destructive_requires_name: true
#叢集節點之間通信端口
transport.tcp.port: 9301
#是否可以成為master節點
node.master: true
#是否允許該節點存儲資料,預設開啟
node.data: true
#用來在真正對文檔進行索引之前做預處理
#如移除某個字段,重命名某個字段等
node.ingest: true
#設定一台伺服器能運作的節點數
node.max_local_storage_nodes: 2
# 安裝head插件時的必要參數:
http.cors.enabled: true
http.cors.allow-origin: "*"
#允許跨域通路頭部資訊
http.cors.allow-headers: "X-Requested-With,Content-Type, Content-Length, Authorization"
xpack.ml.enabled: false
4.啟動測試
為每個結點安裝IK分詞器,并啟動,然後建立索引庫并設定分片數。
在一個節點上建立文檔,發現在其他節點上也可以查詢到資料,還可進行節點的增删測試。
5. 叢集的健康
通過通路 GET /_cluster/health 來檢視Elasticsearch 的叢集健康情況。
用三種顔色來展示健康狀态:green:所有的主分片和副本分片都正常運作; yellow:所有的主分片都正常運作,但有些副本分片運作不正常;red:存在主分片運作不正常。
Get請求:http://localhost:9200/_cluster/health
叢集配置,詳見GitHub:https://github.com/o99o/ElasticSearchTest