web-dev-qa-db-ja.com

Elasticsearchクラスターに新しいノードを追加する方法

クラスターには1つのノードしかないため、yellowヘルスがあります。そのため、他のノードを使用してレプリカを格納できないため、レプリカは未署名のままです。

だから、Elasticsearchがレプリカの割り当てを開始できるように、別のノードを作成/追加したい。 1台のマシンで、ESをサービスとして実行している

私はいくつかの情報を持つサイトをたくさん見つけましたが、それらのどれも私に与えていませんclearlyどうすればESに別のノードを追加できますか。

クラスター内に別のノードを作成するために、どのファイルを編集する必要があり、どのコマンドを起動する必要があるかを誰かが説明できますか? 2つのESインスタンスを実行する必要がありますか?これどうやってするの?

前もって感謝します。

21
Avión

別のノードを追加するためのヒント:

1)バージョン:

すべてのノードのステータスを確認することをお勧めします。 http:// elastic-node1:9200 /

ほとんどの場合、バージョンは同じでもマイナーである必要があることに留意してください

{
"name" : "node2",
"cluster_name" : "xxxxxxxxxxx",
"cluster_uuid" : "n-xxxxxxxxxxxxxxx",
"version" : {
  "number" : "5.2.2",
  "build_hash" : "xxxx",
  "build_date" : "20-02-24T17:26:45.835Z",
  "build_snapshot" : false,
  "lucene_version" : "6.4.1"
},
"tagline" : "You Know, for Search"
}

Node1に異なるバージョン番号が表示されている場合、たとえば.

  "number" : "5.2.1"

その場合、ノードをバージョン5.2.2に更新する必要があります(node1と同じ)。

2)ノードとレプリカ:

ノードのユースケースは何ですか? 3つのノードの場合、これを行います。

curl -XPUT 'localhost:9200/_cluster/settings?pretty' -H 'Content-Type: application/json' -d'
{
  "transient": {
    "discovery.zen.minimum_master_nodes": 3
  }
}
'

さらに良いのは、Elasticsearchの設定ファイルの設定を変更することです:

/etc/elasticsearch/elasticsearch.yml 

# need to be changed on each node (has to be unique for each node):
node.name: node1

# need to be the same in all nodes:
cluster.name: my_cluster
discovery.zen.ping.unicast.hosts: ["IP_ADDRESS_OR_HOSTNAME1", "IP_ADDRESS_OR_HOSTNAME2", "IP_ADDRESS_OR_HOSTNAME3"]

3つのノードがある場合、2つのレプリカと1つのプライマリが必要ですか?

curl -XPUT 'localhost:9200/_settings?pretty' -H 'Content-Type: application/json' -d'
{
    "index" : {
        "number_of_replicas" : 2
    }
}'

3)ノードが有効になっていることを確認する

ノードをキックする方法があります:

curl -XPUT localhost:9200/_cluster/settings -d '{
  "transient" :{
      "cluster.routing.allocation.exclude._ip" : "NODE_TO_REMOVE_IP_ADDRESS_OR_HOSTNAME"
   }
}';echo

そのため、それを行って、ノードを再び追加したい場合: https://www.elastic.co/guide/en/elasticsearch/guide/current/_rolling_restarts.html

次のリクエストでそれを行うことができます(上記のリンクを注意深くお読みください):

curl -XPUT localhost:9200/_cluster/settings -d '{
  "transient" :{
        "cluster.routing.allocation.enable" : "all"
   }
}';echo

4)決して忘れない、ネットワーキング:

ファイアウォール、ネットワーク...ポート9200で新しいノードに到達できますか? Webブラウザで表示できますか?

あなたはできる

curl http://your-elasticsearch-hostname:9200/

クラスターからノードを削除するためのヒント:

1)APIで削除

curl -XPUT 'http://localhost:9200/_cluster/settings?pretty' -d '
{
  "transient" : {
    "cluster.routing.allocation.exclude._name" : "node3"
  }
}'

2)設定ファイルを確認してください

/etc/elasticsearch/elasticsearch.ymlの下の設定ファイルを確認します

保持するノードのみを残します。

discovery.zen.ping.unicast.hosts:["IP_ADDRESS_OR_HOSTNAME1", "IP_ADDRESS_OR_HOSTNAME2"]

*ステータスの確認*

チェック http:// elk-pipeline:9200/_cat/shards あなたのステータスは?表示される可能性があります:初期化これは、おそらくデータが転送されることを意味します。したがって、データが(SSD上ではなく)大きい場合は、待ってください。

忘れないでください

次のように入力して、データが現在移動しているかどうかを確認できます。

[watch] du /var/lib/elasticsearch/

今のところ、それがすべてだ。随時、ここに情報を追加していきます。

変更/追加してください。

13
Nimitack

Windows Boxでの完全な手順は次のとおりです。

  1. たとえば、エラスティックをC:\ ELK\elastic \に解凍しますbin\service install elastic-search-x64-node01という名前のサービスを作成するコマンドelastic-search-x64-node01を実行します
  2. elasticsearch.yml構成ファイルの編集:

    cluster.name: Animals
    node.name: Snake
    node.master: true
    node.data: true
    path.data: C:\ELK\storage\data
    path.logs: C:\ELK\storage\logs
    http.port: 9200
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
    
  3. service manager elastic-search-x64-node01を実行し、サービスルールを設定してサービスを開始します

  4. たとえば、エラスティックをC:\ ELK\elastic2 \に解凍し、bin\service install elastic-search-x64-node02という名前のサービスを作成するコマンドelastic-search-x64-node02を実行します。

  5. elasticsearch.yml構成ファイルの編集:

    cluster.name: Animals
    node.name: Baboon
    node.master: false
    node.data: true
    path.data: C:\ELK\storage\data
    path.logs: C:\ELK\storage\logs
    http.port: 9201
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
    
  6. service manager elastic-search-x64-node02を実行し、サービスルールを設定してサービスを開始します

この時点で、2つの個別のノードがあります(それらは同じフォルダーにデータを格納しますが、2番目のノードのpath.dataを編集するにはあまりにも怠zeです)2つの個別のWindowsサービスとGET http://localhost:9200/_cluster/health

{
  "cluster_name": "Animals",
  "status": "green",
  "timed_out": false,
  "number_of_nodes": 2,
  "number_of_data_nodes": 2,
  "active_primary_shards": 4,
  "active_shards": 8,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 0,
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 100
}
8
laggerok19

まず、レプリカを削除して緑色の状態に戻すことができます。これは、インデックスを作成してドキュメントを追加した後でも行うことができます。

レプリカカウントを0に設定する方法は次のとおりです。

curl -XPUT 'localhost:9200/my_index/_settings' -d '
{
    "index" : {
        "number_of_replicas" : 0
    }
}'

クラスターに別のノードを単純に追加する場合は、elasticsearch.ymlを編集する必要があります。できれば、両方のノードで次の変更を加えてください。

cluster.name: my-cluster
node.name: node01
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["192.168.0.5"]

他方を参照するように各ノードのユニキャストホストを設定し、両方のノードで同じクラスター名を設定し、各ノードに一意の名前を付けてから、両方のESインスタンスを再起動すると、クラスターがオンラインになります。

6
Or Weinberger

ここにあなたの質問が何であるか明確ではありません。 2つの可能性があります。

1)2つのノードがあり、それらがお互いを見ることができるようにします。これに関する多くのドキュメントが至る所にあります。この場合、各ホストが相互に通信できることを確認するテストを行うことをお勧めします。つまり、sshでホストAに接続し、ホストB:9200をカールしようとします。また、構成が正しく設定されていることを確認する必要があります。

2)ローカルマシンに「クラスター」をセットアップしたい。この場合、2つの個別の構成ファイルが必要になり、2番目の「ノード」に特定の構成ファイルを使用してelasticsearchを起動する必要があります(2番目の構成を変更して異なるポートを使用するなど)。次のリンクを確認してください: http://www.concept47.com/austin_web_developer_blog/elasticsearch/how-to-run-multiple-elasticsearch-nodes-on-one-machine/

しかし、はい、最終的に、両方が同じマシン上にあるか、2つの異なるマシンがあなたに任されているかに関係なく、elasticsearchプロセスを実行する必要があります

1
sinneduy

Elasticsearch n localを実行している場合は、別のターミナルに移動してelasticsearchを再度実行します。この方法では、2つのインスタンスがあります。

新しく実行されたインスタンスで次のメッセージが表示されます。

[Black Widow] detected_master [N'Garai]

既に実行中のインスタンス(master node)

[N'Garai] added {[Black Widow]

[N'Garai]および{[Black Widow]はランダムなノード名になります。

0
Richa