Y-Ken Studio

新しもの好きのデータエンジニアが四方山話をお届けします。

elasticsearch-1.0.0正式版がリリースされたので、0.9.xからのアップグレード手順をまとめました(追記あり)

Elasticsearch 1.0.0 released ということで、早速アップデートしてみました!

本日は、このアップグレードを行った記録を紹介します。

# アップデート前
$ rpm -q elasticsearch
elasticsearch-0.90.3-1.noarch

# アップデート後
$ rpm -q elasticsearch
elasticsearch-1.0.0-1.noarch

追記

公式のアップデート手順も公開されておりますので、合わせてご確認ください。
v0.9までのものと、v1.0以降の手順それぞれが公開されています。
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/setup-upgrade.html#rolling-upgrades

アップデート手順

アップグレードは次の流れで行います。

  • インストール済みプラグインを確認
  • elasticsearchの停止
  • elasticsearchのアップグレード
  • プラグインのアップグレード
  • elasticsearchの起動
  • elasticsearchの動作確認
  • プラグインの動作確認

インストール済みプラグインを確認

後ほど再インストールするため、次のようにcurlコマンドを用いてプラグインの一覧を確認します。
このリストにsite:trueと記載されているsiteプラグインに関しては、稼働中の更新を行えますが、site:falseであるkuromojiは再起動が必要です。
そのため今回は停止中に更新を行う手順としますが、もしsiteプラグインのみである場合には、elasticsearchのバージョンアップして起動した後に再インストールする対応でも問題ありません。

$ curl -XGET 'http://localhost:9200/_nodes/_all?plugin=true&pretty'
{
  "ok" : true,
  "cluster_name" : "********",
  "nodes" : {
    "*********-***********" : {
      "name" : "**********",
      "transport_address" : "inet[/*********:9300]",
      "version" : "0.90.3",
      "http_address" : "inet[/*********:9200]",
      "plugins" : [ {
        "name" : "analysis-kuromoji",
        "description" : "Kuromoji analysis support",
        "jvm" : true,
        "site" : false
      }, {
        "name" : "HQ",
        "description" : "No description found for HQ.",
        "url" : "/_plugin/HQ/",
        "jvm" : false,
        "site" : true
      }, {
        "name" : "bigdesk",
        "description" : "No description found for bigdesk.",
        "url" : "/_plugin/bigdesk/",
        "jvm" : false,
        "site" : true
      }, {
        "name" : "head",
        "description" : "No description found for head.",
        "url" : "/_plugin/head/",
        "jvm" : false,
        "site" : true
      } ]
    }
  }
}

elasticsearchの停止

公式ガイドを参考に、サービスを止めます。

$ curl -XPUT 'http://localhost:9200/_all/_settings' -d '{
    "index": {
        "translog.disable_flush": "true"
    }
}'
$ curl -XPUT 'http://localhost:9200/_cluster/settings' -d '{
    "transient" : {
        "cluster.routing.allocation.disable_allocation": "true"
    }
}'
# service elasticsearch stopでも可
$ sudo /etc/init.d/elasticsearch stop
Stopping elasticsearch:                                    [  OK  ]
$ curl -XPUT 'http://localhost:9200/_all/_settings' -d '{
    "index": {
        "translog.disable_flush": "false"
    }
}'

$ curl -XPUT 'http://localhost:9200/_cluster/settings' -d '{
    "transient" : {
        "cluster.routing.allocation.disable_allocation": "false"
    }
}'

なお、1台だけのシングル構成であっても、停止前に次の記事にある通りに自動再配置をOFFにしてからアップデートすることをお勧めします。データ量が多いと1台だけでもcluster healthがred状態になり、通常稼働するまでの時間を要すためです。

elasticsearchのアップグレード

rpmコマンド等でアップグレードします。

$ cd /usr/local/src
$ sudo wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.0.0.noarch.rpm
$ sudo rpm -Uvh elasticsearch-1.0.0.noarch.rpm

なお、yumコマンドの方が都合の良い、etckeeperなどを利用している場合には、rpmではなく次のコマンドでアップグレードしましょう。

$ cd /usr/local/src
$ sudo wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.0.0.noarch.rpm
$ sudo yum upgrade elasticsearch-1.0.0.noarch.rpm

プラグインのアップグレード

それでは各プラグインをアップグレードしていきます。
どうやら、プラグインのupgradeコマンドは無いようですね。公式ページに記載の通り、removeした後にinstallする手順で進めます。

まずはkuromojiから。
これはインストール時にバージョンを毎回指定していますが、アンインストール時の指定は不要です。
elasticsearch/elasticsearch-analysis-kuromoji - GitHubのREADMEでは2.0.0.RC1が最新のようなのでそれを使います。

# kuromoji
$ sudo bin/plugin -remove elasticsearch/elasticsearch-analysis-kuromoji
-> Removing elasticsearch/elasticsearch-analysis-kuromoji
Removed elasticsearch/elasticsearch-analysis-kuromoji

$ sudo bin/plugin -install elasticsearch/elasticsearch-analysis-kuromoji/2.0.0.RC1
-> Installing elasticsearch/elasticsearch-analysis-kuromoji/2.0.0.RC1...
Trying http://download.elasticsearch.org/elasticsearch/elasticsearch-analysis-kuromoji/elasticsearch-analysis-kuromoji-2.0.0.RC1.zip...
Downloading ...................................................................................................................................DONE
Installed elasticsearch/elasticsearch-analysis-kuromoji/2.0.0.RC1 into /usr/share/elasticsearch/plugins/analysis-kuromoji

次に、bigdesk, HQ, headプラグインを順番にアップグレードしていきます。

# bigdesk
$ sudo bin/plugin -remove  lukas-vlcek/bigdesk
-> Removing lukas-vlcek/bigdesk
Removed lukas-vlcek/bigdesk

$ sudo bin/plugin -install  lukas-vlcek/bigdesk
-> Installing lukas-vlcek/bigdesk...
Trying https://github.com/lukas-vlcek/bigdesk/archive/master.zip...
Downloading ......................DONE
Installed lukas-vlcek/bigdesk into /usr/share/elasticsearch/plugins/bigdesk
Identified as a _site plugin, moving to _site structure ...
# HQ
$ sudo ./bin/plugin -remove royrusso/elasticsearch-HQ
-> Removing royrusso/elasticsearch-HQ
Removed royrusso/elasticsearch-HQ

$ sudo ./bin/plugin -install royrusso/elasticsearch-HQ
-> Installing royrusso/elasticsearch-HQ...
Trying https://github.com/royrusso/elasticsearch-HQ/archive/master.zip...
Downloading ...................................................................................................................................DONE
Installed royrusso/elasticsearch-HQ into /usr/share/elasticsearch/plugins/HQ
Identified as a _site plugin, moving to _site structure ...
# head
$ sudo bin/plugin --remove mobz/elasticsearch-head
-> Removing mobz/elasticsearch-head
Removed mobz/elasticsearch-head

$ sudo bin/plugin --install mobz/elasticsearch-head
-> Installing mobz/elasticsearch-head...
Trying https://github.com/mobz/elasticsearch-head/archive/master.zip...
Downloading .......................................................DONE
Installed mobz/elasticsearch-head into /usr/share/elasticsearch/plugins/head
Identified as a _site plugin, moving to _site structure ...

elasticsearchの起動

サービスを起ち上げます。もちろんservice elasticsearch startコマンドでも構いません。

$ sudo /etc/init.d/elasticsearch start
Starting elasticsearch:                                    [  OK  ]

elasticsearchの動作確認

indexやshardの数にもよりますが、サービスを起ち上げてから数秒〜1分程度はリクエストを受け付けなくなります。
焦らずtopコマンド等でモニタリングし、CPU・iowaitが落ち着くのを待ちましょう。

# 起動直後はしばらく繋がりません
$ curl -XGET 'http://localhost:9200/'
curl: (7) couldn't connect to host

# しばらくすると、繋がるようになります
$ curl -XGET 'http://localhost:9200/'
{
  "status" : 200,
  "name" : "Shadrac",
  "version" : {
    "number" : "1.0.0",
    "build_hash" : "a46900e9c72c0a623d71b54016357d5f94c8ea32",
    "build_timestamp" : "2014-02-12T16:18:34Z",
    "build_snapshot" : false,
    "lucene_version" : "4.6"
  },
  "tagline" : "You Know, for Search"
}

プラグインの動作確認

HQプラグインを開いてみましょう。
これまで通りインデックスも認識されていますので完璧です。

f:id:yoshi-ken:20140213171802p:plain

以上です。お疲れ様でした!

設定ファイルの差分

設定ファイルのGCまわりには、設定名の変更もあるようですね。

 ################################## GC Logging ################################

-#monitor.jvm.gc.ParNew.warn: 1000ms
-#monitor.jvm.gc.ParNew.info: 700ms
-#monitor.jvm.gc.ParNew.debug: 400ms
-
-#monitor.jvm.gc.ConcurrentMarkSweep.warn: 10s
-#monitor.jvm.gc.ConcurrentMarkSweep.info: 5s
-#monitor.jvm.gc.ConcurrentMarkSweep.debug: 2s
+#monitor.jvm.gc.young.warn: 1000ms
+#monitor.jvm.gc.young.info: 700ms
+#monitor.jvm.gc.young.debug: 400ms
+
+#monitor.jvm.gc.old.warn: 10s
+#monitor.jvm.gc.old.info: 5s
+#monitor.jvm.gc.old.debug: 2s

詳細については次のgistページをご覧ください。
The differences of elasticsearch v0.99.3 and v1.0.0 configuration.

まとめ

0.9から1.0へはとても簡単にアップグレードできます。もし全台を計画停止の上でメンテナンスする場合には、oranieさんのElasticSearchでノードを落とす際にshardの自動再配置を止める作法も参考にすると良いと思います!

それでは楽しいElasticsearchライフを!!!

追記: