Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

17.6.7. クラスター間のトラフィックの移行

概要

JBoss EAP 6 を使用して新しいクラスターを作成した後、アップグレードプロセスの一部として以前のクラスターから新しいクラスターへトラフィックを移行できます。ここでは、停止時間やダウンライムを最小限に抑えてトラフィックを移行する方法について説明します。

前提条件

  • 新しいクラスターの設定: mod_cluster サブシステムの設定」 (このクラスター ClusterNEW)を呼び出します。
  • 不要となった古いクラスターの設定(ここでは ClusterOLD と呼びます)。

手順17.15 クラスターのアップグレードプロセス - ロードバランシンググループ

  1. 前提条件に従って、新しいクラスターを設定します。
  2. ClusterNEW および ClusterOLD の両方で、設定オプション sticky-sessiontrue に設定するようにしてください(このオプションはデフォルトで true に設定されます)。このオプションを有効にすると、クラスターのクラスターノードへの新しいリクエストはすべてそのクラスターノードに送信されます。
    /profile=full-ha/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=sticky-session,value=true)
    
  3. ClusterOLD のすべてのクラスターノードが ClusterOLD ロードバランシンググループのメンバーであることを仮定します。この設定は、CLI または xml 設定(ドメインモードでは ha または full-ha プロファイル、スタンドアロンモードの場合は standalone-ha または standalone-full-ha のいずれか)で設定できます。
    /profile=full-ha/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=load-balancing-group,value=ClusterOLD)
    				
    				<subsystem xmlns="urn:jboss:domain:modcluster:1.2">
    					<mod-cluster-config load-balancing-group="ClusterOLD" advertise-socket="modcluster" connector="ajp">
    						<dynamic-load-provider>
    							<load-metric type="busyness"/>
    						</dynamic-load-provider>
           		</mod-cluster-config>
        		</subsystem>
    
  4. 「mod_cluster ワーカーノードの設定」 のプロセスを使用して、ClusterNEW のノードを個別に mod_cluster 設定に追加します。さらに、この手順を使用してロードバランシンググループを ClusterNEW に設定します。
    この時点で、mod_cluster-manager コンソールに、以下に短い例のような出力が表示されます。
    				
    				mod_cluster/<version>
    				
        LBGroup ClusterOLD: [Enable Nodes]   [Disable Nodes]   [Stop Nodes]
            Node node-1-jvmroute (ajp://node1.oldcluster.example:8009):
                [Enable Contexts]   [Disable Contexts]   [Stop Contexts]
                Balancer: qacluster, LBGroup: ClusterOLD, Flushpackets: Off, ..., Load: 100
                Virtual Host 1:
                    Contexts:
                        /my-deployed-application-context, Status: ENABLED Request: 0 [Disable]   [Stop]
            
            Node node-2-jvmroute (ajp://node2.oldcluster.example:8009):
                [Enable Contexts]   [Disable Contexts]   [Stop Contexts]
                Balancer: qacluster, LBGroup: ClusterOLD, Flushpackets: Off, ..., Load: 100
                Virtual Host 1:
                    Contexts:
                        /my-deployed-application-context, Status: ENABLED Request: 0 [Disable]   [Stop]
            
            
        LBGroup ClusterNEW: [Enable Nodes]   [Disable Nodes]   [Stop Nodes]
            Node node-3-jvmroute (ajp://node3.newcluster.example:8009):
                [Enable Contexts]   [Disable Contexts]   [Stop Contexts]
                Balancer: qacluster, LBGroup: ClusterNEW, Flushpackets: Off, ..., Load: 100
                Virtual Host 1:
                    Contexts:
                        /my-deployed-application-context, Status: ENABLED Request: 0 [Disable]   [Stop]
            
            Node node-4-jvmroute (ajp://node4.newcluster.example:8009):
                [Enable Contexts]   [Disable Contexts]   [Stop Contexts]
                Balancer: qacluster, LBGroup: ClusterNEW, Flushpackets: Off, ..., Load: 100
                Virtual Host 1:
                    Contexts:
                        /my-deployed-application-context, Status: ENABLED Request: 0 [Disable]   [Stop]
    
  5. ClusterOLD グループ内に古いアクティブなセッションがあり、新しいセッションは ClusterOLD または CLusterNEW グループ内に作成されます。次に、現在アクティブなクライアントのセッションにエラーが発生しないようにクラスターノードの電源を切ることで、ClusterOLD グループ全体を無効にします。
    mod_cluster-manager Web コンソールの LBGroup ClusterOLD の [Disable Nodes] リンクをクリックします。
    この時点で、すでに確立されたセッションに属するリクエストのみが ClusterOLD ロードバランシンググループのメンバーにルーティングされます。新しいクライアントのセッションは ClusterNEW グループのみに作成されます。ClusterOLD グループ内にアクティブなセッションがなくなったら、そのメンバーを安全に削除できます。
    注記
    [Stop Nodes] を使用すると、即座にこのドメインへの要求のルーティングを停止するようロードバランサーコマンドが実行されます。これにより、別の負荷分散グループにフェイルオーバーが強制され、ClusterNEW と ClusterOLD の間にセッションレプリケーションがない場合は、クライアントへのセッションデータの損失が発生します。

デフォルトの負荷分散グループ

現在の ClusterOLD 設定に負荷分散グループ設定が含まれていない場合には(mod_cluster-manager コンソールで LBGroup: を参照できる)、ClusterOLD ノードの無効化を利用できます。この場合、各 Cluster OLD ノードの [Disable Contexts] をクリックします。これらのノードのコンテンツは無効になり、アクティブなセッションがないと、削除の準備が整います。新しいクライアントのセッションは、有効なコンテキストを持つノードにのみ作成されます(この例では Cluster NEW メンバー)。

JBoss EAP CLI の使用

mod_cluster-manager Web コンソールを使用できる可能性に加え、特定のコンテキストを無効にするには CLI を使用できます。前述の操作は stop-context と呼ばれますが、クラスターノードは DISABLE-APP コマンドをロードバランサーに送信し、mod_cluster-manager コンソールの特定のコンテキストの横にある [Disable] リンクをクリックするのと全く同じ効果を持つことができます(例: default-host が前述の mod_cluster-manager コンソール出力例から削除されていることに注意してください)。

/profile=full-ha/subsystem=modcluster/:stop-context(context=/my-deployed-application-context, virtualhost=default-host, waittime=50)

まとめ

特定のコンテキストを停止する場合、クラスターノードまたは負荷分散グループ全体を停止するには、バランサーがすぐにリクエストのルーティングを停止するため、別の利用可能なコンテキストにフェイルオーバーを強制的に実行します。特定のコンテキストを無効にするには、クラスターノードまたは負荷分散グループ全体に対して、この特定のコンテキスト/ノード/負荷分散グループで新規セッションを遮断しないように指示します。

結果

JBoss EAP 6 のクラスターが正常にアップグレードされます。