Elasticsearch叢集運維相關知識

u201017971發表於2018-11-21

0 概念

Elasticsearch是一個基於Apache Lucene™的開源搜尋引擎。
lucene是一個開源搜尋引擎庫。使用java開發。通過RESTful-API隱藏lucene的複製性,讓全文搜尋變得簡單。可以通過下面三點來描述它:

  • 分散式的實時檔案儲存,每個欄位都被索引,並且被搜尋
  • 分散式的實時分析搜尋引擎
  • 可以擴充套件到上百臺伺服器

一 安裝

  1. http://www.elasticsearch.org/download/ ,從官方網站下載Elasticsearch。
  2. 解壓和啟動:./bin/elasticsearch (-d)
    新增-d是後臺執行
  3. 判斷啟動成功與否
    curl ‘http://localhost:9200/?pretty
    返回狀態為200,則表示正常執行
  4. 叢集和節點
    節點(node)是一個執行著的Elasticsearch例項。叢集(cluster)是一組具有相同cluster.name的節點集合。

節點之間協同工作,共享資料,並提供故障轉移和擴充套件功能。
cluster.name為叢集的預設值,最好修改,可以防止新啟動的es節點加入到同網路中的另一個叢集中。
通過修改config/目錄下的elasticsearch.yml檔案,重啟程式做到。

二 文件

應用中的物件很少只是簡單的鍵值列表,更多時候它擁有複雜的資料結構,比如包含日期、地理位置、另一個物件或者陣列。

你想將這些資料儲存到由行和列組成的關聯式資料庫中,就好像是把一個豐富,資訊表現力強的物件拆散了放入一個非常大的表格中:你不得不拆散物件以適應表模式(通常一列表示一個欄位),然後又不得不在查詢的時候重建它們。
Elasticsearch是面向文件(document oriented)的,這意味著它可以儲存整個物件或文件(document)。然而它不僅僅是儲存,還會索引(index)每個文件的內容使之可以被搜尋。在Elasticsearch中,你可以對文件(而非成行成列的資料)進行索引、搜尋、排序、過濾。這種理解資料的方式與以往完全不同,這也是Elasticsearch能夠執行復雜的全文搜尋的原因之一。

三 索引

它涵蓋了一些基本的概念介紹,如索引(indexing)、搜尋(search)以及聚合(aggregations)

在Elasticsearch中儲存資料的行為就叫做索引(indexing),不過在索引之前,我們需要明確資料應該儲存在哪裡。
來看一個對比圖:

Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices   -> Types  -> Documents -> Fields

Elasticsearch叢集可以包含多個索引(indices)(資料庫),每一個索引可以包含多個型別(types)(表),每一個型別包含多個文件(documents)(行),然後每個文件包含多個欄位(Fields)(列)。

四 搜尋

例如:檢索單個員工的資訊
通過執行HTTP GET請求並指出文件的“地址”——索引、型別和ID既可。根據這三部分資訊,我們就可以返回原始JSON文件。

GET 檢索
DELETE 刪除
HEAD 檢查是否存在
PUT 已存在文件會進行更新

五 聚合

Elasticsearch有一個功能叫做聚合(aggregations),它允許你在資料上生成複雜的分析統計。它很像SQL中的GROUP BY但是功能更強大。

六 分散式

Elasticsearch致力於隱藏分散式系統的複雜性。以下這些操作都是在底層自動完成的:

  • 將你的文件分割槽到不同的容器或者分片(shards)中,它們可以存在於一個或多個節點中。
  • 將分片均勻的分配到各個節點,對索引和搜尋做負載均衡。
  • 冗餘每一個分片,防止硬體故障造成的資料丟失。
  • 將叢集中任意一個節點上的請求路由到相應資料所在的節點。
  • 無論是增加節點,還是移除節點,分片都可以做到無縫的擴充套件和遷移。

相關文章