在老版本的ES(例如2.3版本)中, index的shard數(shù)量定好后,就不能再修改,除非重建數(shù)據(jù)才能實(shí)現(xiàn)。
創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括樟樹網(wǎng)站建設(shè)、樟樹網(wǎng)站制作、樟樹網(wǎng)頁(yè)制作以及樟樹網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,樟樹網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到樟樹省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!從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的過(guò)程:
1、創(chuàng)建一個(gè)新的目標(biāo)index,其定義與源index相同,但是具有更多的primary shard。
2、將segment從源index硬鏈接到目標(biāo)index。(如果文件系統(tǒng)不支持硬鏈接,則將所有segment都復(fù)制到新索引中,這是一個(gè)非常耗時(shí)的過(guò)程。)
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來(lái)確定文檔所屬的分片,這對(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)通過(guò)增加乘數(shù)來(lái)增加分片數(shù)量時(shí),此成本保持合理:這允許Elasticsearch在本地執(zhí)行拆分,這又允許在索引級(jí)別執(zhí)行拆分,而不是為需要重新索引的文檔重新編制索引移動(dòng),以及使用硬鏈接進(jìn)行有效的文件復(fù)制。
對(duì)于僅追加數(shù)據(jù),可以通過(guò)創(chuàng)建新索引并將新數(shù)據(jù)推送到其中,同時(shí)添加一個(gè)別名來(lái)覆蓋讀取操作的新舊索引,從而獲得更大的靈活性。假設(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、處理拆分過(guò)程的節(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的壓力:

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
本文題目:ES7.5下動(dòng)態(tài)擴(kuò)大索引的shard數(shù)量-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://chinadenli.net/article38/ceeisp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、軟件開發(fā)、企業(yè)網(wǎng)站制作、面包屑導(dǎo)航、網(wǎng)站制作、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容