Elasticsearch學習筆記(六)核心概念和分片shard機制


一、核心概念

    1、近實時(Near Realtime NRT)

    (1)從寫入數據到數據可以被搜索到有一個小延遲(大概1秒);

           (2)基於es執行搜索和分析可以達到秒級

    2、集群(Cluster)

一個集群下有多個節點。集群名稱,默認是elasticsearch

    3、節點(Node)

集群中的一個節點,節點也有一個名稱(默認是隨機分配的),節點名稱很重要(在執行運維管理操作的時        候),默認節點會去加入一個名稱為“elasticsearch”的集群,如果直接啟動一堆節點,那么它們會自動組成一個elasticsearch集群,當然一個節點也可以組成一個elasticsearch集群

        節點通過配置集群名稱加入指定的集群

    4、索引(Index)

包含一堆有相似結構的文檔數據,比如可以有一個客戶索引,商品分類索引,訂單索引,索引有一個名稱。一個index包含很多document,一個index就代表了一類類似的或者相同的document。比如說建立一個product index,商品索引,里面可能就存放了所有的商品數據,所有的商品document。

    5、類型(Type)

       類型,每個索引里都可以有一個或多個type,type是index中的一個邏輯數據分類,一個type下的document,都有相同的field,比如博客系統,有一個索引,可以定義用戶數據type,博客數據type,評論數據type。

        商品index,里面存放了所有的商品數據,商品document

        但是商品分很多種類,每個種類的document的field可能不太一樣,比如說電器商品,可能還包含一些諸如售后時間范圍這樣的特殊field;生鮮商品,還包含一些諸如生鮮保質期之類的特殊field

        type,日化商品type,電器商品type,生鮮商品type

日化商品type:product_id,product_name,product_desc,category_id,category_name

電器商品type:product_id,product_name,product_desc,category_id,category_name,service_period

生鮮商品type:product_id,product_name,product_desc,category_id,category_name,eat_period

每一個type里面,都會包含一堆document

{

  "product_id": "2",

  "product_name": "長虹電視機",

  "product_desc": "4k高清",

  "category_id": "3",

  "category_name": "電器",

  "service_period": "1年"

}

{

  "product_id": "3",

  "product_name": "基圍蝦",

  "product_desc": "純天然,冰島產",

  "category_id": "4",

  "category_name": "生鮮",

  "eat_period": "7天"

}

    6、文檔和字段(Document 和 field)

文檔,es中的最小數據單元,一個document可以是一條客戶數據,一條商品分類數據,一條訂單數據,通常用JSON數據結構表示,每個index下的type中,都可以去存儲多個document。一個document里面有多個field,每個field就是一個數據字段。

product document

{

  "product_id": "1",

  "product_name": "高露潔牙膏",

  "product_desc": "高效美白",

  "category_id": "2",

  "category_name": "日化用品"

}

    7、shard

單台機器無法存儲大量數據,es可以將一個索引中的數據切分為多個shard(一個index包含多個shard ),分布在多台服務器上存儲。有了shard就可以橫向擴展,存儲更多數據,讓搜索和分析等操作分布到多台服務器上去執行,提升吞吐量和性能。每個shard都是一個lucene index。每個shard都是一個最小工作單元,承載部分數據,lucene實例,完整的建立索引和處理請求的能力

        shard分為:

                            (1)primary shard:主分片

                            (2)replica shard :備份分片,是primary shard的副本,負責容錯,以及承擔讀請求負載

任何一個服務器隨時可能故障或宕機,此時shard可能就會丟失,因此可以為每個shard創建多個replica副本。replica可以在shard故障時提供備用服務,保證數據不丟失,多個replica還可以提升搜索操作的吞吐量和性能。增減節點時,shard會自動在nodes中負載均衡。

                primary shard(建立索引時一次設置,不能修改,默認5個),

                replica shard(隨時修改數量,默認1個),默認每個索引10個shard,5個primary shard,5個replica shard,最小的高可用配置,是2台服務器。

                primary shard的數量在創建索引的時候就固定了,replica shard的數量可以隨時修改(primary shard的默認數量是5,replica默認是1,默認有10個shard,5個primary shard,5個replica shard )

primary shard不能和自己的replica shard放在同一個節點上(否則節點宕機,primary shard和副本都丟失,起不到容錯的作用),但是可以和其他primary shard的replica shard放在同一個節點上

                每個document肯定只存在於某一個primary shard以及其對應的replica shard中,不可能存在於多個primary shard

設置索引的primary shard 和replica shard 的數量

PUT /test_index

{

   "settings" : {

      "number_of_shards" : 3,

      "number_of_replicas" : 1

   }

}

Image

二、shard 機制

    1、shard的負載均衡

    2、master的選舉

    3、replica容錯

            primary shard宕機后,新master將某個replica shard提升為primary shard。重啟宕機node,master copy replica到該node,使用原有的shard並同步宕機后的修改。原有的primary shard降級為replica shard

       4、讀寫請求


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM