2

私たちは展開にchefを使用してきましたが、簡単なシナリオでは素晴らしく機能します. ただし、VM インフラストラクチャで冗長アーキテクチャをスクリプト化する必要があります。いくつかのボックスがクラスター化されていますが、chef スクリプトを途中で実行すると失敗します。たとえば、Windows クラスターをプロビジョニングしたいとします。サーバー 1 はフェールオーバー クラスター機能を構成してクラスターの形成を試みることができますが、サーバー 2 はまだ構成されていないため、実行は失敗します。

これはどのように行うべきですか?ここに私たちが思いついたいくつかのアイデアがあります:

  1. 失敗するが、継続的に再実行すると最終的に成功することを認識して、chef の実行を設計します。
    • これは、フィードバックがあいまいになるため、自動化の観点からは理想的ではありません。実行は予想どおりに失敗しましたか、それとも不明な理由で失敗しましたか? これを設定するには人間が必要になる可能性があります。

  2. カスタム レシピから「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
    
  3. あるいは、正しい順序で「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
    
  4. この問題を処理するために既に開発されている別のフレームワークまたはテクノロジはありますか?

これらの解決策のうち、3 つ (または存在する場合は 4 つ) に向かって進んでいます。インテントは抽象化のより高いレイヤーに存在するため、一般的に展開を整理する最もクリーンな方法のように思えます。

これらのシナリオを処理するためのベスト プラクティスまたは一般的なアプローチは何ですか?

4

1 に答える 1