Elasticsearchは、リアルタイムの分散検索とデータ分析のための人気のあるオープンソース検索サーバーです。開発以外のタスクに使用する場合、Elasticsearchは、最適なパフォーマンス、安定性、およびスケーラビリティのために、複数のサーバーにまたがるクラスターとして展開する必要があります。
このチュートリアルでは、[クラウドサーバー](https://cloud.tencent.com/product/cvm?from=10680)環境のUbuntu14.04に本番Elasticsearchクラスターをインストールして構成する方法を示します。
Elasticsearchクラスターを手動でセットアップすることは学習に役立ちますが、クラスターのセットアップでは構成管理ツールを使用することを強くお勧めします。
Elasticsearchクラスターにはマスターノードとして適格なノードが少なくとも3つある必要があるため、このチュートリアルを完了するには、少なくとも3つのUbuntu14.04サーバーが必要です。専用のマスターノードとデータノードが必要な場合、マスターノードには少なくとも3つのサーバーが必要であり、データノードには追加のサーバーが必要です。サーバーをお持ちでない学生は、[こちら](https://cloud.tencent.com/product/cvm?from=10680)から購入できますが、個人的には、無料のTencent Cloud [Developer Lab](https://cloud.tencent.com/developer/labs?from=10680)を使用して実験し、[サーバーを購入]( https://cloud.tencent.com/product/cvm?from=10680)。
CentOSを使用する場合は、次のチュートリアルを確認してください:[CentOS 7で本番Elasticsearchクラスターをセットアップする方法](https://cloud.tencent.com/developer/article/1354817?from=10680)
このチュートリアルでは、サーバーがV **ネットワークを使用していることを前提としています。サーバーが使用する物理ネットワークの種類に関係なく、これにより専用のネットワーク機能が提供されます。
共有プライベートネットワークを使用している場合は、V **を使用してElasticsearchを不正アクセスから保護する必要があります。 ElasticsearchのHTTPインターフェイスにはセキュリティが組み込まれていないため、各サーバーは同じプライベートネットワーク上にある必要があります。信頼できないコンピューターとプライベートネットワークを共有しないでください。
サーバーのV ** IPアドレスを V ** _ip
と呼びます。また、上記のリンク先のチュートリアルで説明されているように、両方に「tun0」という名前のV **インターフェイスがあることも前提としています。
ElasticsearchにはJavaが必要なので、今すぐインストールします。 Elasticsearchが推奨する最新バージョンのOracleJava8をインストールします。ただし、このルートを使用する場合は、OpenJDKで機能するはずです。
すべてのElasticsearchサーバーでこの手順を実行します。 :
sudo add-apt-repository -y ppa:webupd8team/java
aptパッケージデータベースを更新します。
sudo apt-get update
このコマンドを使用して、Oracle Java 8の最新の安定バージョンをインストールします(そしてポップアップライセンス契約に同意します)。
sudo apt-get-y install oracle-java8-installer
必ずすべてのElasticsearchサーバーでこの手順を繰り返してください。
Java 8がインストールされたので、ElasticSearchをインストールしましょう。
Elasticのパッケージソースリストを追加することにより、Elasticsearchをパッケージマネージャーとともにインストールできます。すべてのElasticsearchサーバーでこの手順を実行します。
次のコマンドを実行して、Elasticsearchの公開GPGキーをaptにインポートします。
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
プロンプトがそこでハングする場合は、ユーザーパスワードを待機している可能性があります( sudo
コマンドを承認します)。その場合は、パスワードを入力してください。
echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main"| sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list
aptパッケージデータベースを更新します。
sudo apt-get update
次のコマンドを使用してElasticsearchをインストールします。
sudo apt-get-y install elasticsearch
すべてのElasticsearchサーバーでこれらの手順を必ず繰り返してください。
Elasticsearchがインストールされましたが、使用する前に構成する必要があります。
次に、Elasticsearch構成を編集します。すべてのElasticsearchサーバーでこれらの手順を実行します。
Elasticsearch構成ファイルを開いて編集します。
sudo vi /etc/elasticsearch/elasticsearch.yml
以降のセクションでは、構成を変更する方法について説明します。
Elasticsearchインスタンスへの外部アクセスを制限して、部外者がHTTPAPIを介してデータにアクセスしたりElasticsearchクラスターをシャットダウンしたりできないようにする必要があります。つまり、プライベートネットワーク(V **)上のサーバーへのアクセスのみを許可するようにElasticsearchを構成する必要があります。このために、V ** IPアドレス V ** _ip
またはインターフェース" tun0 "にバインドするように各ノードを構成する必要があります。
指定された network.host
行を見つけてコメントを外し、その値を対応するサーバーのV ** IPアドレス(たとえば、node01を 10.0.0.1
に置き換えます)またはインターフェース名に置き換えます。 V **インターフェイスはすべてのサーバーで「tun0」という名前なので、すべてのサーバーを同じ行で構成できます。
network.host:[_tun0_, _local_]
「* local *」を追加すると、Elasticsearchがすべてのループバックデバイスもリッスンするように構成されることに注意してください。これにより、各サーバーから localhost
にリクエストを送信することで、Elasticsearch HTTPAPIをローカルで使用できるようになります。この項目を含めない場合、ElasticsearchはV ** IPアドレスの要求にのみ応答します。
警告: Elasticsearchにはセキュリティが組み込まれていないため、制御または信頼できないサーバーからアクセス可能なIPアドレスにこれを設定しないことが非常に重要です。 Elasticsearchをパブリックまたは共有プライベートネットワークのIPアドレスにバインドしないでください。
次に、クラスターの名前を設定します。これにより、Elasticsearchノードが参加してクラスターを形成できるようになります。 (ネットワーク内で)一意でわかりやすい名前を使用する必要があります。
指定された cluster.name
行を見つけてコメントを外し、その値を目的のクラスター名に置き換えます。このチュートリアルでは、クラスターに「本番」という名前を付けます。
cluster.name: production
次に、各ノードの名前を設定します。これは、クラスター内で一意のわかりやすい名前にする必要があります。
指定された node.name
行を見つけてコメントを外し、その値を目的のノード名に置き換えます。このチュートリアルでは、 $ {HOSTNAME}
環境変数を使用して、各ノード名をサーバーのホスト名に設定します。
node.name: ${HOSTNAME}
必要に応じて、ノードに手動で名前を付けることができますが、必ず一意の名前を指定してください。ノードにランダムに名前を付けてもかまわない場合は、 node.name
をコメントアウトすることもできます。
次に、ノードの初期リストを構成する必要があります。このリストは、クラスターを検出して形成するために接続されます。これはユニキャストネットワークで必要です。
指定されたコメントのない discovery.zen.ping.unicast.hosts
行を見つけます。その値を、他のすべてのノードのV ** IPアドレスまたはホスト名(V ** IPアドレスに解決される)の文字列配列に置き換えます。
たとえば、3つのサーバー node01
、 node02
、および node03
と、それぞれのV ** IPアドレス 10.0.0.1
、 10.0.0.2
、および 10.0.0.3
がある場合、これを使用できます。ライン:
discovery.zen.ping.unicast.hosts:["10.0.0.1","10.0.0.2","10.0.0.3"]
または、すべてのサーバーが名前ベースのV ** IPアドレス解決(DNSまたは / etc / hosts
経由)で構成されている場合は、次の行を使用できます。
discovery.zen.ping.unicast.hosts:["node01","node02","node03"]
注: Ansible Playbookは、各サーバーに / etc / hosts
のエントリを自動的に作成し、各V サーバー(Ansibleの hosts
ファイルで指定)のストックホストホスト**をそれに解決します。 V ** IPアドレス。
これで、基本的なElasticsearchクラスターを形成するようにサーバーが構成されました。さらに設定を更新する必要がありますが、クラスターが正しく機能していることを確認すると、これらの設定が表示されます。
elasticsearch.yml
を保存して終了します。
次にElasticsearchを開始します。
sudo service elasticsearch restart
次に、次のコマンドを実行して、起動時にElasticsearchを開始します。
sudo update-rc.d elasticsearch defaults 9510
すべてのElasticsearchサーバーでこれらの手順([Elasticsearchクラスターの構成](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-production-elasticsearch-cluster-on-ubuntu-14-04#configure-elasticsearch-cluster))を必ず繰り返してください。
すべてが正しく構成されている場合は、Elasticsearchクラスターが稼働しているはずです。先に進む前に、正しく機能していることを確認しましょう。これを行うには、ElasticsearchノードからElasticsearchにクエリを実行します。
Elasticsearchサーバーから、次のコマンドを実行してクラスターのステータスを出力します。
curl -XGET 'http://localhost:9200/_cluster/state?pretty'
「production」という名前のクラスターが実行されていることを示す出力が表示されます。また、構成するすべてのノードがメンバーであることを示す必要があります。
{" cluster_name":"production","version":36,"state_uuid":"MIkS5sk7TQCl31beb45kfQ","master_node":"k6k2UObVQ0S-IFoRLmDcvA","blocks":{},"nodes":{"Jx_YC2sTQY6ayACU43_i3Q":{"name":"node02","transport_address":"10.0.0.2:9300","attributes":{}},"k6k2UObVQ0S-IFoRLmDcvA":{"name":"node01","transport_address":"10.0.0.1:9300","attributes":{}},"kQgZZUXATkSpduZxNwHfYQ":{"name":"node03","transport_address":"10.0.0.3:9300","attributes":{}}},...
これに似た出力が表示された場合は、Elasticsearchクラスターが実行されています。欠落しているノードがある場合は、続行する前に関連するノードの構成を確認してください。
次に、Elasticsearchクラスターで考慮する必要のあるいくつかの構成設定を紹介します。
Elasticは、パフォーマンスと安定性に悪影響を与えるため、Elasticsearchプロセスの交換は絶対に避けてください。過度のスワッピングを回避する1つの方法は、必要なメモリをロックするようにElasticsearchを構成することです。
すべてのElasticsearchサーバーでこの手順を実行します。
Elasticsearch構成の編集:
sudo vi /etc/elasticsearch/elasticsearch.yml
指定されたコメントのない bootstrap.mlockall
行を見つけます。
bootstrap.mlockall:true
保存して終了。
次に、編集のために / etc / default / elasticsearch
ファイルを開きます。
sudo vi /etc/default/elasticsearch
まず、 ES_HEAP_SIZE
を探してコメントを外し、使用可能なメモリの約50%に設定します。たとえば、約4 GBの空き容量がある場合は、2 GB( 2g
)に設定する必要があります。
ES_HEAP_SIZE=2g
次に、 MAX_LOCKED_MEMORY = unlimited
を見つけてコメントを外します。完了すると、次のようになります。
MAX_LOCKED_MEMORY=unlimited
保存して終了。
次に、Elasticsearchを再起動して、変更を適用します。
sudo service elasticsearch restart
必ずすべてのElasticsearchサーバーでこの手順を繰り返してください。
mlockall
がすべてのElasticsearchノードで実行されているかどうかを確認するには、任意のノードから次のコマンドを実行します。
curl http://localhost:9200/_nodes/process?pretty
各ノードには、 " mlockall ":true
を示す行が必要です。これは、メモリロックが有効になっていて、正しく機能していることを示します。
..." nodes":{"kQgZZUXATkSpduZxNwHfYQ":{"name":"es03","transport_address":"10.0.0.3:9300","host":"10.0.0.3","ip":"10.0.0.3","version":"2.2.0","build":"8ff36d1","http_address":"10.0.0.3:9200","process":{"refresh_interval_in_millis":1000,"id":1650,"mlockall":true}...
いずれかのノードで mlockall
がfalseの場合は、ノードの設定を確認して、Elasticsearchを再起動してください。 Elasticsearchを開始できない一般的な理由は、 ES_HEAP_SIZE
の設定が高すぎることです。
デフォルトでは、Elasticsearchノードの「オープンファイル記述子の制限」は64kである必要があります。このセクションでは、これを確認する方法を示します。必要に応じて追加できます。
まず、ElasticsearchプロセスのプロセスID(PID)を見つけます。簡単な方法は、 ps
コマンドを使用して、 elasticsearch
ユーザーに属するすべてのプロセスを一覧表示することです。
ps -u elasticsearch
次のような出力が表示されます。最初の列の番号は、Elasticsearch(java)プロセスのPIDです。
PID TTY TIME CMD
11708?00:00:10 java
次に、このコマンドを実行して、Elasticsearchプロセスのオープンファイル制限を表示します(強調表示された番号を前の手順の独自のPIDに置き換えます)。
cat /proc/11708/limits | grep 'Max open files'
Max open files 6553565535 files
2列目と3列目の数字は、それぞれソフト制限とハード制限を表しており、64k(65535)です。これは多くの設定で問題ありませんが、この設定を増やすことをお勧めします。
Elasticsearchで開くファイル記述子の最大数を増やすには、1つの設定を変更するだけで済みます。
編集のために / etc / default / elasticsearch
ファイルを開きます。
sudo vi /etc/default/elasticsearch
MAX_OPEN_FILES
を見つけてコメントを外し、必要な制限に設定します。たとえば、128k記述子を制限する場合は、「131070」に変更します。
MAX_OPEN_FILES=131070
保存して終了。
次に、Elasticsearchを再起動して、変更を適用します。
sudo service elasticsearch restart
次に、前のセクションの手順に従って、制限が引き上げられたことを確認します。
より高いファイル記述子制限を必要とするElasticsearchサーバーでは、必ずこの手順を繰り返してください。
Elasticsearchノードには、** master と data **の2つの一般的なタイプがあります。マスターノードは、インデックスの管理や特定のデータシャードを格納するデータノードの決定など、クラスター全体の操作を実行します。データノードは、インデックス付きドキュメントのフラグメントを保存し、CRUD、検索、および集計操作を処理します。原則として、データノードは多くのCPU、メモリ、およびI / Oを消費します。
デフォルトでは、各Elasticsearchノードは「マスターノードに適合する」データノードとして構成されます。つまり、データを格納し(そしてリソースを大量に消費する操作を実行し)、マスターノードとして選択できます。小さなクラスターの場合、これは通常は問題ありませんが、大きなElasticsearchクラスターは、専用のマスターノードで構成して、マスターノードの安定性が高密度のデータノードの作業によって影響を受けないようにする必要があります。
専用のマスターノードを構成する前に、クラスターにマスターノードと一致するノードが少なくとも3つあることを確認してください。これは、ネットワークに障害が発生したときにデータの不整合を引き起こす可能性のあるスプリットブレインの状況を回避するために非常に重要です。
専用のマスターノードを構成するには、ノードのElasticsearch構成を編集します。
sudo vi /etc/elasticsearch/elasticsearch.yml
次の2行を追加します。
node.master:true
node.data:false
最初の行 node.master:true
は、ノードがマスターノードと一致することを指定するために使用されます。これは実際にはデフォルト設定です。 2行目の node.data:false
は、ノードがデータノードになるように制限します。
保存して終了。
次に、Elasticsearchノードを再起動して、変更を有効にします。
sudo service elasticsearch restart
他の専用マスターノードでもこの手順を繰り返してください。
次のコマンドを使用して、クラスターにクエリを実行し、専用マスターノードとして構成されているノードを確認できます: curl -XGET'http:// localhost:9200 / _cluster / state?pretty'
。 data:false
と master:true
を持つノードは、専用のマスターノードです。
専用データノード(主な条件を満たさないデータノード)を構成するには、ノードのElasticsearch構成を編集します。
sudo vi /etc/elasticsearch/elasticsearch.yml
次の2行を追加します。
node.master:false
node.data:true
最初の行 node.master:false
は、ノードがマスターノードと一致しないことを指定します。 2行目の node.data:true
はデフォルト設定であり、ノードをデータノードとして使用できます。
保存して終了。
次に、Elasticsearchノードを再起動して、変更を有効にします。
sudo service elasticsearch restart
他の専用データノードでもこの手順を繰り返してください。
次のコマンドを使用して、クラスターにクエリを実行し、専用データノードとして構成されているノードを確認できます: curl -XGET'http:// localhost:9200 / _cluster / state?pretty'
。リスト master:false
と**リストされていないノード
data:false`は専用のデータノードです。
Elasticsearchクラスターを実行するときは、クラスターが通常の操作のためにマスターノードに沿って実行する必要があるノードの最小数に設定する必要があります。これはアービトレーションと呼ばれることもあります。これは、1つ以上のノードがクラスターの残りの部分との接続を失った場合にデータの一貫性を確保し、それによっていわゆる「スプリットブレイン」状態を防ぐためです。
クラスターに必要なプライマリノードの最小数を計算するには、 n / 2 + 1
を計算します。ここで、* n *は、正常なクラスター内の「プライマリ適格」ノードの総数であり、結果を最も近い整数に切り捨てます。 。たとえば、3ノードクラスターの場合、クォーラムは2です。
**注:**主な条件を満たすデータノードを含め、すべての適格なノードをアービトレーション計算に含めるようにしてください(デフォルト設定)。
最小マスターノード設定は、Elasticsearch HTTPAPIを介して動的に設定できます。これを行うには、任意のノードで次のコマンドを実行します(強調表示された番号をクォーラムに置き換えます)。
curl -XPUT localhost:9200/_cluster/settings?pretty -d '{"persistent":{"discovery.zen.minimum_master_nodes":2}}'
Output:{"acknowledged":true,"persistent":{"discovery":{"zen":{"minimum_master_nodes":"2"}}},"transient":{}}
**注:**このコマンドは「永続的」設定です。これは、クラスターを完全に再起動してElasticsearch構成ファイルを上書きした後も、最小マスターノード設定が引き続き存在することを意味します。さらに、ダイナミクスをまだ設定していない場合、この設定は / etc / elasticsearch.yml
で discovery.zen.minimum_master_nodes:2
として指定できます。
後でこの設定を確認する場合は、次のコマンドを実行できます。
curl -XGET localhost:9200/_cluster/settings?pretty
Elasticsearch HTTP APIにアクセスするには、任意のノードのV ** IPアドレスにリクエストを送信するか、チュートリアルに示すように、ノードの1つから localhost
にリクエストを送信してElasticsearch HTTPAPIにアクセスします。
クライアントサーバーは、任意のノードのV ** IPアドレスを介してElasticsearchクラスターにアクセスできます。つまり、クライアントサーバーもV **の一部である必要があります。
クラスタに接続する必要のある他のソフトウェア(KibanaやLogstashなど)がある場合は、通常、1つ以上のElasticsearchノードのV ** IPアドレスをアプリケーションに提供することで接続を構成できます。
Elasticsearchクラスターは正常な状態で実行され、いくつかの基本的な最適化で構成されている必要があります。
Elasticsearchには、インデックス作成、シャーディング、レプリケーション設定など、ここで説明されていない他の多くの構成オプションがあります。クラスタ構成がニーズを満たしていることを確認するために、後で構成と公式ドキュメントに再度アクセスすることをお勧めします。
その他のUbuntuチュートリアルについては、[Tencent Cloud + Community](https://cloud.tencent.com/developer?from=10680)にアクセスして詳細を確認してください。
参照:「Ubuntu14.04で本番Elasticsearchクラスターをセットアップする方法」
Recommended Posts