ElasticSearch的工作機制

2021-09-03 10:27:18 字數 1495 閱讀 3732

elasticsearch,和solr一樣,是底層基於apache lucene,且具備高可靠性的企業級搜尋引擎。

elasticsearch中的一些概念其實和關係型資料庫都有對應關係,比如資料庫在es中被稱為索引,表在es中被稱作type。

具體對應關係見下表。

elasticsearch中的replica是副本的意思,建立副本的好處有兩個,1,可以分流部分查詢請求,2,如果集群中的某個分片丟失了,就可以使用這個副本將資料全部找回來,因為這個原因,副本分片和源分片不會放在同一節點上。 es中每乙個索引都可以被分成多個分片,但不一定每個分片都有副本,但是一旦建立了副本,就會有主分片的說法(作為複製源的分片),分片和副本的數量可以在索引建立的時候指定。下圖是副本和分片的示意圖,分片和它的副本不會在同乙個節點上。

在索引建立之後,你可以在任何時候動態地改變副本的數量,但是你事後不能改變分片的數量。  預設情況下,elasticsearch中的每個索引被分片5個主分片和1套副本,這意味著,如果你的集群中至少有兩個節點,你的索引將會有5個主分片和另外5個副本,這樣的話每個索引總共就有10個分片。

當es的乙個節點啟動後,它會通過廣播方式找到集群中的其他節點,並且建立連線。

在集群中,其中的某個節點會被選取作為主節點,這個主節點負責管理集群狀態。這個主節點對於使用者來說是透明的,使用者不需要知道哪個節點是主節點。任何操作都可以傳送到任何節點。必要的時候,任何節點可以並行的傳送子查詢到其他節點,並且將得到的響應合併後傳送給使用者,這些操作都不需要訪問主節點。

主節點讀取集群資訊,在讀取過程中,它會檢測分片的情況,哪些分片是主分片,並且是可用的,在這一步之後,所有的分片已經準備好了,而副本還沒有。下一步的操作就是找到那些已經被複製過的分片,將他們作為副本。如果一切順利,那麼es啟動成功了,所有的分片和副本都已經準備好了。

在es工作的時候,主節點會監控所有的節點是否正常,預設配置為:節點每隔1s主節點會傳送1次心跳,超時時間為30s,測試次數為3次,超過3次,則認為該節點同主節點已經脫離了。如果某乙個節點出現問題,es認為這個節點損壞,該節點會從集群中刪除,並且es會重新平衡整個集群。

es通過query dsl (基於json的查詢語言)來查詢資料,在es內部,每次查詢分成2個步驟,分散和聚合,分散是指查詢所有相關的分片,聚合是指把所有分片上的查詢結果合併,排序,處理然後在返回給客戶端。

elasticsearch 有4中方式來構建資料庫,最簡單的方法是使用index api,將乙個document傳送到特定的index,一般通過curl tools實現。第二第三種方法是通過bulk api和udp bulk api。兩者的區別僅在於連線方式。第四種方式是通過乙個外掛程式-river。river執行在elasticsearch上,並且可以從外部資料庫匯入資料到es中。需要注意的是,資料構建僅在分片上進行,而不能在副本上進行。

飯工和碗工

飯工和碗工 飯工和碗工 一看這兩個名詞,你一定費解。聽過鉗工電工清潔工搬運工,或是張工王工,那聽過這個稱謂呀。甭急,這是我的發明,你聽我慢慢道來。我兒子兒媳都在天津工作,住的地方到工作單位較遠。早晨六點半出發,晚上七點後回家。若遇見堵車,回到家就八點多了。他們倆既辛苦又繁忙。我和老伴住在陝西老家,身...

飯工和碗工

飯工和碗工 飯工和碗工 一看這兩個名詞,你一定費解。聽過鉗工電工清潔工搬運工,或是張工王工,那聽過這個稱謂呀。甭急,這是我的發明,你聽我慢慢道來。我兒子兒媳都在天津工作,住的地方到工作單位較遠。早晨六點半出發,晚上七點後回家。若遇見堵車,回到家就八點多了。他們倆既辛苦又繁忙。我和老伴住在陝西老家,身...

飯工和碗工

飯工和碗工 飯工和碗工 一看這兩個名詞,你一定費解。聽過鉗工電工清潔工搬運工,或是張工王工,那聽過這個稱謂呀。甭急,這是我的發明,你聽我慢慢道來。我兒子兒媳都在天津工作,住的地方到工作單位較遠。早晨六點半出發,晚上七點後回家。若遇見堵車,回到家就八點多了。他們倆既辛苦又繁忙。我和老伴住在陝西老家,身...