Elasticsearch介紹

一、基本概念

節點(node)是一個運行着的Elasticsearch實例。

 集羣(cluster)是一組具有相同cluster.name的節點集合,他們協同工作,共享數據並提供故障轉移和擴展功能,當然一個節點也可以組成一個集羣。集羣中有多個節點,其中有一個爲主節點,這個主節點是可以通過選舉產生的,主從節點是對於集羣內部來說的。es的一個概念就是去中心化,字面上理解就是無 中心節點,這是對於集羣外部來說的,因爲從外部來看es集羣,在邏輯上是個整體,你與任何一個節點的通信和與整個es集羣通信是等價的。

一個節點(node)就是一個Elasticsearch實例,而一個集羣(cluster)由一個或多個節點組成,它們具有相同的cluster.name,它們協同工作,分享數據和負載。當加入新的節點或者刪除一個節點時,集羣就會感知到並平衡數據。

在Elasticsearch中存儲數據的行爲就叫做索引(indexing) ,文檔歸屬於一種類型(type),而這些類型存在於索引(index)中 。

  • 索引(名詞) 如上文所述,一個索引(index)就像是傳統關係數據庫中的數據庫,它是相關文檔存儲的地方,index的複數是indices 或indexes。

  • 索引(動詞) 「索引一個文檔」表示把一個文檔存儲到索引(名詞)裏,以便它可以被檢索或者查詢。這很像SQL中的INSERT關鍵字,差別是,如果文檔已經存在,新的文檔將覆蓋舊的文檔。

  • 倒排索引 傳統數據庫爲特定列增加一個索引,例如B-Tree索引來加速檢索。Elasticsearch和Lucene使用一種叫做倒排索引(inverted index)的數據結構來達到相同目的。

Elasticsearch集羣可以包含多個索引(indices)(數據庫),每一個索引可以包含多個類型(types)(表),每一個類型包含多個文檔(documents)(行),然後每個文檔包含多個字段(Fields)(列)。

分片(shard)是Elasticsearch在集羣中分發數據的關鍵。把分片想象成數據的容器。文檔存儲在分片中,然後分片分配到你集羣中的節點上。當你的集羣擴容或縮小,Elasticsearch將會自動在你的節點間遷移分片,以使集羣保持平衡。

分片可以是主分片(primary shard)或者是從分片(replica shard)

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

當索引創建完成的時候,主分片的數量就固定了,但是從分片的數量可以隨時調整。

在Elasticsearch中,每一個字段的數據都是默認被索引的

默認情況下,一個索引被分配5個主分片和一個從分片

二、分佈式

單播與多播模式:

多播是需要看服務器是否支持的,由於其安全性,其實現在基本的雲服務(比如阿里雲)是不支持多播的,所以即使你開啓了多播模式,你也僅僅只能找到本機上的節點。

單播模式安全,也高效,但是缺點就是如果增加了一個新的機器的話,就需要每個節點上進行配置才生效了。

 默認的方式爲多播。

端口說明

     9300:節點之間交互的端口

     9200:數據傳輸端口

集羣模式時,實體顏色的爲主分片,暗顏色的爲從分片,即備份。下圖爲5個主分片,一份從分片模式

wKioL1cYbvWSzlAnAAD1jI5nq4I658.png

擴展方式:

縱向擴展:購買更好的服務器

橫向擴展:通過增加節點來均攤負載和增加可靠性。

Elasticsearch雖然能從更強大的硬件中獲得更好的性能,但是縱向擴展有它的侷限性。所以推薦使用橫向擴展

集羣健康:

有三種狀態:greenyellowred

顏色意義
green所有主要分片和分片都可用
yellow所有主要分片可用,但不是所有分片都可用
red不是所有的主要分片都可用


故障轉移:

假如當前情況爲如下圖,3個節點(node),3個主分片,2份從分片,NODE1爲master

p_w_picpath2016-4-14%2016%3A11%3A31.png?versio

我們模擬測試殺掉主節點NODE1。一個集羣必須要有一個主節點才能使其功能正常,所以集羣做的第一件事就是各節點選舉了一個新的主節點:Node 2

p_w_picpath2016-4-14%2016%3A13%3A3.png?version

主分片12在我們殺掉Node 1時已經丟失,我們的索引在丟失主分片時不能正常工作。如果此時我們檢查集羣健康,我們將看到狀態red:不是所有主節點都可用!

幸運的是丟失的兩個主分片的完整拷貝存在於其他節點上,所以新主節點做的第一件事是把這些在Node 2Node 3上的從分片升級爲主分片,這時集羣健康回到yellow狀態。這個提升是瞬間完成的,就好像按了一下開關。

 

ps:爲什麼集羣健康狀態是yellow而不是green?我們有三個主分片,但是我們指定了每個主分片對應兩個從分片,當前卻只有一個從分片被分配,這就是集羣狀態無法達到green的原因,不過不用太擔心這個:當我們殺掉Node 2,我們的程序依然可以在沒有丟失數據的情況下繼續運行,因爲Node 3還有每個分片的拷貝。如果我們重啓Node 1,集羣將能夠重新分配丟失的從分片,則顏色變爲green

 

三、部署安裝

安裝:

#rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
 

#vim /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=https://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

#yum install elasticsearch    #可指定版本

四、其他

常用配置:

cluster.name: ES_test
node.name: "app25"
node.master: true                                       #master節點是否開啓
node.data: false                                        #data節點是否開啓
path.data: /data/elasticsearch2.3
network.host: yourip                           #注意填寫ip,不要寫hostname;
index.number_of_shards: 6
index.number_of_replicas: 0
discovery.zen.ping.multicast.enabled: false             #單播模式,集羣成員手動設置;
discovery.zen.ping.unicast.hosts: ["node1_ip:9300","node2_ip:9300","node3_ip:9300","node4_ip:9300"]



插件安裝:

介紹兩個對於查詢你的Elasticsearch中數據非常有用的工具:

/usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf

  訪問: http://elasticsearch1:9200/_plugin/kopf

/usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-head

 訪問: http://elasticsearch1:9200/_plugin/head


 隨着es的普及,對安全的需求越來越多,例如:

  • 賬號認證,解決es匿名訪問的問題。

  • 授權管理,對不同的賬號按照不同維度分配(主要是索引)訪問權限。

  • 只讀權限,此條需求來源於 :某個Dashboard想分享給其他人,但又不想讓其他人有權限修改。

  • 統一認證,單點登錄。

 方案選擇

  • elasticsearch-http-basic :優點:此方案部署簡單快速,可以解決從無到有的過程,實現了賬號認證和ip白名單認證功能,缺點:功能單一,只解決了#1需求。

  • kibana-authentication-proxy :優點:此方案是針對kibana實現的認證,優點是該方案支持“ Google OAuth2, BasicAuth(multiple users supported) and CAS Authentication ”解決了需求#4中的單點登錄的需求,配合方案#1中的ip白名單能基本解決需求#1和#4.缺點:目前只支持到kibana3。

  • Shield :優點:功能強大,文檔豐富。缺點:收費。

  • search-guard :優點:功能豐富的免費模塊,能夠很好的解決需求中所有問題(除了#4中的單點登錄)。缺點:部署和配置稍複雜,文檔較少,門檻較高。

 

版本:

ElasticSearch 2.3.0 

版本主要針對Lucene 5.5.0開發,同時修復了大量的2.2版本的bug。

這次更新主要增加了三大特性:重建索引的API,通過查詢API,和任務管理API。

ElasticSearch  2.2.0

基於Lucene 5.4.1,修復了Elasticsearch 2.1.2和Elasticsearch 1.7.5版本中存在的很多bug,同時Elasticsearch 2.2.0增加了兩個很棒的新功能:查詢分析器和增強地理位置字段。這個版本增加了更加嚴格的安全性和修復了2.1的一個重大bug,就是在分片恢復的時 候會非常緩慢。以及許多其他的錯誤修復和改進。官方鼓勵所有用戶升級到此版本。

分析器(Profile API)

利用分析器可以得到查詢的詳細分 析信息,它可以讓你瞭解和調試查詢性能。查詢的每一部分都獨立的記錄了統計時間,如多長時間重寫查詢,找到匹配的文檔以及他們的得分情況。這個當查詢慢的 時候就不需要進行猜測爲什麼這麼慢:只要設置profile這個參數爲true,你就可以得到最直接的深入的查詢分析。

增強地理位置字段

地理位置字段在2.20版本中幾乎進行了從寫,它利用一個新的緊湊型數據結構存儲在Lucene的索引中,可以增加50%的入庫效率, 20-50%的查詢效率,一半的存儲空間和內存的佔用以及更簡單的映射參數。

對插件和腳本進行更嚴格的安全性檢查

作爲安全增強的一部分,Groovy和Lucene的表達式腳本語言已經移出了核心層,現在把他們作爲默認的分 布式模塊的插件。這樣的調整可以控制這些模塊的權限,已減少***的***,Elasticsearch的核心模塊在未來將會更多的進行模塊化處理。腳本語 言,現在預定義提供一個白名單列表,這些腳本不能讀寫文件,不能打開遠程的連接。默認情況下,都不准許插件有特殊權限,否則必須事先聲明這些權限。同時在插件安裝時將會被警告有特殊權限的要求,這個時候你可以根據需要確認是否移除這些插件。

 

參考資料:

http://es.xiaoleilu.com/

 





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章