IIS 6 でホストされる WCF サービスの負荷を分散するにはどうすればよいですか?
-
02-07-2019 - |
質問
BigIP を使用して 2 つの IIS サーバー間の負荷分散を行います。最近、IIS 6 によってホストされる WCF サービスをこれら 2 台の Windows Server 2003R2 サーバーに展開しました。
各サーバーは 2 つのホスト ヘッダーで構成されます。1 つはロード バランサー アドレス用で、2 番目のホスト ヘッダーはそのサーバーのみを指します。こうすることで、デバッグのために負荷分散グループ内の特定のサーバーを参照できます。
したがって、実行するとすぐにエラーが発生しました。
このコレクションには、スキーム http のアドレスがすでに含まれています。このコレクション内のスキームごとに最大 1 つのアドレスが存在できます。パラメータ名:アイテム
いくつか調査したところ、ホストの 1 つを無視するようにフィルターを実装することはできますが、そうするとそのアドレスからサーバーにアクセスできなくなります。
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="http://domain.com:80"/>
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
このシナリオで、WCF サービスにアクセスできるようにする最善の解決策は何ですか? http://domain.com/service.svc そして http://server1.domain.com/service.svc?
いくつかのサイトが示唆しているように、独自の ServiceFactory を作成する必要がある場合、これに関するサンプル コードを持っている人はいますか?
ご協力をよろしくお願いいたします。
編集:可能であれば、2 つのアドレスのいずれかから WCF サービスにアクセスできる必要があります。
ありがとう。
解決
bigIP 上に 2 つの新しい仮想サーバーを作成しますhttp://server1.domain.com/ http://server2.domain.com/
特定のサーバーのみを含む各 VS のプールを作成します。そのため、実際の負荷分散は行われず、そのようにアクセスされます。外部 IP が不足している場合でも、運用ドメイン名と同じ IP を使用し、irule を使用してトラフィックを適切なプールに送信することができます。
お役に立てれば
他のヒント
使用する URL は IIS のバインドに基づいています。Web サイトには複数のバインディングがありますか?使用されている場合、それとも WCF サービスは複数のサイトで使用されていますか?もしそうなら、あなたはSOL AFAIKです。この問題に遭遇しました。基本的に、HTTP に対する IIS バインディングは 1 つだけです。それ以外の場合は爆弾が発生します。
また、こちらの情報も ServiceHostFactoryの実装. 。WCF サービスに 1 つのアドレス経由でのみアクセスできる可能性がある場合、これは機能します (残念ながら、これは不可能でした)。
特定のマシンをテストする必要がある場合は、テスト元のマシン上の「hosts」ファイルを編集することで、負荷分散を「バイパス」し、正しいホスト ヘッダーが確実に送信されるようにして、WCF の動作を維持できます。たとえば、次のようになります。
10.0.0.11 ~ 10.0.0.16 は、クラスタ「cluster.mycompany.local」内にある 6 つのホストで、負荷分散された IP アドレスは 10.0.0.10 です。テスト時に、マシンのホスト ファイルに「10.0.0.13 cluster.mycompany.local」という行を追加して、クラスター内の 3 番目のマシンに直接アクセスできるようにすることができます。