前書き

Elasticsearchは、リアルタイムでのデータの分散検索と分析のためのプラットフォームです。 その人気は、その使いやすさ、強力な機能、およびスケーラビリティによるものです。

ElasticsearchはRESTful操作をサポートします。 これは、HTTP URI( + / collection / entry +)と組み合わせてHTTPメソッド(GET、POST、PUT、DELETEなど)を使用してデータを操作できることを意味します。 直感的なRESTfulアプローチは、開発者にとってもユーザーにとっても使いやすいものであり、これがElasticsearchの人気の理由の1つです。

Elasticsearchは、強固な企業であるElasticを備えた無料のオープンソースソフトウェアです。 この組み合わせにより、個人テストから企業統合まで、あらゆる場所での使用に適しています。

この記事では、Elasticsearchを紹介し、インストール、構成、セキュリティ保護、使用の開始方法を示します。

前提条件

このチュートリアルを実行する前に、次のものが必要です。

  • Ubuntu 16.04での初期サーバー設定に従って、sudo non -rootユーザー。

  • インストールされたOracle JDK8。https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-get-onの「Oracle JDKのインストール」セクションに従って実行できます。 -ubuntu-16-04 [このJavaインストール記事]

特に断りのない限り、このチュートリアルでルート権限を必要とするすべてのコマンドは、sudo権限を持つ非ルートユーザーとして実行する必要があります。

ステップ1-Elasticsearchのダウンロードとインストール

Elasticsearchは、https://www.elastic.co/downloads/elasticsearch [elastic.co]から + zip ++ tar.gz ++ deb +、または + rpm +`パッケージで直接ダウンロードできます。 Ubuntuの場合、Elasticsearchを実行するために必要なすべてをインストールする `+ deb +(Debian)パッケージを使用するのが最善です。

まず、パッケージインデックスを更新します。

sudo apt-get update

執筆時点で2.3.1である最新のElasticsearchバージョンをダウンロードします。

wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/deb/elasticsearch/2.3.1/elasticsearch-2.3.1.deb

次に、 `+ dpkg +`を使用して、通常のUbuntuの方法でインストールします。

sudo dpkg -i elasticsearch-2.3.1.deb

これにより、Elasticsearchが `+ / usr / share / elasticsearch / `にインストールされ、設定ファイルが ` / etc / elasticsearch `に配置され、initスクリプトが ` / etc / init.d / elasticsearch +`に追加されます。

サーバーでElasticsearchが自動的に開始および停止するようにするには、その初期化スクリプトをデフォルトのランレベルに追加します。

sudo systemctl enable elasticsearch.service

Elasticsearchを初めて起動する前に、推奨される最小構成について次のセクションを確認してください。

ステップ2-Elasticsearchの構成

ElasticsearchとそのJava依存関係がインストールされたので、Elasticsearchを構成します。 Elasticsearch設定ファイルは `+ / etc / elasticsearch +`ディレクトリにあります。 次の2つのファイルがあります。

  • `+ elasticsearch.yml +`はElasticsearchサーバーの設定を構成します。 これは、ロギングのオプションを除くすべてのオプションが格納される場所です。このため、このファイルに最も関心があるのはこのためです。

  • `+ logging.yml `はロギングの設定を提供します。 最初は、このファイルを編集する必要はありません。 すべてのデフォルトのログオプションをそのまま使用できます。 デフォルトでは、結果のログは ` / var / log / elasticsearch +`にあります。

Elasticsearchサーバーでカスタマイズする最初の変数は、 `+ elasticsearch.yml `の ` node.name `と ` cluster.name `です。 それらの名前が示すように、 ` node.name +`はサーバー(ノード)と後者が関連付けられているクラスターの名前を指定します。

これらの変数をカスタマイズしない場合、Dropletホスト名に関して「+ node.name 」が自動的に割り当てられます。 ` cluster.name +`はデフォルトのクラスターの名前に自動的に設定されます。

`+ cluster.name +`値はElasticsearchの自動検出機能によって使用され、Elasticsearchノードを自動的に検出してクラスターに関連付けます。 したがって、デフォルト値を変更しないと、クラスター内の同じネットワーク上に不要なノードが見つかる可能性があります。

メインの `+ elasticsearch.yml `設定ファイルの編集を開始するには、 ` nano +`またはお好みのテキストエディターを使用します。

sudo nano /etc/elasticsearch/elasticsearch.yml

+ cluster.name`と + node.name`の行の先頭にある `#`文字を削除してコメント解除し、値を更新します。 `+ / etc / elasticsearch / elasticsearch.yml +`ファイルの最初の設定変更は次のようになります。

/etc/elasticsearch/elasticsearch.yml

. . .
cluster.name:
node.name:
. . .

これらは、Elasticsearchを使用して開始できる最小設定です。 ただし、Elasticsearchのより完全な理解と微調整のために、構成部分を読み続けることをお勧めします。

Elasticsearchの特に重要な設定の1つは、マスターまたはスレーブのサーバーの役割です。 _マスターサーバー_は、クラスターの正常性と安定性を担当します。 多数のクラスターノードがある大規模な展開では、複数の専用マスターを用意することをお勧めします。 通常、専用マスターはデータを保存したり、インデックスを作成したりしません。 したがって、過負荷になる可能性はなく、それによってクラスターの健全性が危険にさらされる可能性があります。

_スレーブサーバー_は、データタスクでロードできる主力機器として使用されます。 スレーブノードが過負荷になっても、追加の負荷をかける他のノードがあれば、クラスターの状態に深刻な影響はありません。

サーバーの役割を決定する設定は、 `+ node.master `と呼ばれます。 デフォルトでは、ノードはマスターです。 Elasticsearchノードが1つしかない場合、少なくとも1つのマスターが常に必要なので、このオプションをデフォルトの ` true `値のままにしておく必要があります。 あるいは、ノードをスレーブとして設定する場合は、次のように変数 ` node.master `に ` false +`値を割り当てます。

/etc/elasticsearch/elasticsearch.yml

. . .
node.master:
. . .

もう1つの重要な設定オプションは、ノードがデータを保存するかどうかを決定する「+ node.data 」です。 ほとんどの場合、このオプションはデフォルト値( ` true +`)のままにしておく必要がありますが、ノードにデータを保存したくない場合が2つあります。 1つは、前述のように、ノードが専用マスターの場合です。 もう1つは、ノードがノードからのデータのフェッチと結果の集計にのみ使用される場合です。 後者の場合、ノードは_searchロードバランサーとして機能します。

繰り返しますが、Elasticsearchノードが1つしかない場合は、この値を変更しないでください。 それ以外の場合、データのローカル保存を無効にするには、次のように `+ node.data `を ` false +`として指定します。

/etc/elasticsearch/elasticsearch.yml

. . .
node.data:
. . .

多くのノードを持つ大規模なElasticsearchデプロイメントでは、他の2つの重要なオプションとして、「+ index.number_of_shards 」と「 index.number_of_replicas +」があります。 1つ目は、インデックスが分割される断片数(shards)を決定します。 2番目は、クラスター全体に分散されるレプリカの数を定義します。 シャードを増やすとインデックス作成のパフォーマンスが向上し、レプリカを増やすと検索が高速になります。

デフォルトでは、シャードの数は5で、レプリカの数は1です。 まだ単一ノードでElasticsearchを調査およびテストしていると仮定すると、1つのシャードのみでレプリカなしで開始できます。 したがって、それらの値は次のように設定する必要があります。

/etc/elasticsearch/elasticsearch.yml

. . .
index.number_of_shards:
index.number_of_replicas:
. . .

変更に興味があるかもしれない最後の設定の1つは、データが保存されるパスを決定する `+ path.data `です。 デフォルトのパスは ` / var / lib / elasticsearch `です。 実稼働環境では、Elasticsearchデータを保存するために専用のパーティションとマウントポイントを使用することをお勧めします。 最良の場合、この専用パーティションは、パフォーマンスとデータ分離を向上させる別個のストレージメディアになります。 次のように指定することで、別の ` path.data +`パスを指定できます。

/etc/elasticsearch/elasticsearch.yml

. . .
path.data:
. . .

すべての変更を行ったら、ファイルを保存して終了します。 これで、Elasticsearchを初めて起動できます。

sudo systemctl start elasticsearch

Elasticsearchを使用してみる前に、Elasticsearchを完全に起動してください。 そうしないと、接続できないというエラーが表示される場合があります。

ステップ3-Elasticsearchの保護

デフォルトでは、Elasticsearchにはセキュリティが組み込まれていないため、HTTP APIにアクセスできるすべてのユーザーが制御できます。 Elasticsearchはローカルでのみアクセス可能なループバックインターフェイス(つまり、「+ 127.0.0.1+」)でのみリッスンするため、これは常にセキュリティリスクではありません。 したがって、パブリックアクセスは不可能であり、すべてのサーバーユーザーが信頼されているか、これが専用のElasticsearchサーバーである限り、Elasticsearchは十分に安全です。

それでも、セキュリティを強化する場合、最初に行うことは認証を有効にすることです。 認証は、商用https://www.elastic.co/downloads/shield[Shield plugin]によって提供されます。 残念ながら、このプラグインは無料ではありませんが、30日間無料で試用できます。 その公式ページには、優れたインストールおよび構成手順があります。 さらに知っておく必要がある唯一のことは、Elasticsearchプラグインインストールマネージャーへのパスが `+ / usr / share / elasticsearch / bin / plugin +`であることです。

商用プラグインを使用したくないが、HTTP APIへのリモートアクセスを許可する必要がある場合、UbuntuのデフォルトファイアウォールUFW(Uncomplicated Firewall)を使用して、少なくともネットワークの露出を制限できます。 デフォルトでは、UFWはインストールされていますが、有効化されていません。 使用する場合は、次の手順を実行します。

まず、必要なサービスを許可するルールを作成します。 サーバーにログインするには、少なくともSSHを許可する必要があります。 SSHへの世界規模のアクセスを許可するには、ポート22をホワイトリストに登録します。

sudo ufw allow 22

次に、信頼できるリモートホストのデフォルトのElasticsearch HTTP APIポート(TCP 9200)へのアクセスを許可します(例: ++):

sudo ufw allow from  to any port 9200

次のコマンドでUFWを有効にします:

sudo ufw enable

最後に、次のコマンドでUFWのステータスを確認します。

sudo ufw status

ルールを正しく指定すると、出力は次のようになります。

Output of java -versionStatus: active

To                         Action      From
--                         ------      ----

22                         ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)

UFWが有効でElasticsearchポート9200を保護していることを確認したら、Elasticsearchが外部接続をリッスンできるようにすることができます。 これを行うには、 `+ elasticsearch.yml +`設定ファイルを再度開きます。

sudo nano /etc/elasticsearch/elasticsearch.yml

「+ network.bind_host 」を含む行を見つけ、行の先頭にある「#」文字を削除してコメントを外し、値を「+0.0.0.0」に変更して次のようにします。

/etc/elasticsearch/elasticsearch.yml

. . .
network.host:
. . .

ElasticsearchがすべてのインターフェースとバインドされたIPをリッスンするように、「+ 0.0.0.0+」を指定しました。 特定のインターフェースでのみリッスンするようにしたい場合は、 `+ 0.0.0.0 +`の代わりにそのIPを指定できます。

上記の設定を有効にするには、次のコマンドでElasticsearchを再起動します。

sudo systemctl restart elasticsearch

その後、信頼できるホストからElasticsearchに接続してみてください。 接続できない場合、UFWが機能し、 `+ network.host`変数が正しく指定されていることを確認してください。

ステップ4-Elasticsearchのテスト

現在、Elasticsearchはポート9200で実行されているはずです。 コマンドラインのクライアント側URL転送ツールである `+ curl +`と簡単なGETリクエストでテストできます。

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

次の応答が表示されます。

Output of curl{
 "name" : "My First Node",
 "cluster_name" : "mycluster1",
 "version" : {
   "number" : "2.3.1",
   "build_hash" : "bd980929010aef404e7cb0843e61d0665269fc39",
   "build_timestamp" : "2016-04-04T12:25:05Z",
   "build_snapshot" : false,
   "lucene_version" : "5.5.0"
 },
 "tagline" : "You Know, for Search"
}

上記のような応答が表示された場合、Elasticsearchは正常に機能しています。 そうでない場合は、インストール手順を正しく実行し、Elasticsearchが完全に起動するまでしばらく時間を置いていることを確認してください。

Elasticsearchのより徹底的なチェックを実行するには、次のコマンドを実行します。

curl -XGET 'http://localhost:9200/_nodes?pretty'

上記のコマンドの出力では、ノード、クラスター、アプリケーションパス、モジュールなどの現在のすべての設定を確認できます。

ステップ5-Elasticsearchの使用

Elasticsearchの使用を開始するには、まずデータを追加しましょう。 既に述べたように、ElasticsearchはRESTful APIを使用します。これは、通常のCRUDコマンド c reate、 r ead、 u pdate、 d eleteに応答します。 それを扱うために、 `+ curl +`を再び使用します。

次のコマンドで最初のエントリを追加できます。

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

次の応答が表示されます。

Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"_shards":{"total":2,"successful":1,"failed":0},"created":true}

`+ cuel `を使用して、HTTP POSTリクエストをElasticsearchサーバーに送信しました。 リクエストのURIは、いくつかのパラメーターを持つ ` / tutorial / helloworld / 1 +`でした:

  • `+ tutorial +`は、Elasticsearchのデータのインデックスです。

  • `+ helloworld +`はタイプです。

  • `+ 1 +`は、上記のインデックスとタイプの下にあるエントリのIDです。

この最初のエントリは、HTTP GETリクエストで取得できます。

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

結果は次のようになります。

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

既存のエントリを変更するには、HTTP PUT要求を使用できます。

curl -X PUT 'localhost:9200/tutorial/helloworld/1?pretty' -d '
{
 "message": "Hello People!"
}'

Elasticsearchは、次のような変更の成功を確認する必要があります。

Output{
 "_index" : "tutorial",
 "_type" : "helloworld",
 "_id" : "1",
 "_version" : 2,
 "_shards" : {
   "total" : 2,
   "successful" : 1,
   "failed" : 0
 },
 "created" : false
}

上記の例では、最初のエントリの「+ message 」を「Hello People!」に変更しました。 それに伴い、バージョン番号は自動的に「+2」に増加しました。

上記のリクエストで余分な引数 `+ pretty +`に気付いたかもしれません。 人間が読める形式を使用できるため、各データフィールドを新しい行に書き込むことができます。 また、データを取得するときに結果を「プリティ」化して、次のようなはるかに優れた出力を取得することもできます。

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

これで、応答はより優れた形式になります。

Output{
 "_index" : "tutorial",
 "_type" : "helloworld",
 "_id" : "1",
 "_version" : 2,
 "found" : true,
 "_source" : {
   "message" : "Hello People!"
 }
}

これまで、Elasticsearchにデータを追加して照会しました。 他の操作については、https://www.elastic.co/guide/en/elasticsearch/reference/current/docs.html [APIドキュメント]をご覧ください。

結論

Elasticsearchのインストール、設定、使用の開始は簡単です。 手動クエリで十分に遊んだら、次のタスクはアプリケーションから使用を開始することです。