Elasticsearch簡介

      網友投稿 734 2025-03-31

      基本原理


      結構

      elasticsearch集群方案由EsMaster、EsClient和EsNode1、EsNode2、EsNode3、 EsNode4、EsNode5、EsNode6、EsNode7、EsNode8、EsNode9進程組成,如圖1-2 所示,模塊說明如表1-3所示。

      圖 1-2 elasticsearch 結構

      表 1-3 模塊說明

      ZooKeeper 集群

      基本概念

      ● Index:即索引,是Elasticsearch中一個邏輯命名空間,指向一個或多個分片,內 部Apache Lucene實現索引中數據的讀寫。索引與關系數據庫實例Database相 當。一個Elasticsearch實例可以包含多個索引。

      ● Type:文檔類型,相當于數據庫中的Table。一個索引對應一個文檔類型。

      ● Document:文檔,是可以被索引的基本單位,特指頂層結構或根對象序列化成 的JSON數據。相當于數據庫中的Row。一個類型包含多個文檔。

      ● Mapping:映射,用來約束字段的類型,可以根據數據自動創建。相當于數據庫 中的Schema。

      ● Field:字段,組成文檔的小單位。相當于數據庫中的Column。每個文檔包含多 個字段。

      ● EsMaster:主節點,可以臨時管理集群級別的一些變更,例如新建或刪除索引、 增加或移除節點等。主節點不參與文檔級別的變更或搜索,也不接收請求。在流 量增長時,該主節點不會成為集群的瓶頸。

      ● EsNode:Elasticsearch節點,一個節點就是一個Elasticsearch實例。

      ● EsClient:Elasticsearch節點,該節點只能路由請求,處理搜索減少階段和分發批 量索引。其自身不進行數據存儲,也沒有管理集群的能力。

      ● Shard:分片,Elasticsearch中小級別的工作單元,文檔存儲在分片中,并且在 分片中被索引。

      ● Primary Shard:主分片,索引中的每個文檔屬于一個單獨的主分片,主分片的數 量決定了索引多能存儲多少數據。

      ● Replica Shard:復制分片,它是主分片的一個副本,可以防止硬件故障導致的數 據丟失,同時可以提供讀請求,比如搜索或者從別的shard取回文檔。

      ● Recovery:代表數據恢復或叫數據重新分布,Elasticsearch在有節點加入或退出 時會根據機器的負載對索引分片進行重新分配,掛掉的節點重新啟動時也會進行 數據恢復。

      ● Gateway:代表Elasticsearch索引快照的存儲方式,默認是先把索引存放到內存 中,當內存滿了時再持久化到本地硬盤。gateway對索引快照進行存儲,當這個 Elasticsearch集群關閉再重新啟動時就會從gateway中讀取索引備份數據。支持多 種類型的gateway,有本地文件系統(默認),分布式文件系統,Hadoop的 HDFS。

      ● Transport:代表Elasticsearch內部節點或集群與客戶端的交互方式,默認內部是 使用tcp協議進行交互,同時它支持http協議(json格式)、thrift、servlet、 memcached、zeroMQ等的傳輸協議(通過插件方式集成)。

      ● ZooKeeper集群:在Elasticsearch是必須的,為其提供安全認證信息的存儲等功 能。

      原理

      Elasticsearch簡介

      ● 內部架構 Elasticsearch通過RESTful API或者其他語言(比如Java) API提供豐富訪問接 口,使用集群發現機制,支持腳本語言,支持豐富的插件。底層基于Lucene,保 持Lucene絕對的獨立性,通過本地文件、共享文件、HDFS完成索引存儲,如圖 1-3所示。

      圖 1-3 內部架構

      ● 倒排序索引 傳統的搜索方式(正排序索引,如圖1-4所示)按照文檔編號進行搜索,搜索時要 掃描每個文檔關鍵字的信息,直到找出所有滿足條件的關鍵字的信息。正排序索 引的優點是易于維護,缺點搜索耗時太長。

      圖 1-4 正排序索引

      而Elasticsearch(Lucene)的搜索則是采用了倒排序索引(如圖1-5所示)的方 式。由不同的關鍵字組成的表,稱為“詞典”,其中包含了各種關鍵字和關鍵字 的統計信息(包含所在文檔編號,文檔中位置和出現頻率等)。通過倒排序索引 進行搜索,就是通過關鍵字查詢相對應的文檔編號和文檔中所在位置,再找到完 整文檔,類似于查字典,或通過查書目錄查指定頁碼書的內容。倒排在構建索引 時較為耗時且維護成本較高,但是搜索耗時短。

      圖 1-5 倒排序索引

      ● 分布式索引流程 Elasticsearch分布式索引操作流程如圖1-6所示。

      圖 1-6 分布式索引流程

      操作流程說明如下: 階段1:客戶端發送一個索引請求給任意節點,假設是Node 1。 階段2:Node 1通過請求判斷出該文檔應該被存儲的分片,假設是shard 0這個分 片中,因此Node 1會把請求轉發到shard 0的primary shard P0存在的Node 3節點 上。 階段3:Node 3在shard 0的primary shard P0上執行請求。如果請求執行成功, Node 3并行地將該請求發給shard 0的所有存在于Node 1和Node 2中的replica shard R0上。如果所有的replica shard都成功地執行了請求,那么將會向Node 3

      回復一個成功確認,當Node 3收到了所有replica shard的確認信息后,則向用戶 返回一個Success消息。

      ● 分布式搜索流程 Elasticsearch分布式搜索操作流程分為兩個階段,即查詢階段與獲取階段。 查詢階段如圖1-7所示。

      圖 1-7 分布式搜索操作流程之查詢階段

      操作流程說明如下:

      階段1:客戶端發送一個檢索請求給任意節點,假設是Node 3。

      階段2:Node 3將檢索請求發送給該index中的每一個shard,此時會采取輪詢策 略,在primary shard及其所有replica shard中隨機選擇一個,讓讀請求負載均 衡。每個shard在本地執行檢索,并將結果排序添加到本地。 階段3:每個shard返回本地所記錄的結果,發送給Node 3。Node 3將這些值合 并,做全局排序。 查詢階段主要定位了所要檢索數據的具體位置,而獲取階段的任務就是將這些定 位好的數據內容取回并返回給客戶端。獲取階段如圖1-8所示。

      圖 1-8 分布式搜索操作流程之獲取階段

      操作流程說明如下:

      階段1:Node 3獲取了所有待檢索數據的定位之后,發送請求給與數據相關的 shard。

      階段2:每個收到Node 3請求的shard,將讀取相關文檔中的內容,并將它們返回 給Node 3。

      階段3:當Node 3獲取到了所有shard返回的文檔后,Node 3將它們合并成一條匯 總結果,返回給客戶端。 ● 分布式批量索引流程

      圖 1-9 分布式批量索引流程

      操作流程說明如下:

      階段1:客戶端向Node 1發送bulk請求。

      階段2: Node 1為每個分片構建批量請求,然后轉發到這些請求所需的主分片 上。

      階段3: 主分片一個接一個的按序執行操作。當一個操作執行完,主分片轉發新 文檔(或者刪除部分)給對應的復制節點,然后 執行下一個操作。復制節點操作完成后報告給請求節點,請求節點整理響應并返 回給客戶端。

      ● 分布式批量搜索流程

      圖 1-10 分布式批量搜索流程

      操作流程說明如下: 階段1:客戶端向Node 1發送mget請求。 階段2:Node 1為每個分片構建一個多條數據檢索請求,然后轉發到這些請求所 需的主分片或復制分片上。當所有回復被接收,Node 1構建響應并返回給客戶 端。

      ● 路由算法 Elasticsearch中提供了兩種路由算法: – 默認路由: shard=hash(routing)%number_of_primary_shards ,該路 由策略擴展受到shards個數的限制,擴容的時候需要成倍擴容(ES6.x),并 且在創建index的時候要指定未來允許擴容的規模。ES5.x不支持擴容;ES7.x 可以自由擴容。 – 自定義路由:該路由方式,通過指定routing的方式,可以影響文檔寫入到哪 個shard,也可以僅僅檢索特定的shard。

      ● 平衡算法 Elasticsearch中提供了自動平衡功能,適用于擴容、減容、導入數據場景。 算法 如下: weight_index(node, index) = indexBalance * (node.numShards(index) avgShardsPerNode(index)) Weight_node(node, index) = shardBalance * (node.numShards() avgShardsPerNode) weight(node, index) = weight_index(node, index) + weight_node(node, index)

      ● 單節點多實例部署 在同一個節點上部署多個Elasticsearch實例,根據IP和不同的端口號來區分不同的 Elasticsearch實例。可以提高單節點CPU、內存和磁盤的利用率,同時提高 Elasticsearch的索引和搜索能力。

      圖 1-11 單節點多實例部署

      ● 副本自動跨節點分配策略 單節點多實例部署下,多副本時,如果只做到跨實例分配,存在單點故障,增加 默認配置cluster.routing.allocation.same_shard.host:true即可。

      分布式 Elasticsearch

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:微軟在全世界范圍內面向符合資格的Office 365企業用戶推送Delve(以下哪個是微軟)
      下一篇:使用ERP和CRM系統應對經濟風暴
      相關文章
      亚洲无线观看国产精品| 亚洲av无码一区二区三区人妖| 在线观看亚洲专区| 亚洲 欧洲 视频 伦小说| 亚洲精品中文字幕麻豆| 亚洲视频手机在线| 久久亚洲私人国产精品vA| 亚洲精品无码久久一线| 亚洲无线观看国产精品| 久久亚洲综合色一区二区三区 | 亚洲人成影院在线高清| 亚洲白嫩在线观看| 91亚洲国产成人久久精品网址| 亚洲人成电影亚洲人成9999网| 亚洲av无码成人黄网站在线观看 | 亚洲精品亚洲人成在线播放| 久久99亚洲网美利坚合众国| 亚洲视频国产视频| 亚洲国产美女视频| 亚洲av永久无码嘿嘿嘿| 亚洲AV无码无限在线观看不卡| 亚洲国产精品综合久久20| 亚洲最大中文字幕无码网站| 亚洲风情亚Aⅴ在线发布| 色欲aⅴ亚洲情无码AV蜜桃| 亚洲av片在线观看| 亚洲精品视频久久久| 亚洲综合另类小说色区色噜噜| 国产亚洲成人在线播放va| 亚洲乱码精品久久久久..| 久久亚洲一区二区| 亚洲精品91在线| jiz zz在亚洲| 国产天堂亚洲国产碰碰| 不卡一卡二卡三亚洲| 亚洲Aⅴ无码专区在线观看q| 亚洲最大免费视频网| 亚洲综合激情五月丁香六月| 在线观看亚洲精品专区| 亚洲一区二区三区无码中文字幕| 久久亚洲国产视频|