ElasticSearch使用最佳實踐-寫入規范
1.客戶端的使用規范
1)客戶端禁止配置EsMaster節點的IP和Port:EsMaster實例為重要的管理進程,為確保ES集群穩定性,不允許配置EsMaster節點IP和Port在客戶端的IP列表中。EsMaster默認端口為24148,檢查客戶端不允許配置此端口。
2)若未規劃EsClient角色,則客戶端配置多個EsNode實例的IP和Port列表:客戶端需要配置多個EsNode實例的IP和Port列表,實現負荷分擔和負載均衡,避免單EsNode性能瓶頸。建議所有的EsNode實例的IP和Port都配置在客戶端IP列表中。各EsNode默認端口如下:
EsNode1:24100
EsNode2:24102
EsNode3:24104
EsNode4:24106
EsNode5:24108
EsNode6:24110
EsNode7:24112
EsNode8:24114
EsNode9:24116
若集群中存在以上某些EsNode角色,則根據以上端口對應關系,檢查是否配置了這些端口。若規劃了EsClient端口,則建議客戶端配置上所有EsClient的IP和Port,減輕EsNode的內存壓力。
EsClient默認端口為24118,檢查客戶端是否配置了此端口
3)在應用程序結束時需要調用Client的close()方法。任務運行過程中不要頻繁創建和關閉Client。建議一個進程或者一個線程創建一個Client。
2. 多線程并發寫入
1)使用多線程方式并發索引數據:應用程序使用多線程并發索引數據,推薦的并發線程數為主機CPU核數的1~2倍。比如32核的主機,可設置線程數為30~60個。
2)運行多個客戶端并發執行任務:運行多個客戶端并發執行索引/查詢任務,提升性能。
3. Bulk批量提交請求
1)使用批量請求,設置合理的數據條數:使用bulk命令進行批量索引數據時,每批次提交的數據大小為5~15MB;比如每條數據大小為1k,那么建議批量提交的數據條數為5000條;當前集群的最佳批量請求大小,可以從5MB開始測試,緩慢增加這個大小,直到寫入性能不能提升為止。
2)每個批量請求中只處理一個索引的數據:一個bulk請求只寫入一個索引的數據,不建議一個bulk請求同時寫入多個索引的數據,不同索引的數據分多個bulk請求提交。
4. 提升寫入速度參數設置
1)修改索引刷新時間:默認為1s,可修改為60s。
直接設置:
curl -XPUT "http://ip:httpport/index/_settings?pretty" -H 'Content-Type: application/json' -d'
{
"refresh_interval" : "60s"
}'
通過索引模板設置:
curl -XPUT --tlsv1.2 --negotiate -k -u : "https://127.0.0.1:24100/_template/template_1" -H 'Content-Type: application/json' -d'
{
"template": "index*",
"settings": {
"refresh_interval": "60s"
}
}'
其中"template": "index*"表示索引的匹配模式,表示以index開頭的索引都會通過此模板生效。
2)修改Translog策略參數:
直接設置(設置此參數時需要先關閉索引,設置成功后再打開索引,會影響業務運行,建議走變更流程):
Curl –XPUT “http://ip:httpport/index/_settings?pretty” –H ‘Content-Type: application/json' -d'
{
"translog.?durability ":"?async ",
"sync_interval": "180s",
"translog.flush_threshold_size":"5gb"
}'
通過索引模板設置:
curl -XPUT --tlsv1.2 --negotiate -k -u : "https://127.0.0.1:24100/_template/template_1" -H 'Content-Type: application/json' -d'
{
"template": "index*",
"settings": {
"index": {
"translog": {
"flush_threshold_size": "500mb",
"sync_interval": "120s",
"durability": "async"
}
}
}
}'
其中"template": "index*"表示索引的匹配模式,表示以index開頭的索引都會通過此模板生效。
3)針對于5機器節點以上,為了讓各個實例上的分片均勻分布,添加如下參數,設置每個索引在單個實例上的分片個數,如下所示為每個索引在每個實例上的分片為2個。
直接設置:
curl -XPUT 'http://http:httpport/myindex/_settings?pretty' -H 'Content-Type:application/json' -d '
{
"index.routing.allocation.total_shards_per_node":"2"
}'
通過索引模板設置:
curl -XPUT --tlsv1.2 --negotiate -k -u : "https://127.0.0.1:24100/_template/template_1" -H 'Content-Type: application/json' -d'
{
"template": "index*",
"settings": {
"index.routing.allocation.total_shards_per_node":"2"
}
}'
其中"template": "index*"表示索引的匹配模式,表示以index開頭的索引都會通過此模板生效。
5. Indexing Buffer
indexing buffer在為doc建立索引時使用,當緩沖滿時會刷入磁盤,生成一個新的 segment,這是除refresh_interval外另外一個刷新索引,生成新segment的機會。每個 shard有自己的indexing buffer,下面的關于這個buffer大小的配置需要除以這個節點上所有的shard數量。
indices.memory.index_buffer_size
默認為整個堆的10%,如30GB堆內存,約占300M,在大量的索引操作時,可以考慮適當增大,但不要超過20%。
EI企業智能 elasticsearch FusionInsight
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。