33-38-Elasticsearch-部分相关概念-01
33-Elasticsearch-部分相關概念-01:
1、索引(Index)
一個索引就是一個擁有幾分相似特征的文檔的集合。比如說,一個產品目錄的索引,還有一個訂單數據的索引。一個索引由一個名字來標識(必 須全部是小寫字母),并且當我們要對這個索引中的文檔進行索引、搜索、更新和刪除的時 候,都要使用到這個名字。在一個集群中,可以定義任意多的索引。 能搜索的數據必須索引,這樣的好處是可以提高查詢速度,比如:新華字典前面的目錄就是索引的意思,目錄可以提高查詢速度。
Elasticsearch 索引的精髓:一切設計都是為了提高搜索的性能。
2、類型(Type)
在一個索引中,你可以定義一種或多種類型。 一個類型是你的索引的一個邏輯上的分類/分區,其語義完全由你來定。通常,會為具有一組共同字段的文檔定義一個類型。不同的版本,類型發生了不同的變化 。
3、文檔(Document)
一個文檔是一個可被索引的基礎信息單元,也就是一條數據
比如:你可以擁有某一個客戶的文檔,某一個產品的一個文檔,當然,也可以擁有某個
訂單的一個文檔。文檔以 JSON(Javascript Object Notation)格式來表示,而 JSON 是一個
到處存在的互聯網數據交互格式。
在一個 index/type 里面,你可以存儲任意多的文檔。
3、字段(Field)
相當于是數據表的字段,對文檔數據根據不同屬性進行的分類標識。
4、映射(Mapping)
mapping 是處理數據的方式和規則方面做一些限制,如:某個字段的數據類型、默認值、
分析器、是否被索引等等。這些都是映射里面可以設置的,其它就是處理 ES 里面數據的一
些使用規則設置也叫做映射,按著最優規則處理數據對性能提高很大,因此才需要建立映射,
并且需要思考如何建立映射才能對性能更好。
5、 分片(hards)
一個索引可以存儲超出單個節點硬件限制的大量數據。比如,一個具有 10 億文檔數據
的索引占據 1TB 的磁盤空間,而任一節點都可能沒有這樣大的磁盤空間。或者單個節點處
理搜索請求,響應太慢。為了解決這個問題,Elasticsearch 提供了將索引劃分成多份的能力,
每一份就稱之為分片。當你創建一個索引的時候,你可以指定你想要的分片的數量。每個分
片本身也是一個功能完善并且獨立的“索引”,這個“索引”可以被放置到集群中的任何節點
上。
分片很重要,主要有兩方面的原因:
1)允許你水平分割 / 擴展你的內容容量。
2)允許你在分片之上進行分布式的、并行的操作,進而提高性能/吞吐量。
至于一個分片怎樣分布,它的文檔怎樣聚合和搜索請求,是完全由 Elasticsearch 管理的,
對于作為用戶的你來說,這些都是透明的,無需過分關心。
被混淆的概念是,一個 Lucene 索引 我們在 Elasticsearch 稱作 分片 。 一個
Elasticsearch 索引 是分片的集合。 當 Elasticsearch 在索引中搜索的時候, 他發送查詢
到每一個屬于索引的分片(Lucene索引),然后合并每個分片的結果到一個全局的結果集。
6、副本(Replicas)
在一個網絡 / 云的環境里,失敗隨時都可能發生,在某個分片/節點不知怎么的就處于
離線狀態,或者由于任何原因消失了,這種情況下,有一個故障轉移機制是非常有用并且是
強烈推薦的。為此目的,Elasticsearch 允許你創建分片的一份或多份拷貝,這些拷貝叫做復
制分片(副本)。
復制分片之所以重要,有兩個主要原因:
1、在分片/節點失敗的情況下,提供了高可用性。因為這個原因,注意到復制分片從不與
原/主要(original/primary)分片置于同一節點上是非常重要的。
2、擴展你的搜索量/吞吐量,因為搜索可以在所有的副本上并行運行。
總之,每個索引可以被分成多個分片。一個索引也可以被復制 0 次(意思是沒有復制)
或多次。一旦復制了,每個索引就有了主分片(作為復制源的原來的分片)和復制分片(主
分片的拷貝)之別。分片和復制的數量可以在索引創建的時候指定。在索引創建之后,你可
以在任何時候動態地改變復制的數量,但是你事后不能改變分片的數量。默認情況下,
Elasticsearch 中的每個索引被分片 1 個主分片和 1 個復制,這意味著,如果你的集群中至少
有兩個節點,你的索引將會有 1 個主分片和另外 1 個復制分片(1 個完全拷貝),這樣的話
每個索引總共就有 2 個分片,我們需要根據索引需要確定分片個數。
7、分配(Allocation)
將分片分配給某個節點的過程,包括分配主分片或者副本。如果是副本,還包含從主分
片復制數據的過程。這個過程是由 master 節點完成的。
4.2 系統架構
一個運行中的 Elasticsearch 實例稱為一個節點,而集群是由一個或者多個擁有相同
cluster.name 配置的節點組成,
它們共同承擔數據和負載的壓力。當有節點加入集群中或者從集群中移除節點時,集群將會重新平均分布所有的數據。當一個節點被選舉成為主節點時, 它將負責管理集群范圍內的所有變更,例如增加、 刪除索引,或者增加、刪除節點等。 而主節點并不需要涉及到文檔級別的變更和搜索等操作,所以當集群只擁有一個主節點的情況下,即使流量的增加它也不會成為瓶頸。 任何節 點都可以成為主節點。我們的示例集群就只有一個節點,所以它同時也成為了主節點。作為用戶,我們可以將請求發送到集群中的任何節點 ,包括主節點。 每個節點都知道任意文檔所處的位置,并且能夠將我們的請求直接轉發到存儲我們所需文檔的節點。 無論 我們將請求發送到哪個節點,它都能負責從各個包含我們所需文檔的節點收集回數據,并將最終結果返回給客戶端。 Elasticsearch 對這一切的管理都是透明的。
單節點集群
啟動單節點
查看所有節點
我們在包含一個空節點的集群內創建名為 users 的索引,為了演示目的,我們將分配 3
個主分片和一份副本(每個主分片擁有一個副本分片)
{"settings" : {"number_of_shards" : 3,"number_of_replicas" : 1} }查看創建的users索引的相關信息
集群現在是擁有一個索引的單節點集群。所有 3 個主分片都被分配在 node-1 。
通過 elasticsearch-head 插件查看集群情況
1、解壓縮
2、瀏覽器右上角-更多工具-擴展程序-加載該插件,修改ip,連接如下所示
集群健康值:yellow( 4 of 8 ) : 表示當前集群的全部主分片都正常運行,但是副本分片沒有全部處在正常狀 態
node-1: 3 個主分片正常
Unassigned: 3 個副本分片都是 Unassigned —— 它們都沒有被分配到任何節點。
在同 一個節點上既保存原始數據又保存副本是沒有意義的,因為一旦失去了那個節點,我們也將丟失該節點上的所有副本數據。 (副本沒起到作用)
故障轉移
當集群中只有一個節點在運行時,意味著會有一個單點故障問題——沒有冗余。 當你在同一臺機器上啟動了第二個節點時,只要它和第一個節點有同樣的 cluster.name 配置,它就會自動發現集群并加入到其中。 但是在不同機器上啟動節點的時候,為了加入到同一集群,你需要配置一個可連接到的單播 主機列表。之所以配置為使用單播發現,以防止節點無意中加入集群。只有在同一臺機器上 運行的節點才會自動組成集群。 如果啟動了第二個節點,我們的集群將會擁有兩個節點的集群 : 所有主分片和副本分片都已被分配
水平擴容
當啟動了第三個節點,我們的集群將 會擁有三個節點的集群 : 為了分散負載而對分片進行重新分配
集群健康值:green( 6 of 6 ) : 表示所有 6 個分片(包括 3 個主分片和 3 個副本分片)都在正常運行。
Node 1 和 Node 2 上各有一個分片被遷移到了新的 Node 3 節點,現在每個節點上都擁有 2 個分片,
而不是之前的 3 個。 這表示每個節點的硬件資源(CPU, RAM, I/O)將被更少的分片所共享,每個分片
的性能將會得到提升。
分片是一個功能完整的搜索引擎,它擁有使用一個節點上的所有資源的能力。 我們這個擁有 6 個分
片(3 個主分片和 3 個副本分片)的索引可以最大擴容到 6 個節點,每個節點上存在一個分片,并且每個分片擁有所在節點的全部資源。
但是如果我們想要擴容超過 6 個節點怎么辦呢?
主分片的數目在索引創建時就已經確定了下來。實際上,這個數目定義了這個索引能夠
存儲 的最大數據量。(實際大小取決于你的數據、硬件和使用場景。) 但是,讀操作——
搜索和返回數據——可以同時被主分片 或 副本分片所處理,所以當你擁有越多的副本分片
時,也將擁有越高的吞吐量。
在運行中的集群上是可以動態調整副本分片數目的,我們可以按需伸縮集群。讓我們把
副本數從默認的 1 增加到 2
http://192.168.1.102:9200/users/_settings {"number_of_replicas" : 2 }應對故障
我們關閉一個節點,這時集群的狀態為:關閉了一個節點后的集群。 我們關閉的節點是一個主節點。而集群必須擁有一個主節點來保證正常工作,所以發生 的第一件事情就是選舉一個新的主節點: Node 2 。在我們關閉 Node 1 的同時也失去了主 分片 1 和 2 ,并且在缺失主分片的時候索引也不能正常工作。 如果此時來檢查集群的狀 況,我們看到的狀態將會為 red :不是所有主分片都在正常工作。 幸運的是,在其它節點上存在著這兩個主分片的完整副本, 所以新的主節點立即將這 些分片在 Node 2 和 Node 3 上對應的副本分片提升為主分片, 此時集群的狀態將會為 yellow。這個提升主分片的過程是瞬間發生的,如同按下一個開關一般。
為什么我們集群狀態是 yellow 而不是 green 呢?
雖然我們擁有所有的三個主分片,但是同時設置了每個主分片需要對應 2 份副本分片,而此
時只存在一份副本分片。 所以集群不是 green 的狀態,如果我 們同樣關閉了 Node 2 ,我們的程序 依然 可以保持在不丟任何數據的情況下運行,因為 Node 3 為每一個分片都保留著一份副本。 如果我們重新啟動 Node 1 ,集群可以將缺失的副本分片再次進行分配,那么集群的狀 態也將恢復成之前的狀態。 如果 Node 1 依然擁有著之前的分片,它將嘗試去重用它們, 同時僅從主分片復制發生了修改的數據文件。和之前的集群相比,只是 Master 節點切換了。
置了每個主分片需要對應 2 份副本分片,而此
時只存在一份副本分片。 所以集群不是 green 的狀態,如果我 們同樣關閉了 Node 2 ,我們的程序 依然 可以保持在不丟任何數據的情況下運行,因為 Node 3 為每一個分片都保留著一份副本。 如果我們重新啟動 Node 1 ,集群可以將缺失的副本分片再次進行分配,那么集群的狀 態也將恢復成之前的狀態。 如果 Node 1 依然擁有著之前的分片,它將嘗試去重用它們, 同時僅從主分片復制發生了修改的數據文件。和之前的集群相比,只是 Master 節點切換了。
總結
以上是生活随笔為你收集整理的33-38-Elasticsearch-部分相关概念-01的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ant批量修改文件名_Ant Renam
- 下一篇: 各种游戏辅助,各大游戏工作室的神器