ES簡單學習

概念

集羣

在同一個子網內,多個ES節點(master、data、client)組成的一個P2P系統。節點間的通訊和數據分配由ES自動管理。

節點

每一個運行的實例叫做節點。

索引

該索引是名詞而不是動詞,相當於MySQL裏的database。如下圖所示

分片與副本

ES自動將數據存儲到多個主分片中,也就是說每個主分片保存着某索引的一部分數據。

副本分片是主分片的備份,擁有主分片的數據。一個主分片可以有多個副本。

建立索引的時候默認會建立5個主分片,每個主分片一個副本分片,一共10個分片。也可以在建立索引的時候手動設置主分片數量和副本分片數量。在索引建立完成後,就只能改變副本分片的數量。

ES禁止同一個分片的主分片和副本分片在同一個ES實例節點上。

master節點

在配置文件裏配置節點爲master節點。一個ES集羣可以有多個master節點。master節點負責集羣的變更。master節點不參與文檔層面的變更和搜索,所以master節點並不會因爲流量增長而成爲瓶頸。

data節點

data節點持有數據和倒排索引。負責文檔的搜索和存儲。

client節點

node.master 和 node.data 都設置爲false。該客戶端節點扮演一個負載均衡的角色。將到來的請求路由到集羣各個節點。

recovery

當集羣中有節點加入或退出的時候,ES會自動重新分配分片。此代價較高。可以先將自動分片功能關閉,然後添加節點進入集羣,手動給其節點分配分片,之後再打開自動分片功能。

自動發現機制

ES2.0之前採用的是ping機制,只要是在同一子網下網絡可通且cluster.name相同,就將該節點加入集羣。

ES2.0版本之後採用單播和組播的機制(默認單播):配置相同的cluster.name,然後設置discovery.zen.ping.unicast.hosts

ES的瞭解

功能特性

1.以Lucene搜索引擎庫爲底層架構

2.分佈式搜索引擎,可水平擴展,比如添加節點的時候可以自動均衡數據

3.支持全文索引,搜索功能強大

4.交互數據採用josn模式,且ES提供了基於json的query DSL查詢語言

缺點

1.不支持事務

2.讀寫有一定的延遲。寫入的數據最快1s才能被檢索到,這樣做的原因是提高寫入的吞吐量。這個刷新頻率是可以手動調整的,一般情況下不建議手工調整。

3.ES沒有任何內置的身份驗證或授權系統。當然閉源的x-pack除外。

近實時的搜索

當文檔寫入的時候並不能直接檢索出數據,默認需要1S的reflush才能看到。如果業務對實時性要求比較高,可以調用_refresh接口。

全文檢索

對文章中的每個詞建立一個索引,並指明該詞在文章中的位置和數量。也就是說每個詞元都是一個倒排索引。

當用戶查詢的時候,會根據建立的索引來進行查找。

ES沒有事務,怎麼解決併發衝突的問題呢?

1.悲觀鎖

  • 優點:方便,直接加鎖,不需要額外的操作
  • 缺點:併發能力很低,同一時間只能有一條線程操作數據

2.樂觀鎖

  • 優點:併發能力高,不給數據加鎖,大量線程併發操作
  • 缺點:麻煩,每次更新的時候都先要比對版本號,然後需要更新加載數據再修改再寫入。
  • ES中是通過樂觀鎖解決併發衝突的,採用_version
  • _version :第一次創建document的時候,他的版本號爲1,此後每次對該document進行update、delete都會對這個版本號自動加1 . 在刪除一個document的時候,它不是立刻就物理刪除的,它的一些版本號數據還是保留的:先刪除再創建其實是再刪除的基礎上再加1.

ES的寫邏輯

索引的寫入:

索引的創建和刪除都是在master節點上進行的。如果寫入的請求發到了非master節點,那麼該節點會將請求轉發至master節點,master節點會更改路由和元數據信息,並將對應的修改同步到其他master節點,需要一半以上的候選master節點返回成功纔算寫入成功。

文檔的寫入:

請求發到其中一個節點,做路由計算(hash(_id)/候選master +1 )確定請求發往哪一個主分片。

主分片處理請求的同時,執行translog的寫入操作和將請求發往其副本分片,等其中一個副本分片返回成功之後,主分片返回客戶端寫入成功。

 

常用插件

elasticseach-head

head插件只需要安裝到其中一臺機器上。

功能:ES集羣狀態查看、索引數據查看、DSL實現增刪改查操作

cerebo插件

功能:集羣監控

kibana

除了支持各種數據的可視化之外,最重要的是:支持Dev Tool進行RESTFUL API增刪改查操作。

但是在功能和可用性上比不上grafana

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章