Elasticsearch 5集群部署與測試

目錄

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理解,如有不對之處,敬請指正。

一、Elasticsearch 5的新特性

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 License

X-pack插件所有功能可以免費試用一個月,到期以后一些基本認證功能還可以繼續(xù)使用。由于不開放源碼,后期維護及擴展比較困難。

ES5安全認證方面,還有另外一個不錯的插件可以選擇--Search Guard。該插件也是商業(yè)插件,但免費許可的功能已可以滿足需求。


Search Guard架構(gòu)圖

該插件提供豐富認證功能,開放全部源代碼,可以很方便與企業(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容