ElasticSearch的相關原理(zen節點發現機制,分片分配,故障轉移,分片工作,分詞原理)
技術標籤:elasticsearchelasticsearch資料庫
ElasticSearch的相關原理
節點的發現機制(zen機制)
Zen機制是elasticsearch的內建機制,用於節點發現.所有節點間通訊必須用trasport模組來完成。
-
叢集中的節點相互發現叢集
-
負責master選舉
Master選舉機制
Master選舉是由master-eligble節點發起的,當一個master-eligble發現滿足以下條件的時候,發起選舉
①本master-eligble不是master
②本master-eligble節點通過zen模組的ping操作詢問其他已知節點,沒有其他任何節點連線到master
怎麼進行選舉,選舉物件是誰呢?
首先必須要是master-eligble,master-eligble的確定是由我們手動指定master為true.
其次是選擇排序後的第一個作為master,排序是按照clusterStateVersion來進行比較,clusterStateVersion越大,優先順序越高,clusterStateVersion相同的時候,按照節點id進行比較,id是節點第一次啟動時隨機生成的. -
Ping:發現其他節點,同時支援單播和多播,但是目前建議使用單播
配置資訊
discovery.zen.ping.unicast.hosts: [“master”, “slave1”, “slave2”],這裡只配置master即可完成節點的發現
分片是如何進行分配
是按照總體均衡分配的,es叢集提供設定叢集允許分配那種型別的分片,包括所有分片(預設)、主分片、新索引的主分片、禁止所有索引分配分片。
elasticsearch除了從叢集整體層面考慮分片分配,同時也會考慮到可用磁碟空間等環境因素。elasticsearch在向某個主機的節點上分配分片時,會考慮其可用的磁碟空間。
disk.watermark.low代表著磁碟使用率的低水位線,預設85%,這個配置意味著,es不會將分片分配給超過這個值的節點,此設定對新建立的索引的主分片沒有影響,但是會阻止分配它們的副本。
同理存在高水位線配置disk.watermark.high. 預設為90% ,這意味著Elasticsearch將嘗試將分片從磁碟使用率超過90%的節點上分離出來,這個配置同樣影響叢集的平衡。
- ES搜尋聚合演算法
ES的聚合有兩個概念: - Buckets(桶):將符合條件的文件進行聚合.相當於SQL中的group by,根據條件進行聚合.如:性別,地區,部門
Filters Aggregation -- 過濾分桶
Date Histogram Aggregation -- 按照日期自動劃分桶
Date Range Aggregation -- 給定日期範圍劃分
Histogram Aggregation -- 直方圖劃分桶
Range Aggregation -- 給定範圍劃分桶
IP Range Aggregation -- 按照給定ip範圍分桶
Terms Aggregatioon -- 按照最多的詞條分桶
Geo Distance Aggregation -- 按地理位置指定的中心點園環分桶
GeoHash grid Aggregation -- 按geohash單元分桶
- Metrics(指標):分析指標,類似於SQL的count,max,min,avg.
Cardinality:求基數,看看有幾種種類
Stats:對於一個指標的分析狀態,比如count,max,avg,min
Extended Stats:比Stats更加詳細,擴充套件的Stats
Percentiles:求百分比
Percentile Ranks:百分比排名,戰勝多少個人的百分比
ElasticSearch的故障轉移機制
當一個節點故障之後,由於故障原因,裡面的主分片丟失了,所以監測報紅.此時其他節點的相關副本分片變成主分片,監控報黃.再產生相應的副本分片,均衡分配到各個節點中,副本分片可用,監控變綠.如果再有其他的節點加入,重新分配各個節點的分片.由於有副本的存在,所以故障導致的資料丟失都不會造成致命傷害.
Shards分片怎麼工作的
ES的“分片(shard)”機制可將一個索引內部的資料分佈地儲存於多個節點,它通過將一個索引切分為多個底層物理的Lucene索引完成索引資料的分割儲存功能,這每一個物理的Lucene索引稱為一個分片(shard)。
每個分片其內部都是一個全功能且獨立的索引,因此可由叢集中的任何主機儲存。建立索引時,使用者可指定其分片的數量,預設數量為5個。
Shard有兩種型別:primary和replica,即主shard及副本shard。
Primary shard用於文件儲存,每個新的索引會自動建立5個Primary shard,當然此數量可在索引建立之前通過配置自行定義,不過,一旦建立完成,其Primary shard的數量將不可更改。
Replica shard是Primary Shard的副本,用於冗餘資料及提高搜尋效能。
每個Primary shard預設配置了一個Replica shard,但也可以配置多個,且其數量可動態更改。ES會根據需要自動增加或減少這些Replica shard的數量。
ES叢集可由多個節點組成,各Shard分散式地儲存於這些節點上。
ES可自動在節點間按需要移動shard,例如增加節點或節點故障時。簡而言之,分片實現了叢集的分散式儲存,而副本實現了其分散式處理及冗餘功能。
分詞如何進行
分析器由三種構建塊組成的:character filters,tokenizers,token filters.
- character filters:字元過濾器,有三種
①HTML Strip Char Filter:把資料中的html 標籤元素剝離出來
②Pattern Replace Char Filter:用正則表示式的方式來替換資料
③Mapping Char Filter:通過給定的mappings資料來替換 - Tokenizers:分詞器
①Standard tokenizer: 小寫,停頓過濾
②Whitespace Tokenizer: 以空格為分隔符拆分
③Pattern Tokenizer:正則過濾,預設是\w+
④simple Tokenizer:小寫
⑤KeyWord Tokenizer:不分詞,按照這個詞做關鍵詞
⑥Stop Tokenizer:按停頓過濾,the,a,an
⑦Language Tokenizer:支援各種語言 - token filters:過濾器:主要是進行過濾操作,小寫操作,或者長度過濾之類的
①Standard Token Filter:什麼都不做
②Length Token Filter:去掉過長或者過短的單詞
③Lowercase Token Filter:轉換為小寫
④Uppercase Token Filter:轉換為大寫
⑤Shingle Token Filter:single型別的詞元過濾器用於建立詞元的組合作為單個詞元
如何為單詞建立索引優先
7.1TF-IDF演算法
TF(詞頻):指的是一個文件中,這個詞出現的頻率,出現次數越多,相關度越高
IDF(逆文件頻率):指的這個詞出現在所有文件的次數,越多,相關度越低,表示越不重要
Field-length norm(欄位長度歸約):欄位越短,欄位權重越高.
三個引數的乘積越大,優先度越高
7.2BM25演算法
7.3屬於TF-IDF演算法的改進演算法,具體公式如下
Es的預設演算法用的是BM25演算法.