0

F5 とその実装に関する私のゼロ知識を許してください。F5 を使用して負荷を分散する 4 つの Web サーバーがあります。Apache Camel ソフトウェア ロード バランサーを置き換えます。

現在の実装:

  1. 顧客がインタラクションを開始し、SOAP リクエストを SW LB URL に送信すると、すべてのクライアントがセッション ID を作成します。http://Server1:7001/WebService

  2. SW ロード バランサーは、ラウンド ロビン アルゴリズムを使用して、次の 4 つの宛先から適切なサーバーを検索し、サーバー エンド ポイントとセッション ID のマップを作成します。http://Server1:9080/WebService http://Server2:9080/WebService http://Server3:9080/WebService http://Server4:9080/WebService

  3. SW LB は、このセッションを 10 分間維持します。この時間内に、同じセッション ID に対する要求が再び来ると、同じ宛先サーバーが要求の処理に使用されます。したがって、このように、ユーザーが Server2 とのセッションを持っている場合、このサーバーは、ユーザーがセッションを終了するまで (またはセッション タイムアウト)、彼にサービスを提供し続けます。

Server1 でわかるように、ロード バランサーと Web サービスがあります。F5 に移行するために SW ロード バランサーを廃止しています。

上記のスキームはF5に実装できますか? そして、F5 は新しい URL を提供してくれるのでしょうか? リクエストを受け取るためにクライアントと共有するものはどれですか? http://[new_IP_HW_LB]:[new_port]/WebService のよう

着信要求からセッション ID を抽出し、スティッキー セッション マップを維持できますか?

4

1 に答える 1

2

はい、Apache Camel を F5 に置き換えることができます。セットアップは非常に標準的です。4 つのノード、4 つのメンバーを持つプール、および仮想サーバーを作成します。

Server1 がアドレスを放棄しない限り、F5 には新しい IP アドレス [URL] が必要です。標準ポート (HTTP の場合は 80、HTTPS の場合は 443) を使用することもできます。

最も難しい部分は、セッション ID の永続性です。600 秒のタイムアウトで Universal Persistence プロファイル (Local Traffic » Profiles » Persistence) を作成し、iRule を作成して XML 形式に基づいてレコードを作成する必要があります。iRules は扱いにくい場合がありますが、DevCentral コミュニティには、適応できるソリューションが既に用意されています。

DevCentral のStanislasの功績: how get response parameters<uid>この iRule は、 XML タグ内のパラメータをキャプチャします。

when HTTP_RESPONSE {
  # Trigger collection for up to 1MB of data
  if {[HTTP::header exists "Content-Length"] && [HTTP::header "Content-Length"] <= 1048576}{
    set content_length [HTTP::header "Content-Length"]
  } else {
      set content_length 1048576
  }
  # Check if $content_length is not set to 0
  if { ([HTTP::status] == 200) && ($content_length > 0)} {
    HTTP::collect $content_length
  }
}

when HTTP_RESPONSE_DATA {
    # do stuff with the payload
    #find the application unique identifier between <uid> and </uid> (5 is the length of <uid> string)
    persist add uie [string trim [findstr [HTTP::payload] "<uid>" 5 "</uid>"]]
}

when HTTP_REQUEST {
    persist uie [string trim [findstr [HTTP::payload] "<uid>" 5 "</uid>"]]

}
于 2016-06-03T01:41:48.033 に答える