ESクラスターの設定方法は?


81

Elasticsearchクラスターを実行するマシンが5台あり、それらがすべて共有ドライブに接続されていると仮定します。その共有ドライブにelasticsearchのコピーを1つ置いて、3人全員がそれを見ることができるようにしました。すべてのマシンの共有ドライブでelasticsearchを開始すると、クラスタリングが自動的に機能しますか?または、elasticsearchが5台のマシンで実行されていることを認識できるように、特定の設定を構成する必要がありますか?もしそうなら、関連する設定は何ですか?レプリカの構成について心配する必要がありますか、それとも自動的に処理されますか?


3
インデックスに共有フォルダを使用するつもりはありませんか?
javanna 2013年

回答:


53

その超簡単。

各マシンにはElasticSearchの独自のコピーが必要です(現在のコピーをコピーするだけです)。その理由は、各マシン/ノードが、クラスター全体でシャーディングされた独自のファイルを保持するためです。

本当に行う必要があるのは、構成ファイルを編集してクラスターの名前を含めることだけです。

すべてのマシンが同じクラスター名を持っている場合、elasticsearchは残りを自動的に実行します(マシンがすべて同じネットワーク上にある限り)

開始するには、こちらをお読みくださいhttps//www.elastic.co/guide/en/elasticsearch/guide/current/deploy.html

インデックス(データの行き先)を作成するときは、その時点で必要なレプリカの数を定義します(レプリカはクラスター全体に分散されます)


9
また、ヘッドプラグインをインストールします。これにより、インデックスの状態の監視が非常に簡単になります。mobz.github.io/elasticsearch-head
Transact Charlie

1
マシンごとに別々のコピーが必要なのはなぜですか?シングルノードマシンで見たものに基づいて、ノード名を変更して、同じコピーで複数のインスタンスを実行することができます:concept47.com/austin_web_developer_blog/elasticsearch/…これは、単一の共有ドライブを持つ別々のマシンがある場合には適用されません。 ?シングルコピーにクラスター名を設定すると、各マシンでそのシングルコピーを実行できると思います。そのため、クラスター名は理論的には同じでしょうか、それとも間違っていますか?
Rolando

各マシン(またはノード)は、luceneインデックスファイルを書き込むために独自のファイルスペースを必要とします。ローカルノード上の別のディレクトリを指すように構成ファイルを変更する(リンクを確認する)と、機能する可能性があります。
トランザクションチャーリー

Elasticsearchの単一のインスタンスが別のインスタンスがすでに実行されていることを自動的に認識できるため、各クラスターのノード名が異なるという印象を受けました。elasticsearchはノードに基づいて個別のディレクトリを作成します。(これが正しい仮定でない場合は私を訂正してください)
Rolando 2013年

1
試してみませんか?いつでもクリーンアップできますか?報告してください-興味があります。過去には、より冗長で安全に思えたため、各マシンでインストールを実行していました。
トランザクションチャーリー

53

通常は自動的に処理されます。

自動検出が機能しない場合。ユニキャスト検出を有効にして、ElasticSearch構成ファイルを編集します

ノード1:

    cluster.name: mycluster
    node.name: "node1"
    node.master: true
    node.data: true
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["node1.example.com"]

ノード2:

    cluster.name: mycluster
    node.name: "node2"
    node.master: false
    node.data: true
    discovery.zen.ping.multicast.enabled: false
    discovery.zen.ping.unicast.hosts: ["node1.example.com"]

ノード3,4,5についても同様です。ノード1をマスターにし、残りをデータノードとしてのみ作成します。

編集: ES規則Nにより、N/2+1ノードがある場合、慣例により、ノードはフェイルオーバーメカニズムのマスターである必要があることに注意してください。ただし、ノードはデータノードである場合とそうでない場合があります。

また、自動検出が機能しない場合、最も可能性の高い理由は、ネットワークが自動検出を許可していない(したがって無効になっている)ためです。複数のサーバー間で発生する自動検出pingが多すぎる場合、それらのpingを管理するためのリソースにより、他のサービスが正しく実行されなくなります。

たとえば、10,000ノードのクラスターと10,000ノードすべてが自動pingを実行しているとします。


明確にするために、すべての「unicast.hosts」をマスターのIP / FQDNにする必要がありますか?あなたの例が示しているもののようです。
ハーパービル2014

あなたが設定した「node.master:false」の場合は1.7.xでelasticsearch.ymlのコメントによると、そのノードがマスター....になることはありません
Jonesome復活モニカ

@ Jonesome-私の例は、1つのマスターノードと1つを超えるデータノードを示しています。ノードをマスターとして機能させたくない場合は、プロパティをfalseに設定しても問題ありません。ただし、ノードをマスターにしたい場合は、このプロパティに触れないでください。
KannarKK 2015

@KannarKKしかし、ESでは、1を除くすべてのノードで「node.master:false」を設定すると、マスターがダウンした場合、クラスター全体がダウンしませんか?それはクラスターの主要な目的を打ち負かしませんか?「node.master」をymlから完全に除外して(デフォルトではtrueに設定)、マスターが停止した場合に別のノードがマスターになることができるようにしないのはなぜですか?
ジョーンズーム復活モニカ2015

@ Jonesome-私はすでにこの情報を回答に含めています:.... ESルールにより、ノードがN個ある場合、慣例により、N / 2 +1ノードはフェイルオーバーメカニズムのマスターである必要があることに注意してください。または、データノードではない場合もあります。したがって、マスターが1人を超える場合は、ホストのリストにすべての情報を追加してください
KannarKK 2015

5

@KannarKKがES2.0.2で提案した手順を試しましたが、クラスターを起動して実行できませんでした。明らかに、スレーブ構成でマスターにtcpポート番号を設定したので、何かを理解しました。discovery.zen.ping.unicast.hostsは、検出のためにマスターのポート番号とIPアドレス(tcpポート番号)を必要とします。したがって、次の構成を試してみると、うまくいきます。

ノード1

cluster.name: mycluster
node.name: "node1"
node.master: true
node.data: true
http.port : 9200
tcp.port : 9300
discovery.zen.ping.multicast.enabled: false
# I think unicast.host on master is redundant.
discovery.zen.ping.unicast.hosts: ["node1.example.com"]

ノード2

cluster.name: mycluster
node.name: "node2"
node.master: false
node.data: true
http.port : 9201
tcp.port : 9301
discovery.zen.ping.multicast.enabled: false
# The port number of Node 1
discovery.zen.ping.unicast.hosts: ["node1.example.com:9300"]

4

Elastic Search 7は、クラスター初期化の構成を変更しました。注意すべき重要な点は、ESインスタンスは、インデックスでopsを実行するために通常使用されるHTTPプロトコルではなく、トランスポート層(TCP)を使用して内部的に通信することです。以下は、2台のマシンクラスターの設定例です。

cluster.name: cluster-new
node.name: node-1
node.master: true
node.data: true
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
transport.host: 102.123.322.211
transport.tcp.port: 9300
discovery.seed_hosts: [“102.123.322.211:9300”,"102.123.322.212:9300”]
cluster.initial_master_nodes: 
        - "node-1"
        - "node-2

マシン2の構成:-

cluster.name: cluster-new
node.name: node-2
node.master: true
node.data: true
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
transport.host: 102.123.322.212
transport.tcp.port: 9300
discovery.seed_hosts: [“102.123.322.211:9300”,"102.123.322.212:9300”]
cluster.initial_master_nodes: 
        - "node-1"
        - "node-2”

cluster.name:これは、クラスターの一部となるすべてのマシンで同じです。

node.name:ESインスタンスの識別子。指定しない場合、デフォルトでマシン名になります。

node.master:このESインスタンスをマスターにするかどうかを指定します

node.data:このESインスタンスをデータノードにするかどうかを指定します(データを保持します)

bootsrap.memory_lock:スワッピングを無効にします。このフラグを設定せずにクラスターを開始できます。ただし、ロックを設定することをお勧めします。詳細:https://www.elastic.co/guide/en/elasticsearch/reference/master/setup-configuration-memory.html

network.host:ネットワーク経由でESインスタンスを公開する場合は0.0.0.0。0.0.0.0は127.0.0.1(別名localhostまたはループバックアドレス)とは異なります。これは、マシン上のすべてのIPv4アドレスを意味します。マシンに複数のIPアドレスがあり、サーバーが0.0.0.0をリッスンしている場合、クライアントは任意のIPv4アドレスからマシンに到達できます。

http.port:このESインスタンスがHTTPリクエストをリッスンするポート

transport.host:ホストのIPv4アドレス(これは、異なるマシンで実行されている他のESインスタンスと通信するために使用されます)。詳細:https//www.elastic.co/guide/en/elasticsearch/reference/current/modules-transport.html

transport.tcp.port: 9300(マシンがtcp接続を受け入れるポート)

Discovery.seed_hosts:これは最近のバージョンで変更されました。このクラスターの一部となるESインスタンスのTCPポート(重要)を使用して、すべてのIPv4アドレス初期化します。これは、このクラスターの一部であるすべてのESインスタンスで同じになります。

cluster.initial_master_nodes:マスター選挙に参加しようとしているESマシンのノード名(node.name)(クォーラムベースの意思決定: - 。https://www.elastic.co/guide/en/elasticsearch/reference/current /modules-discovery-quorums.html#modules-discovery-quorums

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.