Oracle-RAC原理解析|oracle高可用思想
单点数据库VS RAC
单节点数据库,如果实例宕机了,如果一个业务链接在实例上面,那么这个业务就中断了。这个时候系统就不具有可用性了,那么这个时候单节点的可用性是很差的。
对于RAC来说,和单实例一样,还是一份数据文件,都是相同的存储上面放着oracle的文件,但是是由三个实例共用同一份数据文件。这样的好处是在三个实例之间做了冗余,在上面三个实例任意两个坏了业务都可以链接到剩下的一个实例,都可以正常的工作。RAC提供了在实例级别的冗余。
RAC体现的不是安全,而是高可用思想。
什么是RAC
一般每个实例都放在不同的服务器上面,这样可以起到冗余作用。所有的数据库文件都放在共享存储上面,但是还有一些文件放在每个实例自己的本地的磁盘上面,比如参数文件,每一个实例都可以有自己的参数文件,这个参数文件既可以放在本地也可以放在共享存储上面,多个实例都使用同一个参数文件。
在RAC里面,最重要的就是实例和实例之间的交互,即使是分离的实例,但是读取的数据是相同的,RAC不是分布式的系统,因为它只有一个存储,分布式系统是指数据发布在不同的数据库上面,然后通过中间件来协调做查询。RAC还是一台数据库,多个实例。
RAC架构
对于RAC来说至少有两套物理上不同的网络,私有网络是专门用来实例之间的数据交互。如果私有网络,所有的数据都在一个网络下面,那么那么就会对数据造成影响,严重的影响RAC的性能了。实例之间数据之间传递使用私有网络和对外服务提供的网络之间是物理分开的。所以RAC至少有两套网络,一个是实例之间的数据的传递,另外一个是公有网络,是对外提供服务的,外面的业务是提供公有网络的IP链接到数据库的。
RAC的特点
除了具有普通的数据库特性外:
每一个节点的instance都有自己的SGA
每一个节点的instance都有自己的background process
每一个节点的instance都有自己的redo logs
每一个节点的instance都有自己的undo表空间
每一个节点的实例都有自己的SGA,但是之间在SGA里面的数据块都是需要相互传递的。
每一个节点都有自己的redo,redo不是共用的。虽然redo是放在共享磁盘上面,但是每个实例都有自己的redo,各有各的。当实例2坏了,实例1做恢复的时候可以通过实例2的redo信息来进行恢复。
每个实例都要处理自己的一套事务,所以需要使用自己的UNDO。
所以在RAC架构下面,每一套实例都有自己的东西。
RAC如何容错的
使用SAN存储,存储和服务器就不在一起了,而是和服务器分离了,是一个网络的存储系统,服务器是服务器,存储是存储,完全分离的。
当节点1坏了,不仅仅只是将业务切换到节点2,这个时候还要处理节点1坏了遗留下来的问题。主要是一些提交和未提交的事务。比如实例1坏了,实例2就要从实例1的redo里面读最后一次checkpoint之后的信息,就是实例1最后将所有的数据写到磁盘之后产生的所有的redo应用,该回滚的回滚,该恢复的恢复。即现将以提交和未提交的事务产生的redo都先应用,因为是最后一次checkpoint之后的信息,之前的信息是已经写到磁盘上面了,所谓的恢复是将未写到磁盘上面的信息进行恢复。(虽然实例坏了,但是实例的redo并没有坏,放置在共享存储上面,它的redo还是允许其他实例访问的)实例2读取实例1的redo,然后全部应用一遍,之后再回滚未提交的事务修改的数据块,这个有点像实例的恢复。
RAC Background Processes
这里面会比单实例环境下面的实例多出几个进程。多出来的进程就用来保证在rac环境下面rac之间交换需要做的比如锁,资源交换之间的控制。
RAC相关的后台进程
LMS - Gobal Cache Service Process 全局缓存服务进程
LMS进程是在RAC环境下面最重要的一个进程,是处理全局的缓存,所谓的缓存就是数据库一个实例到另外一个实例数据的交换进程。
LMD - Global Enqueue Service Daemon 全局查询服务守护进程
LMON - Global Enqueue Service Monitor全局查询服务监视进程
LCK0 - Instance Enqueue Process 实例查询进程
DIAG (Diagnostic Daemon) 诊断守护进程
RAC的服务进程
独立的服务CRS
CRS- 集群资源服务
CSS - 集群同步服务
EVMD 事件管理服务
ONS--事件的发布及订阅服务
用来协调两个实例之间来访问存储,这个架构就是CRS。在RAC下面因为要对全局资源进行控制,所以实例不能直接访问存储,必须通过CRS层来访问。(RAC指的是架构,具体是由CRS这套服务来实现的,这套服务里面有上面的四个服务组成)。
CRS--Cluster Ready Services
管理集群内高可用操作的基本程序。
CRS管理的任何事物被称之为资源
数据库、实例、监听、虚拟IP(VIP)地址、应用进程等等
CRS是根据存储于OCR中的资源配置信息来管理这些资源
当一资源的状态改变时,CRS进程生成一个事件。
CSS--Cluster Synchronization Service
管理集群节点的成员资格
控制哪个结点为集群的成员、结点在加入或离开集群时通知集群成员来控制
集群的配置信息
此进程发生故障导致集群重启
EVM--Event Management
事件管理守护进程。
发布CRS创建事件的后台进程
ONS--Oracle Notification Service
通信的快速应用通知事件的发布及订阅服务
总结:一个Oracle Rac数据库有多个服务器节点组成,每个服务节点上面都有自己独立的OS,ClusterWare,Oracle RAC数据库程序等,每个节点都有自己的网络监听器。ClusterWare是一个集群软件,主要用于集群系统管理,Oracle RAC数据库程序用于提供Oracle实例进程,以提供客户端访问集群系统,监听服务主要用于监控自己网络端口的信息,所有的服务和程序提供操作系统都去访问一个共享存储,最终完成数据的读写。
共享存储的方式有很多种,可以通过自动存储管理(ASM),Oracle集群文件系统(OCFS),裸设备(RAW),网络共享区域存储(NAS)等来保证整个集群系统的数据一致性。
后面会分享更多关于DBA的内容和一些比较有趣的实验,感兴趣的朋友可以关注下~