24.6.5. 在集群间迁移流量

使用 JBoss EAP 创建新群集后,您可以在升级过程中将来自上一集群的流量迁移到新的群集。在此任务中,您将看到可用于在最短的中断或停机时间下迁移此流量的策略。

  • 新群集设置。我们将将此群集命名为 ClusterNEW
  • 旧集群设置正在变得冗余。我们将将此群集命名为 ClusterOLD
集群升级过程 - 负载平衡组
  1. 使用先决条件中描述的步骤设置新集群。
  2. ClusterNEWClusterOLD 中,确保将配置选项 sticky-session 设置为 true 的默认设置。启用此选项意味着向任何群集中的群集节点发出的所有新请求将继续转至相应的群集节点。

    /profile=full-ha/subsystem=modcluster/proxy=default:write-attribute(name=sticky-session,value=true)
  3. load-balancing-group 设置为 ClusterOLD,假设 ClusterOLD 中的所有集群节点都是 ClusterOLD 负载平衡组的成员。

    /profile=full-ha/subsystem=modcluster/proxy=default:write-attribute(name=load-balancing-group,value=ClusterOLD)
  4. 使用 Configure a mod_cluster Worker Node 部分中描述的进程,将 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 组内,任何新会话都会在 ClusterOLDCLusterNEW 组中创建。接下来,我们要禁用整个 ClusterOLD 组,以便其集群节点可以被删除,而不会给当前活跃的客户端会话造成任何错误。

    mod_cluster-manager web 控制台中,单击 LBGroup ClusterOLDDisable Nodes 链接。

    从这一刻起,只有属于已建立的会话的请求才会路由到 ClusterOLD 负载平衡组的成员。任何新客户端的会话都仅在 ClusterNEW 组中创建。只要在 ClusterOLD 组中没有活动的会话,我们可以安全地删除其成员。

    注意

    使用 Stop Nodes 会命令负载平衡器停止将任何请求路由到此域。这将强制切换到另一个负载平衡组,如果 ClusterNEW 和 Cluster OLD 之间没有会话复制,则会导致客户端出现会话数据丢失。

默认负载均衡组

如果当前的 ClusterOLD 设置不包含任何负载均衡组设置(从 mod_cluster-manager 控制台上的 LBGroup: 中找到),仍然可以使用禁用 ClusterOLD 节点的优势。在本例中,单击每个 ClusterOLD 节点的 Disable Contexts。这些节点的上下文将被禁用,如果没有活跃的会话,它们就会准备好被删除。只有在启用了上下文的节点上才会创建新客户端会话,本例中为 ClusterNEW 成员。

使用管理 CLI

除了使用 mod_cluster-manager web 控制台外,您还可以使用 JBoss EAP 管理 CLI 来停止或禁用特定的上下文。

停止上下文

/host=master/server=server-one/subsystem=modcluster:stop-context(context=/my-deployed-application-context, virtualhost=default-host, waittime=0)

停止将 waittime 设置为 0 (无超时)的上下文可指示平衡器立即停止向其路由任何请求,这会强制故障转移到另一个可用的上下文。

如果您使用 waittime 参数设置了超时值,则不会在此上下文上创建新的会话,但现有会话将继续定向到此节点,直到它们完成或者指定的超时已过。waittime 参数默认为 10 秒。

禁用上下文

/host=master/server=server-one/subsystem=modcluster:disable-context(context=/my-deployed-application-context, virtualhost=default-host)

禁用上下文会告知平衡器,不应在此上下文上创建新的会话。