1. 什么是多数据源

我们知道配置WebLogic Server集群时一定要配置一个单一接入点(例如:Apache或F5),这样客户端只要访问这个单一入口点就可以了。对于客户来说,就好象访问一台服务器,但实际上是有一组服务器来提供服务,客户根本不会觉查这组服务器的存在以及这些服务器之间的协作关系。与应用服务器集群类似,数据库也可能由多个实例构成集群(Oracle RAC),那么同样道理,对于数据库的访问也需要一个单一入口点,这就是多数据源。也就是说多数据源是协作管理一组数据源,实现负载均衡与故障转移。

2. 多数据源算法

虽然多数据源可以实现负载均衡与故障转移,但是在配置多数据源时,必须二选一。

  • 故障转移

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

故障转移算法这依赖于数据源上的“保留时测试连接(TestConnectionsOnReserve)”选项来测试数据源中的连接。

即:数据源-> 配置->连接池->高级

图1

JDBC 是一个高度有状态客户端 DBMS 协议,在此协议中,DBMS 连接和事务状态直接与 DBMS 过程和客户端(驱动程序)之间的套接口相连。出于此原因,不支持在正在使用某个连接时对其进行故障转移

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

  • 负载均衡

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

3. 故障转移增强处理

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

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

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

由于连接未能通过连接测试从而导致整个数据源被禁用。多数据源会定期测试该已禁用的数据源中的连接,如果该数据源可用,则该数据源将变为可用,并恢复向该数据源路由连接请求。测试频率是由该多数据源的“测试频率”特性控制的,默认120秒,如下图。

多数据源->配置->一般信息

图2

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

对于故障的定义,一是测试未通过,还有一种情况就是当数据库连接请求数超过了多数据源中当前数据源中的可用连接数时,对于这种情况,我们可以在配置多数据源时指定“如果繁忙,则进行故障转移请求(FailoverRequestIfBusy)”选项,图2。

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

我们可以将一个回调处理程序注册到WebLogic Server中,用以控制是否或何时进行故障转移。以便在故障转移前可以进行任何其它系统准备,如准备好数据库或具有高可用性的框架进行通信。此回调处理程序是通过多数据源的“故障转移回调处理程序”特性注册的,并且是针对每个多数据源进行注册,见图2。

4.1 回调程序

回调程序必须实现weblogic.jdbc.extensions.ConnectionPoolFailoverCallback接口,此接口只有一个回调函数allowPoolFailover( currPool, nextPool, opcode ),其返回值必须是OK, RETRY_CURRENT, or DONOT_FAILOVER。

4.2 故障迁移时工作原理

在当前数据源未能通过连接测试时,或者在当前数据源中的所有连接都处于忙状态(如果已启用FailoverRequestIfBusy),WebLogic Server会尝试将连接请求故障转移到列表中的下一个数据源,如果已注册了某个回调处理程序,则WebLogic Server会调用回调处理程序,传递以下信息,并等待一个返回(即同步调用)。

    • currPool:当前正在用于提供数据库连接的数据源名称,这是“故障转移源”数据源。
    • nextPool:多数据源中列出的下一个可用数据源的名称,这是“故障转移目标”数据源。
    • opcode:表明调用原因的代码,OPCODE_CURR_POOL_DEAD表示当前数据源已失效并已将其禁用;OPCODE_CURR_POOL_BUSY 表示该数据源中的所有数据库连接处于使用状态。即:FailoverIfBusy=true

回调处理程序返回值:

    • OK:继续执行,故障转移到列表中的下一个数据源。
    • RETRY_CURRENT:使用当前数据源重试连接请求
    • DONOT_FAILOVER:不重试当前连接请求,并且不进行故障转移,WebLogic Server将引发一个weblogic.jdbc.extensions.PoolUnavailableSQLException。

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

注意:    在您手工禁用数据源时,WebLogic Server 不调用回调处理程序。
对于使用负载平衡算法的多数据源,WebLogic Server 不会在禁用了某个数据源的情况下调用回调处理程序。但是,它会在尝试重新启用已禁用数据源时调用回调处理程序。

4.3 故障恢复时工作原理

    • currPool:以前禁用的并且目前可供重新启用的数据源的名称。
    • nextPool:此为空。
    • opcode:此值始终为OPCODE_REENABLE_CURR_POOL,表未currPool中指定的数据源目前可用

回调处理程序返回值:

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

如果回调处理程序返回了DONOT_FAILOVER,则WebLogic Server将尝试在下一个测试周期期间重新启用数据源,并将回调处理程序作为该进程的一部分进行调用。

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

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

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

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

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

了解什么是WebLogic Server 多数据源(Multi-DataSource)的更多相关文章

  1. WebLogic使用总结(三)——WebLogic配置JNDI数据源

    一.在WebLogic新建针对Oracle数据库的JNDI数据源 进入weblogic管理控制台,此处是远程访问:http://192.168.1.144:7001/console 点击左侧[ 域结构 ...

  2. WebLogic配置JNDI数据源

    一.什么是jndi数据源 JNDI是Java命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一. 我们平时开发web程序的时候, ...

  3. 在weblogic上配置数据源

    转自:http://blog.csdn.net/weijie_search/article/details/2756585 旁白 这是在weblogic9.0+mysql5.1的环境下配置的数据源.其 ...

  4. weblogic配置oracle数据源

    在weblogic配置oracle数据源还是挺简单的,网上也有很多关于这方面的文章,写给自己也写给能够得到帮助的人吧.weblogic新建域那些的就不说了哈.点击startWebLogic文件,会弹出 ...

  5. WebLogic Server 关键优化指标

    昨天给客户做巡检,又将整个WebLogic Server的优化过程走了一遍,记录下来给大家参考. 1.JVM优化 查看 $ps –ef | grep java /opt/java1.5/bin/jav ...

  6. WebLogic Server 12.2.1 多租户安装配置

    1.安装WebLogic 12.2.1版本 下载安装的时候记住选择Fusion Middleware Infrastructer Installer. 2.安装OTD OTD需要单独下载安装,安装的时 ...

  7. 【WebLogic使用】3.WebLogic配置jndi数据源

    参见博客:https://blog.csdn.net/acmman/article/details/70146603 参考视频教程: 一.什么是jndi数据源JNDI是Java命名与目录接口(Java ...

  8. WebLogic Server官方下载地址

    WebLogic Server官方下载地址 英文(更新到12c和9.2.4):http://www.oracle.com/technetwork/middleware/ias/downloads/wl ...

  9. BEA WebLogic Server 10 查看和配置日志

    查看和配置日志 WebLogic Server 内的每个子系统都可生成日志消息来传达其状态.例如,当启动 WebLogic Server 实例时,安全子系统会输出消息以报告其初始化状态.为了记录其子系 ...

随机推荐

  1. 云计算之路-阿里云上:用上了开放缓存服务OCS

    你知道在我们使用的云服务器中哪台最贵吗?跑memcached的缓存服务器(12G内存).你知道保证网站访问速度的功臣之一是谁吗?跑memcached的缓存服务器. 用云服务器这么高贵的内存跑memca ...

  2. 极简Node教程-七天从小白变大神(二:中间件是核心)

    当我们只引入express时,前述的那些功能都是没有启用的.那么,如何将这些功能添加进来呢?express通过其中间件机制实现了这些功能的管理.每一个中间件对应一个功能,而中间件可以是第三方库,也可以 ...

  3. iOS下单例模式实现(一)(objective-c arc gcd)

    单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 这里主要介绍下在arc下,利用gcd实现单例. 第一步:声明一个静态实例 static SoundTool *_instan ...

  4. python 模块初识

    python的强大之处在于有丰富的实现各种功能的标准库和第三方库,另外还允许用户自己建立库文件, 标准模块(又称为库)包括sys, os, glob, socket, threading, _thre ...

  5. [oldboy-django][2深入django]Form组件实现生成: select下拉框, checkbox复选框,radio单选框以及如何实现自定义数据格式要求

    1 需求 - 1Form组件如何实现生成选择类标签: select,check, radio - 默认值 - 保留上次输入的值 - 2自定义验证规则 - RegexField - -

  6. django ORM 外键详解

    Django中的外键: 首先,为了方便理解,我们把使用ForeignKey的字段所在的表定义为从表,把ForeignKey中to参数连接的表称为主表. 外键使用的先决条件: 在mysql数据表中,数据 ...

  7. iBATIS 框架主要的类层次结构

    iBATIS 框架主要的类层次结构 总体来说 iBATIS 的系统结构还是比较简单的,它主要完成两件事情: 根据 JDBC 规范建立与数据库的连接: 通过反射打通 Java 对象与数据库参数交互之间相 ...

  8. @inerface的11条规范写法

    总结一些interface声明时的规范,相关宏的介绍,定义方法时有用的修饰符,编写注释的规范,最终写出一个合格的头文件. 1.读写权限 1.1实例变量的@public,@protected,@priv ...

  9. Mysql实战之索引

    author:JevonWei 版权声明:原创作品 索引基础: 索引:提取索引的创建在的表上字段中的数据,构建出一个独特的数据结构: 索引的作用:加速查询操作:副作用:降低写操作性能: 表中数据子集: ...

  10. XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Khamovniki Problem J Stairways解题报告(分块+维护凸壳)

    首先ORZ一发Claris聚聚的题解:http://www.cnblogs.com/clrs97/p/8689215.html,不然我可能没机会补过这道神题了. 这里写一个更详细的题解吧(我还是太菜了 ...