Ubuntu14.04で本番Elasticsearchクラスターをセットアップする方法

前書き

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 **インターフェイスがあることも前提としています。

Java8をインストール

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をインストールしましょう。

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サーバーでこれらの手順を実行します。

Elasticsearch構成ファイルを開いて編集します。

sudo vi /etc/elasticsearch/elasticsearch.yml

以降のセクションでは、構成を変更する方法について説明します。

V ** IPアドレスまたはインターフェースにバインド

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.110.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を開始

次に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ステータスを確認します

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にアクセスする方法

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

Ubuntu14.04で本番Elasticsearchクラスターをセットアップする方法
Ubuntu14.04でGogsを設定する方法
Ubuntu14.04でRを設定する方法
Ubuntu14.04でMasterlessPuppet環境をセットアップする方法
Ubuntu14.04でUFWを使用してファイアウォールを設定する方法
Ubuntu14.04でShinyServerをセットアップする方法
Ubuntu18.04で時刻同期を設定する方法
Ubuntu16.04に基づいて固定IPを設定する方法
Ubuntu20.04にElasticsearchをインストールする方法
UbuntuとRaspbianでJavaホームを設定する方法
Ubuntu16.04で匿名ダウンロード用にvsftpdを設定する方法
Ubuntu16.04でApache仮想ホストを設定する方法
Ubuntu20.04でApache仮想ホストを設定する方法
Ubuntu14.04でNginxを使用してパスワード認証を設定する方法
Ubuntu16.04でユーザーディレクトリ用にvsftpdを設定する方法
Ubuntu14.04でRedisクラスターを構成する方法
Ubuntu16.04でPostgreSQLの起動を設定する方法
Ubuntu18.04サーバーで静的IPを設定する方法
Ubuntu18.04サーバーで静的IPを設定する方法
CentOS8でSSHキーを設定する方法
ubuntu14.04で静的IPを設定する方法を詳しく説明します
Ubuntu16.04にElasticsearchをインストールして構成する方法
Ubuntu16.04用にGhostワンクリックアプリを設定する方法
Ubuntu18.04に基づいて固定IPを構成する方法
Ubuntu20.04にRubyをインストールする方法
Ubuntu20.04にMemcachedをインストールする方法
Ubuntu20.04にJavaをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
Ubuntu20.04にVirtualBoxをインストールする方法
CentOS7でApache仮想ホストを設定する方法
Ubuntu20.04にNginxをインストールする方法
Ubuntu20.04にApacheをインストールする方法
Ubuntu20.04にGitをインストールする方法
Ubuntu16.04にNode.jsをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
CentOS8にElasticsearchをインストールする方法
Ubuntu20.04にVagrantをインストールする方法
Ubuntu16.04にPostgreSQLをインストールする方法
Ubuntu20.04にGitをインストールする方法
UbuntuでGitサーバーを構築する方法を教えてください
Ubuntu18.04にMemcachedをインストールする方法
Ubuntu16.04にJenkinsをインストールする方法
Ubuntu14.04にMemSQLをインストールする方法
Ubuntu16.04にMongoDBをインストールする方法
Ubuntu14.04にMailpileをインストールする方法
Ubuntu14.04でPHP7にアップグレードする方法
Ubuntu20.04にSkypeをインストールする方法
Ubuntu20.04にJenkinsをインストールする方法
Ubuntu18.04にPython3.8をインストールする方法
Ubuntu18.04にKVMをインストールする方法
Ubuntu20.04にKVMをインストールする方法
ubuntu14.04にopencv3.0.0をインストールする方法
Ubuntu20.04にAnacondaをインストールする方法
Ubuntu18.04にJenkinsをインストールする方法
Ubuntu20.04にApacheをインストールする方法
Ubuntu20.04にRをインストールする方法
Ubuntu20.04でタイムゾーンを設定または変更する方法
CentOS8にElasticsearchをインストールする方法
Ubuntu16.04にMoodleをインストールする方法
Ubuntu14.04にSolr5.2.1をインストールする方法
Ubuntu16.04にTeamviewerをインストールする方法