2016-08-08 6 views
0

私はElasticsearch料理ブックを使用しています。1つの実行リストでElasticクラスタを動的に構築できますか?

私の究極の目標:

  • が 実行ES
  • に未設定されている4つの以上の以前に展開VMが、私はこれらのすべてのノードに同じレシピ/ runlistを適用して、それが をインストールし、設定します私のためのESクラスタ

この道を行く前に私はこれが可能かどうか知りたいのですが、ノード固有の構成があるため、実行リスト。

ノードに希望のホスト名とIPが事前に設定されている場合は、ノード属性を使用してconfigsにこの情報を埋め込むことができます。レシピでランダムに4つ以上のノードのうち3つを選択してプライマリーシャードにすることはできますか?

+0

補足として:シェイフ自身の制限に、Elasticのコミュニティクックブックを混同しないでください。あなたはそれを十分に記述することができれば、いつでもあなたが望むことをするソフトウェアを書くことができます。 – coderanger

+0

私が知っているノード固有の設定はありません。あなたの最大の問題はElasticそのものであり、コミュニティクックブックではありませんが、クラスタを構築する前にクラスター内のノードのIPをすでに知っていれば、設定ファイルを書いているだけです。 – Martin

+0

少なくとも、私はノードIPのリストを維持し、それが実際のノードのIPと同期していることを確認する必要がありますか? – red888

答えて

2

これは間違いなく可能です。そこにはもっと良い練習があるかもしれませんが(共有してください)、Chef searchとタグを使ってこのようなダイナミックなクラスタを作成することができました(ESではなく、領事のための料理本を書いていましたが)。

メインESマスタとしてタグ付けされたノードのシェフを検索します。見つからない場合は、現在のノードをマスターとして収束させます。マスタが存在する場合は、現在のノードをスレーブとして収束させます。

シェフ検索結果には、ESマスターのすべてのノード情報が含まれます。事前に設定されたIPとホスト名を維持する代わりに、検索結果のノードオブジェクトから取得します(縮尺を考慮してください)。

以下のスニペットは、master.rbレシピとslave.rbレシピがあることを前提としています。

es_servers = search(
:node, 
"tags:elasticsearch AND chef_environment:#{node.chef_environment}" 
) 

if es_servers.length < 1 || tagged?('elasticsearch') 

    # Configure this node with as ES master 
    # .. 
    include_recipe 'es::master' 

    # tag this node as a server 
    tag('elasticsearch') unless tagged?('elasticsearch') 

else 

    # There are already 1 ES servers. 
    include_recipe 'es::slave' 

end 

の注意点:*あなたが4つのノードにレシピを追加すると同時に、シェフ・クライアントを実行すると、彼らはすべてのマスターノードとしてスピンアップでしょう。クラスタの初期ビルドの場合は、まずマスターを構築してからスレーブを構築します。

関連する問題