Elasticsearch基礎結構

littlexiaoshuishui發表於2020-08-27

叢集:

ES節點:執行的ES例項

ES叢集由若干節點組成,這些節點在同一個網路內,cluster-name相同

節點:

master節點:叢集中的一個節點會被選為master節點,它將負責管理叢集範疇的變更,例如建立或刪除索引,新增節點到集 群或從叢集刪除節點。master節點無需參與文件層面的變更和搜尋,這意味著僅有一個master節點並不會因流量增長而成為 瓶頸。任意一個節點都可以成為 master 節點

data節點:持有資料和倒排索引。預設情況下,每個節點都可以通過設定配置檔案elasticsearch.yml中的node.data屬性為 true(預設)成為資料節點。如果需要一個專門的主節點,應將其node.data屬性設定為false

Client節點:如果將node.master屬性和node.data屬性都設定為false,那麼該節點就是一個客戶端節點,扮演一個負載均衡 的角色,將到來的請求路由到叢集中的各個節點

故障轉移

當一個節點掉線,如果該節點是master節點,則通過比較node ID,選擇較小ID的節點為master。然後由master節點決定分片如何重新分配。同理,新加入節點也是由master決定如何分配分片。

星號的就是master節點

分片

shard:單臺機器無法儲存大量資料,es可以將一個索引中的資料切分為多個shard,分佈在多臺伺服器上儲存(如果節點不夠,也會在一個node分片多個shard)。shard又分為primary shard和replica shard,每個shard都是一個lucene index。

Segment

在Lucene中,單個倒排索引檔案被稱為segment,多個segment彙總在一起,就是lucene的index,也就是一個分片。寫入新的文件,就會生成新的segment.搜尋過程,就是搜尋所有的segment.一個分片的所有的segment檔案的資訊儲存在commit point檔案中。而刪除的文件會記錄到.del檔案中。

搜尋過程就是從commit point檔案找到所有的segment檔案進行查詢,然後排除掉.del中的文件。

刪除文件,是直接把刪除的文件寫入到.del。

Refresh

寫入文件,會先寫入到index buffer 和transaction log(會寫入磁碟)中,然後講index buffer寫入到segment中,這個過程就是refresh,預設是1s refresh一次。refresh後,資料就可以被搜尋到。

Flush

主要就是把segment寫入磁碟,會先呼叫refresh,把index buffer資料清空,生成新的segment.然後呼叫fsync把segment寫入磁碟,然後清空Transaction log.預設30min執行一次Flush,或者translation log(512m)滿

Merge

因為每次refresh,都會產生新的segment,所以可以通過merge操作可以把多個segment檔案合併,並且刪除掉.del裡面的文件。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章