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é)點(diǎn).....................................................................................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運(yùn)行環(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實(shí)例..................................................................................................8
2.2.5部署ES5集群..................................................................................................8
2.3驗(yàn)證ES5集群...................................................................................................8
三、集群性能測試...................................................................................................8
3.1集群節(jié)點(diǎn)的配置..................................................................................................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ù)官方公布信息荠瘪,該版本在性能和功能上都有很大提升段化,我們準(zhǔn)備將現(xiàn)有的Elasticsearch 2.2.0集群直接升級到ES5茵休。升級前采用少量機(jī)器部署ES5集群,進(jìn)行試用及性能測試∈中現(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)品復(fù)雜的版本號刘莹,很容易產(chǎn)生產(chǎn)品之間版本兼容性的問題阎毅。所以這次為了統(tǒng)一一下版本號,統(tǒng)一將所有產(chǎn)品的版本號升級到5.x.x点弯,版本號前三位相同的產(chǎn)品相互兼容扇调。
1.2ES5新增特性
ES5新增特性非常之多,這里從我們的業(yè)務(wù)需求出發(fā)抢肛,分享一下我認(rèn)為比較重要的新增特性狼钮。
1.2.1性能相關(guān)的特性
第一個就是ES內(nèi)置Lucene升級到6.2.0。Lucene 6針對數(shù)字和地理位置類型增加了叫K-Ds樹的點(diǎn)數(shù)據(jù)結(jié)構(gòu)雌团,改變了對數(shù)字類型的索引和搜索燃领。采用這種點(diǎn)數(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é)點(diǎn)
ES5中祭示,新增數(shù)據(jù)轉(zhuǎn)換功能節(jié)點(diǎn)(Ingest
Nodes),使得ES5本身就可以實(shí)現(xiàn)Logstash常用的數(shù)據(jù)過濾能力谴古,比如data质涛、split稠歉、convert、grok等汇陆。通過定義管道怒炸,實(shí)現(xiàn)在索引之前對文檔進(jìn)行預(yù)處理。默認(rèn)情況下瞬测,節(jié)點(diǎn)自動開啟了數(shù)據(jù)轉(zhuǎn)換功能横媚。數(shù)據(jù)轉(zhuǎn)換對節(jié)點(diǎn)性能有一定的消耗,如需關(guān)閉節(jié)點(diǎn)的轉(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ù)按天來對索引進(jìn)行分割非常方便描孟。比如我們創(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)境配置進(jìn)行檢查汽畴,如果發(fā)現(xiàn)系統(tǒng)環(huán)境不滿足條件,則不能正常啟動耸序。因此部署ES前忍些,需要對CentOS系統(tǒng)時進(jìn)行優(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運(yùn)行環(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é)點(diǎn)集群名稱相同
node.name: node1#節(jié)點(diǎn)名稱
path.data: /data1/es5/#索引數(shù)據(jù)存放目錄闹司,可以指定多個,提升IO性能
path.logs: /var/log/es5/#日志存放目錄
bootstrap.memory_lock: true#是否開啟內(nèi)存鎖定沐飘,默認(rèn)為false游桩。建議開啟
network.host: 10.210.136.34#節(jié)點(diǎn)綁定的IP地址
http.port: 9200#http端口,一臺機(jī)器啟動多個實(shí)例時薪铜,修改端口
node.master: true#是否為master節(jié)點(diǎn)众弓,默認(rèn)為true
node.data: true#是否為數(shù)據(jù)節(jié)點(diǎn),默認(rèn)為true
node.ingest: true#是否為數(shù)據(jù)轉(zhuǎn)換節(jié)點(diǎn)隔箍,默認(rèn)為true
discovery.zen.ping.unicast.hosts: [“10.*.*.1””]#配置集群內(nèi)其它節(jié)點(diǎn)的IP
discovery.zen.minimum_master_nodes: 3
#該配置用于集群網(wǎng)絡(luò)出現(xiàn)異常時谓娃,防止腦裂導(dǎo)致的索引數(shù)據(jù)丟失。配置為:(集群中master節(jié)點(diǎn)總數(shù))/ 2 + 1
2.2.3配置JVM參數(shù)
ES5實(shí)例啟動的JVM參數(shù)統(tǒng)一配置在config/jvm.options文件中蜒滩。
-Xms12g#初始化堆內(nèi)存大小
-Xmx12g#堆內(nèi)存
建議一臺主機(jī)滨达,啟動單個ES實(shí)例,最大堆內(nèi)存不超過主機(jī)內(nèi)存的50%俯艰,且最大不要超過32G捡遍。
2.2.4啟動ES5實(shí)例
cd$ES_HOME/bin
./elasticsearch-d -p pid#以守護(hù)進(jìn)程啟動
kill`cat pid`#關(guān)閉ES實(shí)例
2.2.5部署ES5集群
各節(jié)點(diǎn)啟動ES5實(shí)例后,cluster.name相同的節(jié)點(diǎn)會自動發(fā)現(xiàn)節(jié)點(diǎn)竹握。當(dāng)集群規(guī)模較大時画株,需要master節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)分開,以提升性能。
master節(jié)點(diǎn)配置如下:
node.master:true#開啟master節(jié)點(diǎn)角色
node.data:false#關(guān)閉data節(jié)點(diǎn)角色
node.ingest:false#關(guān)閉ingest節(jié)點(diǎn)角色
data節(jié)點(diǎn)的配置如下:
node.master:true#關(guān)閉master節(jié)點(diǎn)角色
node.data:false#開啟data節(jié)點(diǎn)角色
node.ingest:false#關(guān)閉ingest節(jié)點(diǎn)角色
2.3驗(yàn)證ES5集群
通過REST API查看集群狀態(tài)谓传,驗(yàn)證集群部署是否成功蜈项。
GET_cluster/health?pretty#查看集群健康狀態(tài)
GET_cluster/stats?human&pretty
GET_cluster/state?pretty
GET_nodes/stats?pretty#查看集群各節(jié)點(diǎn)的狀態(tài)
3.1集群節(jié)點(diǎn)的配置
ES5測試集群使用四臺服務(wù)器搭建续挟,機(jī)器的詳細(xì)配置如下表紧卒。集群及客戶端網(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ù),平均索引速度可達(dá)到4萬條/秒养葵。
索引狀態(tài)監(jiān)控圖:
3.2.2檢索性能測試
ES5提供幾乎實(shí)時的數(shù)據(jù)操作和檢索功能征堪,默認(rèn)情況下,數(shù)據(jù)從索引/更新/刪除到它作用到檢索結(jié)果中关拒,有一秒鐘的延遲佃蚜。
為了測試ES5集群檢索的性能,首先往集群中索引1.6億條數(shù)據(jù)着绊,索引大小為33.7GB谐算。使用Transport
Client客戶端,采用多線程方式開啟20個客戶端連接集群归露,循環(huán)發(fā)起40萬次檢索請求洲脂。此時集群檢索的平均響應(yīng)時間是20毫秒。
集群節(jié)點(diǎn)的負(fù)載:
大家可以看到集群master節(jié)點(diǎn)的負(fù)載非常高剧包,CPU使用接近100%恐锦。由于此次用于測試的機(jī)器并不充足,master節(jié)點(diǎn)還擔(dān)任著data節(jié)點(diǎn)的角色疆液,該節(jié)點(diǎn)負(fù)載比其它節(jié)點(diǎn)要重一铅。生產(chǎn)環(huán)境建議是把master節(jié)點(diǎn)和data節(jié)點(diǎn)分開,以提供更好的性能堕油。
四潘飘、ES5數(shù)據(jù)安全性
ES的數(shù)據(jù)安全性要從兩方面考慮肮之,一方面是索引數(shù)據(jù)本身的安全性,另一方面是數(shù)據(jù)訪問的安全控制卜录。
4.1索引數(shù)據(jù)安全性
ES5提供副本機(jī)制保障索引數(shù)據(jù)不會丟失局骤。索引的副本數(shù),創(chuàng)建索引時可以設(shè)置暴凑,默認(rèn)為1,如果要提高索引數(shù)據(jù)的安全性赘来,可以加大副本數(shù)现喳。
4.2索引數(shù)據(jù)訪問的安全控制
ES5本身在數(shù)據(jù)訪問安全控制這方面,沒有做任何限制犬辰。存在以下安全問題:
n索引數(shù)據(jù)訪問無權(quán)限控制嗦篱,任何客戶端能過API都可以訪問集群中的索引數(shù)據(jù);
n節(jié)點(diǎn)加入集群無安全驗(yàn)證幌缝,網(wǎng)絡(luò)聯(lián)通的機(jī)器通過配置都可以加入到集群當(dāng)中灸促;
n集群中節(jié)點(diǎn)之間數(shù)據(jù)傳輸未加密;
Elastic提供的X-pack插件涵卵,可以解決數(shù)據(jù)訪問安全控制的問題浴栽。X-pack插件安裝簡單,功能強(qiáng)大轿偎,文檔齊全典鸡。但有l(wèi)icense限制,免費(fèi)的license只提供集群監(jiān)控功能坏晦,而且不開放源代碼萝玷。
X-pack插件所有功能可以免費(fèi)試用一個月,到期以后一些基本認(rèn)證功能還可以繼續(xù)使用昆婿。由于不開放源碼球碉,后期維護(hù)及擴(kuò)展比較困難。
ES5安全認(rèn)證方面仓蛆,還有另外一個不錯的插件可以選擇--Search Guard睁冬。該插件也是商業(yè)插件,但免費(fèi)許可的功能已可以滿足需求多律。
該插件提供豐富認(rèn)證功能痴突,開放全部源代碼,可以很方便與企業(yè)內(nèi)部的認(rèn)證系統(tǒng)進(jìn)行集成狼荞,擴(kuò)展性較好辽装!Search Guard詳細(xì)信息,可以查看官網(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