背景: 公司項(xiàng)目生產(chǎn)環(huán)境的ES集群索引的初始分片創(chuàng)建時沒有設(shè)置,默認(rèn)為5個分片,一個副本。生產(chǎn)環(huán)境數(shù)據(jù)量激增,需要橫向擴(kuò)展,分片太少而無法橫向擴(kuò)展(ES的分片為最小邏輯單位,一個分片只能存在于一臺物理機(jī),一臺物理機(jī)可以有多個分片)。由于ES2.2.1版本尚未支持分片的修改,所以需要重新建立索引(加大分片數(shù)),并將原有索引備份過來。
考慮方案:
1. 運(yùn)用官方提供的API snapshot and restore,官方文檔輕描淡寫,但建立snapshot時需要利用分布式存儲。優(yōu)點(diǎn)是官方api比較靠譜。 網(wǎng)上有利用fuse和sshfs 在集群機(jī)器掛載共享目錄的方式,但還是生產(chǎn)環(huán)境太爛,無外網(wǎng),centos yum 用不了,單獨(dú)安裝軟件還需要處理復(fù)雜的包依賴。。。??傊欢褑栴}的情況下決定放棄這個方法。
github上面的開源elasticsearch 插件,Knapsack 。優(yōu)點(diǎn)是簡單已用,不需要分布式存儲,缺點(diǎn)是非官方(經(jīng)過實(shí)驗(yàn)可用)。目前只支持到ES的2.3.4版本。Knapsack的github地址:https://github.com/jprante/elasticsearch-knapsack
下面對索引遷移的過程做了一下整理:
(1) 將原有索引進(jìn)行備份,注意由于需要將數(shù)據(jù)導(dǎo)入新的索引,所以需要導(dǎo)出的時候就將索引改名。
curl?-XPOST?'localhost:9200/vehicle/data/_export?map=\{"vehicle":"vehicle_new"\}'
文件超大的時候, 需要將文件分塊:
curl -XPOST 'localhost:9200/ehlindex/_export?map=\{"ehlindex":"ehlindex_new"\}&archivepath=/data1/elasticsearch/logs/ehlindex.bulk&bytes=10g'
(2) 新建索引
curl -XPOST 'localhost:9200/vehicle_new' ?-d @settings.json
settings.json文件內(nèi)容:
{
"settings": {
"number_of_shards" : 20,//分片
"number_of_replicas" : 1 //副本
}
}
(3) 新建類型,設(shè)置類型mapping
curl -XPOST 'localhost:9200/vehicle_new/_mapping/data' -d ?@mapping.json
(3) 將數(shù)據(jù)導(dǎo)入新索引(注:如果分塊,需要指定導(dǎo)入的文件archivepath)
curl -XPOST 'localhost:9200/vehicle/_import?map=\{"vehicle":"vehicle_new"\}&createIndex=false&archivepath=/data1/elasticsearch/logs/ehlindex.bulk'