weblogic配置 JDBC 多数据源

摘自:http://edocs.weblogicfans.net/wls/docs92/jdbc_admin/jdbc_multidatasources.html

eDocs Home > BEA WebLogic Server 9.2 Documentation > 配置和管理 WebLogic JDBC > 配置 JDBC 多数据源

配置和管理 WebLogic JDBC

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

配置 JDBC 多数据源

多数据源是是一组数据源的提取,可提供与此多数据源相关联的各数据源之间的负载平衡或故障转移处理。就像数据源会绑定到 JNDI 树一样,多数据源会绑定到 JNDI 树或本地应用程序上下文。应用程序会在 JNDI 树中或在本地应用程序上下文 (java:comp/env) 中查找多数据源(就像这些应用程序查找数据源时一样),然后会请求一个数据库连接。多数据源会根据在多数据源配置中选择的算法(负载平衡或故障转移)确定要使用哪一个数据源来满足该请求。

本部分包括以下信息:

 


多数据源功能

一个多数据源可被视为一组数据源。多数据源最适用于具有高可用性的数据库系统(如冗余数据库或 Oracle Real Application Clusters (RAC))的节点之间的故障转移或负载平衡。

多数据源的数据源成员列表支持动态更新。这允许环境(如那些使用 Oracle RAC 的环境)添加和删除数据库节点以及相应的数据源而不必进行重新部署,因此可提供以下能力:

请参阅将多数据源与 Oracle RAC 一起使用

注意: 多数据源不提供数据库之间的任何同步。本文档中假定已在 WebLogic Server 外部正确处理了数据库同步以便使数据完整性得到维护。

删除数据库节点

可以添加数据库节点以及相应的数据源而不必进行重新部署。此功能提供了关闭节点以便进行维护或收缩群集的能力。使用以下高级别步骤可关闭数据库节点:

注意: 不按照这些步骤执行操作可能会导致事务回滚。
  1. 从多数据源中删除数据源。请参阅“管理控制台联机帮助”中的向 JDBC 多数据源中添加数据源或从中删除数据源
  2. 正常挂起该数据源。请参阅“管理控制台联机帮助”中的挂起 JDBC 数据源
  3. 完成所有事务后,关闭该数据源。请参阅“管理控制台联机帮助”中的关闭 JDBC 数据源
  4. 关闭该数据库节点。

添加数据库节点

可以添加一个数据库节点以及相应的数据源而不必进行重新部署。此功能提供了在进行维护之后启动节点或增大群集的能力。使用以下高级别步骤可添加数据库节点:

  1. 重新启动该数据库节点。
  2. 重新启动该数据源。请参阅“管理控制台联机帮助”中的启动 JDBC 数据源
  3. 将该数据源添加回多数据源中。请参阅“管理控制台联机帮助”中的向 JDBC 多数据源中添加数据源或从中删除数据源

 


创建和配置多数据源

可通过以下方法创建多数据源:使用管理控制台或 WebLogic 脚本工具,先创建数据源,然后创建多数据源,再将这些数据源分配到该多数据源。

有关创建多数据源的说明,请参阅“管理控制台联机帮助”中的配置 JDBC 多数据源

有关配置多数据源时创建的配置文件的信息,请参阅了解 WebLogic Server 中的 JDBC 资源。另请参阅创建 JDBC 多数据源模块

 


选择多数据源算法

设置多数据源之前,需要确定该多数据源的主要用途 - 故障转移或负载平衡。可选择符合您的要求的算法。

故障转移

故障转移算法提供了一个用于满足连接请求的数据源的有序列表。通常情况下,每一个对这种类型的多数据源发出的连接请求都由该列表中的第一个数据源提供服务。如果某个数据源连接未能通过测试,并且该连接无法被替换,或者如果该数据源已挂起,则会从该列表中的下一个数据源开始,按顺序查找连接。

注意: 此算法依赖于数据源上的“测试保留的连接”(TestConnectionsOnReserve) 来测试第一个数据源中的连接,以查看该数据源是否处于正常状态。如果该连接未能通过测试,则多数据源会使用该多数据源中列出的下一个数据源中的连接。有关配置 TestConnectionsOnReserve 的信息,请参阅数据源的连接测试选项
注意: JDBC 是一个高度有状态客户端 DBMS 协议,在此协议中,DBMS 连接和事务状态直接与 DBMS 过程和客户端(驱动程序)之间的套接口相连。出于此原因,不支持在正在使用某个连接时对其进行故障转移。

负载平衡

可从该列表中的任何数据源向对负载平衡多数据源做出的连接请求提供服务。多数据源会使用循环法方案来选择要用于满足连接请求的数据源。当多数据源提供了某个连接时,它会从正好列在用于提供连接的上一个数据源后面的数据源中选择一个连接。如果某个数据库连接未能通过测试,并且该连接无法被替换,或者如果该数据源已挂起,则使用负载平衡算法的多数据源也会故障转移到该列表中的下一个数据源。

 


多数据源故障转移的限制和要求

WebLogic Server 为多数据源提供了故障转移算法,以便在数据源故障时(例如,在数据库管理系统崩溃时),您的系统可继续运行。但是,配置系统时,您必须考虑以下限制和要求。

保留时测试连接以启用故障转移

数据源依赖于数据源上的“测试保留的连接”(TestConnectionsOnReserve) 功能以了解何时丢失了数据库连接。必须对多数据源中的数据源启用“测试保留的连接”(默认值)。WebLogic Server 将在每次向应用程序提供一个连接之前对该连接进行测试。使用故障转移算法时,多数据源将使用来自连接测试的结果来确定何时要故障转移到该多数据源中的下一个数据源。测试失败之后,数据源会尝试重新创建该连接。如果该尝试失败,则多数据源会故障转移到下一个数据源。

对正在使用的连接不进行故障转移

连接可能会在被保留之后发生故障,在此情况下,您的应用程序必须处理该故障。WebLogic Server 无法为某个应用程序正在对其进行使用时发生故障的连接提供故障转移。使用连接时发生的任何故障都需要您重新启动事务并提供代码以处理这样的故障。

 


多数据源故障转移增强

以下增强方面改进了多数据源的故障转移处理:

数据源故障时的连接请求路由增强

为了在多数据源中的某个数据源发生故障时提高性能,WebLogic Server 会在缓冲池连接未能通过连接测试的情况下自动禁用该数据源。禁用了某个数据源后,WebLogic Server 不会将连接请求从应用程序路由到该数据源,而是会将连接请求路由到多数据源中列出的下一个可用数据源。

此功能要求已为多数据源中的所有数据源配置了数据源测试选项,特别是“测试表名称”和“测试保留的连接”。请参阅数据源的连接测试选项

如果已为该多数据源注册了回调处理程序,则 WebLogic Server 会在故障转移到列表中的下一个数据源之前,调用该回调处理程序。有关详细信息,请参阅使用回调控制多数据源故障转移

恢复多数据源中发生故障的数据源时的自动重新启用

在由于连接未能通过连接测试而自动禁用了某个数据源之后,多数据源会定期测试该已禁用的数据源中的连接,以确定该数据源(或底层数据库)何时会再次可用。当该数据源变为可用时,该多数据源会根据多数据源算法和该数据源在已包括数据源的列表中的位置,自动重新启用该数据源,并恢复向数据源路由连接请求。这些测试的频率是由该多数据源的“测试频率(秒)”特性控制的。“测试频率”选项当前在管理控制台中不可用,但它在该多数据源的 JDBCConnectionPoolParamsBean 中可用。由于“测试频率”的默认值为 120 秒,因此,如果不特别为该选项设置一个值,则多数据源会每 120 秒测试一次已禁用的数据源。

WebLogic Server 不会测试和自动重新启用您手工禁用的数据源。它仅测试自动禁用的数据源。

如果已为该多数据源注册了回调处理程序,则 WebLogic Server 会在重新启用数据源之前,调用该回调处理程序。有关详细信息,请参阅使用回调控制多数据源故障回复

对多数据源中处于忙状态的数据源启用故障转移

默认情况下,对于使用故障转移算法的多数据源,当数据库连接请求数超过了多数据源中当前数据源中的可用连接数时,后续连接请求将失败。

要使多数据源在当前数据源中的所有连接都处于使用状态时可进行故障转移,则可启用管理控制台中 JDBC 多数据源: 配置: 常规页上的“如果繁忙,则进行故障转移请求”选项。(还可以通过设置 JDBCDataSourceParamsBean 中的 FailoverRequestIfBusy 特性实现该目的。)。如果已启用(设置为 true),则当前数据源中的所有连接均处于使用状态时,应用程序的连接请求将路由到多数据源中下一个可用的数据源。如果已禁用(设置为 false,默认值),则连接请求不会进行故障转移。

如果 ConnectionPoolFailoverCallbackHandler 包含在多数据源配置中,则 WebLogic Server 会在进行故障转移之前调用回调处理程序。有关详细信息,请参阅使用回调控制多数据源故障转移

使用回调控制多数据源故障转移

可将一个回调处理程序(该回调处理程序可对使用故障转移算法的多数据源何时将连接请求从多数据源中的一个 JDBC 数据源故障转移到列表中的下一个数据源进行控制)注册到 WebLogic Server 中。

可以使用回调处理程序控制是否或何时进行故障转移,以便在故障转移前可以进行任何其他系统准备,如准备好数据库或与具有高可用性的框架进行通信。

回调处理程序是通过多数据源的“故障转移回调处理程序”特性注册的,并且是针对每个多数据源进行注册的。必须为要将该回调处理程序应用到的每个多数据源注册该回调处理程序。并且,您可以为域中的每个多数据源注册不同的回调处理程序。

回调处理程序要求

用于控制多数据源中的故障转移和故障回复的回调处理程序必须包括 weblogic.jdbc.extensions.ConnectionPoolFailoverCallback 接口的实现。当多数据源需要故障转移到列表中的下一个数据源时,或当以前禁用的数据源变为可用时,WebLogic Server 会调用 ConnectionPoolFailoverCallback 接口中的 allowPoolFailover() 方法,并按照下面的定义,为三个参数(currPoolnextPoolopcode)分别传递一个值。然后,WebLogic Server 会在完成任务之前,等待来自该回调处理程序的返回。

您的应用程序必须按照下面的定义返回 OK、RETRY_CURRENT 或 DONOT_FAILOVER。应用程序应处理故障转移和故障回复情况。

有关详细信息,请参阅 weblogic.jdbc.extensions.ConnectionPoolFailoverCallback 接口的 Javadoc。

注意: 故障转移回调处理程序是可选的。如果未在多数据源配置中指定任何回调处理程序,则 WebLogic Server 会继续执行操作(进行故障转移或重新启用已禁用的数据源)。

回调处理程序配置

有两个多数据源配置特性与故障转移和故障回复功能相关联:

  • 故障转移回调处理程序 (ConnectionPoolFailoverCallbackHandler) - 要为某个多数据源注册故障转移回调处理程序,您要将此特性的一个值添加到多数据源配置中。该值必须是一个绝对名称,如 com.bea.samples.wls.jdbc.MultiDataSourceFailoverCallbackApplication。可使用管理控制台设置“故障转移回调处理程序”(请参阅“注册故障转移回调处理程序”),或使用 WLST,在多数据源的 JDBCDataSourceParamsBean 上对其进行设置。
  • 测试频率 (TestFrequencySeconds) - 控制多数据源检查已禁用的(失效)数据源以查看目前其是否可用的频率。有关详细信息,请参阅恢复多数据源中发生故障的数据源时的自动重新启用

故障转移的工作方式

在当前数据源未能通过连接测试时,或者在当前数据源中的所有连接都处于忙状态(如果已启用 FailoverRequestIfBusy)时,WebLogic Server 会尝试将连接请求故障转移到列表中的下一个数据源。

要启用回调功能,您要使用多数据源配置中的“故障转移回调处理程序”将该回调处理程序注册到 Weblogic Server 中。

使用故障转移算法时,会从列表中的第一个数据源为连接请求提供服务。如果来自该数据源的连接未能通过连接测试,则 WebLogic Server 会将该数据源标记为失效并将其禁用。如果已注册了某个回调处理程序,则 WebLogic Server 会调用回调处理程序,传递以下信息,并等待一个返回:

  • currPool - 对于故障转移,这是当前正在用于提供数据库连接的数据源的名称。这是“故障转移源”数据源。
  • nextPool - 多数据源中列出的下一个可用数据源的名称。对于故障转移,这是“故障转移目标”数据源。
  • opcode - 表明调用原因的代码:
    • OPCODE_CURR_POOL_DEAD - WebLogic Server 已确定当前数据源已失效并已将其禁用。
    • OPCODE_CURR_POOL_BUSY - 该数据源中的所有数据库连接都处于使用状态。(要求多数据源配置中的 FailoverIfBusy=true。请参阅对多数据源中处于忙状态的数据源启用故障转移。)

故障转移与连接请求是同步的:仅当 WebLogic Server 尝试满足某个连接请求时,才会发生故障转移。

来自回调处理程序的返回可显示以下三个可能的值之一:

  • OK - 继续执行操作。在此情况下,这意味着要故障转移到列表中的下一个数据源。
  • RETRY_CURRENT - 使用当前数据源重试连接请求。
  • DONOT_FAILOVER - 不重试当前连接请求,并且不进行故障转移。WebLogic Server 将引发一个 weblogic.jdbc.extensions.PoolUnavailableSQLException

WebLogic Server 会根据回调处理程序返回的值执行操作。

如果第二个数据源发生故障,则 WebLogic Server 会在尝试故障转移到多数据源中的下一个可用数据源(如果有一个)的过程中,再次调用回调处理程序(像在以前的故障转移中一样)。

注意: 在您手工禁用数据源时,WebLogic Server 不调用回调处理程序。

对于使用负载平衡算法的多数据源,WebLogic Server 不会在禁用了某个数据源的情况下调用回调处理程序。但是,它会在尝试重新启用已禁用数据源时调用回调处理程序。有关详细信息,请参阅以下部分。

使用回调控制多数据源故障回复

如果为某个多数据源注册了某个故障转移回调处理程序,则 WebLogic Server 会在重新启用已自动禁用的数据源时调用同一个回调处理程序。可以使用回调控制是否或何时重新启用已禁用的数据源,以便在重新启用该数据源前可以进行任何其他系统准备,如准备好数据库或与具有高可用性的框架进行通信。

有关回调处理程序的详细信息,请参阅以下部分:

故障回复的工作方式

WebLogic Server 会定期检查多数据源中已自动禁用的数据源的状态。(请参阅恢复多数据源中发生故障的数据源时的自动重新启用。)如果已禁用的数据源变为可用,并且已注册了故障转移回调处理程序,则 WebLogic Server 会使用以下信息调用回调处理程序,并等待一个返回:

  • currPool - 对于故障回复,这是以前禁用的并且目前可供重新启用的数据源的名称。
  • nextPool - 对于故障回复,此为空。
  • opcode - 表明调用原因的代码。对于故障回复,该代码始终为 OPCODE_REENABLE_CURR_POOL,表示 currPool 中指定的数据源目前是可用的。

故障回复或自动重新启用已禁用的数据源,与故障转移不同,因为故障转移与连接请求同步,但故障回复与连接请求异步

回调处理程序可返回以下值之一:

  • OK - 继续执行操作。在此情况下,这意味着要重新启用指示的数据源。WebLogic Server 会根据多数据源算法和该数据源在已包括数据源的列表中的位置,恢复向数据源路由连接请求。
  • DONOT_FAILOVER - 不重新启用 currPool 数据源。继续从正在使用的数据源为连接请求提供服务。

WebLogic Server 会根据回调处理程序返回的值执行操作。

如果回调处理程序返回了 DONOT_FAILOVER,则 WebLogic Server 将尝试在下一个测试周期(由多数据源配置中的 TestFrequencySeconds 特性确定)期间重新启用数据源,并将回调处理程序作为该进程的一部分进行调用。

多数据源中列出数据源时所使用的顺序是非常重要的。使用故障转移算法的多数据源将始终尝试从多数据源中的数据源列表中的第一个可用数据源为连接请求提供服务。请考虑以下情况:

  1. MultiDataSource_1 使用故障转移算法,具有注册的 ConnectionPoolFailoverCallbackHandler,并包含三个数据源:DS1DS2DS3(以该顺序列出)。
  2. DS1 变为已禁用,因此,MultiDataSource_1 将连接请求故障转移到 DS2
  3. 然后,DS2 变为已禁用,因此,MultiDataSource_1 将连接请求故障转移到 DS3
  4. 一段时间之后,DS1 再次变为可用,回调处理程序将允许 WebLogic Server 重新启用该数据源。DS1 将为以后的连接请求提供服务,因为 DS1 是该多数据源中列出的第一个数据源。
  5. 如果随后 DS2 变为可用,并且回调处理程序允许 WebLogic Server 重新启用该数据源,则连接请求将继续由 DS1 提供服务,因为在数据源列表中,DS1 列在 DS2 之前。

 


在服务器和群集上部署 JDBC 多数据源

多数据源为了满足连接请求而使用的所有数据源与该多数据源必须部署在相同的服务器和群集上。多数据源始终使用部署在同一台服务器上的数据源来满足连接请求。多数据源不会将连接请求路由到群集中或域中的其他服务器。

要将多数据源部署到某个群集或服务器,您要选择该群集或服务器作为部署目标。在服务器上部署某个多数据源时,WebLogic Server 会在该服务器上创建该多数据源的一个实例。将多数据源部署到群集时,WebLogic Server 会在该群集中的每台服务器上创建该多数据源的实例。

有关说明,请参阅“管理控制台联机帮助”中的定位和部署 JDBC 多数据源


posted @ 2012-11-21 16:40  狂奔的蜗牛cn  阅读(1312)  评论(0)    收藏  举报