亞寵展、全球?qū)櫸锂a(chǎn)業(yè)風向標——亞洲寵物展覽會深度解析
1087
2022-05-28
大多數(shù)操作系統(tǒng)都盡可能多地為文件系統(tǒng)緩存使用內(nèi)存,并切換出未使用的應用程序內(nèi)存。這可能導致部分JVM堆被交換到磁盤上。
對于性能和節(jié)點的穩(wěn)定性來說,這種交換是非常糟糕的,應該不惜一切代價避免。它可能導致垃圾收集持續(xù)幾分鐘而不是幾毫秒,這可能導致節(jié)點響應緩慢,甚至脫離集群。
Linux/Unix系統(tǒng)中使用mlockall在RAM中鎖定進程的地址空間,阻止Elasticsearch內(nèi)存被交換出去,從而實現(xiàn)禁用Swapping。
按以下步驟啟用“bootstrap.memory_lock”參數(shù)。
1.以管理員帳號登錄FusionInsight Manager界面,選擇“集群 > 待操作集群的名稱 > 服務 > Elasticsearch > 配置 > 全部配置 > 自定義”。
2.添加新的參數(shù)“bootstrap.memory_lock”,設置值為“true”,單擊“保存”按鈕,保存配置并重啟Elasticsearch服務。
3.使用root用戶登錄任意Elasticsearch數(shù)據(jù)節(jié)點,執(zhí)行如下命令驗證是否修改成功。執(zhí)行命令后結(jié)果顯示包含“true”則表示修改成功。
curl -XGET "http://ip:httpport/_nodes?filter_path=**.mlockall"
針對于5個以上機器節(jié)點,為了讓各個實例上的分片均勻分布,添加如下參數(shù),設置每個索引在單個實例上的分片個數(shù),如下所示為每個索引在每個實例上的分片為2個。
curl -XPUT "http://ip:httpport/myindex/_settings?pretty' -H 'Content-Type:application/json' -d ' { "index.routing.allocation.total_shards_per_node":"2" }'
默認“index.refresh_interval”為“1s”,即每秒都會強制生成1個新的segments文件,增大索引刷新時間,可以生成更大的segments文件,有效降低IO并減少segments merge的壓力,該配置項可以建索引時指定(或者配置到template里去)。
如果只是單純導入數(shù)據(jù),不需要做實時查詢,可以把refresh禁用(即設置index.refresh_interval為-1),并設置“index.number_of_replicas”為“0”,當然這樣設置會有數(shù)據(jù)丟失風險。等到數(shù)據(jù)完成導入后,再把參數(shù)設置為合適的值。
命令為單索引下操作如下所示,同時也支持多索引(索引名按逗號分隔)和全索引(用*通配符)操作。
curl -XPUT "http://ip:httpport/myindex/_settings" -H 'Content-Type: application/json' -d' { "number_of_replicas": 0, "refresh_interval": "180s" }'
Elasticsearch寫入數(shù)據(jù)時,refresh刷新會生成1個新的segment,segments會按照一定的策略進行索引段合并merge。merge的頻率對寫入和查詢的速度都有一定的影響,如果merge頻率比較快,會占用較多的IO,影響寫入的速度,但同時segment個數(shù)也會比較少,可以提高查詢速度。所以merge頻率的設定需要根據(jù)具體業(yè)務去權(quán)衡,同時保證寫入和查詢都相對快速。Elasticsearch默認使用TieredMergePolicy,可以通過參數(shù)去控制索引段合并merge的頻率:
1.參數(shù)“index.merge.policy.floor_segment”,Elasticsearch避免產(chǎn)生很小的segment,小于這個閾值的所有的非常小的segment都會merge直到達到這個floor的size,默認是2MB。
2.參數(shù)“index.merge.policy.max_merge_at_once”,一次最多只merge多少個segments,默認是10。
3.參數(shù)“index.merge.policy.max_merged_segment”,超過多大size的segment不會再做merge,默認是5GB。
4.參數(shù)“index.merge.policy.segment_per_tier”默認為10,表示每個tier允許的segment個數(shù),注意這個值要大于等于“index.merge.policy.max_merge_at_once”值,否則這個值會先于最大可操作數(shù)到達,就會立刻做merge,這樣會造成頻繁merge。
5.參數(shù)“ index.merge.scheduler.max_thread_count ”,單個shard上可能同時合并的最大線程數(shù)。默認會啟動Math.max(1, Math.min(4, Runtime.getRuntime().availableProcessors() / 2))個線程進行merge操作,適用于SSD固態(tài)硬盤。但是如果硬盤是機械硬盤,很容易出現(xiàn)IO阻塞,將線程數(shù)設置為1。
一般情況下,通過調(diào)節(jié)參數(shù)“index.merge.policy.max_merge_at_once”和“index.merge.policy.segment_per_tier”去控制merge的頻率。
image.png
修改參數(shù)命令如下示例:
curl -XPUT "http://ip:httpport/myindex-001/_settings?pretty" -H 'Content-Type: application/json' -d' { "merge":{ "scheduler":{ "max_thread_count" : "1" }, "policy":{ "segments_per_tier" : "20", "max_merge_at_once": "20", "floor_segment" : "2m", "max_merged_segment" : "5g" } } }'
Elasticsearch 任務調(diào)度
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。