本文所有內(nèi)容皆關(guān)于 ES和 kibana
一、簡(jiǎn)介
???????? ELKB即elasticsearch、logstash、kibana、Beats的簡(jiǎn)稱,elasticsearch接收Beats或logstash的數(shù)據(jù)提供數(shù)據(jù)存儲(chǔ)及搜索功能;kibana為elasticsearch的頁面展示工具。
二、優(yōu)缺點(diǎn)
I. 優(yōu)點(diǎn)
????1)? ?強(qiáng)大的搜索功能,elasticsearch可以以分布式搜索的方式快速檢索,而且支持DSL的語法來進(jìn)行搜索,簡(jiǎn)單的說,就是通過類似配置的語言,快速篩選數(shù)據(jù)。
????2)? 完美的展示功能,可以展示非常詳細(xì)的圖表信息,而且可以定制展示內(nèi)容,將數(shù)據(jù)可視化發(fā)揮的淋漓盡致。
????3)? 分布式功能,能夠解決大型集群運(yùn)維工作很多問題,包括監(jiān)控、預(yù)警、日志收集解析等。
????4)? 完整的自監(jiān)控功能,elastic組件能滿足常用的監(jiān)控功能,包括服務(wù)器metric,elkb自身性能監(jiān)控等。
II. 缺點(diǎn)
????1)? 告警。目前官方告警插件alert需要收費(fèi)。
????2)? 關(guān)聯(lián)分析。Es對(duì)于index的關(guān)聯(lián)查詢非常復(fù)雜。
三、應(yīng)用場(chǎng)景
????1)? 站內(nèi)搜索:主要和Solr競(jìng)爭(zhēng),屬于后起之秀。
????2)? NoSQL Json文檔數(shù)據(jù)庫:主要搶占Mongo的市場(chǎng),它在讀寫性能上優(yōu)于Mongo,同時(shí)也支持地理位置查詢,還方便地理位置和文本混合查詢。
????3)? 監(jiān)控:統(tǒng)計(jì)、日志類時(shí)間序的數(shù)據(jù)存儲(chǔ)和分析、可視化,這方面是引領(lǐng)者。
????4)? 國外:Wikipedia(維基百科)使用ES提供全文搜索并高亮關(guān)鍵字、StackOverflow(IT問答網(wǎng)站)結(jié)合全文搜索與地理位置查詢、Github使用Elasticsearch檢索1300億行的代碼。
????5)? 國內(nèi):百度(在云分析、網(wǎng)盟、預(yù)測(cè)、文庫、錢包、風(fēng)控等業(yè)務(wù)上都應(yīng)用了ES,單集群每天導(dǎo)入30TB+數(shù)據(jù),總共每天60TB+)、新浪 、阿里巴巴、騰訊等公司均有對(duì)ES的使用。
????6)? 使用比較廣泛的平臺(tái)ELK(ElasticSearch, Logstash, Kibana)。
四、ES集群部署
官網(wǎng)下載6.3.2:https://www.elastic.co/downloads
4.1 集群規(guī)劃

4.2 安裝ES
Elasticsearch-6依賴于jdk-1.8,官網(wǎng)建議jdk版本不低于1.8.0_131
查看:java -version
下載java-1.8:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Elasticsearch解壓后主要修改配置文件config/elasticsearch.yml,嚴(yán)格按照原來的格式修改,否則不識(shí)別,修改下面幾項(xiàng):
#cluster.name: es_cluster #集群名,依此識(shí)別并組成集群
#node.name: node-1 #節(jié)點(diǎn)名,集群內(nèi)每個(gè)節(jié)點(diǎn)名不同
#network.host: 192.168.0.1 #配置本機(jī)ip,以便外網(wǎng)訪問
我的data節(jié)點(diǎn)配置(.yml的文件冒號(hào)后面必須加空格)
cluster.name: es_cluster
node.name: es-data1
network.host: es-data1
path.data: /elk/data
path.logs: /elk/logs
http.port: 9200
transport.tcp.port: 9300
node.master: false
#設(shè)置不充當(dāng)master節(jié)點(diǎn),默認(rèn)為true
node.data: true #設(shè)置充當(dāng)data節(jié)點(diǎn),默認(rèn)為true
#添加防腦裂配置(因?yàn)閑s默認(rèn)是一個(gè)局域網(wǎng)內(nèi)能搜索到的就是一個(gè)集群,一些原因會(huì)導(dǎo)致分成幾個(gè)集群)
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping.unicast.hosts: ["es-master1:9300"," es-master2:9300","es-master3:9300"]
bootstrap.memory_lock: true
elasticsearch配置的cluster.name相同,都啟動(dòng)可以自動(dòng)組成集群,這里如果不改cluster.name則默認(rèn)是cluster.name=elasticsearch,nodename隨意取但是集群內(nèi)的各節(jié)點(diǎn)不能相同,host設(shè)置自己的ip/hostname
另一個(gè)master節(jié)點(diǎn)的配置如下:
cluster.name: es_cluster
node.name: es-master1
path.data: /elk/data
path.logs: /elk/logs
http.port: 9200
transport.tcp.port: 9300
node.master: true#設(shè)置充當(dāng)master節(jié)點(diǎn),默認(rèn)為true
node.data: false #設(shè)置不充當(dāng)data節(jié)點(diǎn),默認(rèn)為true
network.host: es-master1
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping.unicast.hosts: ["es-master1:9300"," es-master2:9300","es-master3:9300"]
bootstrap.memory_lock: true
注: discovery設(shè)置自動(dòng)發(fā)現(xiàn)集群,discovery.zen.ping.unicast.hosts設(shè)置具有master權(quán)限的es節(jié)點(diǎn)ip,防止es的master節(jié)點(diǎn)因某些原因腦裂。不設(shè)置node.master和node.data則默認(rèn)每個(gè)節(jié)點(diǎn)都有master和data權(quán)限。
更多配置詳解請(qǐng)查看文章4.6
4.3 啟動(dòng)
后臺(tái)啟動(dòng),要裝插件,前臺(tái)啟動(dòng)全部./bin/elasticsearch,如果想在后臺(tái)以守護(hù)進(jìn)程模式運(yùn)行,添加-d參數(shù): ./bin/elasticsearch -d。
注:ES不能用root用戶啟動(dòng),先更改elasticsearch文件夾的所有者
關(guān)閉防火墻
成功頁面訪問:http://es-data1:9200

4.4 單機(jī)多實(shí)例配置
???????? 由于官方并不建議部署ES時(shí)為實(shí)例指定超過32GB的內(nèi)存,但是現(xiàn)在一臺(tái)實(shí)體機(jī)服務(wù)器內(nèi)存遠(yuǎn)遠(yuǎn)不止32G,僅用32G內(nèi)存顯然是非常浪費(fèi)的。所以我們要在一個(gè)服務(wù)器上開多個(gè)ES實(shí)例,以便達(dá)到充分利用資源的目的。
???????? 配置要點(diǎn):
node.max_local_storage_nodes
這個(gè)配置限制了單節(jié)點(diǎn)上可以開啟的ES存儲(chǔ)實(shí)例的個(gè)數(shù),我們需要開多個(gè)實(shí)例,因此需要把這個(gè)配置寫到配置文件中,并為這個(gè)配置賦值為2或者更高。
這個(gè)配置是elasticsearch對(duì)外提供服務(wù)的http端口配置,默認(rèn)情況下ES會(huì)取用9200~9299之間的端口,如果9200被占用就會(huì)自動(dòng)使用9201,在單機(jī)多實(shí)例的配置中這個(gè)配置實(shí)際是不需要修改的。
但是為了更好地進(jìn)行配置管理,以及和老的配置兼容,我們還是手動(dòng)將第一個(gè)實(shí)例的http端口配置為9200,第二個(gè)實(shí)例配置為9201。
transport.tcp.port
這個(gè)配置指定了elasticsearch集群內(nèi)數(shù)據(jù)通訊使用的端口,默認(rèn)情況下為9300,與上面的http.port配置類似,ES也會(huì)自動(dòng)為已占用的端口選擇下一個(gè)端口號(hào)。我們可以將第一個(gè)實(shí)例的tcp傳輸端口配置為9300,第二實(shí)例配置為9301。
discovery.zen.ping.unicast.hosts
由于到了2.x版本之后,ES取消了默認(rèn)的廣播模式來發(fā)現(xiàn)master節(jié)點(diǎn),需要使用該配置來指定發(fā)現(xiàn)master節(jié)點(diǎn)。這個(gè)配置在單機(jī)雙實(shí)例的配置中需要特別注意下,因?yàn)榱?xí)慣上我們配置時(shí)并未指定master節(jié)點(diǎn)的tcp端口,如果實(shí)例的transport.tcp.port配置為9301,那么實(shí)例啟動(dòng)后會(huì)認(rèn)為discovery.zen.ping.unicast.hosts中指定的主機(jī)tcp端口也是9301,可能導(dǎo)致這些節(jié)點(diǎn)無法找到master節(jié)點(diǎn)。因此在該配置中需要指定master節(jié)點(diǎn)提供服務(wù)的tcp端口。
discovery.zen.ping.unicast.hosts: ["es-master1:9300","es-master2:9300","es-master3:9300"]
在config子目錄下創(chuàng)建instance1和instance2兩個(gè)目錄,分別放置兩個(gè)實(shí)例需要的elasticsearch.yml、log4j2.property和jvm.options配置文件。
啟動(dòng)實(shí)例
bin/elasticsearch -Des.path.conf=config/instance1 -d -p /tmp/elasticsearch_1.pid
4.5 ES安裝問題集錦
elasticsearch安裝過程中遇到了一些問題,這里提供解決的方法。
問題一:警告提示
[WARN][o.e.b.JNANatives ] unable to install syscall filter:
java.lang.UnsupportedOperationException:seccomp unavailable: requires kernel 3.5+ with CONFIG_SECCOMP and CONFIG_SECCOMP_FILTERcompiled in
at org.elasticsearch.bootstrap.Seccomp.linuxImpl(Seccomp.java:349)~[elasticsearch-5.0.0.jar:5.0.0]
at org.elasticsearch.bootstrap.Seccomp.init(Seccomp.java:630)~[elasticsearch-5.0.0.jar:5.0.0]
報(bào)了一大串錯(cuò)誤,其實(shí)只是一個(gè)警告。
解決:使用新的linux版本,就不會(huì)出現(xiàn)此類問題了。
問題二:ERROR: bootstrap checks failed
max filedescriptors [4096] for elasticsearch process likely too low, increase to atleast [65536]
max number of threads [1024] for user [lishang] likely too low, increase to atleast [2048]
解決:切換到root用戶,編輯limits.conf 添加類似如下內(nèi)容
vi /etc/security/limits.conf?
添加如下內(nèi)容:
*
soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
問題三:max number of threads [1024] for user[lish] likely too low, increase to at least [2048]
解決:切換到root用戶,進(jìn)入limits.d目錄下修改配置文件。
vi
/etc/security/limits.d/90-nproc.conf?
修改如下內(nèi)容:
* soft nproc 1024
#修改為
* soft nproc 2048
問題四:max virtual memory areas vm.max_map_count[65530] likely too low, increase to at least [262144]
解決:切換到root用戶修改配置sysctl.conf
vi /etc/sysctl.conf
添加下面配置:
vm.max_map_count=655360
并執(zhí)行命令:
sysctl -p
然后,重新啟動(dòng)elasticsearch,即可啟動(dòng)成功。
4.6 ES配置
2.6.1 集群配置
elasticsearch集群搭建,可以把索引進(jìn)行分片存儲(chǔ),一個(gè)索引可以分成若干個(gè)片,分別存儲(chǔ)到集群里面,而對(duì)于集群里面的負(fù)載均衡,副本分配,索引動(dòng)態(tài)均衡(根據(jù)節(jié)點(diǎn)的增加或者減少)都是elasticsearch自己內(nèi)部完成的,一有情況就會(huì)重新進(jìn)行分配。
下面先是介紹幾個(gè)關(guān)于elasticsearch的幾個(gè)名詞
1.cluster
代表一個(gè)集群,集群中有多個(gè)節(jié)點(diǎn),其中有一個(gè)為主節(jié)點(diǎn),這個(gè)主節(jié)點(diǎn)是可以通過選舉產(chǎn)生的,主從節(jié)點(diǎn)是對(duì)于集群內(nèi)部來說的。es的一個(gè)概念就是去中心化,字面上理解就是無中心節(jié)點(diǎn),這是對(duì)于集群外部來說的,因?yàn)閺耐獠縼砜磂s集群,在邏輯上是個(gè)整體,你與任何一個(gè)節(jié)點(diǎn)的通信和與整個(gè)es集群通信是等價(jià)的。
2.shards
代表索引分片,es可以把一個(gè)完整的索引分成多個(gè)分片,這樣的好處是可以把一個(gè)大的索引拆分成多個(gè),分布到不同的節(jié)點(diǎn)上。構(gòu)成分布式搜索。分片的數(shù)量只能在索引創(chuàng)建前指定,并且索引創(chuàng)建后不能更改。
3.replicas
代表索引副本,es可以設(shè)置多個(gè)索引的副本,副本的作用一是提高系統(tǒng)的容錯(cuò)性,當(dāng)個(gè)某個(gè)節(jié)點(diǎn)某個(gè)分片損壞或丟失時(shí)可以從副本中恢復(fù)。二是提高es的查詢效率,es會(huì)自動(dòng)對(duì)搜索請(qǐng)求進(jìn)行負(fù)載均衡。
4.recovery
代表數(shù)據(jù)恢復(fù)或叫數(shù)據(jù)重新分布,es在有節(jié)點(diǎn)加入或退出時(shí)會(huì)根據(jù)機(jī)器的負(fù)載對(duì)索引分片進(jìn)行重新分配,掛掉的節(jié)點(diǎn)重新啟動(dòng)時(shí)也會(huì)進(jìn)行數(shù)據(jù)恢復(fù)。
5.river
代表es的一個(gè)數(shù)據(jù)源,也是其它存儲(chǔ)方式(如:數(shù)據(jù)庫)同步數(shù)據(jù)到es的一個(gè)方法。它是以插件方式存在的一個(gè)es服務(wù),通過讀取river中的數(shù)據(jù)并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的,river這個(gè)功能將會(huì)在后面的文件中重點(diǎn)說到。
6.gateway
代表es索引的持久化存儲(chǔ)方式,es默認(rèn)是先把索引存放到內(nèi)存中,當(dāng)內(nèi)存滿了時(shí)再持久化到硬盤。當(dāng)這個(gè)es集群關(guān)閉再重新啟動(dòng)時(shí)就會(huì)從gateway中讀取索引數(shù)據(jù)。es支持多種類型的gateway,有本地文件系統(tǒng)(默認(rèn)),分布式文件系統(tǒng),Hadoop的HDFS和amazon的s3云存儲(chǔ)服務(wù)。
7.discovery.zen
代表es的自動(dòng)發(fā)現(xiàn)節(jié)點(diǎn)機(jī)制,es是一個(gè)基于p2p的系統(tǒng),它先通過廣播尋找存在的節(jié)點(diǎn),再通過多播協(xié)議來進(jìn)行節(jié)點(diǎn)之間的通信,同時(shí)也支持點(diǎn)對(duì)點(diǎn)的交互。
8.Transport
代表es內(nèi)部節(jié)點(diǎn)或集群與客戶端的交互方式,默認(rèn)內(nèi)部是使用tcp協(xié)議進(jìn)行交互,同時(shí)它支持http協(xié)議(json格式)、thrift、servlet、memcached、zeroMQ等的傳輸協(xié)議(通過插件方式集成)。
修改配置:
ela可以指定一個(gè)集群名,集群里可以配置一個(gè)Master,多個(gè)node,可以手動(dòng)配置也可以選舉產(chǎn)生。按照下面的配置,選擇一臺(tái)機(jī)器是Master,主要修改config下面的elasticsearch.yml
a.集群名稱,默認(rèn)為elasticsearch:
cluster.name: elasticsearch
b.節(jié)點(diǎn)名稱,es啟動(dòng)時(shí)會(huì)自動(dòng)創(chuàng)建節(jié)點(diǎn)名稱,但你也可進(jìn)行配置:
node.name: “node0”
c.是否作為主節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都可以被配置成為主節(jié)點(diǎn),默認(rèn)值為true:
node.master: true
d.是否存儲(chǔ)數(shù)據(jù),即存儲(chǔ)索引片段,默認(rèn)值為true:
node.data: true
master和data同時(shí)配置會(huì)產(chǎn)生一些奇異的效果:
1)當(dāng)master為false,而data為true時(shí),會(huì)對(duì)該節(jié)點(diǎn)產(chǎn)生嚴(yán)重負(fù)荷;
2)當(dāng)master為true,而data為false時(shí),該節(jié)點(diǎn)作為一個(gè)協(xié)調(diào)者;
3)當(dāng)master為false,data也為false時(shí),該節(jié)點(diǎn)就變成了一個(gè)負(fù)載均衡器。你可以通過連接http://localhost:9200/_cluster/health或者http://localhost:9200/_cluster/nodes
e.每個(gè)節(jié)點(diǎn)都可以定義一些與之關(guān)聯(lián)的通用屬性,用于后期集群進(jìn)行碎片分配時(shí)的過濾:
node.rack: rack314
f.默認(rèn)情況下,多個(gè)節(jié)點(diǎn)可以在同一個(gè)安裝路徑啟動(dòng),如果你想讓你的es只啟動(dòng)多個(gè)節(jié)點(diǎn),可以進(jìn)行如下設(shè)置:
node.max_local_storage_nodes: 3
j.設(shè)置一個(gè)索引的碎片數(shù)量,默認(rèn)值為5(5.x+版本需在創(chuàng)建索引時(shí)設(shè)置):
index.number_of_shards: 5
k.設(shè)置一個(gè)索引可被復(fù)制的數(shù)量,默認(rèn)值為1(5.x+版本需在創(chuàng)建索引時(shí)設(shè)置):
index.number_of_replicas: 1
2.6.2 內(nèi)存配置
Elasticsearch-5.0+默認(rèn)安裝后設(shè)置的內(nèi)存是2GB,對(duì)于任何一個(gè)現(xiàn)實(shí)業(yè)務(wù)來說,這個(gè)設(shè)置都太小了。如果你正在使用這個(gè)默認(rèn)堆內(nèi)存配置,你的集群配置可能會(huì)很快發(fā)生問題。
修改Elasticsearch的堆內(nèi)存(下面就說內(nèi)存好了),最簡(jiǎn)單的
Elasticsearch5.0+提供了config/jvm.options來配置jvm,如下

另一個(gè)方法就是指定ES_HEAP_SIZE環(huán)境變量。服務(wù)進(jìn)程在啟動(dòng)時(shí)候會(huì)讀取這個(gè)變量,并相應(yīng)的設(shè)置堆的大小。設(shè)置命令如下:
export ES_HEAP_SIZE=10g
此外,你也可以通過命令行參數(shù)的形式,在程序啟動(dòng)的時(shí)候把內(nèi)存大小傳遞給它:
./bin/elasticsearch -Xmx10g -Xms10g
備注:確保Xmx和Xms的大小是相同的,其目的是為了能夠在java垃圾回收機(jī)制清理完堆區(qū)后不需要重新分隔計(jì)算堆區(qū)的大小而浪費(fèi)資源,可以減輕伸縮堆大小帶來的壓力。一般來說設(shè)置ES_HEAP_SIZE環(huán)境變量,比直接寫-Xmx10g ?-Xms10g更好一點(diǎn)。
把內(nèi)存的一半給Lucene
一個(gè)常見的問題是配置一個(gè)大內(nèi)存,假設(shè)你有一個(gè)64G內(nèi)存的機(jī)器,按照正常思維思考,你可能會(huì)認(rèn)為把64G內(nèi)存都給Elasticsearch比較好,但現(xiàn)實(shí)是這樣嗎,?越大越好?
當(dāng)然,內(nèi)存對(duì)于Elasticsearch來說絕對(duì)是重要的,用于更多的內(nèi)存數(shù)據(jù)提供更快的操作,而且還有一個(gè)內(nèi)存消耗大戶-Lucene。
Lucene
的設(shè)計(jì)目的是把底層OS里的數(shù)據(jù)緩存到內(nèi)存中。Lucene的段是分別存儲(chǔ)到單個(gè)文件中的,這些文件都是不會(huì)變化的,所以很利于緩存,同時(shí)操作系統(tǒng)也會(huì)把這些段文件緩存起來,以便更快的訪問。
Lucene
的性能取決于和OS的交互,如果你把所有的內(nèi)存都分配給Elasticsearch,不留一點(diǎn)給Lucene,那你的全文檢索性能會(huì)很差的。
最后標(biāo)準(zhǔn)的建議是把50%的內(nèi)存給elasticsearch,剩下的50%也不會(huì)沒有用處的,Lucene會(huì)很快吞噬剩下的這部分內(nèi)存用于文件緩存。
不要超過32G
這里有另外一個(gè)原因不分配大內(nèi)存給Elasticsearch,事實(shí)上jvm在內(nèi)存小于32G的時(shí)候會(huì)采用一個(gè)內(nèi)存對(duì)象指針壓縮技術(shù)。
在java中,所有的對(duì)象都分配在堆上,然后有一個(gè)指針引用它。指向這些對(duì)象的指針大小通常是CPU的字長(zhǎng)的大小,不是32bit就是64bit,這取決于你的處理器,指針指向了你的值的精確位置。
對(duì)于32位系統(tǒng),你的內(nèi)存最大可使用4G。對(duì)于64位系統(tǒng)可以使用更大的內(nèi)存。但是64位的指針意味著更大的浪費(fèi),因?yàn)槟愕闹羔槺旧泶罅?。浪費(fèi)內(nèi)存不算,更糟糕的是,更大的指針在主內(nèi)存和緩存器(例如LLC, L1等)之間移動(dòng)數(shù)據(jù)的時(shí)候,會(huì)占用更多的帶寬。
Java
使用一個(gè)叫內(nèi)存指針壓縮的技術(shù)來解決這個(gè)問題。它的指針不再表示對(duì)象在內(nèi)存中的精確位置,而是表示偏移量。這意味著32位的指針可以引用40億個(gè)對(duì)象,而不是40億個(gè)字節(jié)。最終,也就是說堆內(nèi)存長(zhǎng)到32G的物理內(nèi)存,也可以用32bit的指針表示。
一旦你越過那個(gè)神奇的26-30G邊界,指針就會(huì)切回普通對(duì)象的指針,每個(gè)對(duì)象的指針都變長(zhǎng)了,就會(huì)使用更多的CPU內(nèi)存帶寬,也就是說你實(shí)際上失去了更多的內(nèi)存。事實(shí)上當(dāng)內(nèi)存到達(dá)40-50GB的時(shí)候,有效內(nèi)存才相當(dāng)于使用內(nèi)存對(duì)象指針壓縮技術(shù)時(shí)候的32G內(nèi)存。
這段描述的意思就是說:即便你有足夠的內(nèi)存,也盡量不要超過32G,因?yàn)樗速M(fèi)了內(nèi)存,降低了CPU的性能,還要讓GC應(yīng)對(duì)大內(nèi)存。
1TB內(nèi)存的機(jī)器
32GB
是ES一個(gè)內(nèi)存設(shè)置限制,那如果你的機(jī)器有很大的內(nèi)存怎么辦呢?現(xiàn)在的機(jī)器內(nèi)存普遍增長(zhǎng),你現(xiàn)在都可以看到有300-500GB內(nèi)存的機(jī)器。
首先,我們建議編碼使用這樣的大型機(jī)其次,如果你已經(jīng)有了這樣的機(jī)器,你有兩個(gè)可選項(xiàng):
????a. 你主要做全文檢索嗎?考慮給Elasticsearch 32G內(nèi)存,剩下的交給Lucene用作操作系統(tǒng)的文件系統(tǒng)緩存,所有的segment都緩存起來,會(huì)加快全文檢索。
? ? b. 你需要更多的排序和聚合?你希望更大的堆內(nèi)存。你可以考慮一臺(tái)機(jī)器上創(chuàng)建兩個(gè)或者更多ES節(jié)點(diǎn),而不要部署一個(gè)使用32+GB內(nèi)存的節(jié)點(diǎn)。仍然要 堅(jiān)持50%原則,假設(shè) 你有個(gè)機(jī)器有128G內(nèi)存,你可以創(chuàng)建兩個(gè)node,使用32G內(nèi)存。也就是說64G內(nèi)存給ES的堆內(nèi)存,剩下的64G給Lucene。
如果你選擇第二種,你需要配置cluster.routing.allocation.same_shard.host:true。這會(huì)防止同一個(gè)shard的主副本存在同一個(gè)物理機(jī)上(因?yàn)槿绻嬖谝粋€(gè)機(jī)器上,副本的高可用性就沒有了)。
2.6.3 禁用Swapping
swapping是性能的墳?zāi)?/b>
一個(gè)內(nèi)存的操作必須是快速的,而內(nèi)存交換到磁盤對(duì)服務(wù)器性能來說是致命的。?如果內(nèi)存交換到磁盤上,一個(gè)100微秒的操作可能變成10毫秒,再想想那么多10微秒的操作時(shí)延累加起來。不難看出swapping對(duì)于性能是多么可怕。
最好的辦法就是在你的操作系統(tǒng)中完全禁用swapping。這樣可以暫時(shí)禁用:
swapoff -a
為了永久禁用它,你可能需要修改/etc/fstab文件,這要參考你的操作系統(tǒng)相關(guān)文檔。
如果完全禁用swap,對(duì)你來說是不可行的。你可以降低swappiness 的值,這個(gè)值決定操作系統(tǒng)交換內(nèi)存的頻率。這可以預(yù)防正常情況下發(fā)生交換。但仍允許os在緊急情況下發(fā)生交換。
對(duì)于大部分Linux操作系統(tǒng),可以在sysctl中這樣配置:
vm.swappiness = 1
備注:swappiness設(shè)置為1比設(shè)置為0要好,因?yàn)樵谝恍﹥?nèi)核版本,swappness=0會(huì)引發(fā)OOM(內(nèi)存溢出)
最后,如果上面的方法都不能做到,你需要打開配置文件中的mlockall開關(guān),它的作用就是運(yùn)行JVM鎖住內(nèi)存,禁止OS交換出去。在elasticsearch.yml配置如下:
bootstrap.memory_lock: true
查看:curl -XGET 'http://es-master1:9200/_nodes?filter_path=**.mlockall'
五、安裝Kibana
解壓安裝,修改配置文件vi config/kibana.yml
Server.host? 默認(rèn)localhost,只能本機(jī)訪問kibana

Server.name 此kibana服務(wù)的名稱
Elasticsearch.url? es地址
啟動(dòng)kibana? bin/kibana
后臺(tái)啟動(dòng):nohup bin/kibana &
停止kibana:netstat-lntp | grep 5601?????? kill -9端口