7

高可用性の目的で、(自動的に) 別のサーバーに正しくフェールオーバーするように、Windows サービス (私の場合は .NET で開発) を実行するための確立されたベスト プラクティスを知っている人はいますか?

これが行われていることを確認できる主な方法は、必要に応じてセカンダリサーバーを起動するか (この場合、他のサーバーを監視する何かが必要です)、または両方のサービスを一緒に実行することです (この場合、作業を同期する必要があるため)彼らは同じことをしようとはしません)。

この種の問題のパターンまたはモデルはありますか? 正確な状況によって大きな違いが生じることはわかっていますが、かなり一般的な問題のようです。

ありがとう

ジョン

4

5 に答える 5

3

これが私のために働いたものです。

インフラストラクチャの観点からは、クラスター化された 2 つの Windows サーバーが必要です。(2 つの標準的な Windows Server ボックスで十分です。クラスタリング ピースをインストールして構成できます。ほとんどのシステム管理者は、この方法を知っているはずです。) 次に、クラスターの両方のノードにサービスをインストールし、両方をオフにして MANUAL に設定します。起動。次に、クラスタ化されたリソースをサービスの Windows クラスタ アドミニストレータに追加します。このアドミニストレータは、アクティブなノードでサービスのオンとオフを管理します。サービスがいつどのノードで実行されているかを Windows クラスターに管理させます。これは、サービスのクラスタリングの簡単な部分です。

サービスの観点からは、可能な限りステートレスになるようにサービスを設計する必要があります。これはちょっとつまらないアドバイスですが、実際にはサービスが何をしているかによって異なります。設計では、コードの存続期間中のある時点で最悪の時点で停止すると想定してください。node2 のサービスは、node1 が中断した場所をどこから取得するかをどのように知るのでしょうか? それはあなたが設計する必要がある難しい部分です. サービスの実行内容に応じて、最後に完了したタスクを db テーブルまたは共有データ ファイルに残すことができます。また、最初から開始して、そのタスクが完了しているかどうかを再確認してから実行することもできます。

繰り返しますが、実際には、サービスが何を達成する必要があるかによって異なります。お役に立てれば。

于 2009-11-20T00:46:41.317 に答える
0

両方を常に実行しておくのがおそらく最も簡単な解決策ですが、負荷が 50% を超えないようにする必要があります。

同期するには、トランザクション データベースを使用します。独自の同期を作成しようとすると、通常、バグが発生します。

于 2009-11-18T20:36:47.340 に答える
0

両方のサービスを機能させることができれば、それはより良いことです。それらがステートレスであること、または状態の問題を処理する方法を知っていることを確認する必要があり、Databse はそれらの間で同期します。単一障害点がない場合 - 問題を DB にプッシュすると、そこで 2 ノードのアクティブなアクティブ クラスターを作成し、DB の製造元に同期の問題を処理させることができます。

于 2009-11-18T20:37:53.570 に答える
0

フェイルオーバーに対処する最善の方法は、可能な限りネットワーク レベルで行うことだと思います。負荷分散環境またはプライマリ/フェールオーバー環境に仮想 IP を配置することは、フェールオーバー シナリオのコードを記述する必要を回避するための良い方法です。

コードでフェイルオーバーを処理する必要がある場合:

  1. テスト接続・サービスコール
  2. テストが失敗した場合、アラートを送信する
  3. 次の「登録済み」サービス エンドポイントへのフェイルオーバー
于 2009-11-18T20:38:00.097 に答える
0

2 つの基本的なアプローチがあります。

  1. クライアントは、必要に応じて、または別のサービスまたは構成メカニズムによって指示されたときに、さまざまなエンドポイント アドレスとスイッチを認識します。(例として、stocktrader デモ アプリケーションはこれを行います。)

  2. クライアントは認識せず、フェイルオーバーも提供できる標準のネットワーク負荷分散アプローチを使用します。F5は1つの製品です。他にもたくさんあります。これは基本的にサービスの NAT のようなもので、すべての要求が NLB を通過し、サーバーに送信され、応答が発信者に転送されます。これらの製品はサービスを監視し、稼働しているサービスのみを使用します。また、多くの場合、ルールを使用してカスタマイズして、サーバーのワークロードに基づいてサーバーに新しい要求を割り当てることができます。 Windows サーバーには、この機能がある程度組み込まれています。

いずれにせよ、サービス呼び出しが「ステートレス」であれば、はるかに簡単です。

于 2009-11-18T20:48:33.893 に答える