[ Elasticsearch](http://www.elasticsearch.org/)は、リアルタイムの分散検索およびデータ分析プラットフォームです。その人気は、その使いやすさ、強力な機能、およびスケーラビリティによるものです。
ElasticsearchはRESTful操作をサポートします。これは、HTTPメソッド(GET、POST、PUT、DELETEなど)をHTTP URI(/ collection / entry)と組み合わせて使用してデータを操作できることを意味します。直感的なRESTfulアプローチは、開発者とユーザーの両方に優しいものです。これが、Elasticsearchが人気の理由の1つです。
Elasticsearchは無料のオープンソースソフトウェアであり、その背後には確固たる会社であるElasticがあります。この組み合わせにより、個人テストから企業統合まで、あらゆるものに適しています。
この記事では、Elasticsearchを紹介し、Elasticsearchをインストール、構成、および使用を開始する方法を示します。
このチュートリアルを実行する前に、必ず次の前提条件を完了してください。
ElasticsearchはJavaプログラミング言語で記述されているため、まず、Tencent CVMでJavaランタイム環境(JRE)を使用する必要があります。 JRE用のネイティブCentOSOpenJDKパッケージを使用できます。このJREは無料で、十分にサポートされており、CentOSYumインストールマネージャーによって自動的に管理されます。
次のコマンドを使用して、最新のOpenJDKをインストールできます。
sudo yum install java-1.8.0-openjdk.x86_64
JREがインストールされて使用可能であることを確認するには、次のコマンドを実行します。
java -version
結果は次のようになります。
openjdk version "1.8.0_65"
OpenJDK Runtime Environment(build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM(build 25.65-b01, mixed mode)
Elasticsearchを使用して、より優れたJavaパフォーマンスと互換性を探し始めると、Oracle独自のJava(Oracle JDK 8)をインストールすることを選択できます。
Elasticsearchは、zip、tar.gz、deb、またはrpmパッケージを[elastic.co](https://www.elastic.co/downloads/elasticsearch)から直接ダウンロードできます。 CentOSの場合、Elasticsearchの実行に必要なすべてのものをインストールするネイティブrpmパッケージを使用するのが最適です。
執筆時点では、Elasticsearchの最新バージョンは1.7.3です。次のコマンドを使用して、選択したディレクトリにダウンロードします。
wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.3.noarch.rpm
次に、次の rpm
コマンドを使用して、通常のCentOSの方法でインストールします。
sudo rpm -ivh elasticsearch-1.7.3.noarch.rpm
その結果、Elasticsearchを / usr / share / elasticsearch /
にインストールし、その構成ファイルを / etc / elasticsearch
に置き、そのinitスクリプトを / etc / init.d / elasticsearch
に追加しました。
ElasticsearchがTencentCVMを使用して自動的に開始および停止するようにするには、次のコマンドを使用して、そのinitスクリプトをデフォルトの実行レベルに追加します。
sudo systemctl enable elasticsearch.service
ElasticsearchとそのJava依存関係がインストールされたので、Elasticsearchを構成します。
Elasticsearch構成ファイルは、 / etc / elasticsearch
ディレクトリにあります。 2つのファイルがあります:
elasticsearch.yml
-Elasticsearchサーバーの設定を構成します。これは、ロギングを除くすべてのオプションが保存される場所です。そのため、このファイルに最も関心があります。 logging.yml
-ロギング構成を提供します。まず、このファイルを編集する必要はありません。すべてのデフォルトのロギングオプションを保持できます。生成されたログは、デフォルトで / var / log / elasticsearch
にあります。Elasticsearchサーバーでカスタマイズできる最初の変数は、 elasticsearch.yml
の node.name
と cluster.name
です。名前が示すように、 node.name
はサーバー(ノード)とそれに関連付けられたクラスターの名前を指定します。
これらの変数をカスタマイズしない場合、 node.name
はTencentCVMホスト名に基づいて自動的に割り当てられます。同時に、 cluster.name
がデフォルトのクラスター名として自動的に設定されます。
Elasticsearchの自動検出機能は、 cluster.name
値を使用して、Elasticsearchノードを自動的に検出し、それらをクラスターに関連付けます。したがって、デフォルト値を変更しないと、クラスター内の同じネットワーク上に不要なノードが見つかる可能性があります。
メインの elasticsearch.yml
構成ファイルの編集を開始するには:
sudo nano /etc/elasticsearch/elasticsearch.yml
行 node.name
と cluster.name
の先頭にある文字 #
を削除してコメントを解除してから、値を変更します。 / etc / elasticsearch / elasticsearch.yml
ファイルでの最初の構成変更は次のようになります。
...
node.name:"My First Node"
cluster.name: mycluster1
...
もう1つの重要な設定は、サーバーの役割です。サーバーの役割は、「マスター」または「スレーブ」にすることができます。 「マスター」は、クラスターの健全性と安定性に責任があります。多数のクラスターノードを使用する大規模な展開では、複数の専用の「マスター」をお勧めします。通常、専用の「マスター」はデータを保存したり、インデックスを作成したりしません。したがって、クラスターの状態を危険にさらす可能性のある過負荷の可能性はありません。
「スレーブ」は「主力」として使用され、データタスクをロードできます。 「スレーブ」ノードが過負荷になった場合でも、追加の負荷を必要とする他のノードがあれば、クラスターの状態に深刻な影響を与えることはありません。
サーバーの役割を決定するために呼び出される設定は、 node.master
と呼ばれます。 Elasticsearchノードが1つしかない場合は、このオプションをコメントアウトして、デフォルト値の「true」に維持する必要があります。つまり、唯一のノードはマスターノードでもある必要があります。または、ノードをスレーブノードとして構成する場合は、 node.master
行の先頭にある文字#
を削除し、値を false
に変更します。
...
node.master:false...
もう1つの重要な構成オプションは、ノードがデータを格納するかどうかを決定する node.data
です。ほとんどの場合、このオプションはデフォルト値( true
)のままにしておく必要がありますが、ノードにデータを保存したくない場合が2つあります。 1つは、すでに述べたように、ノードが専用の「マスター」であるということです。もう1つは、ノードがデータの取得とノードからの結果の集計にのみ使用される場合です。後者の場合、ノードは「検索ロードバランサー」として機能します。
同様に、Elasticsearchノードが1つしかない場合は、デフォルトの「true」値を維持するために、この設定をコメントアウトする必要があります。それ以外の場合、データのローカルストレージを無効にするには、次の行のコメントを解除し、値を false
に変更します。
...
node.data:false...
他の2つの重要な選択肢は、 index.number_of_shards
と index.number_of_replicas
です。最初のものは、インデックスがいくつの(シャード)に分割されるかを決定します。 2つ目は、クラスターに分散されるレプリカの数を定義します。シャードを増やすとインデックスのパフォーマンスが向上し、コピーを増やすと検索速度が向上します。
単一のノードでElasticsearchを引き続き調査およびテストしていると仮定すると、コピーではなく1つのシャードから始めるのが最善です。したがって、それらの値は次の値に設定する必要があります(最初の行の「#」を必ず削除してください)。
...
index.number_of_shards:1
index.number_of_replicas:0...
興味があるかもしれない最後の設定は path.data
です、データストレージパスを決定するために設定を変更してください。デフォルトのパスは / var / lib / elasticsearch
です。実稼働環境では、Elasticsearchデータを格納するために専用のパーティションとマウントポイントを使用することをお勧めします。最良の場合、この専用パーティションは、パフォーマンスとデータ分離を向上させる別個のストレージメディアになります。 path.data
行のコメントを解除し、その値を変更することで、他の path.data
パスを指定できます。
...
path.data:/media/different_media
...
すべての変更を行ったら、ファイルを保存して終了します。これで、次のコマンドを使用して初めてElasticsearchを開始できます。
sudo service elasticsearch start
Elasticsearchを使用する前に、完全に起動するまで少なくとも10秒待ってください。そうしないと、接続障害エラーが発生する可能性があります。
Elasticsearchにはセキュリティが組み込まれておらず、HTTPAPIにアクセスできる人なら誰でも制御できます。
最初のセキュリティ調整は、パブリックアクセスを防ぐことです。パブリックアクセスを削除するには、 elasticsearch.yml
ファイルを編集します。
sudo nano /etc/elasticsearch/elasticsearch.yml
network.bind_host
を含む行を見つけ、行の先頭にある文字#
を削除してコメントを解除し、値を localhost
に変更すると次のようになります。
...
network.bind_host: localhost
...
警告: Elasticsearchにはセキュリティが組み込まれていないため、制御または信頼できないサーバーからアクセス可能なIPアドレスにこれを設定しないことが非常に重要です。 Elasticsearchをパブリックまたは共有プライベートネットワークのIPアドレスにバインドしないでください。
さらに、セキュリティを強化するために、カスタム式の評価に使用される動的スクリプトを無効にすることができます。カスタムの悪意のある表現を作成することにより、攻撃者は環境に損害を与える可能性があります。
カスタム式を無効にするには、 / etc / elasticsearch / elasticsearch.yml
ファイルの最後に次の行を追加します。
...
script.disable_dynamic:true...
上記の変更を有効にするには、次のコマンドを使用してElasticsearchを再起動する必要があります。
sudo service elasticsearch restart
これまでのところ、Elasticsearchはポート9200で実行されているはずです。以下に示すように、curl、コマンドラインクライアントURL転送ツール、および単純なGETリクエストを使用してテストできます。
curl -X GET 'http://localhost:9200'
次の応答が表示されます。
{" status":200,"name":"CentOS Node","cluster_name":"mysqluster","version":{"number":"1.7.3","build_hash":"05d4530971ef0ea46d0f4fa6ee64dbc8df659682","build_timestamp":"2015-10-15T09:14:17Z","build_snapshot":false,"lucene_version":"4.10.4"},"tagline":"You Know, for Search"}
上記のような応答が表示された場合、Elasticsearchは正常に機能しています。そうでない場合は、インストール手順を正しく実行し、Elasticsearchが完全に起動するのに十分な時間があることを確認してください。
Elasticsearchの使用を開始するには、最初にいくつかのデータを追加します。前述のように、ElasticsearchはRESTful APIを使用します。これは、一般的に使用されるCRUDコマンド(作成、読み取り、更新、および削除)に応答します。それを使用するために、再びカールを使用します。
次のコマンドで最初のエントリを追加できます。
curl -X POST 'http://localhost:9200/tutorial/helloworld/1'-d '{ "message": "Hello World!" }'
次の応答が表示されます。
{"_ index":"tutorial","_type":"helloworld","_id":"1","_version":1,"created":true}
curlを使用して、ElasticseachサーバーにHTTPPOSTリクエストを送信しました。要求されたURIは / tutorial / helloworld / 1
です。ここでパラメータを理解することは非常に重要です。
tutorial
はElasticsearchのデータのインデックスです。 helloworld
がタイプです。1
上記のインデックスとタイプの下にあるエントリのIDです。この最初のエントリは、次のようにHTTPGETリクエストを使用して取得できます。
curl -X GET 'http://localhost:9200/tutorial/helloworld/1'
結果は次のようになります。
{"_ index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{"message":"Hello World!"}}
既存のエントリを変更するには、次のようにHTTPPUTリクエストを使用できます。
curl -X PUT 'localhost:9200/tutorial/helloworld/1?pretty'-d '
{" message":"Hello People!"}'
Elasticsearchは、これが成功した変更であることを認める必要があり、次のようになります。
{"_ index":"tutorial","_type":"helloworld","_id":"1","_version":2,"created":false}
上記の例では、最初のエントリの「メッセージ」を「HelloPeople!」に変更しました。このようにして、バージョン番号は自動的に「2」に増加します。
上記のリクエストで追加のパラメータ pretty
に気づいたかもしれません。人間が読み取れる形式をサポートしているため、各データフィールドを新しい行に書き込むことができます。以下に示すように、結果を「美化」して、データを取得するときの出力を向上させることもできます。
curl -X GET 'http://localhost:9200/tutorial/helloworld/1?pretty'
これで、応答はより適切な形式になります。
{"_ index":"tutorial","_type":"helloworld","_id":"1","_version":2,"found":true,"_source":{"message":"Hello World!"}}
これまで、Elasticsearchにデータを追加してクエリを実行してきました。その他の操作については、[APIドキュメント](https://www.elastic.co/guide/en/elasticsearch/reference/current/docs.html)をご確認ください。
これは、Elasticsearchのインストール、構成、および使用の開始が非常に簡単なことです。十分な手動クエリを実行したら、次のタスクはアプリケーションからそれを使用し始めることです。
その他のCentOSチュートリアルについては、[Tencent Cloud + Community](https://cloud.tencent.com/developer?from=10680)にアクセスして詳細をご覧ください。
参照:「CentOS7にElasticsearchをインストールして構成する方法」
Recommended Posts