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. Adaboost和GBDT的区别以及xgboost和GBDT的区别

    Adaboost和GBDT的区别以及xgboost和GBDT的区别 以下内容转自 https://blog.csdn.net/chengfulukou/article/details/76906710 ...

  2. Leetcode 592.分数加减运算

    分数加减运算 给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分 ...

  3. ActionContext源码

    /* * Copyright 2002-2006,2009 The Apache Software Foundation. * * Licensed under the Apache License, ...

  4. 团队Alpha版本冲刺(一)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:丹丹 组员7:家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组内 ...

  5. 201621123034 《Java程序设计》第2周学习总结

    1. 本周学习总结 本周学习了基本数据类型.包装类,自动装箱与自动拆箱.数组.ArrayList.包装类可以更加方便的转换基本数据类型,而其存放的是对象的引用,而非对象本身,在对其内容进行比较时,要使 ...

  6. POJ 2286 The Rotation Game(IDA*)

    The Rotation Game Time Limit: 15000MS   Memory Limit: 150000K Total Submissions: 6396   Accepted: 21 ...

  7. [NOI2010][bzoj2005] 能量采集 [欧拉函数+分块前缀和优化]

    题面: 传送门 思路: 稍微转化一下,可以发现,每个植物到原点连线上植物的数量,等于gcd(x,y)-1,其中xy是植物的横纵坐标 那么我们实际上就是要求2*sigma(gcd(x,y))-n*m了 ...

  8. iOS-app发布证书和调试证书配置

    iOS-app发布证书.真机调试证书.测试证书.推送证书详细过程 更重要的是让你彻底明白为什么要这样配置证书 说句废话:凡事当你弄清楚为什么时,就揭开了它复杂和神秘的面纱 正文开始 一:发布证书 遵旨 ...

  9. 平滑升级nginx

    平滑升级nginx版本技术文档 作者 联系方式 日期 版本号 马坤 852115346@qq.com 2017-12-31 V1.0.0 备注:作者水平有限,难免出现错误.如若发现错误,请您及时与作者 ...

  10. interview ms1 robert move **

    move 2turn rightmove 3turn rightmove 6 初始位置为(0,0),方向为north,求最后的位置. string2char:  const char* t = sec ...