1

私は、「1 つのマスター - 複数のスレーブ」方式で編成された、EC2 のクラスターで実行する必要があるオープンソース ツールに取り組んでいます。物事を正しく整理する方法、最もシンプルでありながら信頼できる方法についてアドバイスが必要です。

基本的に必要なのは、マスター インスタンス (ユーザーが手動で実行する) で実行され、次のことを行うコードです。

a)Nスレーブインスタンスを実行します(Nはユーザーからのものです)

b) 各インスタンスが起動して実行されたら、SSH で接続して何かを開始します。

c) スレーブ インスタンスが生きていることを追跡する (単純に ping を実行するなど)

d) スレーブ インスタンスが失敗した場合 - 終了していることを確認し、別のインスタンスを実行して手順 b) を繰り返します。

e) ユーザーからのシグナルにより - スレーブインスタンスをシャットダウンします。

これはすべて非常に単純で簡単に見えますが、いくつか質問があります。

1) すぐに使えるソリューション。最初にZookeeperを見てみましたが、その複雑さに怯えていました。私が必要とするような単純なものにはやり過ぎのようです。私が見つけたもう1つのことはStarClusterです。これはPythonにもあります(私のツールもPythonにあります)が、必要なこと(追跡、インスタンスの再実行)を行うかどうかはわかりません。私の質問は、私が知らない単純なツール、ライブラリ、フレームワークはありますか?

2)別の方法は、自分で実装することです。ここでの質問は次のとおりです。私の問題に、私が気付いていない落とし穴はありますか? それはすべて単純に見えます: API へのいくつかの呼び出しといくつかの定期的な ping ですが、ここには何も表示されない可能性があるため、既に作成されたツールを使用するのが本当に正しいでしょうか?

3) すべて自分でコーディングする場合の問題は、CloudWatch を使用するかどうかです。内部計算クラスタの管理に本当に違いがあるのでしょうか、それとも高負荷サイトなどを支援するためだけに優れているのでしょうか?

4) 私の単純なアーキテクチャには、マスター ノードの障害に対する保護がありません。ユーザーはそれを実行し、Web インターフェイス経由で接続してクラスターを実行しますが、マスター ノードに障害が発生すると、すべてが壊れます。スレーブは、マスター ノードの存在を確認し、マスター ノードに障害が発生した場合に自身を終了できます。これにより、ヘッドレス実行のお金のかかるクラスターからの保護が追加されますが、グレースフル リスタートの問題は解決しません。これを解決するには?

5) このプロジェクトのコーディングを開始する前に知っておくべき重要な資料や重要な資料はありますか?

前もって感謝します!

4

2 に答える 2

2

Amazon の自動スケーリングを調べてみてください。明らかに、これは EC2 インスタンスのみを処理しますが、インスタンスの開始、停止、および監視の多くの複雑さを処理します。

AutoScaling では、1 つ以上のグループを作成します。グループに追加のインスタンスを作成する方法 (AMI、userData、インスタンスのタイプなど) と、グループに必要なインスタンスの数を Amazon に伝えます。Amazon は必要な数のインスタンスを起動し、失敗した場合はそれらを置き換えます。

API を使用して、必要なノードの数を変更するか (その時点でインスタンスが必要ない場合は 0 に設定できます)、または cloudwatch メトリクスに基づいてそれを使用できます。たとえば、SQS を使用してジョブをスレーブに分散する場合、自動スケーリングを構成して、利用可能なジョブがあるときにグループ サイズを 0 から目的の数に増やし、キューが空になったらグループ サイズを 0 に戻すことができます。

複数のグループを持つこともできます。たとえば、常に 1 つのインスタンスを持つマスター ノードに対応するグループ (失敗した場合は ec2 が置き換えます) と、インスタンスがない場合はインスタンスが 0 になるスレーブ用の 2 番目のグループを持つことができます。実行する作業と、利用可能な作業がある場合の N インスタンス。

私自身は Python の EC2 API を使用したことはありませんが、boto がこれを適切に処理してくれると聞いています。

于 2012-10-08T15:43:41.737 に答える
1

考えられるアプローチの 1 つは、PaaS (Platform as a Service) を使用して、必要な多くの配管を処理することです。通常、PaaS は少なくとも次の処理を行います。

  • VM のプロビジョニング
  • 新しい VM へのアプリケーション コードのデプロイ
  • VM の状態を監視し、新しい VM を開始して、障害が発生した VM を置き換えます。
  • 自動スケーリング

PaaS が期待する形式に従ってアプリケーションを定義し、送信する必要があります。残りは自動化する必要があります。ここに PaaS オプションの適切な比較があります。PaaS プロバイダーの推奨事項を探しています。

免責事項: 私は、オープンソース Paas スタックCloudifyの開発者である GigaSpaces で働いています。

于 2012-11-28T13:21:05.890 に答える