1. 程式人生 > 其它 >ElasticSearch的相關原理(zen節點發現機制,分片分配,故障轉移,分片工作,分詞原理)

ElasticSearch的相關原理(zen節點發現機制,分片分配,故障轉移,分片工作,分詞原理)

技術標籤:elasticsearchelasticsearch資料庫

ElasticSearch的相關原理

節點的發現機制(zen機制)

Zen機制是elasticsearch的內建機制,用於節點發現.所有節點間通訊必須用trasport模組來完成。

  • 叢集中的節點相互發現叢集

  • 負責master選舉
    Master選舉機制
    Master選舉是由master-eligble節點發起的,當一個master-eligble發現滿足以下條件的時候,發起選舉
    ①本master-eligble不是master
    ②本master-eligble節點通過zen模組的ping操作詢問其他已知節點,沒有其他任何節點連線到master

    ③包括本節點,當前已有的超過minimum_master_nodes個節點沒有連線到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%的節點上分離出來,這個配置同樣影響叢集的平衡。

防止節點用完磁碟空間的最後手段的配置,disk.watermark.flood_stage,預設值95%,採用強制只讀的方式來保護叢集和主機。

  • 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演算法.