24.4. JBoss EAP をフロントエンドロードバランサーとして設定

バックエンド JBoss EAP サーバーへリクエストをプロキシーするフロントエンドロードバランサーとして動作するよう JBoss EAP と undertow サブシステムを設定できます。Undertow は非同期 IO を使用するため、リクエストに関与するスレッドは接続用の IO スレッドのみになります。同じスレッドがバックエンドサーバーへの接続に使用されます。

以下のプロトコルを使用できます。

  • HTTP/1 および HTTP/2 (h2c) をサポートするプレーンテキスト上の HTTP (http)
  • HTTP/1 および HTTP/2 (h2c) をサポートするセキュアの接続上の HTTP (http)
  • AJP (ajp)

静的ロードバランサー を定義して設定でバックエンドホストを指定するか、mod_cluster フロントエンド を使用してホストを動的に更新します。

HTTP/2 を使用するよう Undertow を設定する手順は、HTTP/2 の設定 を参照してください。

24.4.1. mod_cluster を使用して Undertow をロードバランサーとして設定

組み込みの mod_cluster フロントエンドロードバランサーを使用して、他の EAP インスタンスを負荷分散できます。

この手順では、マネージドドメインを実行し、以下が設定済みであることを前提としています。

  • ロードバランサーとして動作する JBoss EAP サーバー。

    • このサーバーは、load-balancer-sockets ソケットバインディンググループにバインドされる load-balancer プロファイルを使用します。

      注記

      このサーバーをフロントエンドロードバランサーとして使用するため、load-balancer プロファイルには、ソケットバインディング、mod-cluster Undertow フィルター、およびデフォルトホストでのフィルターへの参照がすでに事前設定されています。

  • バックエンドサーバーとして動作する 2 つの JBoss EAP サーバー。

    • これらのサーバーはクラスターで実行され、ha-sockets ソケットバインディンググループにバインドされる ha プロファイルを使用します。
  • バックエンドサーバーにデプロイされた負荷分散される分散可能なアプリケーション。
mod_cluster フロントエンドロードバランサーの設定

以下の手順は、マネージドドメインのサーバーを負荷分散しますが、手順を変更するとスタンドアロンサーバーのセットに適用することができます。ご使用の環境に応じて管理 CLI コマンドの値を変更してください。

  1. mod_cluster アドバタイズセキュリティーキーを設定します。

    アドバタイズセキュリティーキーを追加すると、ロードバランサーとサーバーが検出中に認証されます。

    以下の管理 CLI コマンドを使用して、mod_cluster アドバタイズセキュリティーキーを設定します。

    /profile=ha/subsystem=modcluster/proxy=default:write-attribute(name=advertise-security-key, value=mypassword)
  2. mod_cluster ロードバランサーのセキュリティーキーを更新します。

    以下の管理 CLI コマンドを使用して、mod_cluster フィルターのセキュリティーキーを設定します。

    /profile=load-balancer/subsystem=undertow/configuration=filter/mod-cluster=load-balancer:write-attribute(name=security-key,value=mypassword)
重要

mod_cluster によって使用される管理およびアドバタイズソケットバインディングが内部ネットワークのみで公開され、パブリック IP アドレスで公開されないことが推奨されます。

ロードバランサーである JBoss EAP サーバーが 2 つのバックエンドである JBoss EAP サーバーを負荷分散できるようになります。

複数の mod_cluster 設定

mod_cluster サブシステムは名前の付いたプロキシー設定を複数サポートし、デフォルトでない undertow サーバーをリバースプロキシーに登録できます。さらに、単一のアプリケーションサーバーノードを異なるグループのプロキシーサーバーに登録することができます。

以下の例は、ajp-listener、サーバー、および undertow サーバーへのホストを追加します。また、アドバタイズのメカニズムを使用してホストを登録する新しい mod_cluster 設定も追加します。

/socket-binding-group=standard-sockets/socket-binding=ajp-other:add(port=8010)
/subsystem=undertow/server=other-server:add
/subsystem=undertow/server=other-server/ajp-listener=ajp-other:add(socket-binding=ajp-other)
/subsystem=undertow/server=other-server/host=other-host:add(default-web-module=root-other.war)
/subsystem=undertow/server=other-server/host=other-host
/location=other:add(handler=welcome-content)
/subsystem=undertow/server=other-server/host=other-host:write-attribute(name=alias,value=[localhost]))

/socket-binding-group=standard-sockets/socket-binding=modcluster-other:add(multicast-address=224.0.1.106,multicast-port=23364)
/subsystem=modcluster/proxy=other:add(advertise-socket=modcluster-other,balancer=other-balancer,connector=ajp-other)

reload

24.4.2. ロードバランサーでのランク付けされたセッションアフィニティーの有効化

distributable-web サブシステムで複数の順序付けされたルートを持つセッションアフィニティーを設定するには、ランク付けされたセッションアフィニティーをロードバランサーで有効にする必要があります。distributable-web サブシステムと各種アフィニティーオプションの詳細は、JBoss EAPDevelopment GuideThe distributable-web subsystem for Distributable Web Session Configurations を参照してください。

ノードルートを分離するデフォルトの区切り文字は . です。別の値が必要な場合は、affinity リソースの delimiter 属性を設定できます。

手順

  1. ロードバランサーに対して、ランク付けされたセッションアフィニティーを有効にします。

    /subsystem=undertow/configuration=filter/mod-cluster=load-balancer/affinity=ranked:add
  2. オプション: affinity リソースの delimiter 属性を設定します。

    /subsystem=undertow/configuration=filter/mod-cluster=load-balancer/affinity=ranked:write-attribute(name=delimiter,value=':')

24.4.3. Undertow を静的ロードバランサーとして設定

Undertow の静的ロードバランサーを設定するには、undertow サブシステムでプロキシーハンドラーを設定する必要があります。Undertow でプロキシーハンドラーを設定するには、静的ロードバランサーとして動作する JBoss EAP インスタンスで以下を行う必要があります。

  1. リバースプロキシーハンドラーを追加します。
  2. 各リモートホストのアウトバウンドソケットバインディングを定義します。
  3. 各リモートホストをリバースプロキシーハンドラーへ追加します。
  4. リバースプロキシーの場所を追加します。

以下の例は、JBoss EAP インスタンスを静的ロードバランサーとして設定する方法を示しています。JBoss EAP インスタンスは lb.example.com にあり、2 つの追加サーバーである server1.example.comserver2.example.com との間で負荷分散を行います。ロードバランサーは /app に逆プロキシーを行い、AJP プロトコルを使用します。

  1. リバースプロキシーハンドラーを追加するには、以下を指定します。

    /subsystem=undertow/configuration=handler/reverse-proxy=my-handler:add
  2. 各リモートホストのアウトバウンドソケットバインディングを定義するには、以下を指定します。

    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-host1/:add(host=server1.example.com, port=8009)
    
    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-host2/:add(host=server2.example.com, port=8009)
  3. 各リモートホストをリバースプロキシーハンドラーに追加するには、以下を指定します。

    /subsystem=undertow/configuration=handler/reverse-proxy=my-handler/host=host1:add(outbound-socket-binding=remote-host1, scheme=ajp, instance-id=myroute1, path=/test)
    
    /subsystem=undertow/configuration=handler/reverse-proxy=my-handler/host=host2:add(outbound-socket-binding=remote-host2, scheme=ajp, instance-id=myroute2, path=/test)
  4. リバースプロキシーの場所を追加するには、以下を指定します。

    /subsystem=undertow/server=default-server/host=default-host/location=\/test:add(handler=my-handler)

lb.example.com:8080/app にアクセスすると、server1.example.com および server2.example.com からプロキシーされた内容が表示されるようになります。