oracle rac 内存融合,【K-DB干货】浅谈KRAC内存融合技术

数据库的横向扩展已经成为各个企业用户的基本需求,一方面随着企业前端业务系统的膨胀,后端数据库系统的负载也在不断增长,企业进行纵向扩展技术难度较大,另一方面,数据库系统的关键性不断提高,横向扩展不仅提高处理性能,也极大的提高了数据库系统的容错能力。

目前,数据库横向扩展有多种实现方式,较为主流的是共享存储(Shared Disk)技术,不久前,浪潮发布的K-DB数据库,这款产品就基于共享存储技术,实现了双机高可用(HA)、多机集群(KRAC)等数据库横向扩展。

浪潮K-DB采用基于共享存储(Shared Disk)的双机或多机集群(KRAC)架构。

KRAC具有两大特点:故障转移和负载均衡。一方面,KRAC集群技术提供高可用解决方案,为用户提供统一数据服务的同时提供故障切换与恢复能力(Fail Over集群功能),避免单点故障,减少停机时间,确保系统全年7*24稳定运行。另一方面,后端数据库系统的负荷随着应用系统压力的上升也在不断的增加,集群技术能够实现数据库系统的横向扩展,将数据库的压力平均分配在多台数据库服务器上。

【KRAC演示视频】

http://v.qq.com/boke/page/x/k/1/x0174dycbk1.html

而在介绍这两大特点前,我们先通过下图了解KRAC的体系结构。

1d6c05296cee62f0e0c6a7f1ccfe3ff9.png

KRAC体系结构

KRAC由多个节点的数据库服务器和共享存储组成。共享存储上主要存放的是数据库必需的文件,包括数据文件、日志文件及控制文件等。数据库服务器上运行着数据库对应的实例,多实例之间通过内网进行数据的传输。KRAC的各个节点可以同时对磁盘进行读写,实现了多读多写的真正集群技术。

KRAC具有两大特点:故障转移和负载均衡。

特点一:故障转移

KRAC数据库可以对数据库系统中出现的任何单点故障节点的session 转移到其他正常的节点上,如磁盘、网络、服务器等,保障应用系统的不间断,最大程度的减少用户的损失。

b135d0e1c10482cb7dc2bcced51b8516.png

KRAC故障转移

特点二:负载均衡

KRAC会将所有的用户session平均分配到各个节点上,集群中的各个节点均能对磁盘进行读写,达到应用系统的线性扩展,从整体上提高数据库的吞吐量。

数据库各个节点的实例之间通过高速的内网传送数据,避免了节点间访问数据而产生的不必要的IO,而影响到性能。而在KRAC集群中,由于有多个节点都具有block buffer,这就需要节点间的blockbuffer可以互相传输访问,才能达到一致性的状态。

要具备以上2大特点,就不得不提内存融合技术,他是实现KRAC功能的核心。

KRAC核心技术:内存融合

874238621e0845a41e3d8915bef91f08.png

KRAC集群内部组件

KRAC的集群中由CCC(Cluster Cache Control)模块和GCA(Global Cache Adapter)模块实现集群间数据库的融合。传输的数据块类型根据不同场景的需要而不一样,主要包括CR block、Global dirty block、current block。节点间数据传输的功能由模块INC(Inter-Node Communication)服务。在节点间请求的block buffer由 CCC 和CGA 构造完毕后,INC 负责将对应的数据块传输到目的节点。

KRAC内存融合主要体现在4大核心技术上:锁机制、角色、PI BLOCK和GLOBAL LOCK DIRETROY。

下面,我们将为大家详细介绍这4个核心技术点的运行机制。

锁机制

在数据库中,对于数据块的block buffer的并发读写使用锁机制进行保护。每一个数据块的锁包括三种模式,分别为NULL、SHARED和EXCLUSIVE 。三种模式的兼容列表如下:

a4fec90caebb256f781a1cfb249239b7.png

当某一个用户持有block buffer的锁时,如果其他用户以兼容模式的锁方式进行访问,那么这2个用户可以同时访问该数据块。

而一旦2个用户以不兼容方式访问同一个数据块时,后面的用户必须等到前一用户释放锁之后才能开始操作。这种解决方案是单实例K-DB数据库的解决方案。而在KRAC中,K-DB数据库在此基础上,增加了额外了管理方式-角色和Past image Block数据块。

角色

K-DB 对于数据块的分配了2种角色,分别是LOCAL 和GLOBAL,当数据block buffer只在一个节点与磁盘上的数据不一样(脏数据),该block buffer的角色为LOCAL状态。当在多个节点上存在"脏数据"时,block buffer的角色为GLOBAL.

PI BLOCK

如果一个block 在某一个节点中被修改后,然后该block传输到了其他节点,那么本节点存储的block块为PI(Past Image)block。PI BLOCK 块在以下2个方面具有一定的优化作用:

1.提升CR 块构建的速度。当本地构建的CR块的SCN 小于PI BLOCK 的SCN时,无需从其他节点传输最新的current数据库,直接在本地使用PI BLOCK可以构造。

2.节点宕机后,提升系统恢复的性能。当某一个节点宕机后,整个集群会暂时停止服务,进行内部恢复。恢复的原理就是将宕掉节点的redo日志在其他节点进行恢复。在恢复时,对于redo日志中小于PI BLOCK的SCN无需重做,从大于等于PI BLOCK的SCN处开始恢复,从整体上减少了恢复的工作量。

GLOBAL LOCK DIRETROY

在K-DB数据库中,所有各个节点对于bufferblock的锁信息,都会记录在Global Lock Directory(GLD)。各个节点在share pool 内存中分配出一部分内存,共同组成整个的GLD。那么一个节点会记录哪一个数据块的锁和角色的相关信息呢?

在这里,KRAC又提出了一个新的机制,就是master机制。

所有的buffer block在当前的正在运行状态的集群中,只会对应到一个master节点,该master节点会记录相对应的buffer block在各个节点中锁状态和角色的相关信息。任何节点在访问某一个buffer block时,都需要向他的master节点进行申请。Master节点在收到buffer block访问的请求后,会确定该buffer block块的当前位置,然后将该buffer block块传送给请求用户。所有的master中的信息,共同组成了GLR(Global Lock Directory)。

924313030cc93169fcfe34ac69297cc9.png

数据块访问流程

为了便于大家更直观理解内存融合,下面通过三个场景举例说明:

场景示例--内存融合

测试参数说明:测试Block 的master 节点是C。Master节点中关于buffer block一共记录了4个参数,第一个代表的锁模式,如S(Shared),E(Exclusive),N(Null)。第二个参数是定义的是角色,如L(Local),G(Global)。第三个参数定义的是是否为PI, 0代表否,1代表是。第四个参数是该锁对应的instance 节点。

场景一节点B读取磁盘中的BLOCK块

(1)B节点向master C节点申请读取block(2,203),BLOCK 中的数据为21

(2)主节点master C 向B节点赋予block(2,203)的 local 角色shared 模式lock

(3)B节点从磁盘读取block块(2,203)

c251ac51dabbe62f16a825c90d9512a5.png

场景二节点A更新节点B中缓存的buffer block

(1)A节点向Master Node C申请写BL(2,203),将21修改为22.

(2)Master节发现B节点以Shared 模式持有BL(2,203).master主节点要求B节点将当前的锁由Shared降为Null模式。

(3)节点B将本地的锁降为Null模式后,将BL(2,203)发送给A节点。A节点获取local 角色的exclusive 模式的锁,修改BL(2,2003)中的数据为22.

33cf6372fd214dbc50692d1c8673e085.png

场景三B节点再次更新同一个Block

1.B节点向Master 申请X锁,写Block BL(2,203).将数据修改为23

2.Master 节点发现最新版本的数据块在A节点上,并且A 以X锁占有该数据块。Master 节点要求A节点的锁降为NULL模式,同时由于此后2个节点中都存在与磁盘中的数据不一致的数据,A节点的角色升级为GLOBAL,A中当前的数据库记为PI块。

3.A节点锁降级后,将数据块BL(2,203)传送到B 节点,节点B将数据修改为23.

8d904f6418a91aff7ecb06b3524bcc59.png

好了,通过上文介绍,想必大家对浪潮K-DB数据库的KRAC功能和运行原理有了全面认识。

总结来讲,浪潮K-DB数据库是除了Oracle以外,第二个能够实现共享存储的集群技术的产品,采用KRAC多机集群架构,具有故障自动转移、高伸缩能力和自动负载均衡特性,保障系统可用性的同时,大幅提升可用性和性能,还能实现系统性能平滑升级且接近线性的扩展。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值