使用 WebLogic Server 群集

     上一页  下一页    在新窗口中打开目录     
在此处开始内容

群集体系结构

以下部分描述 WebLogic Server 群集的几种可选体系结构:

 


体系结构和群集术语

本部分定义本文档中使用的术语。

体系结构

此处的“体系结构”指的是如何将应用程序的层部署到一个或多个群集。

Web 应用程序层

一个 Web 应用程序分为几个层,分别对应应用程序提供的不同逻辑服务。并非所有的 Web 应用程序都是相似的,因此您的应用程序可能不会用到下面描述的所有层。另外,请记住,层代表应用程序服务的逻辑分类,而不一定是硬件或软件组件间的实际分类。在某些情况下,一台运行单个 WebLogic Server 实例的计算机可以提供下面描述的所有层。

综合层体系结构

如果群集体系结构中 Web 应用程序的所有层都部署到一个 WebLogic Server 群集,则该群集体系结构称为综合层体系结构。

De-Militarized 区域 (De-Militarized Zone,简称 DMZ)

“De-Militarized 区域 (DMZ)”是硬件和服务的逻辑集合,用于外部的、不可信的资源。在多数 Web 应用程序中,DMZ 中有一系列 Web 服务器,这使基于浏览器的客户端可以访问静态 HTML 内容。

DMZ 可以提供安全保护,能够防止来自外部的针对硬件和软件的攻击。不过,DMZ 可用于不可信的资源,因此其安全性低于内部系统。例如,内部系统可以用拒绝所有外部访问的防火墙进行保护。通过使用防火墙“隐藏”对各个主机、应用程序或端口号的访问,可以保护 DMZ,但将仍然允许从不可信的客户端访问那些服务。

负载平衡器

在本文中,术语“负载平衡器”用来描述将客户端连接请求分发到一个或多个 IP 地址的任何技术。例如,简单 Web 应用程序可以使用 DNS 循环算法作为负载平衡器。较大的应用程序通常使用基于硬件的负载平衡解决方案(例如,那些来自 Alteon WebSystems 的解决方案),这些解决方案也可以提供类似防火墙的安全功能。

负载平衡器提供将客户端连接与群集中的特定服务器相关联的功能,对客户端会话信息进行内存中复制时会使用该功能。使用负载平衡产品,必须配置 cookie 持久性机制,以免覆盖 WebLogic Server cookie,WebLogic Server cookie 跟踪用于内存中复制的主、辅服务器。有关外部负载平衡器、会话 Cookie 持久性和 WebLogic Server 会话 Cookie 的讨论,请参阅使用外部负载平衡器实现 HTTP 会话的负载平衡

代理插件

“代理插件”是 WebLogic Server 对 HTTP 服务器(例如,Apache、Netscape Enterprise Server、或 Microsoft Internet Information Server)的扩展,它可以访问 WebLogic Server 群集提供的群集 Servlet。代理插件包含用于访问 WebLogic Server 群集中的 Servlet 和 JSP 的负载平衡逻辑。如果承载会话状态的主 WebLogic Server 失败,则代理插件还包含用于访问客户端会话状态副本的逻辑。

 


推荐的基本体系结构

推荐的基本体系结构是一个综合层体系结构 - Web 应用程序的所有层都部署到同一个 WebLogic Server 群集。此体系结构如下图所示。

图 8-1 推荐的基本体系结构

推荐的基本体系结构

推荐的基本体系结构具有以下优点:

注意: 使用带有内存中会话复制功能的第三方负载平衡器时,必须确保负载平衡器与承载其主会话状态的 WebLogic Server 实例(点访问服务器)保持客户端连接。有关负载平衡器的详细信息,请参阅使用外部负载平衡器实现 HTTP 会话的负载平衡

不要使用综合层体系结构的情况

当综合层体系结构(例如,推荐的基本体系结构)满足多个 Web 应用程序的需求时,它会限制用户完全部署群集的负载平衡和故障转移功能的能力。只能在 Web 应用层的界面之间引入负载平衡和故障转移,因此,当多个层部署到单个群集中时,只能在客户端和群集之间进行负载平衡。

因为大多数负载平衡和故障转移发生在客户端和群集自身之间,因此,综合层体系结构满足多数 Web 应用程序的需求。

但综合层群集不提供对群集 EJB 的负载平衡方法的调用。因为在群集的所有 WebLogic Server 实例中都部署了群集对象,因此每个服务器都可以在本地使用每个对象实例。WebLogic Server 优化方法总是通过选择本地对象实例来调用群集 EJB,而不是将请求分布到远程对象,将请求分发到远程对象会带来更多网络开销。

多数情况下,共存策略比将每个方法请求都负载平衡到不同的服务器更有效。但如果对不同服务器的处理负载是不平衡的,对远程对象提交方法调用会比本地处理方法更有效率。

要对群集 EJB 的方法调用进行负载平衡,必须将 Web 应用程序的表示层和对象层拆分到不同的物理群集(如以下部分所述)。

决定使用综合层体系结构还是使用多层体系结构时,请考虑表示层调用对象层的频率。如果表示层经常调用对象层,综合层体系结构可能会提供比多层体系结构更佳的性能。

 


推荐的多层体系结构

本部分描述推荐的多层体系结构,在该体系结构中,应用程序的不同层会部署到不同的群集。

推荐的多层体系结构使用两个单独的 WebLogic Server 群集:一个提供静态 HTTP 内容和群集 Servlet,另一个提供群集 EJB。建议对有以下要求的 Web 应用程序使用多层群集:

注意: 考虑多层体系结构时,请考虑表示层对对象层的调用频率。如果表示层经常调用对象层,综合层体系结构可能会提供比多层体系结构更佳的性能。

下图描述了推荐的多层体系结构:

图 8-2 推荐的多层体系结构

推荐的多层体系结构

实际硬件和软件层

在推荐的多层体系结构中,应用程序层由两个独立的硬件和软件层承载。

Web/表示层

Web/表示层由一个 WebLogic Server 实例群集组成,这些实例专门承载静态 HTTP 网页、 Servlet 和 JSP。此 Servlet 群集不承载群集对象,表示层群集中的 Servlet 会充当群集对象的客户端,群集对象位于对象层中单独的 WebLogic Server 群集上。

对象层

对象层由一个 WebLogic Server 实例群集组成,这些实例仅承载 Web 应用程序所需的群集对象 - EJB 和RMI 对象。承载专用群集上的对象层,会失去默认的访问群集对象的共存优化(如共存对象的优化中所述)。但可以对调用每个群集对象的方法实现负载平衡(如下部分所述)。

多层体系结构的优点

多层体系结构有以下优点:

多层体系结构中的负载平衡群集对象

WebLogic Server 对群集对象的共存优化(如共存对象的优化中所述)取决于与调用对象的复制感知存根控件相同的服务器实例上是否有群集对象(EJB 或 RMI 类)。

分离对象层的影响是,在承载群集对象的服务器上任何客户端(HTTP 客户端、Java 客户端或 Servlet)不再需要有复制感知存根控件。因此,WebLogic Server 无法使用其共存优化(如共存对象的优化中所述),并且群集对象的 Servlet 调用会根据复制感知存根控件中包含的逻辑来自动实现负载平衡。下图描述了在多层体系结构中客户端如何访问群集 EJB 实例。

图 8-3 多层体系结构中的负载平衡对象

多层体系结构中的负载平衡对象

跟踪客户端连接的路径,可以看到将对象层分离到单独的硬件和软件上所带来的影响。

  1. HTTP 客户端连接 Web/Servlet 群集中的几个 WebLogic Server 实例之一,通过负载平衡器到达初始服务器。
  2. 客户端访问 WebLogic Server 群集上承载的 Servlet。
  3. Servlet 可充当 Web 应用程序需要的群集对象的客户端。在以上示例中,Servlet 访问无状态会话 EJB。
  4. Servlet 在承载群集对象的 WebLogic Server 群集上查找 EJB。Servlet 收集 Bean 的复制感知存根控件,复制感知存根控件列出所有承载 Bean 的服务器的地址,以及访问 Bean 副本的负载平衡逻辑。

    注意: EJB 复制感知存根和 EJB 主页加载算法是用 EJB 部署描述符的元素指定的。有关详细信息,请参阅“WebLogic Enterprise JavaBean 编程”中的 weblogic-ejb-jar.xml 部署描述符参考
  5. Servlet 下次访问 EJB(例如,响应另一个客户端)时,使用 Bean 的存根控件中的负载平衡逻辑来查找副本。在以上示例中,多个方法调用是使用负载平衡的循环算法进行定向的。

在本示例中,如果同一个 WebLogic Server 群集既承载 Servlet 又承载 EJB(如推荐的基本体系结构中所述),WebLogic Server 将不会加载 EJB 的平衡请求。Servlet 总是调用本地服务器上承载的 EJB 副本上的方法。使用本地 EJB 实例比远程方法调用另一台服务器上的 EJB 更有效。但使用多层体系结构,可以对那些进行 EJB 方法调需要使用负载平衡的应用程序进行远程 EJB 访问。

多层体系结构的配置注意事项

IP 套接口用法

多层体系结构为群集对象调用提供负载平衡,因此,系统会比综合层体系结构更多地使用 IP 套接口。尤其是在使用套接口的高峰时期,承载 Servlets 和 JSP 的群集中的每个 WebLogic Server 对以下组件的使用可能会达到最大值:

例如,在图 8-2 中,Servlet/JSP群集中的每个服务器最多可以打开五个套接口。在最糟糕的情况下,即主会话状态和辅会话状态分散在 Servlet 群集中,且Servlet 群集中的各服务器同时访问对象群集中每台服务器上的远程对象,才会达到此最大值。多数情况下,实际使用的套接口数量会小于最大值。

如果使用纯 Java 套接口实现多层体系结构,请确保配置足够的套接口读取器线程,以满足最大的套接口使用量。有关详细信息,请参阅为 Java 套接口实现配置读取器线程

硬件负载平衡器

多层体系结构使用硬件负载平衡器,因此,如果您使用内存中会话状态复制,则必须配置负载平衡器,以保持对客户端的点访问服务器的“粘滞”连接。详细信息,请参阅为 EJB 和 RMI 配置负载平衡

多层体系结构的限制

本部分总结了多层体系结构的限制。

无共存优化

推荐的多层体系结构无法使用共存优化来优化对象,因此,所有群集对象的方法调用都会为 Web 应用程序带来更多网络开销。但是,如果 Web 应用程序需要利用多层体系结构的优点中描述的优点,这些开销是可以接受的。

例如,如果 Web 客户端大量使用 Servlet 和 JSP,但访问的群集对象较少,使用多层体系结构可以适当集中 Servlet 和对象的负载。可以为十个 WebLogic Server 实例配置一个 Servlet 群集,为三个 WebLogic Server 实例配置一个对象群集,而仍然可以充分利用每台服务器的处理能力。

防火墙限制

在多层体系结构中,如果在 Servlet 群集和对象群集之间放置防火墙,则必须绑定对象层中的所有服务器以发布 DNS 名称,而不是发布 IP 地址。将服务器与 IP 地址进行绑定,会导致地址翻译问题,从而妨碍 Servlet 群集访问各个服务器实例。

如果 WebLogic Server 实例的内部和外部 DNS 名称不完全相同,请使用服务器实例的 ExternalDNSName属性定义服务器的外部 DNS 名称。在防火墙之外,ExternalDNSName 应转换为服务器的外部 IP 地址。

对于防火墙要执行网络地址转换的配置,必须使用 ExternalDNSName,除非客户端要使用 t3 和默认通道访问 WebLogic Server。例如,对于防火墙要执行网络地址转换且客户端通过代理插件使用 HTTP 访问 WebLogic Server 时,需要使用 ExternalDNSName 进行配置。

 


推荐的代理体系结构

可以将 WebLogic Server 群集配置为与现有 Web 服务器一起运行。在此体系结构中,一系列 Web 服务器使用 WebLogic 代理插件或 HttpClusterServlet 将 Servlet 和 JSP 请求直接定向到群集,为 Web 应用程序提供静态 HTTP 内容。

以下部分描述两种可选的代理体系结构。

双层代理体系结构

下图中描述的双层代理体系结构与推荐的基本体系结构类似,不同的是静态 HTTP 服务器是由一系列 Web 服务器承载。

图 8-4 双层代理体系结构

双层代理体系结构

实际硬件和软件层

双层代理体系结构包含两个实际的硬件和软件层。

Web 层

代理体系结构利用硬件和软件层来专门执行提供应用程序 Web 层的任务:Web 层由一台或多台相同配置的计算机组成,这些计算机承载以下应用程序组合:

无论选择哪种 Web 服务器软件,都请记住:Web 服务器的物理层仅提供静态网页。动态内容(Servlets 和 JSP)通过代理插件或 HttpClusterServlet 代理到承载表示层的 Servlets 和 JSP 的 WebLogic Server 群集。

Servlet/对象层

推荐的双层体系结构协议在一个 WebLogic Server 实例群集上承载表示层和对象层。此群集可以部署在一台计算机上,也可以部署在多台单独的计算机上。

推荐的基本体系结构中描述了 Servlet/对象层与综合层的区别,Servlet/对象层不对应用客户端提供静态 HTTP 内容。

多层代理体系结构

也可以使用一组 Web 服务器作为承载表示层和对象层的 WebLogic Server 群集对的前端。下图中显示该体系结构。

图 8-5 多层代理体系结构

多层代理体系结构

此体系结构提供推荐的多层体系结构相同的优点和限制。此体系结构与 Web 层的唯一不同是,它是放置在单独的一组利用 WebLogic 代理插件的 Web 服务器上。

代理体系结构的优点

使用独立的 Web 服务器和代理插件有以下优势:

代理体系结构的限制

使用独立 Web 服务器和代理插件,Web 应用程序会受到以下限制:

代理插件与负载平衡

与代理 Servlet 请求相比,直接将 WebLogic Server 群集与负载平衡一起使用有几个优点。首先,将 WebLogic Server 群集与负载平衡一起使用,对客户端设置不需要其他管理 - 不需要设置和维护单独的 HTTP 服务器层,并且不需要安装和配置一个或多个代理插件。删除 Web 代理层,也会减少访问群集所需的网络连接数。

使用负载平衡硬件,可以更灵活地定义适合您的系统性能的负载平衡算法。可以使用负载平衡硬件支持的任何负载平衡策略(例如,基于负载的策略)。使用代理插件或 HttpClusterServlet,会限制您只能使用单循环算法处理群集 Servlet 请求。

注意,如果使用内存中会话状态复制,则可能需要其他配置才能使用第三方负载平衡。在此情况下,必须确保负载平衡的客户端和点访问服务器之间保持“粘滞”连接,以便客户端访问主会话状态信息。使用代理插件时,不需要特别配置,因为协议会自动保持粘滞连接。

 


群集体系结构的安全选项

在推荐的配置中,物理硬件/软件层的边界提供用于定义 Web 应用程序的非军事区域(De-Militarized Zone,简称 DMZ)的潜在位置。但不是所有边界都支持物理防火墙,有些边界只支持典型防火墙策略的一个子集。

后面的部分介绍几种定义 DMZ 以创建不同级别应用程序安全的几种常用方法。

代理体系结构的基本防火墙

基本防火墙配置在不可信的客户端和 Web 服务器层之间使用单独的防火墙,该防火墙可与推荐的基本体系结构推荐的多层体系结构群集体系结构一起使用。

图 8-6 带有防火墙的基本代理体系结构

带有防火墙的基本代理体系结构

在上图中,单独的防火墙可以使用任何策略组合(应用程序级限制、NAT、虚拟 IP)来筛选对三台 HTTP 服务器的访问。防火墙最重要的作用是拒绝直接访问系统中的其他服务器。换句话说,对不可信的客户端来说,Servlet 层、对象层及数据库自身必须是不可访问的。

注意,在 DMZ 中,可以在 Web 服务器的前面放置防火墙,也可以在 Web 服务器的后面放置防火墙。在 Web 服务器的前面放置防火墙,可以简化防火墙策略,因为只需要允许对 Web 服务器的访问而拒绝对其他所有系统的访问。

代理层和群集之间的防火墙

如果在代理层和群集之间放置防火墙,请遵循以下配置准则:

注意: 如果群集服务器隔离自定义通道对的 http 和 http 流量,请参阅“设计及配置 WebLogic Server 环境”中的通道、群集和防火墙

带有基本防火墙配置的 DMZ

通过只允许访问 Web 服务器层,基本防火墙配置创建占用较少资源的 DMZ,其中只包括三个 Web 服务器。但是,比较保守的 DMZ 定义会考虑这种可能性,即恶意的客户端可以获得对承载表示层和对象层的服务器的访问权。

例如,假设一个黑客获得了对其中一台承载 Web 服务器的计算机的访问权。根据访问级别,该黑客可能可以获得有关协议服务器的信息,Web 服务器会用这些信息访问动态内容。

如果选择使用比较保守的 DMZ 定义,则可以使用共享数据库的其他安全措施中介绍的信息放置其他防火墙。

组合使用防火墙和负载平衡器

如果使用带有推荐群集体系结构的负载平衡硬件,必须决定如何部署与基本防火墙相关的硬件。除负载平衡服务以外,虽然很多硬件解决方案会提供其他安全功能,但多数网站还是将防火墙作为其 Web 应用程序的第一道防线。通常,防火墙提供经过检测的熟悉的安全解决方案来限制网络流量,并且防火墙可以在负载平衡硬件的前面使用,如下所示。

图 8-7 带有防火墙和负载平衡器的基本代理体系结构

带有防火墙和负载平衡器的基本代理体系结构

以上设置将负载平衡器与 Web 层一起放在 DMZ 中。在此配置中使用防火墙可以简化安全策略管理,因为防火墙只需要限制对负载平衡器的访问。如下所述,此设置还可以简化支持内部客户端访问 Web 应用程序的站点的管理。

扩展内部客户端的防火墙

如果支持需要直接访问 Web 应用程序的内部客户端(例如,运行专用Java 应用程序的远程计算机),则可以扩展基本防火墙配置,以允许对表示层进行受限访问。根据是将客户端作为可信连接还是不可信连接,可以使用不同的方式扩展对应用程序的访问。

如果使用虚拟专网(Virtual Private Network,简称 VPN)来支持远程客户端,客户端可能会作为可信连接,可以通过防火墙直接连接到表示层。此配置如下所示。

图 8-8 VPN 用户已通过防火墙限制访问

VPN 用户已通过防火墙限制访问

如果不使用 VPN,所有与 Web 应用程序的连接(包括来自使用专门的客户端应用程序的远程站点的连接)都将视为不可信的连接。在这种情况下,可以修改防火墙策略,以允许与承载表示层的 WebLogic Server 实例进行应用程序级别的连接,如下图所示。

图 8-9 应用程序组件已通过防火墙限制访问

应用程序组件已通过防火墙限制访问

共享数据库的其他安全措施

如果使用单个数据库,该数据库既支持内部数据又支持外部可用的 Web 应用程序的数据,则应该考虑在访问数据库的对象层之间放置硬边界。通过添加另一个防火墙可以该实现该操作,其结果仅仅是会加强 DMZ 边界(在代理体系结构的基本防火墙中描述)。

带有两个防火墙配置的 DMZ

以下配置在由 Web 应用程序和内部(可信的)客户端共享的数据库服务器的前面放置另外一个防火墙。对于万一第一道防火墙被突破而黑客获得对承载对象层的服务器的访问权的情况,此配置会提供进一步的安全保障。注意,在生产环境中应该极少出现此种情况 - 您的站点应该有能力在黑客获得对对象层的计算机的访问权之前就检测到并终止恶意入侵。

图 8-10 带有两个防火墙的 DMZ 体系结构

带有两个防火墙的 DMZ 体系结构

在以上配置中,使用另一个防火墙强化对象层与数据库之间的边界。此防火墙会保持严格的应用程序级策略,除来自承载对象层的 WebLogic Server 的 JDBC 连接之外,该策略拒绝访问所有其他连接。


  返回顶部       上一页  下一页