Elasticsearch 5集群部署與測試..............................................................................1
目錄.......................................................................................................................2
一、Elasticsearch 5的新特性.................................................................................3
1.1為什么版本直接跳到5.x.x....................................................................................3
1.2ES5新增特性.....................................................................................................4
1.2.1性能相關(guān)的特性...............................................................................................4
1.2.2新增數(shù)據(jù)轉(zhuǎn)換功能節(jié)點.....................................................................................4
1.2.3接口方面.........................................................................................................5
二、ES5集群的部署................................................................................................5
2.1部署前系統(tǒng)相關(guān)的配置........................................................................................6
2.1.1為ES創(chuàng)建系統(tǒng)用戶............................................................................................6
2.1.2安裝Java運行環(huán)境............................................................................................6
2.1.3修改/etc/security/limits.conf...........................................................................6
2.1.4/etc/sysctl.conf添加配置信息..........................................................................6
2.2安裝ES5............................................................................................................7
2.2.1下載ES5安裝文件............................................................................................7
2.2.2配置ES5.........................................................................................................7
2.2.3配置JVM參數(shù).................................................................................................7
2.2.4啟動ES5實例..................................................................................................8
2.2.5部署ES5集群..................................................................................................8
2.3驗證ES5集群...................................................................................................8
三、集群性能測試...................................................................................................8
3.1集群節(jié)點的配置..................................................................................................8
3.2性能測試............................................................................................................9
3.2.1索引性能測試...................................................................................................9
3.2.2檢索性能測試..................................................................................................10
四、ES5數(shù)據(jù)安全性................................................................................................11
4.1索引數(shù)據(jù)安全性..................................................................................................12
4.2索引數(shù)據(jù)訪問的安全控制....................................................................................12
五、參考鏈接..........................................................................................................14
2016年10月Elastic發(fā)布了Elasticsearch 5.0.0(以下簡稱ES5)。根據(jù)官方公布信息,該版本在性能和功能上都有很大提升,我們準備將現(xiàn)有的Elasticsearch 2.2.0集群直接升級到ES5。升級前采用少量機器部署ES5集群,進行試用及性能測試?,F(xiàn)從ES5的新特性,集群安裝部署,性能調(diào)試測試及集群安全性等幾個方面分享一下我對ES5理解,如有不對之處,敬請指正。
1.1為什么版本直接跳到5.x.x
介紹ES5的新特性之前,首先說說這次ES的版本為什么直接從2.x.x直接跳到5.x.x。主要是為了統(tǒng)一版本。由于ELK過去的版本比較混亂,Elasticsearch和Logstash的版本號是2.x.x,Kibana是4.x.x??纯聪旅孢@張圖,就清楚過去版本號有多亂了。

這些產(chǎn)品復雜的版本號,很容易產(chǎn)生產(chǎn)品之間版本兼容性的問題。所以這次為了統(tǒng)一一下版本號,統(tǒng)一將所有產(chǎn)品的版本號升級到5.x.x,版本號前三位相同的產(chǎn)品相互兼容。
1.2ES5新增特性
ES5新增特性非常之多,這里從我們的業(yè)務(wù)需求出發(fā),分享一下我認為比較重要的新增特性。
1.2.1性能相關(guān)的特性
第一個就是ES內(nèi)置Lucene升級到6.2.0。Lucene 6針對數(shù)字和地理位置類型增加了叫K-Ds樹的點數(shù)據(jù)結(jié)構(gòu),改變了對數(shù)字類型的索引和搜索。采用這種點數(shù)據(jù)結(jié)構(gòu),使得索引的速度提高71%,檢索速度提高36%,同時索引的大小減少66%。關(guān)于Lucene
6.2.0的相關(guān)特性,可以查看Lucene官網(wǎng)(http://lucene.apache.org)。
引入新的字段類型Keyword/Text代替String,即將原來的String類型分成兩種數(shù)據(jù)類型。Keyword類型適合那些不需要分詞,需要完全匹配的文本內(nèi)容,這種類型對過濾和聚合操作非常方便。Text類型適合需要全文檢索對文本內(nèi)容分詞的字段類型。
在Internal Engine層移除同一文檔并發(fā)更新的競爭鎖,并發(fā)更新的場景下,可以帶來15%-20%的性能提高。
另外,ES5在聚合和分頁查詢性能方面也做了很大優(yōu)化。
1.2.2新增數(shù)據(jù)轉(zhuǎn)換功能節(jié)點
ES5中,新增數(shù)據(jù)轉(zhuǎn)換功能節(jié)點(Ingest
Nodes),使得ES5本身就可以實現(xiàn)Logstash常用的數(shù)據(jù)過濾能力,比如data、split、convert、grok等。通過定義管道,實現(xiàn)在索引之前對文檔進行預處理。默認情況下,節(jié)點自動開啟了數(shù)據(jù)轉(zhuǎn)換功能。數(shù)據(jù)轉(zhuǎn)換對節(jié)點性能有一定的消耗,如需關(guān)閉節(jié)點的轉(zhuǎn)換功能,可以在配置文件(elasticsearch.yml)中添加node.ingest: false配置。
1.2.3接口方面
新增Shrink接口。ES5之前,索引的分片數(shù)一旦設(shè)定,將不能修改。如果要修改,只能重新創(chuàng)建索引。Shrink接口可以在不重建索引的前提下將分片數(shù)收縮成它的因數(shù),比如之前是16個分片,可以收縮成8個或4個。針對這樣的場景,寫數(shù)據(jù)壓力非常大時,設(shè)置足夠多的分片,充分利分片的并行寫能力,提高寫入速度,后期寫數(shù)據(jù)量較小時,收縮分片數(shù),提高查詢性能,非常方便。
新增Rollover接口。該接口對于日志類的數(shù)據(jù)按天來對索引進行分割非常方便。比如我們創(chuàng)建一個logs0001的索引,并為它指定一個叫l(wèi)ogs_write的別名,然后給logs_write設(shè)置一個rollover規(guī)則,索引文檔最多保存一天的數(shù)據(jù),超過一天的數(shù)據(jù),logs_write別名自動切換到logs0002的索引上。
新增Java REST Client客戶端。Java REST Client是基于HTTP協(xié)議的客戶端,使用時不需要依賴Elasticsearch
Jar包,可以消除開發(fā)時Jar包沖突。并且性能和Transport
Client不相上下。
二、ES5集群的部署
本次ES集群部署選用CentOS操作系統(tǒng),ES5要求CentOS 6及以上的版本。
2.1部署前系統(tǒng)相關(guān)的配置
生產(chǎn)環(huán)境部署ES5,啟動時會對系統(tǒng)環(huán)境配置進行檢查,如果發(fā)現(xiàn)系統(tǒng)環(huán)境不滿足條件,則不能正常啟動。因此部署ES前,需要對CentOS系統(tǒng)時進行優(yōu)化配置。
2.1.1為ES創(chuàng)建系統(tǒng)用戶
ES5不能直接使用root用戶啟動,因此安裝前要為ES創(chuàng)建安裝系統(tǒng)用戶。
groupadd es
useradd es -g es
passwd es
2.1.2安裝Java運行環(huán)境
ES5要求Java 8,建議安裝Oracle JDK version 1.8.0_73。
2.1.3修改/etc/security/limits.conf
es - nofile 65536#open files
es soft nproc 65536#max user processes
es hard nproc 65536#max user processes
es soft memlock unlimited#virtual memory
es hard memlock unlimited#virtual memory
2.1.4/etc/sysctl.conf添加配置信息
vm.max_map_count=262144
/sbin/sysctl-p#生效配置
2.2安裝ES5
2.2.1下載ES5安裝文件
tar-xvf elasticsearch-5.0.0.tar.gz -C /usr/local/
ln-s elasticsearch-5.0.0 elasticsearch
chown-R es:es elasticsearch
chown-R es:es elasticsearch-5.0.0
2.2.2配置ES5
ES5的配置文件在home目錄下config/elasticsearch.yml,建議設(shè)置以下配置優(yōu)化項。
cluster.name: es5-cluster#集群名,同一個集群中的節(jié)點集群名稱相同
node.name: node1#節(jié)點名稱
path.data: /data1/es5/#索引數(shù)據(jù)存放目錄,可以指定多個,提升IO性能
path.logs: /var/log/es5/#日志存放目錄
bootstrap.memory_lock: true#是否開啟內(nèi)存鎖定,默認為false。建議開啟
network.host: 10.210.136.34#節(jié)點綁定的IP地址
http.port: 9200#http端口,一臺機器啟動多個實例時,修改端口
node.master: true#是否為master節(jié)點,默認為true
node.data: true#是否為數(shù)據(jù)節(jié)點,默認為true
node.ingest: true#是否為數(shù)據(jù)轉(zhuǎn)換節(jié)點,默認為true
discovery.zen.ping.unicast.hosts: [“10.*.*.1””]#配置集群內(nèi)其它節(jié)點的IP
discovery.zen.minimum_master_nodes: 3
#該配置用于集群網(wǎng)絡(luò)出現(xiàn)異常時,防止腦裂導致的索引數(shù)據(jù)丟失。配置為:(集群中master節(jié)點總數(shù))/ 2 + 1
2.2.3配置JVM參數(shù)
ES5實例啟動的JVM參數(shù)統(tǒng)一配置在config/jvm.options文件中。
-Xms12g#初始化堆內(nèi)存大小
-Xmx12g#堆內(nèi)存
建議一臺主機,啟動單個ES實例,最大堆內(nèi)存不超過主機內(nèi)存的50%,且最大不要超過32G。
2.2.4啟動ES5實例
cd$ES_HOME/bin
./elasticsearch-d -p pid#以守護進程啟動
kill`cat pid`#關(guān)閉ES實例
2.2.5部署ES5集群
各節(jié)點啟動ES5實例后,cluster.name相同的節(jié)點會自動發(fā)現(xiàn)節(jié)點。當集群規(guī)模較大時,需要master節(jié)點和數(shù)據(jù)節(jié)點分開,以提升性能。
master節(jié)點配置如下:
node.master:true#開啟master節(jié)點角色
node.data:false#關(guān)閉data節(jié)點角色
node.ingest:false#關(guān)閉ingest節(jié)點角色
data節(jié)點的配置如下:
node.master:true#關(guān)閉master節(jié)點角色
node.data:false#開啟data節(jié)點角色
node.ingest:false#關(guān)閉ingest節(jié)點角色
2.3驗證ES5集群
通過REST API查看集群狀態(tài),驗證集群部署是否成功。
GET_cluster/health?pretty#查看集群健康狀態(tài)
GET_cluster/stats?human&pretty
GET_cluster/state?pretty
GET_nodes/stats?pretty#查看集群各節(jié)點的狀態(tài)
3.1集群節(jié)點的配置
ES5測試集群使用四臺服務(wù)器搭建,機器的詳細配置如下表。集群及客戶端網(wǎng)絡(luò)帶寬為百兆網(wǎng)絡(luò)。

3.2性能測試
3.2.1索引性能測試
索引測試程序,使用Native Java Client批量向集群索引數(shù)據(jù)。測試程序部署在集群同局域網(wǎng)內(nèi)的一臺服務(wù)器上,使用多線程開啟多個Transport Client連接集群。我們的業(yè)務(wù)是索引日志數(shù)據(jù),檢索是完全匹配,用不上ES搜索引擎方面的功能。創(chuàng)建索引時,在mapping配置中關(guān)閉了記錄打分和對字段的分詞功能,以提升索引性能。
每條測試數(shù)據(jù)的大小266個字節(jié),批量向集群索引1.5億條數(shù)據(jù),平均索引速度可達到4萬條/秒。

索引狀態(tài)監(jiān)控圖:

3.2.2檢索性能測試
ES5提供幾乎實時的數(shù)據(jù)操作和檢索功能,默認情況下,數(shù)據(jù)從索引/更新/刪除到它作用到檢索結(jié)果中,有一秒鐘的延遲。
為了測試ES5集群檢索的性能,首先往集群中索引1.6億條數(shù)據(jù),索引大小為33.7GB。使用Transport
Client客戶端,采用多線程方式開啟20個客戶端連接集群,循環(huán)發(fā)起40萬次檢索請求。此時集群檢索的平均響應(yīng)時間是20毫秒。


集群節(jié)點的負載:

大家可以看到集群master節(jié)點的負載非常高,CPU使用接近100%。由于此次用于測試的機器并不充足,master節(jié)點還擔任著data節(jié)點的角色,該節(jié)點負載比其它節(jié)點要重。生產(chǎn)環(huán)境建議是把master節(jié)點和data節(jié)點分開,以提供更好的性能。
四、ES5數(shù)據(jù)安全性
ES的數(shù)據(jù)安全性要從兩方面考慮,一方面是索引數(shù)據(jù)本身的安全性,另一方面是數(shù)據(jù)訪問的安全控制。
4.1索引數(shù)據(jù)安全性
ES5提供副本機制保障索引數(shù)據(jù)不會丟失。索引的副本數(shù),創(chuàng)建索引時可以設(shè)置,默認為1,如果要提高索引數(shù)據(jù)的安全性,可以加大副本數(shù)。
4.2索引數(shù)據(jù)訪問的安全控制
ES5本身在數(shù)據(jù)訪問安全控制這方面,沒有做任何限制。存在以下安全問題:
n索引數(shù)據(jù)訪問無權(quán)限控制,任何客戶端能過API都可以訪問集群中的索引數(shù)據(jù);
n節(jié)點加入集群無安全驗證,網(wǎng)絡(luò)聯(lián)通的機器通過配置都可以加入到集群當中;
n集群中節(jié)點之間數(shù)據(jù)傳輸未加密;
Elastic提供的X-pack插件,可以解決數(shù)據(jù)訪問安全控制的問題。X-pack插件安裝簡單,功能強大,文檔齊全。但有l(wèi)icense限制,免費的license只提供集群監(jiān)控功能,而且不開放源代碼。

X-pack插件所有功能可以免費試用一個月,到期以后一些基本認證功能還可以繼續(xù)使用。由于不開放源碼,后期維護及擴展比較困難。
ES5安全認證方面,還有另外一個不錯的插件可以選擇--Search Guard。該插件也是商業(yè)插件,但免費許可的功能已可以滿足需求。

該插件提供豐富認證功能,開放全部源代碼,可以很方便與企業(yè)內(nèi)部的認證系統(tǒng)進行集成,擴展性較好!Search Guard詳細信息,可以查看官網(wǎng)https://floragunn.com/。
http://lucene.apache.org/
https://www.elastic.co/
https://floragunn.com/
http://www.infoq.com/cn/news/2016/08/Elasticsearch-5-0-Elastic