私たちは展開にchefを使用してきましたが、簡単なシナリオでは素晴らしく機能します. ただし、VM インフラストラクチャで冗長アーキテクチャをスクリプト化する必要があります。いくつかのボックスがクラスター化されていますが、chef スクリプトを途中で実行すると失敗します。たとえば、Windows クラスターをプロビジョニングしたいとします。サーバー 1 はフェールオーバー クラスター機能を構成してクラスターの形成を試みることができますが、サーバー 2 はまだ構成されていないため、実行は失敗します。
これはどのように行うべきですか?ここに私たちが思いついたいくつかのアイデアがあります:
- 失敗するが、継続的に再実行すると最終的に成功することを認識して、chef の実行を設計します。
- これは、フィードバックがあいまいになるため、自動化の観点からは理想的ではありません。実行は予想どおりに失敗しましたか、それとも不明な理由で失敗しましたか? これを設定するには人間が必要になる可能性があります。
- これは、フィードバックがあいまいになるため、自動化の観点からは理想的ではありません。実行は予想どおりに失敗しましたか、それとも不明な理由で失敗しましたか? これを設定するには人間が必要になる可能性があります。
カスタム レシピから「knife ssh」を呼び出して、レシピがサーバー 1 で実行されているときにサーバー 2 をプロビジョニングします。次に例を示します。
windows_feature "FailoverClusters" do action: install end # ensure server 2 has the cluster feature enabled # (this would likely be implemented as a LWRP using the the Knife::Chef::Ssh class rather than the execute LWRP) execute 'knife ssh "name:Server2" "recipe[windows_cluster::secondary]"' action :run end # join the second server to this cluster (semi-pseudo code) windows_cluster 'server2' do action :join end
あるいは、正しい順序で「knife ssh」を呼び出すようにコーディネーター スクリプトを作成することもできます。スクリプトは、ビルド マシンまたは開発者ボックスから実行されます。
# ensure the failover cluster feature is enabled on the secondary server execute 'knife ssh "name:Server2" "recipe[windows_cluster::secondary]"' action :run end # install the failover cluster feature on the primary box and have it configure the cluster execute 'knife ssh "name:Server1" "recipe[windows_cluster::primary]"' action :run end
この問題を処理するために既に開発されている別のフレームワークまたはテクノロジはありますか?
これらの解決策のうち、3 つ (または存在する場合は 4 つ) に向かって進んでいます。インテントは抽象化のより高いレイヤーに存在するため、一般的に展開を整理する最もクリーンな方法のように思えます。
これらのシナリオを処理するためのベスト プラクティスまたは一般的なアプローチは何ですか?