elasticsearch 升級 1.x --> 2.x

YO! ElasticSearch 1.x 升級 2.x 的一些小心得

來一段多餘的前言

為了不寫半行程式碼的方式完成學校的作業,我還是選擇了用ELK中的E跟K來偷懶一下,做一下資料的統計啊~ 數量長條圖啊~ 之類的
不過因為裝了新版的Kibana,跟老師提供的ElasticSearch 1.x不合,所以花了很多時間在處理升級的事...,這之中實在充滿雷啊!!

升級ElasticSearch 1.x --> 2.x


最簡單就是參考這篇,不過我參考了還是弄了老半天
先來講解一下裡面每個步驟 

1. Disable Shard allocation

shard 就是一個 Lucene index,至於Lucene,應該算是個檢索引擎

ElasticSearch平時會把資料分成多個shard然後再分別分在你所運行的node裡面
阿既然要升級,就先把shard allocation關掉,專心對付每個node
PUT /_cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "none"
  }
}


2. Perform a Synced flush (optional)

這步主要是讓接下來shard在recover的時候快一點
POST /_flush/synced

3. Shutdown and upgrade all node

這邊就比較麻煩了
你可以選擇
  1. 安裝一個新版本的ElasticSearch,然後把conf跟data路徑指向舊版的位置
  2. 解開新版壓縮檔,然後把除了data, config的都蓋過去
  3. 安裝一個新版本的,然後把舊版的config跟data拉到新版的資料夾下
在1.x --> 2.x 的時候,要注意舊版的config裡有一行
http.cors.enabled
會讓你Kibana不能用,所以記得拿掉

升級方法:

4. Start the Cluster

這邊就是把升級完的東西開起來,可以用一些指令看是否成功,檢查一下版本號對不對
GET _cat/health

GET _cat/nodes




5. Wait for yellow

剛開起來後,會要等一段時間讓健康狀態從紅變黃,做一些剛剛提到的recover的動作,但不會全部replica shard都分配好,因為剛剛把shard allocation關掉了

6. Reenable Allocation

把在第一步關掉的shard allocation打開

這樣的話才能把健康狀況從黃色變成健康的綠色
PUT /_cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "all"
  }
}




後記:

其實後面還有很多雷啊
來筆記一下


curl -XPUT 'http://ip:port/_cluster/settings' -d '{
"transient" : {
    "cluster.routing.allocation.enable": "all"
}}'

  1. 這是單次的開啟shard allocation
  2. 可以用plugin -- migration來檢查是否可以成功升級
  3. 要改data位置,從elasticsearch.yml裡面改path.data path.data: 路徑....
  4. 如果外部連不到你的elasticsearch,把network.host改成0.0.0.0
  5. 要使用外部的config檔,在開啟elasticsearch時候 ./elasticsearch.bat --path.conf config資料夾路徑

留言

這個網誌中的熱門文章

postman有跨網域神力啊

angular ui-router 變更網址列的方式! (偷渡關於移除URL中的#

google smtp好麻煩啊~