Oracle RAC原理

 

 

在说Oracle RAC之前,按照惯例,阿呆来一段前戏~

 

最近阿呆在看资治通鉴,看得津津有味。每当看到那些叱咤风云的英雄人物最终淹没于历史长河之中,不禁放下手机,望着地铁车厢里的茫茫人海(一排排后脑勺),怅然若失。。。今天我们来讲一对好兄弟张耳和陈余的故事,他们本来是生死之交,最后却斗得你死我活。

 

话说魏国有两个名士张耳和陈余,是刎颈之交。陈余年轻,他就像对待父亲一样侍奉张耳。秦国统一了六国,听说这两个人很有名,就悬赏百金捉拿他们(有名士不拉拢,反而消灭,真吊)。他俩改名换姓,一块儿逃到陈地,充当里正卫维持生活。里中小吏曾因陈余犯了小的过失鞭打他,陈余打算起来反抗,张耳赶快用脚踩他,示意不动接受鞭打,小吏走后,张耳就把陈余带到桑树下,责备他说:”当初和你怎么说的?如今遭到小小的屈辱,就要死在里吏身上吗?”陈余认为他说的对(张耳年纪大,就是老奸巨猾啊)。

 

后来陈胜吴广大泽乡起义,他俩也去投奔,拥护赵王占领赵国,陈余做大将军,张耳做右丞相,真是好搭档啊。不过,接着发生了一件事,秦朝大将章邯手下军队包围了张耳和赵王,陈余带了几万援军在外面却不进攻,理由是打不过秦军,只会白白牺牲。然后,就是我们熟悉的,项羽带领楚军破釜沉舟,背水一战,打败秦军,解救了赵国。但是张耳却恨陈余不救援,收了他的军队,两个人从此分道扬镳。项羽做了西楚霸王,分封诸侯,张耳跟他入关,封常山王,陈余没跟他,只封了个侯。陈余气坏了,带兵把张耳赶跑了(年轻人真冲动),他们反目成仇。张耳没办法,投降了刘邦,陈余自己做了代王。刘邦有一次想让陈余借点兵给他,结果陈余的条件居然是要刘邦杀掉当年的好兄弟张耳,至此,他们斗得你死我活。刘邦自然没杀张耳,找了个替死鬼。

 

陈余的结局很惨,被战神韩信背水列阵法打败,陈余战死。张耳反而幸运,被刘邦封了王,儿子张敖娶了刘邦的女儿,所以刘邦和吕后消灭异姓王,张家幸免于难。

 

从张耳和陈余的故事,阿呆不由得想到了Oracle RAC的脑裂,本来他俩还是有心跳检测的,联络感情,后来各自牛逼了,忙啊,心跳检测就少了,分道扬镳之后,心跳断了。从此,就发生了脑裂,谁都不认输,觉得自己吃亏了,争着要做老大。最终,命运之神做了表决盘Voting Disk,选择张耳活下来。这个故事告诉我们,朋友之间要多交流,定期心跳检测,这样才能知道对方还是一如既往的情深义重。否则,断了联系,很可能就脑裂了。

 

什么是Oracle RAC

 

RAC,全称real application clusters,译为“实时应用集群“,是Oracle数据库支持网格计算环境的核心技术。
 

 

集群

 

  • 节点互联起来,向外显示为1台服务器;

  • 集群软件把内部结构掩藏起来;

  • 磁盘是共享的;

  • 每台机器使用相同的操作系统。

 

  • 多个实例访问同一个数据库

  • 每个节点有一个实例;

  • 数据库文件支持物理或逻辑访问;

  • 数据的读写通过软件控制。

 

Oracle RAC和单个数据库服务器的区别

 

如下图,主要区别还是RAC是集群式数据库,通过集群软件管理。

 

Oracle RAC硬件架构

 

下图为一个两节点RAC系统,可以看出,从主机到交换机,都做了冗余,无论哪台设备出了故障,业务不会受影响。共享存储是自带RAID冗余的。

 

 

其中,主机叫做节点(Node),它们要有相同的CPU、内存等配置,每台至少两个网卡,访问内外网,还有HBA卡连接共享存储,但更多是通过FC交换机连到FC存储阵列。共享存储是RAC架构中的核心,绝大部分文件都在共享存储,很多功能都是为了共享存储的安全性开发的。一般是光纤通过FC接口连接,运行SCSI协议。

 

Oracle RAC软件架构

 

如下图,是个双节点RAC系统,Oracle RDBMS是数据库软件,Oracle Clusterware是集群软件。驱动主要是网卡,HBA卡,ASMLib等。

 

每个节点上必须是相同的操作系统,版本必须一致,包括补丁号等。如操作系统: RHEL AS 4.8 64bit,Linux内核版本: 2.6.9-89.EL。

集群软件:单机情况下只要OS和驱动就可以了,但是多机需要访问其他机器的硬件,需要集群软件。它是集群环境的核心组成部分,管理集群硬件资源,为上层应用提供服务。

集群文件系统:向多个节点提供文件读写功能。Oracle RAC支持OCFS和ASM。

 

逻辑结构

 

下图是Oracle RAC的逻辑结构,后面将依次介绍里面的各个组件。

 

DLM:并发控制

 

每个节点都有对等的权利访问共享存储的数据,Oracle RAC使用Distribute Lock Management( DLM)进行多个节点间并发访问的控制。分布式锁管理器负责协调节点间对共享资源的竞争,节点访问数据时,先通过DLM申请,确认不会和其他节点冲突时才能使用。

 

OCR:健忘症

 

健忘症:如果每个节点都有一份集群配置信息,那么如果修改配置后没有同步就会出错。

 

所以,集群只能有一个配置信息,所有节点共享。Oracle RAC使用OCR Disk文件解决健忘症。

 

OCR Disk只有Master节点才能修改,每个节点有一份Copy,在OCR Cache内存中。节点要修改OCR Disk时,请求Master节点,该节点上OCR进程更新本地和其他节点OCR Cache内容。OCR Disk每几个小时定期备份。

 

Voting Disk:脑裂

 

脑裂:集群中节点之间通过心跳检测来知道对方是不是好的,如果心跳出了问题,节点双方都认为对方出错了,就会要求独享数据,这样就会破坏数据的一致性。

 

Voting Disk用来记录节点间成员的状态,出现脑裂的时候,选择票数高的获得控制权,踢出其他节点。

 

IO隔离:踢出去的节点,不能再让它访问数据,所以要做IO隔离。Oracle RAC的机制就是重启故障节点。

 

Cache Fusion Lock

 

数据库文件是共享的,Cache Fusion Lock是在集群层面之外解决存储共享、并发访问控制。

 

四种网络

 

1. Public网络:用Public IP,对外提供数据查询、数据库维护、服务器维护。

2. Virtual网络:用Virtual IP,提供应用连接,应用程序使用该IP。

TCP/IP协议中,TCP Header包含源和目标端口,IP header包含源和目标IP,应用层的数据库监听记录IP和端口,在TCP超时时知道数据库或监听出了问题。TCP/IP协议栈超时时间由OS决定,每个OS定义不一样。为了缩短捕获错误的时间,Oracle RAC使用了VIP。Virtual IP是浮动的,并不与物理网卡绑定,某个节点故障,则VIP移到好的节点上,但好节点的监听里找不到该VIP,应用程序会立刻发现问题,转而向其他VIP发送连接请求。

 

3. Private网络:用Private IP,用于RAC心跳检测和Cache Fusion Lock,速度要求很高。

4. 存储网络:存储设备、HBA卡、FC网络组成。

 

Oracle Clusterware

 

单机的时候只要OS就可以处理上层请求,但是多机的时候,集群管理软件Oracle Clusterware会在OS内核之前截获对其他节点的请求,和其他节点的Clusterware通信完成请求。

 

应用层:RDBMS

 

应用层由若干CRS Resource组成,每个resource是若干个进程组成的完整服务。LMON(Lock Monitor)监控CRS Resource,异常时进行重启、切换等,保证Oracle RAC服务的高可用性。

 

Cache Fusion

 

Cache Fusion从字面就可以理解——缓存融合,其实就是把各个节点的缓存统一管理起来,避免了每次读都是操作磁盘,加速IO性能。因为Private网络速度很快,比读磁盘要快。从不同位置读数据块的时间:

  • 本地Cache:0.01 ms

  • 网络访问其他节点Cache:2.5 ms

  • 磁盘:14 ms。但现在有了存储端的SSD或者全闪存阵列后,延迟就在1 ms左右了。所以有了全闪存阵列后,Cache Fusion估计就没有意义了。

 

Cache Fusion通过GCS(Global Cache Service)管理,就是把大家的Cache看成是一个大Cache。

 

读Cache流程

 

写Cache流程

 

 

写磁盘流程

 

 

负载均衡

 

用户像RAC发起各种请求的时候,负载均衡负责把任务平摊到不同机器上。

  • 按用户分配

是从几个机器里面随机的挑一个吗?NO!那也太Low了,RAC会根据每个机器的状态动态分配任务。数据库运行时,PMON后台进程节点的负载信息,登记到Listener,1-10分钟更新一次。每个节点的Listener知道所有节点的负载情况,把客户端请求发给最闲的节点。

 

  • 按服务分配

按用户分配有缺点,就是可能让Cache Fusion更忙了。因为RAC节点数据共享,大家通过Cache Fusion同步数据,RAC的性能很大程度上受限于Cache Fusion性能。要么让Private网络更牛,比如用昂贵的InfiniBand,另一种是减少Cache Fusion的流量,其实就是减少节点实例之间的依赖。而按用户分配的机制无益于后面的方案。

所以RAC支持根据服务分配节点,比如生产和销售用不同节点,自己的数据在自己的Cache里面,就不用访问别的节点了。性能得到提升。

 

三类集群

 

  • 负载均衡集群:按一定算法把请求分配给不同成员;

  • 高性能集群(HPC,High Performance Cluster):采用向量处理器等专用软硬件组成的牛逼机器,计算性能强悍,价格超贵,比如天河计算机;

  • 高可靠性集群(HAC:High Available Cluster,Failover Cluster):可靠性非常好,硬件和软件的容错性很强,日常使用的数据库集群属于这类。

 

高可靠性集群

 

双机热备

 

平时有一个闲着待命,干活的挂了,就让候补的顶替。

双机互备

 

平时两台都干自己的活,但是要预留一部分资源,因为有一个挂了,另一个就得干两个人的活。

 

双机双工

 

举个例子:

老大老二合开一家店,平时老大主要卖包子,老二主要卖豆浆,老大有问题,老二就又卖包子,又卖豆浆,老二不行了,老大就又卖包子,又卖豆浆。

包子豆浆是数据,互相照应叫做心跳检测,顶替对方工作叫做failover(故障转移)。如果两个兄弟突然都瞎了聋了,不知道现在对方到底是否正在干活,都认为自己要顶对方的工作,这个叫做脑裂,然后需要第三者,比如他们的老爹来解决问题,这个叫做表决,或者让他们两个的媳妇过来拉走其中一个,这个叫做IO隔离。Oracle RAC就是这一类,性能最好,系统最复杂。

 

 

参考文章

 

http://wenku.baidu.com/link?url=VQTq1n4F_GzNyqwPPBLLQSOs2WPMWGx3tfWmg6mIW9i8DWdgKSHdtmA5719R84Zwp1dI2O28jD2hzAkJCjreJJtWkkcnuSkrq3M1aMIJhUq

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章