国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

ES shards分片管理

IT那活兒 / 2109人閱讀
ES shards分片管理

點擊上方“IT那活兒”,關注后了解更多內容,不管IT什么活兒,干就完了!!!




基本概念



分片(shard)-- 分片是單個Lucene實例,這是Elasticsearch管理的比較底層的功能。一個索引可以存儲很大的數據,這些空間可能超過一個節點的物理存儲限制。
為了解決這一問題,Elasticsearch將索引分解成多個分片。每個分片是一個全功能的、獨立的單元,可以托管在集群中的任何數據節點。
主分片(primary shard)-- 每個文檔都存儲在一個分片中,當你存儲一個文檔的時候,系統會首先存儲在主分片中,然后會復制導不同的副本中。默認情況下,一個索引有5個主分片。可以事先定制分片數量,當分片一旦建立,則分片的數據不能修改。
副本分片(replica shard)-- 每一給分片有零個或多個副本。副本主要是主分片的復制,其中有兩個目的:
  • 增加高可用性:當主分片故障的時候,可以從副本分片中選擇一個作為主分片。

  • 提高性能:當查詢的時候可以到主分片或者副本分片中進行查詢,提高查詢速度。

    默認情況下,一個主分片配有一個副本,但副本的數量可以在后面動態的配置增加。副本分片必須部署在不同的節點上,不能部署在和主分片相同的節點上,這個是由Elasticsearch自動控制,并且副本不要和主分片部署在同一主機上,否則在極端情況下會存在索引數據丟失的情況,這個是由Elasticsearch參數來控制的(cluster.routing.allocation.same_shard.host: true)。




分片管理官方建議



1. 分片大小在 10GB 到 50GB 之間。
每個索引和每個分片都需要一些內存和 CPU 資源。在大多數情況下,一小組大分片比許多小分片使用更少的資源。
較大的分片在失敗后需要更長的時間才能恢復。當一個節點發生故障時,Elasticsearch 會在數據層的剩余節點之間重新平衡該節點的分片。
此恢復過程通常涉及通過網絡復制分片內容,因此 100GB 分片的恢復時間是 50GB 分片的兩倍。相比之下,小分片會帶來更多的開銷并且搜索效率較低。搜索 50 個 1GB 分片將比搜索包含相同數據的單個 50GB 分片占用更多的資源。
分片大小沒有硬性限制,但經驗表明 10GB 到 50GB 之間的分片通常適用于日志和時間序列數據。根據實際的網絡和用例,可能能夠使用更大的分片。
2. 每 GB 堆內存 20 個或更少的分片。
數據節點可以容納的分片數量與節點的堆內存成正比。例如,具有 30GB 堆內存的節點最多應該有 600 個分片。分片數越低于此限制越好。如果發現數據節點超過每 GB 20 個分片,請考慮添加另一個節點。
3. 分配管理小結
3.1 避免使用非常大的分片,因為這會對群集從故障中恢復的能力產生負面影響。對分片的大小沒有固定的限制,但是通常情況下很多場景限制在 50GB 的分片大小以內。
3.2 分片數不是越多越好,每個分片都需要占用資源,數據量小的索引分配盡量少的分片。
3.3 如果擔心數據的快速增長, 建議根據這條限制: ElasticSearch推薦的最大JVM堆空間 是 30~32G, 所以把分片最大容量限制為 30GB, 然后再對分片數量做合理估算。例如, 如果的單個索引數據能達到 200GB, 則最多分配7到8個分片,一個數據節點可承載600個分片。
3.4 當數據量可以合理預測并且變化緩慢時,具有固定時間間隔的基于時間的索引很有效。




調整分片大小



1. 在非高峰時段強制合并
如果不再寫入索引,則可以使用強制合并 API將較小的段合并為較大的段。這可以減少分片開銷并提高搜索速度。
但是,強制合并是資源密集型的。所以最好在非高峰時間運行強制合并
強制合并指定索引
POST index_name/_forcemerge

強制合并多個索引
POST / index_name1,index_name2 / _forcemerge

強制合并所有索引
POST /_forcemerge
*在完成寫入索引后才應針對索引調用強制合并。
強制合并會導致生成非常大 (>5GB) 的段,如果您繼續寫入這樣的索引,那么自動合并策略將永遠不會考慮這些段以進行未來的合并,直到它們主要由已刪除的文檔組成。這可能會導致非常大的段保留在索引中,從而導致磁盤使用量增加和搜索性能變差。
2. 將現有索引縮小到更少的分片
如果不再寫入索引,則可以使用收縮索引 API來減少其分片數。
2.1 先決條件
如果啟用了 Elasticsearch 安全功能,則您必須具有索引的manage 索引權限。
在縮小索引之前:
*索引必須是只讀的。
*索引的所有主分片必須駐留在同一節點上。
*索引必須具有green 健康狀態。
收縮索引 API 允許將現有索引收縮為具有更少主分片的新索引。目標索引中請求的主分片數必須是源索引中分片數的一個因子。
例如,具有 8主分片的索引可以縮小為4,2或者1主分片或具有15主分片的索引可以縮小為5,3或1。如果索引中的分片數量是素數,則只能將其縮小為單個主分片。在收縮之前,索引中每個分片的(主或副本)副本必須存在于同一節點上。建議收縮前關閉副本,收縮完成后再開啟副本,提高收縮速率。
例子:
原索引test_20220125,5個主分片,一個副本,分片分布在es04和es03節點。
關閉索引test_20220125副本,設置索引為只讀,將分片分配到es03節點。
curl -H "Content-Type: application/json" -XPUT -u elastic:qwer123 -s http://***.***.43.138:9200/test_20220125/_settings -d 
{
"settings": {
"index.number_of_replicas": 0,
"index.routing.allocation.require._name": "es03",
"index.blocks.write": true
}
}
2.2 收縮的工作原理
收縮操作:
1)創建一個與源索引具有相同定義但主分片數量較少的新目標索引。
2)將源索引中的段硬鏈接到目標索引。

如果文件系統不支持硬鏈接,那么所有段都被復制到新索引中,這是一個更耗時的過程。另外,如果使用多個數據路徑,不同數據路徑上的分片需要完整的段副本文件,如果它們不在同一個磁盤上,因為硬鏈接不能跨磁盤工作。

3)恢復目標索引,就好像它是剛剛重新打開的已關閉索引一樣。
例子:
將索引test_20220125收縮成索引test_20220208,因原索引主分片數為5,所以目標索引主分片只能設置為1,并開啟目標索引副本運行讀寫。
curl -H "Content-Type: application/json" -XPOST -u elastic:qwer123 -s http://***.***.43.138:9200/test_20220125/_shrink/test_20220208 -d
{
"settings": {
"index.routing.allocation.require._name": null,
"index.blocks.write": null,
"index.number_of_replicas": 1,
"index.number_of_shards": 1,
"index.codec": "best_compression"
}
}

參數best_compression僅在對索引進行新寫入時才會生效,例如在將分片強制合并到單個段時。

a. 監控收縮過程

_cat recovery 可以使用API監控收縮過程,或者通過將 參數設置為 ,使用cluster healthAPI等待所有主分片分配完畢 。
wait_for_statusyellow_shrink一旦目標索引被添加到集群狀態,API 就會在分配任何分片之前返回。此時,所有分片都處于狀態unassigned。如果出于任何原因,無法在收縮節點上分配目標索引,則其主分片將保留 unassigned,直到可以在該節點上分配為止。
分配主分片后,它會移動到 state initializing,然后收縮過程開始。收縮操作完成后,分片將變為active. 此時,Elasticsearch 將嘗試分配任何副本,并可能決定將主分片重新定位到另一個節點。
(測試環境索引數據量小,收縮速度很快,并未監測到這個數據)

b. 刪除原索引


curl  -XDELETE -u elastic:qwer123 -s http://***.***.43.138:9200/test_20220125?pretty





合并較小索引




使用reindex API將具有相似映射的索引組合成一個大索引。對于時間序列數據,您可以將較短時間段的索引重新索引為涵蓋較長時間段的新索引。
例如,可以將2月的每日索引重新new_index_20220208_1和new_index_20220208_2編入每月new_index_20220208索引。重新索引后,刪除原索引。
原索引new_index_20220208_1和new_index_20220208_2信息。
將索引new_index_20220208_1和new_index_20220208_2合并為new_index_20220208。
curl -H "Content-Type: application/json" -XPOST -u elastic:qwer123 -s http://***.***.43.139:9200/_reindex -d
{
"source": {
"index": "new_index_20220208_*"
},
"dest": {
"index": "new_index_20220208"
}
}

刪除原索引new_index_20220208_1和new_index_20220208_2。
curl  -XDELETE -u elastic:qwer123 -s http://***.***.43.138:9200/new_index_20220208_1?pretty

curl  -XDELETE -u elastic:qwer123 -s http://***.***.43.138:9200/new_index_20220208_2?pretty




設置集群最大分片數大小




this action would add [x] total shards, but this cluster currently has [y]/[z] maximum shards open;
此錯誤表示添加索引操作將超出集群最大分片數限制。
可以通過參數cluster.max_shards_per_node調整集群最大開放分片數。
最大分片數=cluster.max_shards_per_node*數據節點數。
curl -H "Content-Type: application/json" -XPUT -u elastic:qwer123 -s http://***.***.43.139:9200/_cluster/settings -d
{
"persistent" : {
"cluster.max_shards_per_node": 1200
}
}





本文作者:劉能

本文來源:IT那活兒(上海新炬王翦團隊)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/129637.html

相關文章

  • ES分布式架構及底層原理

    摘要:分布式架構原理設計的理念就是分布式搜索引擎,底層實現還是基于的,核心思想是在多態機器上啟動多個進程實例,組成一個集群。 es分布式架構原理 elasticsearch設計的理念就是分布式搜索引擎,底層實現還是基于Lucene的,核心思想是在多態機器上啟動多個es進程實例,組成一個es集群。一下是es的幾個概念: 接近實時es是一個接近實時的搜索平臺,這就意味著,從索引一個文檔直到文檔...

    Ocean 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<