ElasticSearch使用時剩愧,一開始因為數(shù)據(jù)量比較小冬筒,使用都比較隨意瞪慧,也沒有在意很多參數(shù)髓考,只要實現(xiàn)高可用就可以了,但是隨著數(shù)據(jù)量的不斷增大弃酌,過程中遇到了一系列的問題
遇到的問題
- 創(chuàng)建索引太慢
Elasticsearch創(chuàng)建分片的速度會隨著集群內(nèi)分片數(shù)的增加而變慢氨菇。以ES 5.5.2版本、3節(jié)點集群為例妓湘,在默認(rèn)配置下查蓉,當(dāng)集群分片數(shù)超過1w時,創(chuàng)建index的耗時一般在幾十秒甚至以上榜贴。
ElasticSearch默認(rèn)是5個分片豌研,1個副本,相當(dāng)于每創(chuàng)建一個索引就會產(chǎn)生10個分片唬党。一開始沒有問題鹃共,后來索引數(shù)目達到了4000左右(其中大部分?jǐn)?shù)據(jù)量都很小,幾十M而已)驶拱,也就是有超過1萬的分片存在霜浴,所有節(jié)點都需要維護分片和節(jié)點的關(guān)系,而且為了保證一致性蓝纲,都是單線程更新坷随,所以效率很低房铭。
- 重啟ElasticSearch節(jié)點出現(xiàn)大量未分配分片
當(dāng)一個節(jié)點不可達后,為了盡快恢復(fù)集群的高可用特性温眉,ElasticSearch會盡快地重新調(diào)整分片缸匪,沒有副本的,也會全量復(fù)制分片类溢。當(dāng)節(jié)點恢復(fù)后凌蔬,集群又會再次重新調(diào)整分片,達到負(fù)載均衡的目的
修改延遲分配時間為5分鐘
PUT _all/_settings
{
"settings": {
"index.unassigned.node_left.delayed_timeout": "5m"
}
}
- 關(guān)閉一個節(jié)點后闯冷,集群狀態(tài)變成red
當(dāng)時有部分索引的主分片一直沒有分配砂心,導(dǎo)致集群處于red狀態(tài)。當(dāng)時沒有仔細分析原因蛇耀,只是快速地把那部分索引進行重建處理(從其他數(shù)據(jù)源導(dǎo)入)辩诞。當(dāng)時還不知道怎么查看未分配的原因,其實可以查看分片詳情命令纺涤,看到未分配的原因
#分片詳情命令译暂,查看未分配的原因
_cat/shards?h=index,shard,prirep,state,unassigned.reason&v
采用的措施有:手工分配,但是系統(tǒng)表示不支持命令
allocate
最佳實踐
- 索引很小撩炊,shard設(shè)置為1外永,replica也是1就可以了
- ElasticSearch推薦的最大JVM堆空間是30~32G
- 一般一個分片不要超過50GB
- 索引穩(wěn)定后,可以使用forcemerge拧咳,提高檢索效率
- shrink index API