配置高性能Elasticsearch集群的9個(gè)小貼士
規(guī)劃索引捺球、分片 以及集群增長情況
-
在配置前了解集群的拓?fù)浣Y(jié)構(gòu)
通過獨(dú)立的master節(jié)點(diǎn)和data節(jié)點(diǎn)來運(yùn)行ES,為索引和搜索使用單獨(dú)的ES client節(jié)點(diǎn),這將減輕data節(jié)點(diǎn)的一些負(fù)載氮兵。Master node: node.master:true node.data:false Data node: node.master:false node.data:true Client node: node.master:false node.data:false
內(nèi)存設(shè)置
ES的mlockall屬性允許ES節(jié)點(diǎn)不交換內(nèi)存
```
bootstrap.mlockall: true
```
- discovery.zen屬性控制ElasticSearch的發(fā)現(xiàn)協(xié)議
從2.0開始往后服務(wù)發(fā)現(xiàn)就僅支持單播了,只需要找到集群中的一個(gè)節(jié)點(diǎn)就能將該節(jié)點(diǎn)加入集群
當(dāng)心
Delete _all
設(shè)置不允許刪除索引時(shí)的模糊匹配
action.destructive_requires_name: true
使用
doc_values
(官方文檔里面沒看到過)集群配額類屬性設(shè)置
cluster.routing.allocation.cluster_concurrent_rebalance
: 設(shè)置允許并發(fā)再平衡的分片數(shù)量絮姆。默認(rèn)值是2秩霍,表示任意時(shí)刻只允許同時(shí)移動(dòng)2個(gè)分片铃绒。最好將該屬性設(shè)置得較小,以便壓制分片再平衡颠悬,使其不影響索引赔癌。
cluster.routing.allocation.disk.threshold_enabled
: 默認(rèn)值true
。表示在分配分片到一個(gè)節(jié)點(diǎn)時(shí)將會(huì)把可用的磁盤空間算入配額內(nèi)峡谊。Recovery屬性允許快速重啟(這個(gè)配置比較復(fù)雜)
線程池屬性防止數(shù)據(jù)丟失(這個(gè)可以以后再研究)
發(fā)現(xiàn)策略
- 主要的API(索引、刪除濒析、搜索)不需要和主節(jié)點(diǎn)通信啥纸,主節(jié)點(diǎn)的任務(wù)是維護(hù)整個(gè)集群的狀態(tài),如果節(jié)點(diǎn)加入或者離開集群斯棒,主節(jié)點(diǎn)也要重新分配分片名船。集群狀態(tài)改變旨怠,新狀態(tài)也會(huì)被其他節(jié)點(diǎn)獲知(具體的方式通過實(shí)際的發(fā)現(xiàn)機(jī)制)
zen 方式發(fā)現(xiàn)
- 單播發(fā)現(xiàn),由其他的一些模塊集成迷扇,例如爽哎,節(jié)點(diǎn)間所有的通信使用tansport模塊。
- zen discovery分成了幾個(gè)子模塊
- ping: 節(jié)點(diǎn)通過這個(gè)過程找到其他節(jié)點(diǎn)
- unicast:
discovery.zen.ping.unicast.hosts discovery.zen.ping.unicast.hosts.resolve_timeout
主節(jié)點(diǎn)競選
在ping過程中厨内,一個(gè)主節(jié)點(diǎn)會(huì)被自動(dòng)地選舉或者加入渺贤。discovery.zen.ping_timeout
設(shè)置時(shí)長,默認(rèn)3s
瞭亮。discovery.zen.join_timeout
固棚,節(jié)點(diǎn)加入時(shí)發(fā)送給主節(jié)點(diǎn)的request時(shí)長,默認(rèn)是3s*20
厂汗。
在競選主節(jié)點(diǎn)時(shí)呜师,discovery.zen.master_election.ignore_non_master_pings
值為true
時(shí),data node
或者client node
發(fā)送的ping
將被忽略趟紊,默認(rèn)值為false
。
discovery.zen.minimum_master_nodes
設(shè)置為master_eligible_nodes / 2) + 1
戴差。最好不要設(shè)置master_eligible_nodes
(node.master: true
)的個(gè)數(shù)為2铛嘱,因?yàn)榇藭r(shí)discovery.zen.minimum_master_nodes
的值為2,任意一個(gè)主節(jié)點(diǎn)丟失將會(huì)造成集群不可用球匕。
故障檢測
- 主節(jié)點(diǎn)
ping
其他節(jié)點(diǎn)帖烘,看他們是否存活 - 每一個(gè)節(jié)點(diǎn)
ping
主節(jié)點(diǎn),報(bào)告它還存活或者需要競選主節(jié)點(diǎn)
discovery.zen.fd.ping_interval: 節(jié)點(diǎn)被ping的時(shí)間間隔照卦,1s
discovery.zen.fd.ping_timeout: 等待ping response的時(shí)間乡摹,默認(rèn)30s
discovery.zen.fd.ping_retries: timeout/fail 重ping的次數(shù)聪廉, 默認(rèn)3