Oracle RAC 系统中实现负载均衡的方法和数据库服务器 技术领域 本发明涉及数据库技术领域, 特别涉及一种 Oracle RAC 系统中实现负载均衡的方 法和数据库服务器。
背景技术 Oracle RAC(Real Application Clusters) 系统中, 包括数据库和与之相连的若 干节点服务器, 其系统结构如图 1 所示。
数据库中具有数量较多的计算任务模块, 对于企业来说, 每个计算任务模块对应 某个或某些业务问题、 商业问题的程序实现。 不同的计算任务模块由于业务问题、 商业问题 的复杂性不同, 需要处理的数据量不同, 且计算方式也可能不同。 例如, 问题越多越复杂, 需 要处理的数据量一般就会越大, 耗费的计算资源也会越多。耗费的计算资源具体可以包括 节点服务器的 CPU, 内存, 硬盘等硬件资源以及逻辑资源等。
计算任务模块中的程序需要交给相连的节点服务器上实现计算。这样, 数据库中 大量的计算任务模块中的程序就会交给若干相连的节点服务器进行计算。
为了实现良好的计算性能, 现有技术中采用负载均衡技术。现有的 Oracle RAC 系 统中, 根据每个节点可以并行执行的进程数量来决定将某个计算任务模块对应的程序分配 给哪个节点服务器执行。节点服务器的并行进程是 oracle 系统中处理任务的最小单元, 对 应的要耗费前述所说的节点服务器的 CPU、 内存、 硬盘等硬件资源以及逻辑资源。随着计算 任务模块中的程序的处理, 该程序所需的并行进程数量是动态变化的。而现有的负载均衡 技术中, 在特定情况下, 会给已被计算任务模块中程序占用一定量运行进程, 但还有剩余可 用运行进程的节点服务器分配新的计算任务模块中的程序, 以利用该节点服务器剩余的可 用资源。 而当节点服务器上先前运行的计算任务模块中的程序需要的并行进程数动态变化 较多时, 则很可能此时节点服务器已达到最大负载, 无法提供更多的资源, 从而影响计算任 务模块中程序的计算, 导致计算性能下降。
例如, 节点服务器 A 初始时运行计算任务模块 1 中的程序 1, 设该程序 1 初始时需 要 4 个并行进程, 即节点服务器提供 4 个并行进程执行计算任务模块 1 中的程序 1 ; 当有计 算任务模块 2 中的程序 2 需要运行, 且所述节点服务器 A 上存在 2 个空闲的并行进程时, 可 能分配节点服务器 A 的这两个空闲并行进程运行计算任务模块 2 的程序 2。由于计算任务 模块中的程序需要的进程是动态变化的, 经过一段时间后, 程序 1 可能需要共 6 个并行进程 来运行, 对于当前节点服务器 A 最大只支持提供 6 个并行进程的情况, 则此时节点服务器 A 已达到最大负载, 无法提供更多的资源来运行程序 1, 这样, 影响计算任务模块中程序的计 算, 导致计算性能下降。
可见, 现有技术中的负载均衡方案, 会导致计算性能的下降。
发明内容
本申请实施例的目的是提供一种 Oracle RAC 系统中实现负载均衡的方法和数据库服务器, 以保证计算性能。
为解决上述技术问题, 本申请实施例提供一种 Oracle RAC 系统中实现负载均衡的 方法和数据库服务器是这样实现的 :
一种 Oracle RAC 系统中实现负载均衡的方法, 包括 :
数据库服务器查找空闲的节点服务器 ;
数据库服务器提交需要运行的计算任务模块至所述查找到的空闲的节点服务器 以完成计算 ;
计算任务模块向数据库服务器申请节点锁以保障所述计算任务模块与所述节点 服务器的唯一配对关系。
一种数据库服务器, 包括 :
查找单元, 用于查找空闲的节点服务器 ;
提交单元, 用于提交需要运行的计算任务模块至所述查找到的空闲的节点服务器 以完成计算 ;
上锁单元, 用于申请节点锁以保障所述计算任务模块与所述节点服务器的唯一配 对关系。
由以上本申请实施例提供的技术方案可见, 数据库服务器查找空闲的节点服务 器, 数据库服务器提交需要运行的计算任务模块至所述查找到的空闲的节点服务器以完成 计算, 计算任务模块向数据库服务器申请节点锁以保障所述计算任务模块与所述节点服务 器的唯一配对关系, 通过在业务模块这个层次, 而不是业务模块内部的 sql 段层次进行 rac 节点资源的负载均衡的分配, 并在并发业务模块申请的情况下通过申请 Oracle 内部锁机 制来确保一个节点在一个时间点的时候只有一个业务模块运行。 这种负载均衡机制彻底解 决了 Oracle 的机遇并行进程数的负载均衡策略, 是一种全新的负载均衡策略。 附图说明 为了更清楚地说明本申请实施例或现有技术中的技术方案, 下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍, 显而易见地, 下面描述中的附图仅仅是本 申请中记载的一些实施例, 对于本领域普通技术人员来讲, 在不付出创造性劳动性的前提 下, 还可以根据这些附图获得其他的附图。
图 1 为现有技术中 Oracle RAC 系统的结构图 ;
图 2 为本申请 Oracle RAC 系统的结构图 ;
图 3 为本申请 Oracle RAC 系统中实现负载均衡的方法实施例的流程图 ;
图 4 为本申请数据库服务器实施例的框图 ;
图 5 为本申请数据库服务器另一实施例的框图 ;
图 6 为本申请数据库服务器另一实施例的框图 ;
图 7 为本申请数据库服务器另一实施例的框图 ;
图 8 为本申请数据库服务器另一实施例的框图。
具体实施方式
本申请实施例提供一种 Oracle RAC 系统中实现负载均衡的方法和数据库服务器。首先对数据库和数据仓库的概念做一些辨析。数据库一般存储在线交易数据, 数 据仓库存储的一般是历史数据。数据库设计是尽量避免冗余, 一般采用符合范式的规则来 设计, 数据仓库在设计是有意引入冗余, 采用反范式的方式来设计。 数据库是为捕获数据而 设计, 数据仓库是为分析数据而设计, 它的两个基本的元素是维表和事实表。 维是看问题的 角度, 比如时间, 部门, 维表就是这些东西的定义, 事实表里放着要查询的数据, 同时有维的 ID。 以银行业务为例, 数据库是事务系统的数据平台, 客户在银行做的每笔交易都会写入数 据库, 被记录下来, 这里, 可以简单地理解为用数据库记账。数据仓库是分析系统的数据平 台, 它从事务系统获取数据, 并做汇总、 加工, 为决策者提供决策的依据。比如, 某银行某分 行一个月发生多少交易, 该分行当前存款余额是多少。如果存款又多, 消费交易又多, 那么 该地区就有必要设立 ATM 了。
本申请中的数据库也可以为数据仓库的概念, 针对 Oracle Rac 的负载均衡技术, 两者都可以适用。
为了使本技术领域的人员更好地理解本申请中的技术方案, 下面将结合本申请实 施例中的附图, 对本申请实施例中的技术方案进行清楚、 完整地描述, 显然, 所描述的实施 例仅仅是本申请一部分实施例, 而不是全部的实施例。 基于本申请中的实施例, 本领域普通 技术人员在没有做出创造性劳动前提下所获得的所有其他实施例, 都应当属于本申请保护 的范围。 图 2 示出了本申请由数据库服务器和节点服务器组成的 Oracle RAC 系统。如图 2 中所示, Oracle RAC 系统中包括数据库服务器和若干节点服务器。在数据库服务器中, 又 包括若干计算任务模块。 如前所述, 每个计算任务模块对应某个或某些业务问题、 商业问题 的程序实现, 不同的计算任务模块需要耗费一定的计算资源。耗费的计算资源具体可以包 括节点服务器的 CPU, 内存, 硬盘等硬件资源以及逻辑资源等。计算任务模块中的程序需要 交给相连的节点服务器以完成计算。
图 3 示出了本申请 Oracle RAC 系统中实现负载均衡的方法实施例的流程图, 如图 3 所示, 包括 :
S310 : 数据库服务器查找空闲的节点服务器。
本申请的实现方式定位于计算任务模块和节点服务器这两个层次。数据库服务 器查找空闲的节点服务器, 具体的, 在单个节点服务器上, 只要有一个计算任务模块正在运 行, 那么就跳过此节点服务器, 继续寻找下一个空闲节点服务器。
在数据库服务器中, 可以按照节点服务器的标识排序, 如按照节点标识中的数字 大小进行排序 : 节点服务器 1, 节点服务器 2, ..., 节点服务器 3。进而, 依排序顺序查找空 闲的节点服务器。例如如果找到的第一个节点服务器不是空闲的, 则继续按照排序顺序查 找, 直到找到空闲的节点服务器。
另外, 数据库服务器中可以存储有运行记录表和节点服务器 List 表。该运行记录 表中包括计算任务模块, 以及该计算任务模块占用的节点服务器 ( 或称为与该计算任务模 块配对的节点服务器, 简称配对节点服务器 ) 这两项。该运行记录表中计算任务模块这一 项记载该计算任务模块的标识, 配对节点服务器这一项记载该计算任务模块占用的节点服 务器的标识。 当然, 如果某一计算任务模块没有配对的节点服务器, 则运行记录表中该计算 任务模块对应的配对节点服务器表项为空。节点服务器 List 表中包括与所述服务器数据
库相连的所有节点服务器的标识, 即记录所有可以提供计算的节点服务器的标识。 则, 通过 比对节点服务器 List 表与运行记录表, 即比对得到在节点服务器 List 表中而不在运行记 录表的配对节点服务器的节点服务器, 从而可以找出空闲的节点服务器。
S320 : 数据库服务器提交需要运行的计算任务模块至所述查找到的空闲的节点服 务器以完成计算。
如前所述, 数据库中大量的计算任务模块中的程序需要交给相连的节点服务器进 行计算。 从整体上来看, 把计算任务模块分配给节点服务器进行计算, 实际上就是通过使用 Oracle 提供的 sqlplus 客户端连接到数据库上, 执行分配到节点服务器的计算任务模块。
S330 : 计算任务模块向数据库服务器申请节点锁以保障所述该计算任务模块与所 述节点服务器的唯一配对关系。
Oracle 内部提供了锁机制, 该锁机制可以保障在某一计算任务模块抢到节点锁并 没有释放的情况下, 其他计算任务模块无法再申请得到该节点锁。
考虑到对于 S310 中查找出某一空闲的节点服务器, 可能同时有多个计算任务模 块需要提交至这个空闲的节点服务器以完成计算。 对于这种多个计算任务模块数量并发的 情况, 如果没有一种机制, 则会将多个计算任务模块都提交至找到的空闲节点服务器。 本申 请中, 通过 Oracle 内部的锁机制, 可以保障所述计算任务模块与所述节点服务器的唯一配 对关系。 向数据库服务器申请节点锁, 典型的可以采用下面的代码实现 :
DBMS_LOCK.allocate_unique(l_instname, lockhandle) ;
LN : = DBMS_LOCK.request(lockhandle, TIMEOUT => 100) ;
while(LN NOT IN(0, 4))loop
DBMS_LOCK.SLEEP(300) ;
LN : = DBMS_LOCK.request(lockhandle, TIMEOUT => 0) ;
特别的, 如果多个计算任务模块同时申请节点锁, 那么节点锁可以随机分配给提 出申请的一个计算任务模块。
对于没有被提交至空闲节点服务器而又需要运行的计算任务模块, 可以对这些计 算任务模块执行 shell 中的 sleep 动作, 直到一个预定的时间段之后再重新为该计算任务 模块配对一空闲的节点服务器, 并同样申请节点锁以保障该计算任务模块与所述节点服务 器的唯一配对关系。这个预定时间段在可能的情况下越短越好, 不过太短的话对系统也有 负面影响, 一般来说, 分钟级别的长度可以接受。 Shell 是系统的用户界面, 提供了用户与内 核进行交互操作的一种接口, 用于接收用户输入的命令并将其送入内核去执行。
由以上实施例可见, 通过在业务模块这个层次, 而不是业务模块内部的 sql 段层 次进行 rac 节点资源的负载均衡的分配, 并在并发业务模块申请的情况下通过申请 Oracle 内部锁机制来确保一个节点在一个时间点只运行一个业务模块。 这种负载均衡机制彻底解 决了现有 Oracle 中的负载均衡策略导致计算能力下降的问题, 保证了计算性能, 是一种全 新的负载均衡策略。
以下介绍本申请中的数据库服务器实施例, 图 4 示出了该数据库服务器实施例的 框图, 如图 4 所示, 包括 :
查找单元 41, 用于查找空闲的节点服务器 ;
提交单元 42, 用于提交需要运行的计算任务模块至所述查找到的空闲的节点服务 器以完成计算 ;
上锁单元 43, 用于申请节点锁以保障所述计算任务模块与所述节点服务器的唯一 配对关系。
所述数据库服务器还可以如图 5 所示, 所述查找单元 41 包括排序单元 51 和顺序 查找单元 52, 其中,
排序单元 51, 用于对节点服务器按照标识排序 ;
顺序查找单元 52, 用于依排序顺序查找空闲的节点服务器。
所述数据库服务器中还可以如图 6 所示, 所述查找单元 41 包括 List 表单元 61、 运 行记录表单元 62 和比对单元 63, 其中,
List 表单元 61, 包括与所述服务器数据库相连的所有节点服务器的标识 ;
运行记录表单元 62, 包括计算任务模块, 以及该计算任务模块占用的节点服务器 这两项, 计算任务模块这一项记载该计算任务模块的标识, 配对节点服务器这一项记载该 计算任务模块占用的节点服务器的标识 ;
比对单元 63, 用于通过比对节点服务器 List 表与运行记录表找出空闲的节点服 务器。 所述数据库服务器还可以如图 7 所示, 还包括 :
sleep 单元 44, 对于没有被提交至空闲节点服务器而又需要运行的计算任务模 块, 对这些计算任务模块执行 shell 中的 sleep 动作。
所述数据库服务器还可以如图 8 所示, 还包括 :
再次配对单元 45, 对于执行 sleep 动作的所述计算任务模块, 当执行 sleep 动作达 到预定的时间段之后的, 重新为该需要运行的计算任务模块配对一空闲的节点服务器, 并 申请节点锁以保障该计算任务模块与所述节点服务器的唯一配对关系。
为了描述的方便, 描述以上装置时以功能分为各种单元分别描述。 当然, 在实施本 发明时可以把各单元的功能在同一个或多个软件和 / 或硬件中实现。
通过以上的实施方式的描述可知, 本领域的技术人员可以清楚地了解到本发明可 借助软件加必需的通用硬件平台的方式来实现。基于这样的理解, 本发明的技术方案本质 上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来, 该计算机软件产品 可以存储在存储介质中, 如 ROM/RAM、 磁碟、 光盘等, 包括若干指令用以使得一台计算机设备 ( 可以是个人计算机, 服务器, 或者网络设备等 ) 执行本发明各个实施例或者实施例的某些 部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述, 各个实施例之间相同相似的部 分互相参见即可, 每个实施例重点说明的都是与其他实施例的不同之处。 尤其, 对于系统实 施例而言, 由于其基本相似于方法实施例, 所以描述的比较简单, 相关之处参见方法实施例 的部分说明即可。
本发明可用于众多通用或专用的计算系统环境或配置中。 例如 : 个人计算机、 服务 器计算机、 手持设备或便携式设备、 平板型设备、 多处理器系统、 基于微处理器的系统、 置顶 盒、 可编程的消费电子设备、 网络 PC、 小型计算机、 大型计算机、 包括以上任何系统或设备的 分布式计算环境等等。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述, 例如程序 模块。 一般地, 程序模块包括执行特定任务或实现特定抽象数据类型的例程、 程序、 对象、 组 件、 数据结构等等。也可以在分布式计算环境中实践本发明, 在这些分布式计算环境中, 由 通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中, 程序模块可以 位于包括存储设备在内的本地和远程计算机存储介质中。
虽然通过实施例描绘了本发明, 本领域普通技术人员知道, 本发明有许多变形和 变化而不脱离本发明的精神, 希望所附的权利要求包括这些变形和变化而不脱离本发明的 精神。