ローカルマシンにエラスティック検索をインストールしました。クラスター(スタンドアロンサーバー)で唯一の単一ノードとして構成します。つまり、新しいインデックスを作成するたびに、サーバーでのみ使用可能になります。他のサーバーからはアクセスできません。
私の現在のシナリオでは、これらのインデックスは他のサーバーで利用でき(サーバーはクラスター内に形成されます)、インデックスに変更を加えることができます。しかし、私はそれを望んでいません。
私は他のいくつかのブログを調べましたが、最良の解決策を得ていません。それでは、同じ手順を教えてください。
Kimchy:ノードをlocal(true)に設定します。これは、同じJVM内でのみ、ネットワークを使用して他のノードを検出しないことを意味します。
elasticsearch/bin/elasticsearch.ymlファイル内
node.local: true # disable network
elasticsearch.yml
# Note, that for development on a local machine, with small indices, it usually
# makes sense to "disable" the distributed features:
#
index.number_of_shards: 1
index.number_of_replicas: 0
コードで同じ構成を使用します。
また、ノードを分離するには、node.local: true
またはdiscovery.zen.ping.multicast: false
を使用します
ElasticSearch 5に関連する情報は次のとおりです。
changelog によると、ES 5でローカルモードを有効にするには、transport.type: local
あなたのelasticsearch.yml
の代わりに node.local: true
。
コードでネットワークトランスポートを使用している場合、node.local
は、LocalTransportのみを提供します。
設定するのがコツです
discovery.zen.ping.multicast: false
あなたのelasticsearch.yml
これは、他のノードを探すノードを停止します。
しかし、これにより他のノードがあなたのノードを発見するのを妨げるかどうかはわかりません。これは、同じネットワーク上の同じ設定を持つノードのグループに影響を与えるためにのみ必要でした。
シングルNodeでElasticsearchを実行し、パブリックIPにバインドできるようにする場合、2つの重要な設定があります。
network.Host: <PRIVATE IP OF Host>
discovery.type: single-node
私は自分のコンテナでelasticsearch.ymlを書いたり上書きしたりせずにこれをやりたかった。ここでは、構成ファイルはありません
Elasticsearchを開始する前に環境変数を設定します。
discovery.type=single-node
https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html
これで問題が解決します:
PUT /_all/_settings
{"index.number_of_replicas":0}
ESバージョン5でテスト済み。
これらはすべて私を助けませんでした(そして悲しいことにbhdrknの答えを読みませんでした)。私にとっては、新しいノードがマルチキャスト経由で自動的に追加されない個別のインスタンスが必要になるたびに、elasticsearchのクラスター名を変更することができました。
Cluster.nameを変更するだけです:elasticsearch.ymlの{{elasticsearch.clustername}}。 Ansible経由。これは、Dev、QA、およびProduction(エンタープライズ環境の標準的なユースケース)などの個別のステージを構築する場合に特に役立ちます。
また、logstashを使用してデータをelasticsearchに入れる場合は、同じクラスター名をoutput-sectionに入れることを忘れないでください:
output {
elasticsearch {
cluster => "{{ elasticsearch.clustername }}"
}
}
そうしないと、「logstash- *」インデックスが正しく構築されません...