Elasticsearch-節(jié)點(diǎn)、集群、分片、副本

一、分布式系統(tǒng)的可用性與擴(kuò)展性

1.高可用

  • 服務(wù)可用性:允許有節(jié)點(diǎn)停止服務(wù)
  • 數(shù)據(jù)可用性:部分節(jié)點(diǎn)丟失,不會(huì)丟失數(shù)據(jù)

2.可擴(kuò)展性

  • 請求量提升/數(shù)據(jù)不斷增長(將數(shù)據(jù)分布到所有節(jié)點(diǎn)上)

3.ES分布式架構(gòu)的好處

  • 存儲(chǔ)的水平擴(kuò)容
  • 提高系統(tǒng)的可用性,部分節(jié)點(diǎn)停止服務(wù),整個(gè)集群的服務(wù)不受影響

4.ES的分布式架構(gòu)

  • 不同的集群通過不同的名字區(qū)分,默認(rèn)名字“elasticsearch”
  • 通過配置文件修改,或者在命令行中 -E cluster.name=myes 進(jìn)行設(shè)定
  • 一個(gè)集群可以有一個(gè)或者多個(gè)節(jié)點(diǎn)

二、節(jié)點(diǎn)

1.定義

節(jié)點(diǎn)是一個(gè)ES的實(shí)例,本質(zhì)是一個(gè)Java進(jìn)程,一臺(tái)機(jī)器上可以 運(yùn)行多個(gè)ES進(jìn)程,但是生產(chǎn)環(huán)境一般建議一臺(tái)機(jī)器上只運(yùn)行一個(gè)ES實(shí)例

  • 每一個(gè)節(jié)點(diǎn)都有名字,通過配置文件配置,或者啟動(dòng)的時(shí)候 -E node.name=mynode指定
  • 每一個(gè)節(jié)點(diǎn)在啟動(dòng)之后,會(huì)分配 一個(gè)UID,保存在data目錄下

2.Master-eligible nodes和Master Node

  • 每個(gè)節(jié)點(diǎn)啟動(dòng)后,默認(rèn)就是一個(gè)Master eligible節(jié)點(diǎn)
    可以設(shè)置 node.master:false禁止
  • Master eligible節(jié)點(diǎn)可以參與選主流程,成為Master節(jié)點(diǎn)
  • 當(dāng)?shù)谝粋€(gè)節(jié)點(diǎn)啟動(dòng)時(shí),它會(huì)將自己選舉為Master節(jié)點(diǎn)
  • 每個(gè)節(jié)點(diǎn)上都保存了集群的狀態(tài),只有Master節(jié)點(diǎn)才能修改集群的狀態(tài)信息

集群狀態(tài)維護(hù)了一個(gè)集群中必要的信息:

  • 所有的節(jié)點(diǎn)信息
  • 所有的索引和其他相關(guān)的Mapping和Setting信息
  • 分片的路由信息

任意節(jié)點(diǎn)都能修改信息會(huì)導(dǎo)致數(shù)據(jù)的不一致性

3.Data Node 和 Coordinating Node

  • Data Node:可以保存數(shù)據(jù)的節(jié)點(diǎn);負(fù)責(zé)保存分片數(shù)據(jù),在數(shù)據(jù)擴(kuò)展上起到了至關(guān)重要的作用
  • Coordinating Node:負(fù)責(zé)接受Client請求,將請求分發(fā)到合適的節(jié)點(diǎn),最終把結(jié)果匯集到一起

每個(gè) 節(jié)點(diǎn)都默認(rèn)起到了Coordinating Node的職責(zé)

4.Hot 和 Warm Node

不同硬件配置的 Data Node ,用來實(shí)現(xiàn) Hot & Warm 架構(gòu),降低集群部署的成本(硬件成本)
Hot機(jī)器選擇較好的,Warn機(jī)器選擇較差的

5.Machine Learning Node

負(fù)責(zé)跑機(jī)器學(xué)習(xí)的job,用來做異常檢測

6.Tribe Node

Tribe Node連接到不同的ES集群,并且支持將這些集群當(dāng)成一個(gè)單獨(dú)的集群處理。

5.3開始使用 Cross Cluster Search

7.配置節(jié)點(diǎn)類型

開發(fā)環(huán)境中一個(gè)節(jié)點(diǎn)可以承擔(dān) 多種角色
生產(chǎn)環(huán)境中,應(yīng)該設(shè)置單一角色的節(jié)點(diǎn)(dedicated node)

節(jié)點(diǎn)類型 配置參數(shù) 默認(rèn)值
maste eligible node.master true
data node.data true
ingest node.ingest true
coordinating only 每個(gè)節(jié)點(diǎn)默認(rèn)都是coordinating節(jié)點(diǎn)。設(shè)置其他類型全部都為false
machine learning node.ml true(需enable x-pack)

三、分片

一個(gè)索引可以存儲(chǔ)超出單個(gè)節(jié)點(diǎn)硬件限制的大量數(shù)據(jù)。
比如,一個(gè)具有 10 億文檔數(shù)據(jù)的索引占據(jù) 1TB 的磁盤空間,而任一節(jié)點(diǎn)都可能沒有這樣大的磁盤空間?;蛘邌蝹€(gè)節(jié)點(diǎn)處理搜索請求,響應(yīng)太慢。為了解決這個(gè)問題,Elasticsearch 提供了將索引劃分成多份的能力,每一份就稱之為分片。當(dāng)你創(chuàng)建一個(gè)索引的時(shí)候,你可以指定你想要的分片的數(shù)量。每個(gè)分片本身也是一個(gè)功能完善并且獨(dú)立的“索引”,這個(gè)“索引”可以被放置到集群中的任何節(jié)點(diǎn)上。
分片很重要,主要有兩方面的原因:
1)允許你水平分割 / 擴(kuò)展你的內(nèi)容容量。
2)允許你在分片之上進(jìn)行分布式的、并行的操作,進(jìn)而提高性能/吞吐量。
至于一個(gè)分片怎樣分布,它的文檔怎樣聚合和搜索請求,是完全由 Elasticsearch 管理的,對于作為用戶的你來說,這些都是透明的,無需過分關(guān)心。
被混淆的概念是,一個(gè) Lucene 索引 我們在 Elasticsearch 稱作 分片 。
一個(gè)Elasticsearch 索引 是分片的集合。
當(dāng) Elasticsearch 在索引中搜索的時(shí)候, 他發(fā)送查詢到每一個(gè)屬于索引的分片(Lucene 索引),然后合并每個(gè)分片的結(jié)果到一個(gè)全局的結(jié)果集。

1.主分片

用以解決數(shù)據(jù)水平擴(kuò)展的問題。通過主分片,可以將數(shù)據(jù)分布在集群內(nèi)的所有節(jié)點(diǎn)上

  • 一個(gè)分片是一個(gè)運(yùn)行的Lucene的實(shí)例
  • 主分片數(shù)在索引創(chuàng)建時(shí)指定,后續(xù)不允許修改,除非Reindex

2.副本分片

用以解決數(shù)據(jù)高可用的問題。副本分片是主分片的拷貝

  • 副本分片數(shù)可以動(dòng)態(tài)調(diào)整
  • 增加副本數(shù)可以在一定程度上提高服務(wù)的可用性(讀取的吞吐量)

3.分片的設(shè)定

對于生產(chǎn)環(huán)境中分片的設(shè)定,需要提前做好容量規(guī)劃

  • 分片數(shù)設(shè)置過小
    導(dǎo)致后續(xù)無法增加節(jié)點(diǎn)實(shí)現(xiàn)水平擴(kuò)展
    單個(gè)分片的數(shù)量太大,導(dǎo)致數(shù)據(jù)重新分配耗時(shí)
  • 分片數(shù)設(shè)置過大,7.0開始默認(rèn)主分片設(shè)置成1,解決了over-sharding的問題
    影響搜索結(jié)果的相關(guān)性打分,影響統(tǒng)計(jì)結(jié)果的準(zhǔn)確性
    單個(gè)節(jié)點(diǎn)上過多的分片,會(huì)導(dǎo)致資源浪費(fèi),同時(shí)也會(huì)影響性能

4.集群健康狀況

安裝多個(gè)es

#start multi-nodes Cluster
bin/elasticsearch -E node.name=node0 -E cluster.name=hongcaixia -E path.data=node0_data
bin/elasticsearch -E node.name=node1 -E cluster.name=hongcaixia -E path.data=node1_data
bin/elasticsearch -E node.name=node2 -E cluster.name=hongcaixia -E path.data=node2_data
bin/elasticsearch -E node.name=node3 -E cluster.name=hongcaixia -E path.data=node3_data

GET _cluster/health

{
  "cluster_name" : "hongcaixia",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 2,
  "active_shards" : 2,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

GET _cat/shards:

.kibana_1            0 p STARTED 3 11.3kb 172.18.0.4 es7_01
.kibana_task_manager 0 p STARTED 2 12.7kb 172.18.0.4 es7_01
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容