elasticsearch-1.0.0正式版がリリースされたので、0.9.xからのアップグレード手順をまとめました(追記あり)
Elasticsearch 1.0.0 released ということで、早速アップデートしてみました!
elasticsearchを0.90.3から1.0.0へrpmで更新しました。
/etc/elasticsearch/elasticsearch.ymlの差分もあるので、オリジナルに加えていた変更点の反映・プラグインの更新も済ませたらesを再起動。数分応答返さず焦ったが無事完了!
— Y.Kentaro (@yoshi_ken) February 13, 2014
本日は、このアップグレードを行った記録を紹介します。
# アップデート前 $ 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でノードを落とす際にshardの自動再配置を止める作法 - iをgに変えるとorangeになることに気づいたoranieの日記
http://d.hatena.ne.jp/oranie/20130927/1380259209
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プラグインを開いてみましょう。
これまで通りインデックスも認識されていますので完璧です。
以上です。お疲れ様でした!
設定ファイルの差分
設定ファイルの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ライフを!!!
追記: