序章

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

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

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

この記事では、Elasticsearchを紹介し、Elasticsearchをインストール、構成、および使用を開始する方法を示します。

前提条件

このチュートリアルを実行する前に、次の前提条件を満たしていることを確認してください。

  • Ubuntu14.04ドロップレット
  • 非rootsudoユーザー。 詳細については、 Ubuntu14.04を使用した初期サーバーセットアップを確認してください。

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

仮定

このチュートリアルでは、サーバーが次のようなVPNを使用していることを前提としています: Ansible andTincVPNを使用してサーバーインフラストラクチャを保護する方法。 これにより、サーバーが使用している物理ネットワークに関係なく、プライベートネットワーク機能が提供されます。

DigitalOcean Private Networking などの共有プライベートネットワークを使用している場合、このセキュリティ機能は、同じチームまたは同じ地域のアカウントのサーバーですでに有効になっています。 Elasticsearchを使用する場合、HTTPインターフェースにセキュリティが組み込まれていないため、これは特に重要です。

ステップ1—Javaのインストール

まず、ElasticsearchはJavaプログラミング言語で記述されているため、ドロップレットにJavaランタイム環境(JRE)が必要です。 ElasticsearchにはJava7以降が必要です。 ElasticsearchはOracleJDKバージョン1.8.0_73を推奨していますが、JRE用のネイティブUbuntuOpenJDKネイティブパッケージも同様に機能します。

この手順では、両方のバージョンをインストールして、どちらが最適かを判断する方法を示します。

OpenJDKのインストール

JRE用のネイティブUbuntuOpenJDKネイティブパッケージは無料で、十分にサポートされており、UbuntuAPTインストールマネージャーを介して自動的に管理されます。

APTを使用してOpenJDKをインストールする前に、次のコマンドを実行して、UbuntuDropletにインストールできるパッケージのリストを更新します。

  1. sudo apt-get update

その後、次のコマンドでOpenJDKをインストールできます。

  1. sudo apt-get install openjdk-7-jre

JREがインストールされて使用できることを確認するには、次のコマンドを実行します。

  1. java -version

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

Output of java -version
java version "1.7.0_79" OpenJDK Runtime Environment (IcedTea 2.5.6) (7u79-2.5.6-0ubuntu1.14.04.1) OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

Java8のインストール

Elasticsearchの使用を進めて、より優れたJavaパフォーマンスと互換性を探し始めたら、Oracle独自のJava(Oracle JDK 8)をインストールすることを選択できます。

OracleJavaPPAをaptに追加します。

  1. sudo add-apt-repository -y ppa:webupd8team/java

aptパッケージデータベースを更新します。

  1. sudo apt-get update

次のコマンドを使用して、Oracle Java 8の最新の安定バージョンをインストールします(ポップアップするライセンス契約に同意します)。

  1. sudo apt-get -y install oracle-java8-installer

最後に、インストールされていることを確認します。

  1. java -version

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

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

この記事の執筆時点では、Elasticsearchの最新バージョンは1.7.2です。 次のコマンドを使用して、選択したディレクトリにダウンロードします。

  1. wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.2.deb

次に、通常のUbuntuの方法でインストールします。 dpkg このようなコマンド:

  1. sudo dpkg -i elasticsearch-1.7.2.deb

ヒント: Elasticsearchの最新リリースバージョンが必要な場合は、 elastic.co にアクセスしてリンクを見つけてから、 wget ドロップレットにダウンロードします。 必ずdebパッケージをダウンロードしてください。

これにより、Elasticsearchがにインストールされます /usr/share/elasticsearch/ 構成ファイルが配置されている /etc/elasticsearch とその初期化スクリプトが追加されました /etc/init.d/elasticsearch.

ElasticsearchがDropletで自動的に開始および停止するようにするには、次のコマンドを使用して、そのinitスクリプトをデフォルトのランレベルに追加します。

  1. sudo update-rc.d elasticsearch defaults

ステップ3—Elasticの構成

ElasticsearchとそのJava依存関係がインストールされたので、Elasticsearchを構成します。

Elasticsearch構成ファイルは /etc/elasticsearch ディレクトリ。 2つのファイルがあります:

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

  • logging.yml —ロギングの構成を提供します。 最初は、このファイルを編集する必要はありません。 すべてのデフォルトのロギングオプションをそのままにしておくことができます。 結果のログは次の場所にあります /var/log/elasticsearch デフォルトでは。

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

これらの変数をカスタマイズしない場合、 node.name ドロップレットのホスト名に関して自動的に割り当てられます。 The cluster.name デフォルトのクラスターの名前に自動的に設定されます。

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

メインの編集を開始するには elasticsearch.yml 構成ファイル:

  1. sudo nano /etc/elasticsearch/elasticsearch.yml

を削除します # 行頭の文字 node.namecluster.name コメントを外してから、値を変更します。 での最初の構成変更 /etc/elasticsearch/elasticsearch.yml ファイルは次のようになります。

/etc/elasticsearch/elasticsearch.yml
...
node.name: "My First Node"
cluster.name: mycluster1
...

もう1つの重要な設定は、「マスター」または「スレーブ」のいずれかであるサーバーの役割です。 「マスター」は、クラスターの正常性と安定性に責任があります。 多くのクラスターノードを使用する大規模な展開では、複数の専用の「マスター」を用意することをお勧めします。 通常、専用の「マスター」はデータを保存したり、インデックスを作成したりしません。 したがって、クラスターの状態が危険にさらされる可能性がある過負荷になる可能性はありません。

「スレーブ」は、データタスクをロードできる「主力製品」として使用されます。 「スレーブ」ノードが過負荷になった場合でも、追加の負荷をかける他のノードがあれば、クラスターの状態に深刻な影響を与えることはありません。

サーバーの役割を決定する設定が呼び出されます node.master. Elasticsearchノードが1つしかない場合は、このオプションをコメントアウトしたままにして、デフォルト値の true —すなわち 唯一のノードもマスターである必要があります。 または、ノードをスレーブとして構成する場合は、 # の先頭の文字 node.master 行、値をに変更します false:

/etc/elasticsearch/elasticsearch.yml
...
node.master: false
...

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

繰り返しになりますが、Elasticsearchノードが1つしかない場合は、この設定をコメント化したままにして、デフォルトを維持する必要があります true 価値。 それ以外の場合、データのローカル保存を無効にするには、次の行のコメントを解除し、値を次のように変更します。 false:

/etc/elasticsearch/elasticsearch.yml
...
node.data: false
...

他の2つの重要なオプションは index.number_of_shardsindex.number_of_replicas. 1つ目は、インデックスが分割されるピース(シャード)の数を決定します。 2つ目は、クラスター全体に分散されるレプリカの数を定義します。 シャードを増やすとインデックス作成のパフォーマンスが向上し、レプリカを増やすと検索が高速になります。

単一ノードでElasticsearchを引き続き調査およびテストしていると仮定すると、1つのシャードのみで開始し、レプリカは使用しないことをお勧めします。 したがって、それらの値は次のように設定する必要があります(必ず削除してください # 行頭):

/etc/elasticsearch/elasticsearch.yml
...
index.number_of_shards: 1
index.number_of_replicas: 0
...

あなたが変更することに興味があるかもしれない1つの最終的な設定は path.data、データが保存されるパスを決定します。 デフォルトのパスは /var/lib/elasticsearch. 本番環境では、Elasticsearchデータを保存するために専用のパーティションとマウントポイントを使用することをお勧めします。 最良の場合、この専用パーティションは、より優れたパフォーマンスとデータ分離を提供する別個のストレージメディアになります。 別のを指定できます path.data コメントを外してパス path.data 行とその値の変更:

/etc/elasticsearch/elasticsearch.yml
...
path.data: /media/different_media
...

すべての変更を行ったら、ファイルを保存して終了してください。 これで、次のコマンドを使用してElasticsearchを初めて起動できます。

  1. sudo service elasticsearch start

Elasticsearchを使用できるようになるまで、Elasticsearchが完全に起動するまで少なくとも10秒待ってください。 そうしないと、接続できないというエラーが発生する可能性があります。

ステップ4—エラスティックの保護

Elasticsearchにはセキュリティが組み込まれておらず、HTTPAPIにアクセスできるすべてのユーザーが制御できます。 このセクションは、Elasticsearchを保護するための包括的なガイドではありません。 それとそれが実行されているサーバー/仮想マシンへの不正アクセスを防ぐために必要な対策を講じてください。 iptables を使用して、システムをさらに保護することを検討してください。

最初のセキュリティ調整は、パブリックアクセスを防ぐことです。 パブリックアクセスを削除するには、ファイルを編集します elasticsearch.yml:

  1. sudo nano /etc/elasticsearch/elasticsearch.yml

を含む行を検索します network.bind_host、削除してコメントを外します # 行頭の文字を入力し、値を次のように変更します localhost したがって、次のようになります。

/etc/elasticsearch/elasticsearch.yml
...
network.bind_host: localhost
...

警告: Elasticsearchにはセキュリティが組み込まれていないため、制御または信頼していないサーバーからアクセスできるIPアドレスにこれを設定しないことが非常に重要です。 Elasticsearchをパブリックまたは共有プライベートネットワークIPアドレスにバインドしないでください!

また、セキュリティを強化するために、カスタム式の評価に使用される動的スクリプトを無効にすることができます。 カスタムの悪意のある表現を作成することにより、攻撃者は環境を危険にさらす可能性があります。

カスタム式を無効にするには、次の行を最後に追加します /etc/elasticsearch/elasticsearch.yml ファイル:

...
[label /etc/elasticsearch/elasticsearch.yml]
script.disable_dynamic: true
...

ステップ5—テスト

これで、Elasticsearchはポート9200で実行されているはずです。 curl、コマンドラインクライアント側URL転送ツール、および次のような単純なGETリクエストを使用してテストできます。

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

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

Output of curl
{ "status" : 200, "name" : "Harry Leland", "cluster_name" : "elasticsearch", "version" : { "number" : "1.7.2", "build_hash" : "e43676b1385b8125d647f593f7202acbd816e8ec", "build_timestamp" : "2015-09-14T09:49:53Z", "build_snapshot" : false, "lucene_version" : "4.10.4" }, "tagline" : "You Know, for Search" }

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

ステップ6—Elasticsearchを使用する

Elasticsearchの使用を開始するには、最初にいくつかのデータを追加しましょう。 すでに述べたように、ElasticsearchはRESTful APIを使用します。これは、通常のCRUDコマンド(作成、読み取り、更新、削除)に応答します。 それを操作するために、再びカールを使用します。

次のコマンドを使用して、最初のエントリを追加できます。

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

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

Output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"created":true}

curlを使用して、ElasticseachサーバーにHTTPPOSTリクエストを送信しました。 リクエストのURIは /tutorial/helloworld/1. ここでパラメータを理解することが重要です。

  • tutorial Elasticsearchのデータのインデックスです。
  • helloworld タイプです。
  • 1 上記のインデックスとタイプの下にあるエントリのIDです。

この最初のエントリは、次のようなHTTPGETリクエストで取得できます。

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

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

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

既存のエントリを変更するには、次のようなHTTPPUTリクエストを使用できます。

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

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

Output
{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "created" : false }

上記の例では、 message 「HelloPeople!」への最初のエントリーの これにより、バージョン番号は自動的にに増加しました 2.

あなたは余分な議論に気づいたかもしれません pretty 上記のリクエストで。 これにより、人間が読める形式が可能になり、各データフィールドを新しい行に書き込むことができます。 また、データを取得するときに結果を「きれいに」して、次のようにはるかに優れた出力を取得することもできます。

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

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

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

これまで、Elasticsearchにデータを追加してクエリを実行してきました。 その他の操作については、APIドキュメントを確認してください。

結論

これは、Elasticsearchのインストール、構成、および使用開始が非常に簡単なことです。 手動クエリを十分に試したら、次のタスクはアプリケーションからそれを使い始めることです。