ウェブサイト検索

Ubuntu VPSにElasticsearchをインストールする方法


ステータス: 廃止された

この記事は、もはやサポートされていないUbuntuのバージョンについて説明しています。現在、Ubuntu 12.04を実行しているサーバーを運営している場合は、サポートされているバージョンのUbuntuにアップグレードまたは移行することを強くお勧めします。

  • Ubuntu 14.04にアップグレードします。
  • Ubuntu 14.04からUbuntu 16.04へのアップグレード
  • サーバーデータをサポートされているバージョンに移行する

理由: Ubuntu 12.04は2017年4月28日にサポートが終了(EOL)し、もはやセキュリティパッチやアップデートを受けることはありません。このガイドはもはや維持されていません。

代わりに見る: このガイドは参考としてまだ役立つかもしれませんが、他のUbuntuリリースでは機能しない可能性があります。もし可能であれば、使用しているUbuntuのバージョンに対して書かれたガイドを使用することを強くお勧めします。最新のバージョンを見つけるには、ページ上部の検索機能を利用できます。

Elasticsearchは、分散型のRESTful検索および分析のためのプラットフォームです。必要に応じてスケールアップでき、単一のDigitalOceanのドロップレットで即座に使用を開始できます。このチュートリアルでは、ElasticsearchをUbuntuにダウンロード、インストール、使用し始める手順を説明します。提供された手順は現在、以下の環境でテストされています: Ubuntu 12.04.3 x64およびUbuntu 13.10 x64。

依存関係

まず、apt-get updateを実行して利用可能なパッケージのリストを更新してください。

次に、Javaランタイムをインストールする必要があります。ここでは2つの選択肢があります。

  • Ubuntuによって提供されるOpenJDKランタイムをインストールしてください。
  • Elasticsearch推奨のJavaランタイムであるOracle Javaをインストールしてください。

最初のオプションは、Elasticsearchを使って遊んだり、知識を深めたり、少数のノードを運営したりしたい場合には完璧に機能します。後者のオプションは、互換性が保証されているためElasticsearchが推奨しているものです。

OpenJDK

最初のオプションを達成するために、単にapt-get install openjdk-6-jreを実行することができます。

オラクルジャバ

2番目のオプションでは、Elasticsearchのドキュメントに従って手順を進めます。まず、Oracle Javaランタイムを含むリポジトリを追加する必要があります。

sudo add-apt-repository ppa:webupd8team/java

その後、apt-get update を実行して、この新しいリポジトリからパッケージ情報を取得しなければなりません。それが終わったら、オラクルのJavaランタイムをインストールできます。

sudo apt-get install oracle-java7-installer

上記のコマンドを実行中に、Oracleのバイナリーライセンスに同意する必要があります。ライセンスに同意しない場合は、代わりにOpenJDKランタイムをインストールすることができます。

Javaのインストールをテストする

次に、java -versionを実行することでJavaがインストールされているか確認できます。

今のところ必要な依存関係はこれだけなので、Elasticsearchの取得とインストールを始めましょう。

ダウンロードしてインストール

Elasticsearchは、彼らのサイトからzip、tar.gz、deb、またはrpmパッケージで直接ダウンロードできます。事前にこれを行う必要はありません。以下のテキストで必要に応じてファイルをダウンロードします。

インストール

Elasticsearchが提供するダウンロードオプションに基づいて、いくつかの選択肢があります:

  • zipまたはtar.gzアーカイブからインストールします。
  • debパッケージからインストールします。
  • rpmパッケージからインストールします。

その最後の選択肢はUbuntuのやり方ではないので、無視します。

Elasticsearchを少しだけ触ってみたい場合、zipまたはtar.gzアーカイブからのインストールが最適です。これらのオプションのいずれかからインストールすると、Elasticsearchを実行するために必要なバイナリが利用できるようになります。debパッケージからのインストールはElasticsearchを完全にインストールし、すぐにサーバーを起動します。これには、Elasticsearchをブート時に起動するためのinitスクリプトが/etc/init.d/elasticsearchにインストールされます。もしElasticsearchを少し触ってみたいだけなら、zipやtar.gzからのインストールをお勧めします。そうすれば、自由にサーバーを起動したり停止したりしながらElasticsearchを発見できます。

zip または tar.gz アーカイブからのインストール

zipおよびtar.gzのダウンロードには、Elasticsearch用の事前コンパイルされたバイナリが含まれています。

始めに、便利な場所にソースをダウンロードします。アーカイブを抽出すると、生成されたディレクトリからバイナリを直接実行できるようになりますので、Elasticsearchにアクセスできるユーザーがアクセス可能な場所に配置する必要があります。このチュートリアルでは、現在のユーザーディレクトリにダウンロードします。もし/tmpにダウンロードすると、VPSを再起動した際に消えてしまう可能性があります。これが望む場合は、そこにダウンロードを置いてください。/tmpで新しい一時的なディレクトリをすぐに作成するには、mktemp -dを実行します。

とにかく、進む前にElasticsearchを展開したいディレクトリにいることを確認してください。

アーカイブをダウンロードする

どちらかを実行してください

wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.7.zip

または

wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.7.tar.gz

最初のコマンドはzipアーカイブをダウンロードし、2番目のコマンドはtar.gzアーカイブをダウンロードします。zipパッケージをダウンロードした場合は、apt-get install unzipを事前に実行してから実行してください。

unzip elasticsearch-0.90.7.zip

あるいは、tar.gz パッケージをダウンロードした場合は、次のコマンドを実行してください

tar -xf elasticsearch-0.90.7.tar.gz

どちらのオプションもディレクトリ elasticsearch-0.90.7 を作成します。そのディレクトリに移動するには cd elasticsearch-0.90.7 と入力してください。そうすると bin フォルダにバイナリが見つかります。

Debianソフトウェアパッケージからのインストール

Ubuntuにダウンロードする最適なパッケージはdebパッケージです。RPMも動作しますが、最初に変換する必要があり、ここではその方法を説明しません。debパッケージを取得するには、次のコマンドを実行します。

wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.7.deb

Debianパッケージから直接インストールするには、次のコマンドを実行します

dpkg -i elasticsearch-0.90.7.deb

これにより、Elasticsearchが/usr/share/elasticsearchに正しくインストールされます。Debianパッケージからインストールすることは、起動時にElasticsearchサーバーを起動する/etc/init.d/elasticsearchにinitスクリプトもインストールすることを思い出してください。サーバーはインストール後すぐに起動します。

構成ファイル

zipまたはtar.gzアーカイブからインストールした場合、構成ファイルは生成されたディレクトリのconfigフォルダーにあります。Debianパッケージからインストールした場合、構成ファイルは/etc/elasticsearchにあります。

いずれにしても、主な構成ファイルは2つあります:elasticsearch.yml と logging.yml。最初のファイルはElasticsearchサーバーの設定を構成し、後者は予想通り、Elasticsearchが使用するロガーの設定です。

「elasticsearch.yml」には、デフォルトでコメント以外は何も含まれていません。

「logging.yml」は基本的なログ記録の設定を提供します。生成されたログは/var/log/elasticsearchにあります。

Elasticsearchの公開アクセスを削除する

続行する前に、Elasticsearchが公共のインターネットにアクセスできないように設定する必要があります。Elasticsearchには組み込みのセキュリティがなく、HTTP APIにアクセスできる誰でも制御できます。これはelasticsearch.ymlを編集することで実行できます。パッケージでインストールしたと仮定して、以下のコマンドで設定を開いてください:

sudo vi /etc/elasticsearch/elasticsearch.yml

次に、network.bind_hostを指定している行を見つけて、それをコメントアウト解除し、値をlocalhostに変更して次のようになるようにします:

network.bind_host: localhost

次に、動的スクリプトを無効にするために、次の行をファイルのどこかに挿入します:

script.disable_dynamic: true

保存して終了します。変更を有効にするために、今すぐElasticsearchを再起動してください:

sudo service elasticsearch restart

他の基本的な設定オプションについては後で説明しますが、まずは最も基本的なElasticsearchのインストールをテストする必要があります。

Elasticsearchのインストールをテストする

今、あなたはzipまたはtar.gzアーカイブをディレクトリに抽出したか、DebianパッケージからElasticsearchをインストールしました。どちらにせよ、Elasticsearchのバイナリが利用可能であり、サーバーを起動できます。zipまたはtar.gzアーカイブを使用した場合は、生成されたディレクトリにいることを確認してください。Debianパッケージを使用してインストールした場合、Elasticsearchサーバーはすでに実行中であるため、以下に示すようにサーバーを起動する必要はありません。

すべてが正常に動作していることを確認しましょう。実行する

 ./bin/elasticsearch

Elasticsearchは現在ポート9200で実行されているはずです。Elasticsearchは完全に起動するまでに時間がかかるので、以下のcurlコマンドをすぐに実行すると失敗することがあります。応答を開始するのに10秒以上かかることはないはずなので、以下のコマンドが失敗した場合は、他に何か問題がある可能性があります。

サーバーが起動していることを確認するために実行してください。

curl -X GET 'http://localhost:9200'

以下の応答が表示されるはずです

{
  "ok" : true,
  "status" : 200,
  "name" : "Xavin",
  "version" : {
    "number" : "0.90.7",
    "build_hash" : "36897d07dadcb70886db7f149e645ed3d44eb5f2",
    "build_timestamp" : "2013-11-13T12:06:54Z",
    "build_snapshot" : false,
    "lucene_version" : "4.5.1"
  },
  "tagline" : "You Know, for Search"
}

上記と似たような応答が表示されれば、Elasticsearchは正常に動作しています。あるいは、ブラウザから<あなたのDropletのIP>:9200にアクセスしてElasticsearchをクエリできます。上記のcurlを使用したときと同じJSONが表示されるはずです。

zip または tar.gz アーカイブでインストールした場合、サーバーは RESTful API を使用して停止できます。

curl -X POST 'http://localhost:9200/_cluster/nodes/_local/_shutdown'

上記のコマンドは、Debianパッケージを使用してElasticsearchがインストールされている場合でも機能しますが、service elasticsearch stopを使用してサーバーを停止することもできます。対応するservice elasticsearch startを使ってサーバーを再起動することもできます。

Elasticsearchを使用して

Elasticsearchは起動して稼働しています。次に、基本的な設定と使用法について説明します。

基本設定

zip または tar.gz アーカイブでインストールされた場合、設定ファイルは生成されたディレクトリ内の config フォルダーにあります。Debian パッケージを介してインストールされた場合、設定ファイルは /etc/elasticsearch/ にあります。見つかる 2 つの設定ファイルは elasticsearch.yml と logging.yml です。最初のファイルは一般的な Elasticsearch の設定です。提供されたファイルにはコメントのみが含まれているため、デフォルトの設定が使用されます。ファイルを読み進めることで、オプションの概要を把握できますが、以下にいくつかの提案をさせていただきます。設定は必須ではありません。以下のいずれかを行わなくても Elasticsearch を使用できますが、生の開発環境になります。

設定「cluster.name」は、Elasticsearchが自動検出を提供する方法です。つまり、同じネットワーク上のElasticsearchサーバーのグループが同じクラスター名を共有すると、お互いを自動的に検出します。これがElasticsearchをスケールアップする方法のシンプルさですが、デフォルトのクラスター名を保持すると、あなたの制御外にある他のElasticsearchサーバーがネットワーク上にいる場合、悪い状態に陥る可能性があることに注意してください。

基本的な使用法

私たちのElasticsearchのインストールにデータを追加しましょう。ElasticsearchはRESTful APIを使用しており、一般的なCRUDコマンド(作成、読み取り、更新、削除)に応答します。

エントリーを追加する

curl -X POST 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'

以下の応答が表示されるはずです

{“ok ”:true,“_index ”:“tutorial “,“_type ”:“helloworld “,“_id ”:“1 “,“_version ”:1}

私たちが行ったことは、ElasticsearchサーバーにHTTP POSTリクエストを送信することです。リクエストのURIは/tutorial/helloworld/1でした。ここでのパラメータを理解することが重要です。

  • "チュートリアル"はElasticsearchにおけるデータのインデックスです。
  • "helloworld" はタイプです。
  • 「1」は上記のインデックスとタイプの下にある私たちのエントリーのIDです。

curlコマンドへの上記の応答を見た場合、データを照会することができます。

curl -X GET 'http://localhost:9200/tutorial/helloworld/1'

どのように応答すべきか

{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"exists":true, "_source" : { "message": "Hello World!" }}

成功!Elasticsearchにデータを追加し、クエリを実行しました。

注意すべきことは、クエリに?pretty=trueを追加することで、より見栄えの良い出力を得られることです。これを試してみましょう。

curl -X GET 'http://localhost:9200/tutorial/helloworld/1?pretty=true'

どちらが応答すべきか

{
  "_index" : "tutorial",
  "_type" : "helloworld",
  "_id" : "1",
  "_version" : 1,
  "exists" : true, "_source" : { "message": "Hello World!" }
}

これははるかに読みやすくなります。また、Elasticsearchの設定ファイルでformat=yamlを設定している場合、クエリ文字列を追加する必要なく、出力もきれいに整形されます。

結論

私たちは現在、Elasticsearchをインストールし、設定し、使用を開始しました。基本的なRESTful APIに応答するため、アプリケーションからElasticsearchを使用してデータを追加し、クエリを実行するのが簡単になりました。

提出者: ckendell

関連記事: