ES容易忽視的叢集配置
一 前言
目前生產系統由Solr轉ES了,在這邊就記錄下在使用過程中容易忽視的配置吧,其實我也是才用,如果有什麼錯誤的地方,多指正。
二、配置
1、ES的段合併是限速設定
預設是20MB/s ,如果是SSD磁碟建議增大:
```
PUT /_cluster/settings
{
"persistent" : {
"indices.store.throttle.max_bytes_per_sec" : "100mb"
}
}
```
如果臨時匯入資料先可以不要合併,再開啟的時候合併:
```
PUT /_cluster/settings
{
"transient" : {
"indices.store.throttle.type" : "none"
}
}
```
匯入資料完成none改成merge。
2、fieldData 資料快取限制
ES配置中提到的FieldData指的是欄位資料。當排序(sort),統計(aggs)時,ES把涉及到的欄位資料全部讀取到記憶體(JVM Heap)中進行操作。相當於進行了資料快取,提升查詢效率,而且預設是不清除的,容易造成OOM。
![網上借來圖](https://upload-images.jianshu.io/upload_images/1737506-22b96a5bd4aec67d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
參考網上說明:
***上圖是ES的JVM Heap中的狀況,可以看到有兩條界限:驅逐線 和 斷路器。當快取資料到達驅逐線時,會自動驅逐掉部分資料,把快取保持在安全的範圍內。當用戶準備執行某個查詢操作時,斷路器就起作用了,快取資料+當前查詢需要快取的資料量到達斷路器限制時,會返回Data too large錯誤,阻止使用者進行這個查詢操作。 ***
```
PUT _cluster/settings
{
"persistent" :
{
"indices.breaker.fielddata.limit":"50%",
"indices.breaker.request.limit":"40%",
"indices.breaker.total.limit":"70%"
}
}
```
###3、去掉操作索引匹配符號
```
PUT /_cluster/settings
{
"persistent" : {
"action.destructive_requires_name":true
}
}
```
禁止使用萬用字元,禁止的目的是為了誤刪除。
預設情況下,可以通過以下方法刪除所有的索引:
```
curl -XDELETE http://localhost:9200/_all
curl -XDELETE http://localhost:9200/*
```
_all ,* 通配所有的索引 。
如果需要一次刪除多個索引 可以通過將兩個索引名都寫進去,中間用逗號分隔。
比如:
``` curl -XDELETE http://localhost:9200/twitter,my_index ```
3其他說明
ES關閉一個索引的速度非常快,嘗試過關閉一個1T大小的索引,耗時只要十幾秒,開啟也差不多的時間,只是在開啟的時候回存在著叢集瞬間變紅,因為分片的分配需要過程。