ES叢集

chy_18883701161發表於2020-10-22


 

elasticsearch為什麼要叢集?叢集有什麼作⽤

  • ⾼可⽤
    ⾼可⽤(High Availability)是分散式系統架構設計中必須考慮的因素之⼀,它通常是指,通過設
    計減少系統不能提供服務的時間。如果系統每運⾏100個時間單位,會有1個時間單位⽆法提供服
    務,我們說系統的可⽤性是99%。

  • 負載均衡
    將流量均衡的分佈在不同的節點上,每個節點都可以處理⼀部分負載,並且可以在節點之間動態分
    配負載,以實現平衡。

  • ⾼效能
    將流量分發到不同機器,充分利⽤多機器多CPU,從串⾏計算到並⾏計算提⾼系統效能。

Elasticsearch 天生就是分散式的,會在後臺自動執行

  • 分配文件到不同的容器 或 分片 中,文件可以儲存在一個或多個節點中
  • 按叢集節點來均衡分配這些分片,從而對索引和搜尋過程進行負載均衡
  • 複製每個分片以支援資料冗餘,從而防止硬體故障導致的資料丟失
  • 將叢集中任一節點的請求路由到存有相關資料的節點
  • 叢集擴容時無縫整合新節點,重新分配分片以便從離群節點恢復

ES在設計時就儘可能地遮蔽了分散式系統的複雜性,無需瞭解內部機制就可以使用ES。

 

es叢集的基本核⼼概念

Elasticsearch 的配置⽂件中可以通過 node.master、node.data 來
設定節點型別。
node.master:是否是主節點(是否有競選資格)
node.data:是否儲存資料,如果為true則為資料節點
 

每個索引有⼀個或多個分⽚,每個分⽚儲存不同的資料。分⽚可分為

  • 主分⽚( primary shard)
  • 複製分⽚(replica shard)

複製分⽚是主分⽚的拷⻉,可以分擔系統壓力、流量。預設每個主分⽚有⼀個複製分⽚,⼀個索引的複製分⽚的數量可以動態地調整,複製分⽚從不與它的主分⽚在同⼀個節點上。

 

搭建es叢集

1、拷⻉elasticsearch-7.2.0安裝包3份,分別命名es-a, es-b,es-c

2、分別修改配置⽂件elasticsearch.yml

#叢集名稱
cluster.name: my-application

#節點名稱
node.name: node-1

#是不是有資格主節點
node.master: true
#是否儲存資料
node.data: true

#最⼤叢集節點數
node.max_local_storage_nodes: 3

#⽹關地址,常配置為實際ip
network.host: 0.0.0.0
#端⼝
http.port: 9200

#內部節點之間溝通端⼝
transport.tcp.port: 9300

#es7.x 之後新增的配置,寫⼊候選主節點的裝置地址,在開啟服務後可以被選為主節點。此處在同一機器的不同埠模擬多個節點
discovery.seed_hosts: ["localhost:9200","localhost:9201","localhost:9202"]
#es7.x 之後新增的配置,初始化⼀個新的叢集時需要此配置來選舉master
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]

#資料和儲存路徑
path.data: /Users/louis.chen/Documents/study/search/storage/a/data
path.logs: /Users/louis.chen/Documents/study/search/storage/a/logs

3、分別啟動a ,b ,c 三個節點

4、訪問 localhost:9200/_cat/health?v ,如果返回的node.total是3,代表叢集搭建成功

但這種方式看到的叢集資訊很抽象,可以在kibana的視覺化地檢視叢集資訊,且資訊更詳細。帶星號的是master節點。
 

先在kibana.yml中配置叢集節點

elasticsearch.hosts: ["http://localhost:9200","http://localhost:
9201","http://localhost:9202"]

啟動kibana,訪問localhost:5601 在monitor中即可看到es叢集的資訊

 

叢集的分片管理

分片是針對index而言的

分⽚(shard):因為ES是個分散式的搜尋引擎, 所以索引通常都會分解成不同部分, ⽽這些分佈在不同節點的資料就是分⽚. ES⾃動管理和組織分⽚, 並在必要的時候對分⽚資料進⾏再平衡分配, 所以⽤戶基本上不⽤擔⼼分⽚的處理細節。

副本(replica):ES預設為⼀個索引建立1個主分⽚, 並分別為其建立⼀個副本分⽚. 也就是說每個索引都由1個主分⽚成本, ⽽每個主分⽚都相應的有⼀個copy.

Elastic search7.x之後,如果不指定索引分⽚,預設會建立1個主分⽚和⼀個副分⽚,⽽7.x版本之前的⽐如6.x版本,預設是5個主分⽚

建立索引(指定分⽚數量)

PUT nba
#指定分片數量
{"settings":{"number_of_shards":3,"number_of_replicas":1},"mappings":
{"properties":{"birthDay":{"type":"date"},"birthDayStr":
{"type":"keyword"},"age":{"type":"integer"},"code":
{"type":"text"},"country":{"type":"text"},"countryEn":
{"type":"text"},"displayAffiliation":{"type":"text"},"displayName":
{"type":"text"},"displayNameEn":{"type":"text"},"draft":
{"type":"long"},"heightValue":{"type":"float"},"jerseyNo":
{"type":"text"},"playYear":{"type":"long"},"playerId":
{"type":"keyword"},"position":{"type":"text"},"schoolType":
{"type":"text"},"teamCity":{"type":"text"},"teamCityEn":
{"type":"text"},"teamConference":
{"type":"keyword"},"teamConferenceEn":{"type":"keyword"},"teamName":
{"type":"keyword"},"t

 

修改副分⽚數量

PUT /nba/_settings
{
 "number_of_replicas": 2
}

 

es叢集健康管理

1、檢視叢集的健康狀態

http://127.0.0.1:9200/_cat/health?v
  • status :叢集的狀態,red紅表示叢集不可⽤,有故障。yellow⻩表示叢集不可靠但可⽤,⼀般單節點時就是此狀態。green正常狀態,表示叢集⼀切正常。
  • node.total :節點數,這⾥是3,表示該叢集有三個節點。
  • node.data :資料節點數,儲存資料的節點數,這⾥是3。
  • shards :表示我們把資料分成多少塊儲存。
  • pri :主分⽚數,primary shards
  • active_shards_percent :啟用的分⽚百分⽐,這⾥可以理解為載入的資料分⽚數,只有載入所有的分⽚數,叢集才算正常啟動,在啟動的過程中,如果我們不斷重新整理這個⻚⾯,我們會發現這個百分⽐會不斷加⼤。

 

2、檢視叢集的索引數

http://127.0.0.1:9200/_cat/indices?v

返回了叢集中的所有索引資訊,我們可以看到所有索引的健康情況和具體資訊

  • health : 索引健康,green為正常,yellow表示索引不可靠(單節點),red索引不可⽤。與叢集健康狀態⼀致。
  • status : 狀態表明索引是否開啟,只索引是可以關閉的。
  • index : 索引的名稱
  • uuid : 索引內部分配的名稱,索引的唯⼀表示
  • pri : 叢集的主分⽚數量
  • docs.count : 這⾥統計了⽂檔的數量。
  • docs.deleted : 這⾥統計了被刪除⽂檔的數量。
  • store.size : 索引的儲存的總容量
  • pri.store.size : 主分別的容量

 

3、檢視磁碟的分配情況

http://127.0.0.1:9200/_cat/allocation?v

返回每個節點的磁碟情況。

  • shards : 該節點的分⽚數量
  • disk.indices : 該節點中所有索引在該磁碟所點的空間。
  • disk.used : 該節點已經使⽤的磁碟容量
  • disk.avail : 該節點可以使⽤的磁碟容量
  • disk.total : 該節點的磁碟容量

 

4、檢視叢集的節點資訊

http://127.0.0.1:9200/_cat/nodes?v

URL返回了叢集中各節點的情況。

  • ip : ip地址
  • heap.percent : 堆記憶體使⽤情況
  • ram.percent : 運⾏記憶體使⽤情況
  • cpu : cpu使⽤情況
  • master : 是否是主節點

 

5、檢視叢集的其他資訊

http://127.0.0.1:9200/_cat

相關文章