CentOS8にElasticsearchをインストールして設定する方法
序章
Elasticsearch は、データをリアルタイムで分散検索および分析するためのプラットフォームです。 その人気は、その使いやすさ、強力な機能、およびスケーラビリティによるものです。
ElasticsearchはRESTful操作をサポートしています。 これは、HTTPメソッドを使用できることを意味します(GET
, POST
, PUT
, DELETE
、など)HTTP URI(/ collection / entry)と組み合わせてデータを操作します。 直感的なRESTfulアプローチは、開発者とユーザーフレンドリーの両方であり、Elasticsearchが人気を博している理由の1つです。
Elasticsearchは無料のオープンソースソフトウェアであり、その背後には確固たる会社があります—Elastic。 この組み合わせにより、個人テストから企業統合まで、多くのユースケースに適しています。
この記事では、Elasticsearchを紹介し、Elasticsearchをインストール、構成、および使用を開始する方法を示します。
前提条件
このチュートリアルに従うには、次のものが必要です。
- 1GB以上のメモリとroot以外のsudoユーザーを備えたCentOS8を実行しているサーバー。 詳細な手順については、 CentOS8の初期サーバーセットアップガイドをご覧ください。
- サーバーにwgetinstalled
ステップ1—CentOS8へのJavaのインストール
ElasticsearchはJavaプログラミング言語で書かれています。 したがって、最初のタスクは、サーバーにJavaランタイム環境(JRE)をインストールすることです。 JREにはネイティブのCentOSOpenJDKパッケージを使用します。 このJREは無料で、十分にサポートされており、CentOSYumインストールマネージャーを介して自動的に管理されます。
OpenJDK8の最新バージョンをインストールします。
- sudo dnf install java-1.8.0-openjdk.x86_64 -y
次に、インストールを確認します。
- java -version
このコマンドは、次のような出力を作成します。
Outputopenjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
Elasticsearchの使用を進めて、より優れたJavaパフォーマンスと互換性を探し始めたら、Oracle独自のJava(Oracle JDK 8)をインストールすることを選択できます。 詳細については、CentOSおよびFedoraにJavaをインストールする方法に関する記事を参照してください。
ステップ2—CentOS8でのElasticsearchのダウンロードとインストール
Elasticsearchはelastic.coから直接ダウンロードできます。 zip
, tar.gz
, deb
、 また rpm
パッケージ。 CentOSの場合、ネイティブを使用するのが最適です rpm
パッケージ。Elasticsearchの実行に必要なすべてのものがインストールされます。
この記事の執筆時点では、Elasticsearchの最新バージョンは7.9.2です。
作業ディレクトリから、プログラムをダウンロードします。
- sudo rpm -ivh https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-x86_64.rpm
Elasticsearchはにインストールされます /usr/share/elasticsearch/
、設定ファイルが配置されている /etc/elasticsearch
とその初期化スクリプトが追加されました /etc/init.d/elasticsearch
.
Elasticsearchがサーバーで自動的に開始および停止するようにするには、そのinitスクリプトをデフォルトのランレベルに追加します。
- sudo systemctl daemon-reload && sudo systemctl enable elasticsearch.service
Elasticsearchをインストールしたら、いくつかの重要な設定を構成します。
ステップ3—CentOS8でElasticsearchを設定する
ElasticsearchとそのJava依存関係をインストールしたので、Elasticsearchを構成します。
Elasticsearch構成ファイルは /etc/elasticsearch
ディレクトリ。 レビューおよび編集するものは次のとおりです。
-
elasticsearch.yml
—Elasticsearchサーバーの設定を構成します。 これはほとんどのオプションが保存される場所であり、それが私たちがこのファイルに主に関心を持っている理由です。 -
jvm.options
—メモリ設定などのJVMの構成を提供します。
Elasticsearchサーバーでカスタマイズする最初の変数は次のとおりです。 node.name
と cluster.name
の elasticsearch.yml
. 今それをしましょう。
彼らの名前が示すように、 node.name
サーバー(ノード)の名前と、後者が関連付けられているクラスターを指定します。 これらの変数をカスタマイズしない場合は、 node.name
サーバーのホスト名に関して自動的に割り当てられます。 The cluster.name
デフォルトのクラスターの名前に自動的に設定されます。
The cluster.name
valueは、Elasticsearchの自動検出機能によって使用され、Elasticsearchノードを自動的に検出してクラスターに関連付けます。 したがって、デフォルト値を変更しないと、クラスター内の同じネットワーク上に不要なノードが見つかる可能性があります。
メインの編集を始めましょう elasticsearch.yml
構成ファイル。
を使用して開きます nano
またはお好みのテキストエディタ:
- sudo nano /etc/elasticsearch/elasticsearch.yml
を削除します #
行頭の文字 node.name
と cluster.name
コメントを外してから、値を変更します。 での最初の構成変更 /etc/elasticsearch/elasticsearch.yml
ファイルは次のようになります。
...
node.name: "My First Node"
cluster.name: mycluster1
...
ネットワーク設定は、 elasticsearch.yml
. デフォルトでは、Elasticsearchはポート9200のローカルホストでリッスンするため、同じサーバーのクライアントのみが接続できます。 Elasticsearchのオープンソースおよび無料版は認証機能を提供していないため、セキュリティの観点からこれらの設定は変更しないでください。
もう1つの重要な設定は node.roles
財産。 これをに設定できます master-eligible
(単に master
構成内)、 data
また ingest
.
The master-eligible
役割は、クラスターの正常性と安定性に責任があります。 多数のクラスターノードを使用する大規模なデプロイメントでは、複数の専用ノードを使用することをお勧めします。 master
役割のみ。 通常、専用 master
ノードはデータを保存せず、インデックスも作成しません。 したがって、クラスターの状態が危険にさらされる可能性がある過負荷になる可能性はありません。
The data
ロールは、データを格納するノードを定義します。 データノードが過負荷になった場合でも、追加の負荷をかける他のノードがあれば、クラスターの状態に深刻な影響を与えることはありません。
最後に、 ingest
ロールを使用すると、ノードはデータストリームを受け入れて処理できます。 大規模なセットアップでは、専用にする必要があります ingest
で起こりうる過負荷を回避するためのノード master
と data
ノード。
注: 1つのノードに1つ以上の役割があり、Elasticsearchセットアップのスケーラビリティ、冗長性、および高可用性を実現できます。 デフォルトでは、これらの役割はすべてノードに割り当てられています。 これは、この記事で説明するシナリオ例のように、単一ノードのElasticsearchに適しています。 したがって、役割を変更する必要はありません。 それでも、ノードを専用にするなど、役割を変更したい場合は master
、変更することでそれを行うことができます /etc/elasticsearch/elasticsearch.yml
このような:
...
node.roles: [ master ]
...
変更を検討するもう1つの設定は path.data
. これにより、データが保存されるパスが決まります。デフォルトのパスは次のとおりです。 /var/lib/elasticsearch
. 本番環境では、Elasticsearchデータを保存するために専用のパーティションとマウントポイントを使用することをお勧めします。 最良の場合、この専用パーティションは、より優れたパフォーマンスとデータ分離を提供する別個のストレージメディアになります。 別のを指定できます path.data
コメントを外してパス path.data
行とその値を次のように変更します。
...
path.data: /media/different_media
...
すべての変更を行ったので、保存して閉じます elasticsearch.yml
.
また、で構成を編集する必要があります jvm.options
.
ElasticsearchはJVMによって実行されることを思い出してください。 本質的にはJavaアプリケーションです。 したがって、他のJavaアプリケーションと同様に、ファイルで構成できるJVM設定があります。 /etc/elasticsearch/jvm.options
. 特にパフォーマンスに関して、最も重要な2つの設定は次のとおりです。 Xms
と Xmx
、最小値を定義します(Xms
)および最大(Xmx
)メモリ割り当て。
デフォルトでは、両方がに設定されています 1GB
、しかしそれはほとんど決して最適ではありません。 それだけでなく、サーバーに1GBのRAMしかない場合、デフォルト設定でElasticsearchを起動することはできません。 これは、オペレーティングシステムが少なくとも100MBを使用するため、Elasticsearchに1GBを割り当てることができないためです。
残念ながら、メモリ設定を計算するための普遍的な公式はありません。 当然、割り当てるメモリが多いほどパフォーマンスは向上しますが、サーバー上の残りのプロセス用に十分なメモリが残っていることを確認してください。 たとえば、マシンに1GBのRAMがある場合、両方を設定できます Xms
と Xmx
に 512MB
、したがって、残りのプロセスにさらに512MBを許可します。 通常は両方に注意してください Xms
と Xmx
JVMガベージコレクションのパフォーマンスの低下を回避するために、同じ値に設定されます。
サーバーにRAMが1GBしかない場合は、この設定を編集する必要があります。
開ける jvm.options
:
- sudo nano /etc/elasticsearch/jvm.options
今すぐ変更します Xms
と Xmx
の値 512MB
:
...
-Xms512m
-Xmx512m
...
ファイルを保存して終了します。
次に、Elasticsearchを初めて起動します。
- sudo systemctl start elasticsearch.service
Elasticsearchを使用する前に、Elasticsearchが起動するまで少なくとも10秒待ちます。 そうしないと、接続エラーが発生する可能性があります。
注:すべてのElasticsearch設定が設定され、構成ファイルに保持されているわけではないことを知っておく必要があります。 代わりに、一部の設定はAPIを介して設定されます。 index.number_of_shards
と index.number_of_replicas
. 1つ目は、インデックスが分割されるピース(シャード)の数を決定します。 2つ目は、クラスター全体に分散されるレプリカの数を定義します。 シャードを増やすとインデックス作成のパフォーマンスが向上し、レプリカを増やすと検索が高速になります。
単一ノードでElasticsearchを引き続き調査およびテストしていると仮定すると、次のcurlコマンドを実行して、これらの設定を試して変更することができます。
- curl -XPUT -H 'Content-Type: application/json' 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{
- "index.number_of_replicas" : "0",
- "index.number_of_shards" : "1"
- }'
Elasticsearchをインストールして構成したら、サーバーを保護してテストします。
ステップ4—(オプション)CentOS8でElasticsearchを保護する
Elasticsearchにはセキュリティが組み込まれておらず、HTTPAPIにアクセスできる人なら誰でもそれを制御できます。 このセクションは、Elasticsearchを保護するための包括的なガイドではありません。 それとそれが実行されているサーバー/仮想マシンへの不正アクセスを防ぐために必要な対策を講じてください。
デフォルトでは、Elasticsearchはローカルホストネットワークインターフェースでのみリッスンするように設定されています。 リモート接続はできません。 次のいずれかまたは両方の対策を講じていない限り、この設定は変更しないでください。
- TCPポート9200へのアクセスを、iptablesを使用する信頼できるホストにのみ制限しました。
- 信頼できるホスト間にvpnを作成し、vpnの仮想インターフェースの1つでElasticsearchを公開します。
上記を実行した後でのみ、Elasticseachがローカルホスト以外の他のネットワークインターフェイスでリッスンできるようにすることを検討する必要があります。 このような変更は、たとえば、別のホストからElasticsearchに接続する必要がある場合に考慮される可能性があります。
ネットワークの露出を変更するには、ファイルを開きます elasticsearch.yml
:
- sudo nano /etc/elasticsearch/elasticsearch.yml
このファイルで、を含む行を見つけます network.host
、削除してコメントを外します #
行の先頭に文字を入力し、値をセキュリティで保護されたネットワークインターフェイスのIPアドレスに変更します。 行は次のようになります。
...
network.host: 10.0.0.1
...
警告: Elasticsearchにはセキュリティが組み込まれていないため、制御または信頼していないサーバーからアクセスできるIPアドレスにこれを設定しないことが非常に重要です。 Elasticsearchをパブリックまたは共有プライベートネットワークIPアドレスにバインドしないでください。
また、セキュリティを強化するために、カスタム式の評価に使用されるスクリプトを無効にすることができます。 カスタムの悪意のある表現を作成することにより、攻撃者は環境を危険にさらす可能性があります。
カスタム式を無効にするには、最後に次の行を追加します /etc/elasticsearch/elasticsearch.yml
ファイル:
...
[label /etc/elasticsearch/elasticsearch.yml]
script.allowed_types: none
...
上記の変更を有効にするには、Elasticsearchを再起動する必要があります。
今すぐElasticsearchを再起動します。
- sudo service elasticsearch restart
このステップでは、Elasticsearchサーバーを保護するためのいくつかの対策を講じました。 これで、アプリケーションをテストする準備が整いました。
ステップ5—CentOS8でElasticsearchをテストする
これで、Elasticsearchはポート9200で実行されているはずです。 これを使用してテストできます curl
、クライアント側のURL転送用のコマンドラインツール。
サービスをテストするには、 GET
このようなリクエスト:
- curl -X GET 'http://localhost:9200'
次の応答が表示されます。
Output{
"name" : "My First Node",
"cluster_name" : "mycluster1",
"cluster_uuid" : "R23U2F87Q_CdkEI2zGhLGw",
"version" : {
"number" : "7.9.2",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "d34da0ea4a966c4e49417f2da2f244e3e97b4e6e",
"build_date" : "2020-09-23T00:45:33.626720Z",
"build_snapshot" : false,
"lucene_version" : "8.6.2",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
同様の応答が表示された場合、Elasticsearchは正常に機能しています。 そうでない場合は、インストール手順を再確認し、Elasticsearchが完全に起動するまでしばらく待ちます。
これでElasticsearchサーバーが動作可能になりました。 次のステップでは、アプリケーションからいくつかのデータを追加および取得します。
ステップ6—CentOS8でElasticsearchを使用する
このステップでは、Elasticsearchにデータを追加してから、手動でクエリを実行します。
使用する curl
最初のエントリを追加するには:
- curl -H 'Content-Type: application/json' -X POST 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'
次の出力が表示されます。
Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":3,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":2,"_primary_term":4
使用する curl
、HTTPを送信しました POST
Elasticseachサーバーへのリクエスト。 リクエストのURIは /tutorial/helloworld/1
. これらのパラメータを詳しく見てみましょう。
tutorial
Elasticsearchのデータのインデックスです。helloworld
タイプです。1
上記のインデックスとタイプの下にあるエントリのIDです。
すべてのコンテンツタイプを設定する必要があることに注意してください POST
引数付きのJSONへのリクエスト -H 'Content-Type: application/json'
. これを行わないと、Elasticsearchはリクエストを拒否します。
次に、HTTPを使用して最初のエントリを取得します GET
リクエスト:
- curl -X GET 'http://localhost:9200/tutorial/helloworld/1'
結果は次のようになります。
Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":3,"_seq_no":2,"_primary_term":4,"found":true,"_source":{ "message": "Hello World!" }}
既存のエントリを変更するには、HTTPを使用できます PUT
このようなリクエスト:
- curl -H 'Content-Type: application/json' -X PUT 'localhost:9200/tutorial/helloworld/1?pretty' -d '
- {
- "message": "Hello People!"
- }'
Elasticsearchは、次のような変更が成功したことを確認します。
Output{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
上記の例では、 message
への最初のエントリの "Hello People!"
. それで、バージョン番号はに増加しました 2
.
あなたの出力を作成するには GET
操作がより人間に読めるようになり、結果を「きれいにする」こともできます。 pretty
口論:
- curl -X GET 'http://localhost:9200/tutorial/helloworld/1?pretty'
これで、応答がより読みやすい形式で出力されます。
Output{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"_seq_no" : 1,
"_primary_term" : 1,
"found" : true,
"_source" : {
"message" : "Hello People!"
}
}
これは、Elasticsearchでデータを追加およびクエリする方法です。 その他の操作については、ElasticsearchAPIのドキュメントを確認してください。
結論
このチュートリアルでは、CentOS 8でElasticsearchをインストール、構成し、使用を開始しました。 手動クエリに慣れたら、次のタスクはアプリケーションからサービスの使用を開始することです。