第 19 章 HTTP 群集和负载平衡

19.1. 介绍

19.1.1. 关于高可用性和负载平衡群集

群集(Clustering)指的是使用多个资源(如服务器),就好像单个实体一样。两个主要的群集类型是负载平衡(Load balancing,LB)群集高可用性(High-availability,HA)群集。在 LB 群集里,所由的资源都同时运行,管理层对工作负荷进行分配。
在 HA 群集里,当运行时某个资源,如果第一个不可用,将选择另外一个可用的资源。HA 群集的目的是降低硬件、软件或网络故障的影响。
JBoss EAP 6 支持不同级别的群集。高可用性的运行时组件和应用程序是:
  • 应用服务器实例
  • 和内部 JBoss Web 服务器、Apache HTTP 服务器、Microsoft IIS 或 Oracle iPlanet Web 服务器一起使用的 Web 应用程序。
  • Stateful、stateless 和 Entity Enterprise JavaBeans (EJB)
  • 单点登录(Single Sign On,SSO)机制
  • 分布式缓存
  • HTTP 会话
  • JMS 服务和消息驱动 Bean(Message-driven beans,MDB)
JBoss EAP 6 通过两个子系统使用群集:jgroupsmodclusterhafull-ha 配置集都启用了这些子系统。在 JBoss EAP 6 里,这些服务按需要来启动和关闭,但只有配置为 distributable 的应用程序部署在服务器上才会启动这些服务。
在 JBoss EAP 6 里 Infinispan 是作为缓存供应商提供的。Infinispan 为 JBoss EAP 6 管理群集和复制缓存。

19.1.2. 可从高可用性受益的组件

高可用性(HA)在 JBoss EAP 6 里分成更广的几个类别。
容器

JBoss EAP 6(作为独立服务器运行)的几个实例或服务器组的成员(作为受管域的一部分运行)可以配置为高可用的。这表示如果某个实例或成员停止或从群集消失,它的工作负荷将移至另外一个节点。工作负荷也可以通过这种方式提供负载平衡,所以具有更多、更好资源的服务器或服务器组可以承担更大部分的工作负荷,或者在高负荷时添加额外的能力。

Web 服务器

Web 服务器自身就可以使用某种兼容的负载平衡机制进行 HA 群集。最灵活的方式是 mod_cluster 连接器,它和 JBoss EAP 6 容器紧密地集成在一起。其他选择包含 Apache mod_jkmod_proxy 连接器或 ISAPI 和 NSAPI 连接器。

应用程序

根据 Java EE 6 规格,部署的应用程序也可以是高可用性的。 Stateless 或 stateful session EJB 可以进行群集,如果某个节点出现故障,另外一个节点可以接管。对于 stateful session bean,状态可以保持。

19.1.3. HTTP 连接器概述

JBoss EAP 6 可以使用构建到外部 web 服务器的负载平衡和高可用性机制,如 Apache Web Server, Microsoft IIS 和 Oracle iPlanet。JBoss EAP 6 使用 HTTP 连接器和外部的 Web 服务器通讯。这些 HTTP 连接器是在 JBoss EAP 6 的 web 子系统里进行配置的。
Web 服务器包含了控制 HTTP 请求路由至 JBoss EAP 6 工作节点的途径的软件模块。每个模块的工作模式和配置都有所不同。您可以配置这些模块在多个 JBoss EAP 6 服务器节点间平衡负载,或在发生故障时将负荷移至其他服务器。这两种能力分别被称为负载平衡(Load Balancing)高可用性(High Availability,HA)
JBoss EAP 6 支持几种不同的 HTTP 连接器。您要根据使用的 Web 服务器和需要的其他功能来进行选择。
下表列出了兼容 JBoss EAP 6 的 HTTP 连接器的不同之处。关于被支持的 HTTP 连接器的最新信息,请参考 https://access.redhat.com/site/articles/111663

表 19.1. HTTP 连接器功能和约束

连接器 Web 服务器 支持的操作系统 支持的协议 适用于部署状态 支持会话关联
mod_cluster JBoss Enterprise Web Server HTTPD、操作系统(Red Hat Enterprise Linux, Hewlett-Packard HP-UX)提供的 HTTPD Red Hat Enterprise Linux, Microsoft Windows Server, Oracle Solaris, Hewlett-Packard HP-UX HTTP, HTTPS, AJP 是。检测应用程序的部署和卸载并根据应用程序是否部署在某个服务器上动态决定是否将请求指引到该服务器上。
mod_jk JBoss Enterprise Web Server HTTPD、操作系统(Red Hat Enterprise Linux, Hewlett-Packard HP-UX)提供的 HTTPD Red Hat Enterprise Linux, Microsoft Windows Server, Oracle Solaris, Hewlett-Packard HP-UX AJP 否。不管应用程序的状态,只要容器可用,就将请求指引到这个容器。
mod_proxy JBoss Enterprise Web Server HTTPD Red Hat Enterprise Linux\Microsoft Windows Server、Oracle Solaris HTTP, HTTPS, AJP 否。不管应用程序的状态,只要容器可用,就将请求指引到这个容器。
ISAPI Microsoft IIS Microsoft Windows Server AJP 否。不管应用程序的状态,只要容器可用,就将请求指引到这个容器。
NSAPI Oracle iPlanet Web Server Oracle Solaris AJP 否。不管应用程序的状态,只要容器可用,就将请求指引到这个容器。
JBoss EAP 6 支持的配置:https://access.redhat.com/site/articles/111663

19.1.4. 工作节点

HTTP 连接器节点

工作节点(worker node),有时候简称为节点,是从一个或多个面向客户的 HTTPD 服务器接受请求的 JBoss EAP 6 服务器。JBoss EAP 6 可以从自己的 HTTPD、JBoss EAP 6 附带的 HTTPD、Apache HTTPD、Microsoft IIS 或 Oracle iPlanet Web Server(以前是 Netscape Web Server)接受请求。

关于 JBoss EAP 6 支持的 HTTP 连接器概述以及如何进行配置的信息,请参考 第 19.1.3 节 “HTTP 连接器概述”
群集节点

群集节点(Cluster Node)是服务器群集里的成员。群集可以是负载平衡群集、高可用性群集,或者两者皆是。在负载平衡群集里,中央管理者根据不同的情况将负荷均匀地分摊到节点上。在高可用性群集里,某些节点积极运行,而其他节点则进行等待,当活动节点离开群集时开始运行。