elasticsearch用於構建高可用和可擴充套件的系統。擴充套件的方式可以是購買更好的伺服器(縱向擴充套件(vertical scale or scaling up))或者購買更多的伺服器(橫向擴充套件(horizontal scale or scaling out))。
elasticsearch雖然能從更強大的硬體中獲得更好的效能,但是縱向擴充套件有它的侷限性。真正的擴充套件應該是橫向的,它通過增加節點來均攤負載和增加可靠性。
對於大多數資料庫而言,橫向擴充套件意味著你的程式將做非常大的改動才能利用這些新新增的裝置。對比來說,elasticsearch天生就是分布式的:它知道如何管理節點來提供高擴充套件和高可用。這意味著你的程式不需要關心這些。
如果我們啟動乙個單獨的節點,它還沒有資料和索引,這個集群看起來就像圖1。
乙個節點(node)就是乙個elasticsearch例項,而乙個集群(cluster)由乙個或多個節點組成,它們具有相同的cluster.name
,它們協同工作,分享資料和負載。當加入新的節點或者刪除乙個節點時,集群就會感知到並平衡資料。
集群中乙個節點會被選舉為主節點(master),它將臨時管理集群級別的一些變更,例如新建或刪除索引、增加或移除節點等。主節點不參與文件級別的變更或搜尋,這意味著在流量增長的時候,該主節點不會成為集群的瓶頸。
任何節點都可以成為主節點。我們例子中的集群只有乙個節點,所以它會充當主節點的角色。
做為使用者,我們能夠與集群中的任何節點通訊,包括主節點。每乙個節點都知道文件存在於哪個節點上,它們可以**請求到相應的節點上。我們訪問的節點負責收集各節點返回的資料,
最後一起返回給客戶端。這一切都由elasticsearch處理
在elasticsearch集群中可以監控統計很多資訊,但是只有乙個是最重要的:集群健康(cluster health)。集群健康有三種狀態:green
、yellow
或red
。
status
字段提供乙個綜合的指標來表示集群的的服務狀況。三種顏色各自的含義:
為了將資料新增到elasticsearch,我們需要索引(index)——乙個儲存關聯資料的地方。實際上,索引只是乙個用來指向乙個或多個分片(shards)的「邏輯命名空間(logical namespace)」.
乙個分片(shard)是乙個最小級別「工作單元(worker unit)」,它只是儲存了索引中所有資料的一部分。在接下來的《深入分片》一章,我們將詳細說明分片的工作原理,但是現在我們只要知道分片就是乙個lucene例項,
並且它本身就是乙個完整的搜尋引擎。我們的文件儲存在分片中,並且在分片中被索引,但是我們的應用程式不會直接與它們通訊,取而代之的是,直接與索引通訊。
分片是elasticsearch在集群中分發資料的關鍵。把分片想象成資料的容器。文件儲存在分片中,然後分片分配到你集群中的節點上。當你的集群擴容或縮小,elasticsearch將會自動在你的節點間遷移分片,以使集群保持平衡。
分片可以是主分片(primary shard)或者是複製分片(replica shard)。你索引中的每個文件屬於乙個單獨的主分片,所以主分片的數量決定了索引最多能儲存多少資料。
理論上主分片能儲存的資料大小是沒有限制的,限制取決於你實際的使用情況。分片的最大容量完全取決於你的使用狀況:硬體儲存的大小、文件的大小和複雜度、如何索引和查詢你的文件,以及你期望的響應時間。
複製分片只是主分片的乙個副本,它可以防止硬體故障導致的資料丟失,同時可以提供讀請求,比如搜尋或者從別的shard取回文件。
當索引建立完成的時候,主分片的數量就固定了,但是複製分片的數量可以隨時調整。
讓我們在集群中唯一乙個空節點上建立乙個叫做blogs
的索引。預設情況下,乙個索引被分配5個主分片,但是為了演示的目的,我們只分配3個主分片和乙個複製分片(每個主分片都有乙個複製分片):
put /blogs附帶索引的單一節點集群:}
我們的集群現在看起來就像上圖——三個主分片都被分配到node 1
。如果我們現在檢查集群健康(cluster-health),我們將見到以下資訊:
集群的狀態現在是yellow
我們的三個複製分片還沒有被分配到節點上
集群的健康狀態yellow
表示所有的主分片(primary shards)啟動並且正常執行了——集群已經可以正常處理任何請求——但是複製分片(replica shards)還沒有全部可用。事實上所有的三個複製分片現在
都是unassigned
狀態——它們還未被分配給節點。在同乙個節點上儲存相同的資料副本是沒有必要的,如果這個節點故障了,那所有的資料副本也會丟失。
現在我們的集群已經功能完備,但是依舊存在因硬體故障而導致資料丟失的風險
ElasticSearch分布式架構
it技術精華網 今天介紹下elasticsearch的分布式架構,如果你熟悉cassandra hadoop mongodb,你會發現elasticsearch裡面有很多他們的影子,沒錯,elasticsearch吸收了目前主流的分布式系統的很多特性,下面簡單介紹一把。之前翻譯過一篇 譯 搜尋引擎與...
ElasticSearch 分布式集群
elasticsearch用於構建高可用和可擴充套件的系統。擴充套件的方式可以是購買更好的伺服器 縱向擴充套件 vertical scale or scaling up 或者購買更多的伺服器 橫向擴充套件 horizontal scale or scaling out elasticsearch雖然...
ElasticSearch分布式機制
1 使用場景 大型分布式日誌分析系統elk elasticsearch logstash kibana 大型電商商品搜尋系統 站內搜尋 網盤搜尋引擎等。2 elasticsearch的儲存結構 elasticsearch是檔案儲存,是面向文件型資料庫,一條資料在這裡就是乙個文件,用json作為文件序...