真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ES7.5下動(dòng)態(tài)擴(kuò)大索引的shard數(shù)量

在老版本的ES(例如2.3版本)中, index的shard數(shù)量定好后,就不能再修改,除非重建數(shù)據(jù)才能實(shí)現(xiàn)。

創(chuàng)新互聯(lián)是一家專注于成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),遂昌網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:遂昌等地區(qū)。遂昌做網(wǎng)站價(jià)格咨詢:18980820575

從ES6.1開始,ES 支持可以在線操作擴(kuò)大shard的數(shù)量(注意:操作期間也需要對(duì)index鎖寫)

從ES7.0開始,split時(shí)候,不再需要加參數(shù) index.number_of_routing_shards

具體參考官方文檔:

????https://www.elastic.co/guide/en/elasticsearch/reference/7.5/indices-split-index.html

????https://www.elastic.co/guide/en/elasticsearch/reference/6.1/indices-split-index.html

split的過程:

? ? 1、創(chuàng)建一個(gè)新的目標(biāo)index,其定義與源index相同,但是具有更多的primary shard。

? ? 2、將segment從源index硬鏈接到目標(biāo)index。(如果文件系統(tǒng)不支持硬鏈接,則將所有segment都復(fù)制到新索引中,這是一個(gè)非常耗時(shí)的過程。)

? ? 3、創(chuàng)建低級(jí)文件后,再次對(duì)所有文檔進(jìn)行哈希處理,以刪除屬于不同shard的documents

? ? 4、恢復(fù)目標(biāo)索引,就像它是剛剛重新打開的封閉索引一樣。

為啥ES不支持增量resharding?

? ? 從N個(gè)分片到N + 1個(gè)分片。增量重新分片確實(shí)是許多鍵值存儲(chǔ)支持的功能。僅添加一個(gè)新的分片并將新的數(shù)據(jù)推入該新的分片是不可行的:這可能是一個(gè)索引瓶頸,并根據(jù)給定的_id來確定文檔所屬的分片,這對(duì)于獲取,刪除和更新請(qǐng)求是必需的,會(huì)變得很復(fù)雜。這意味著我們需要使用其他哈希方案重新平衡現(xiàn)有數(shù)據(jù)。

? ? 鍵值存儲(chǔ)有效執(zhí)行此操作的最常見方式是使用一致的哈希。當(dāng)分片的數(shù)量從N增加到N + 1時(shí),一致的哈希僅需要重定位鍵的1 / N。但是,Elasticsearch的存儲(chǔ)單位(碎片)是Lucene索引。由于它們以搜索為導(dǎo)向的數(shù)據(jù)結(jié)構(gòu),僅占Lucene索引的很大一部分,即僅占5%的文檔,將其刪除并在另一個(gè)分片上建立索引通常比鍵值存儲(chǔ)要高得多的成本。如上節(jié)所述,當(dāng)通過增加乘數(shù)來增加分片數(shù)量時(shí),此成本保持合理:這允許Elasticsearch在本地執(zhí)行拆分,這又允許在索引級(jí)別執(zhí)行拆分,而不是為需要重新索引的文檔重新編制索引移動(dòng),以及使用硬鏈接進(jìn)行有效的文件復(fù)制。

? ? 對(duì)于僅追加數(shù)據(jù),可以通過創(chuàng)建新索引并將新數(shù)據(jù)推送到其中,同時(shí)添加一個(gè)別名來覆蓋讀取操作的新舊索引,從而獲得更大的靈活性。假設(shè)舊索引和新索引分別具有M和N個(gè)分片,與搜索具有M + N個(gè)分片的索引相比,這沒有開銷。

索引能進(jìn)行split的前提條件:

? ? 1、目標(biāo)索引不能存在。

? ? 2、源索引必須比目標(biāo)索引具有更少的primary shard。

? ? 3、目標(biāo)索引中主shard的數(shù)量必須是源索引中主shard的數(shù)量的倍數(shù)。

? ? 4、處理拆分過程的節(jié)點(diǎn)必須具有足夠的可用磁盤空間,以容納現(xiàn)有索引的第二個(gè)副本。

下面是具體的實(shí)驗(yàn)部分:

tips:實(shí)驗(yàn)機(jī)器有限,索引的replica都設(shè)置為0,生產(chǎn)上至少replica>=1

# 創(chuàng)建一個(gè)索引,2個(gè)主shard,沒有副本

curl?-s?-X?PUT?"http://1.1.1.1:9200/twitter?pretty"?-H?'Content-Type:?application/json'?-d'
{
??"settings":?{
????"index.number_of_shards":?2,
????"index.number_of_replicas":?0
??},
????"aliases":?{
????"my_search_indices":?{}
??}
}'

# 寫入幾條測(cè)試數(shù)據(jù)

curl?-s?-X?PUT?"http://1.1.1.1:9200/my_search_indices/_doc/11?pretty"?-H?'Content-Type:?application/json'?-d?'{
??"id":?11,
??"name":"lee",
??"age":"23"
}'
curl?-s?-X?PUT?"http://1.1.1.1:9200/my_search_indices/_doc/22?pretty"?-H?'Content-Type:?application/json'?-d?'{
??"id":?22,
??"name":"amd",
??"age":"22"
}'

# 查詢數(shù)據(jù)

curl?-s?-XGET?"http://1.1.1.1:9200/my_search_indices/_search"?|?jq?.

# 對(duì)索引鎖寫,以便下面執(zhí)行split操作

curl?-s?-X?PUT?"http://1.1.1.1:9200/twitter/_settings?pretty"?-H?'Content-Type:?application/json'?-d?'{
??"settings":?{
????"index.blocks.write":?true
??}
}'

# 寫數(shù)據(jù)測(cè)試,確保鎖寫生效

curl?-s?-X?PUT?"http://1.1.1.1:9200/twitter/_doc/33?pretty"?-H?'Content-Type:?application/json'?-d?'{
??"id":?33,
??"name":"amd",
??"age":"33"
}'

# 取消 twitter 索引的alias

curl?-s?-X?POST?"http://1.1.1.1:9200/_aliases?pretty"?-H?'Content-Type:?application/json'?-d?'{
????"actions"?:?[
????????{?"remove"?:?{?"index"?:?"twitter",?"alias"?:?"my_search_indices"?}?}
????]
}'

# 開始執(zhí)行 split 切分索引的操作,調(diào)整后索引名稱為new_twitter,且主shard數(shù)量為8

curl?-s?-X?POST?"http://1.1.1.1:9200/twitter/_split/new_twitter?pretty"?-H?'Content-Type:?application/json'?-d?'{
??"settings":?{
????"index.number_of_shards":?8,
????"index.number_of_replicas":?0
??}
}'

# 對(duì)新的index添加alias?

curl?-s?-X?POST?"http://1.1.1.1:9200/_aliases?pretty"?-H?'Content-Type:?application/json'?-d?'{
????"actions"?:?[
????????{?"add"?:?{?"index"?:?"new_twitter",?"alias"?:?"my_search_indices"?}?}
????]
}'

結(jié)果:

{

? "acknowledged" : true,

? "shards_acknowledged" : true,

? "index" : "new_twitter"

}

補(bǔ)充:

? ? 查看split的進(jìn)度,可以使用 _cat/recovery 這個(gè)api, 或者在 cerebro 界面上查看。

# 查看新索引的數(shù)據(jù),能正常查看

curl?-s?-XGET?"http://1.1.1.1:9200/my_search_indices/_search"?|?jq?.

# 對(duì)新索引寫數(shù)據(jù)測(cè)試,可以看到失敗的

curl?-s?-X?PUT?"1.1.1.1:9200/my_search_indices/_doc/33?pretty"?-H?'Content-Type:?application/json'?-d?'{
??"id":?33,
??"name":"amd",
??"age":"33"
}'

# 打開索引的寫功能

curl?-s?-X?PUT?"1.1.1.1:9200/my_search_indices/_settings?pretty"?-H?'Content-Type:?application/json'?-d?'{
??"settings":?{
????"index.blocks.write":?false?
??}
}'

# 再次對(duì)新索引寫數(shù)據(jù)測(cè)試,可以看到此時(shí),寫入是成功的

curl?-s?-X?PUT?"1.1.1.1:9200/my_search_indices/_doc/33?pretty"?-H?'Content-Type:?application/json'?-d?'{
??"id":?33,
??"name":"amd",
??"age":"33"
}'

curl?-s?-X?PUT?"1.1.1.1:9200/my_search_indices/_doc/44?pretty"?-H?'Content-Type:?application/json'?-d?'{
??"id":?44,
??"name":"intel",
??"age":"4"
}'

# 此時(shí),老的那個(gè)索引還是只讀的,我們確保新索引OK后,就可以考慮關(guān)閉或者刪除老的 twitter索引了。

貼一張 生產(chǎn)環(huán)境執(zhí)行后的index的截圖,可以看到新的index的每個(gè)shard體積只有老index的一半,這樣也就分?jǐn)偭薸ndex的壓力:

ES7.5 下動(dòng)態(tài)擴(kuò)大索引的shard數(shù)量


本文題目:ES7.5下動(dòng)態(tài)擴(kuò)大索引的shard數(shù)量
文章地址:http://weahome.cn/article/jpidsd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部