これは間違いなく可能です。そこにはもっと良い練習があるかもしれませんが(共有してください)、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つのノードにレシピを追加すると同時に、シェフ・クライアントを実行すると、彼らはすべてのマスターノードとしてスピンアップでしょう。クラスタの初期ビルドの場合は、まずマスターを構築してからスレーブを構築します。
補足として:シェイフ自身の制限に、Elasticのコミュニティクックブックを混同しないでください。あなたはそれを十分に記述することができれば、いつでもあなたが望むことをするソフトウェアを書くことができます。 – coderanger
私が知っているノード固有の設定はありません。あなたの最大の問題はElasticそのものであり、コミュニティクックブックではありませんが、クラスタを構築する前にクラスター内のノードのIPをすでに知っていれば、設定ファイルを書いているだけです。 – Martin
少なくとも、私はノードIPのリストを維持し、それが実際のノードのIPと同期していることを確認する必要がありますか? – red888