クイック エンジニアリングブログ

株式会社クイック Web事業企画開発本部のエンジニアリングチームが運営する技術ブログです。

Elasticsearchを1.3から5.5にアップグレードした手順

先日社内LT大会で「藤岡弘、」愛を、 思う存分プレゼンしたhamanokamiです(☝ ՞ਊ ՞)☝

さて弊社クイックでは、社内システムの検索機能に、 Elasticsearchを使用しています。

ただ去年の9月まではバージョンが1.3!!!という、 恐竜時代のElasticsearchを使用していました。

約2年も前から「バージョンアップしたい×2」と思っていたので、 バージョンアップができたときはひとりで感動していました。

もちろんひとりで打ち上げにも行きました。(ブログ書いているときに、「打ち上げには呼べよ!!」とつっこまれました)

ということで、ここからはElasticsearchのバージョンを、 1.3から5.5にアップグレードした話をしていきます。

バージョンアップ以前の環境情報

  • Elasticsearch: 1.3(yumでインストール)

Elasticsearch本体をアップグレードする手順

まず1系から5系のアップグレードはできないため、 一旦2系にアップグレードしてから、5系にアップグレードするという、 大きく分けて2段階のステップが必要です。

1系から2系にアップグレード

作業するサーバーは、もちろんElasticsearchがインストールされているサーバーです。

まずシャード割り当てを無効にします。

 curl -XPUT 'http://localhost:9200/_cluster/settings' -d '{ "persistent": { "cluster.routing.allocation.enable": "none" } }'

リスタート高速化のために、synced flushの手動実行します。

curl -XPUT 'http://localhost:9200/_flush/synced'

Elasticsearchを停止させます。

sudo /etc/init.d/elasticsearch stop

2系用のElasticsearchのレポジトリをインポートします。

sudo rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

インポートしたレポジトリの設定を書き換えます。

sudo vi /etc/yum.repos.d/elasticsearch.repo

[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=https://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

Elasticsearchをアップグレードします。

sudo yum update elasticsearch

Elasticsearch設定ファイルを修正します。

sudo vi /etc/sysconfig/elasticsearch

# CONF_FILE=/etc/elasticsearch/elasticsearch.yml // コメントアウト

インデックスが残っている場合は、インデックスを削除します。

sudo rm -R /var/lib/elasticsearch/【クラスタ名】/nodes/0/indices

Elasticsearchが無事起動できるか確認します。

sudo /etc/init.d/elasticsearch start
curl -XGET 'http://localhost:9200/_cat/nodes'

無事起動していることが確認できたら、次のステップへ。

2系から5系にアップグレード

さきほど起動させたばかりのElasticsearchを停止させます。

sudo /etc/init.d/elasticsearch stop

5系用のElasticsearchのレポジトリをインポートします。

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

インポートしたレポジトリの設定を書き換えます。

sudo vi /etc/yum.repos.d/elasticsearch.repo

[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

Elasticsearchをアップグレードします。

sudo yum update elasticsearch

Elasticsearch関連の設定ファイルを修正します。 /etc/sysconfig/elasticsearchは今回新しく作成されたファイルを使用します。

sudo vi /etc/sysconfig/elasticsearch.rpmnew

ES_HOME=/usr/share/elasticsearch
JAVA_HOME=【任意のPath】
CONF_DIR=/etc/elasticsearch
DATA_DIR=/var/lib/elasticsearch
LOG_DIR=/var/log/elasticsearch
ES_USER=elasticsearch
MAX_LOCKED_MEMORY=unlimited
sudo mv /etc/sysconfig/elasticsearch /etc/sysconfig/bk_elasticsearch
sudo mv /etc/sysconfig/elasticsearch.rpmnew /etc/sysconfig/elasticsearch

/etc/elasticsearch/elasticsearch.ymlも同様です。

sudo vi /etc/elasticsearch/elasticsearch.yml.rpmnew

cluster.name: 【任意】
node.name: 【任意】
bootstrap.memory_lock: true
network.host: 【任意】
http.port: 9200

bootstrap.system_call_filter: false
xpack.security.enabled: false
sudo mv /etc/sysconfig/elasticsearch /etc/sysconfig/bk_elasticsearch
sudo mv /etc/sysconfig/elasticsearch.rpmnew /etc/sysconfig/elasticsearch

Javaのヒープサイズを修正します。

sudo vi /etc/elasticsearch/jvm.options

-Xms8g
-Xmx8g
ES_HEAP_SIZE=10g

デフォルトのユーザプロセス数の上限を修正します。

sudo vi /etc/security/limits.conf

elasticsearch  -  nproc  2048

ファイルディスクリプタの上限を修正します。

sudo vi /usr/lib/systemd/system/elasticsearch.service

LimitMEMLOCK=infinity

必要なプラグインをインストールします。

sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-icu
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-kuromoji

Elasticsearchが無事起動できるか確認します。

sudo /etc/init.d/elasticsearch start
curl -XGET 'http://localhost:9200/_cat/nodes'

無事起動できたら、シャード割り当てを有効にします。

curl -XPUT 'http://localhost:9200/_cluster/settings' -d '{ "persistent": { "cluster.routing.allocation.enable": "all" } }'

これでアップグレードは完了です。 もしJavaのアップグレードも必要な場合は、 下記手順でインストールしてください。

cd /usr/local/src
sudo wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jre-8u144-linux-x64.tar.gz"
sudo mkdir /usr/java_8/
sudo tar zxvf jre-8u144-linux-x64.tar.gz -C /usr/java_8/
sudo mv /usr/java/ /usr/java_7/
sudo mv /usr/java_8/ /usr/java/

参考

www.elastic.co www.elastic.co

終わりに

アップグレードは完了したけど、既存のインデックス構成では動きません。 エンジニアならご存知のとおり、メジャーバージョンが変わると使えないものがでてきたりします。 そこらへんの話はまた今度します。 ほな!

\\『明日のはたらくを創る』仲間を募集中!! // 919.jp