Oracle-RAC原理解析|oracle高可用思想
mhr18 2024-09-17 23:20 17 浏览 0 评论
单点数据库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的内容和一些比较有趣的实验,感兴趣的朋友可以关注下~
相关推荐
- Team IDE 集成管理工具
-
Team·IDE工具简介TeamIDE工具集成SSH、FTP、MySql、Redis、Zookeeper、Kafka、Elasticsearch等管理工具Team·IDE功能模块目录结...
- MySQL大数据表处理策略,原来一直都用错了……
-
场景当我们业务数据库表中的数据越来越多,如果你也和我遇到了以下类似场景,那让我们一起来解决这个问题。数据的插入,查询时长较长后续业务需求的扩展,在表中新增字段,影响较大表中的数据并不是所有的都为有效数...
- Java程序员你真的甘心只做增删改查吗
-
各位志同道合的朋友们大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题最近...
- Java后端开发除了增删改查还有什么?
-
后端的追求:接口稳定、架构合理、业务逻辑清晰、模块拆分合理、支持高并发等。软件本身归根到底都是由算法+数据结构构成的,进一步细化之后,其实就是通过一系列的增删改查操作,构成算法,对数据结构进行操作,赋...
- 基于shiro实现session持久化和分布式共享
-
前言本文写下session持久化和分布式共享基于shiro框架对session的管理机制来实现必要性一直处于登陆状态:你登陆微信不可能三天两头就让你重新登陆吧?而是一直处于登陆状态除非主动退出...
- 为啥工作那么多年,你还是只会增删改查?
-
你以为没有这样的感觉,工作中领导和同事都非常认可你的能力,但是你想更进一步,却不被认可。想出去看看,跳槽面试,却也是屡屡碰壁。面试的过程中,面试官问技术方案,明明心里很清楚,或者说印象还行,可就是说不...
- Java程序员除了做增删改查还能干嘛?
-
就以Java后端开发为例,说说不同级别程序员干的事情。1初级开发,大概是有3年Java开发经验。22年底,上海,这批程序员如果学历是本科,薪资一般是8k到2w,当然如果能进好公司或互联网大厂,薪资能...
- Java面试题及答案总结(2025版持续更新)
-
大家好,我是Java面试分享面对Java后端岗位的激烈竞争,掌握系统化的知识体系至关重要。本文整理了覆盖主流技术栈的高频面试题,助你高效备战,内容包含:Java基础、并发编程、Spring生态、数据库...
- 微服务架构之API网关——在微服务项目中的技术框架和用法实践
-
API网关技术实战在介绍了API网关的相关理论之后,大家可以了解到API网关的作用和优缺点,接下来将为大家介绍API网关在微服务项目中的技术框架和用法实践。Zuul网关其实API网关并不是很难的技术,...
- 带小白黑客入门,你也可以跟我们一起成为黑客大牛
-
小编这几天一直在做关于ssrf的实验,这篇文章可以带纯小白黑客入门。靶机ip地址:192.168.2.138查看靶机运行的redis服务。攻击机为ip192.168.2.112.用客户端redis-c...
- Python最常见的170道面试题全解析答案(二)
-
60.请写一个Python逻辑,计算一个文件中的大写字母数量答:withopen(‘A.txt’)asfs:count=0foriinfs.read():ifi.isupper...
- Spring Boot项目集成Redis,原来这么简单!
-
在现代软件开发的“快车道”上,SpringBoot无疑是许多开发者手中的“神兵利器”。它以其“约定大于配置”的理念,大大简化了Java应用的开发和部署过程,让开发者能够将更多精力聚焦于业务逻辑本身。...
- Apache Commons Pool——优化你的java内存
-
大家好,我是吉森。我会持续分享一些开发技巧、经验和技术,如果你也热爱各种开发技术,欢迎关注我。今天我们继续介绍ApacheCommons工具包,今天的主角是:CommonsPool。简单地说,它是...
- 码农成长系列-基于WebSocket的后台消息提醒
-
场景描述当用户对app有某些业务操作时,需要将该操作友好地提醒给,有接收提醒权限的后台管理者。技术场景分析经分析,要实现上述业务,业务拆解后可能需要解决如下业务①.触发提醒待推送数据的监听②.提醒时接...
- 百度直播消息系统的实践和演进
-
导读:直播业务的核心功能有两个,一个是实时音视频推拉流,另一个是直播间消息流的收发。本文主要介绍百度直播服务内的消息服务系统的设计实践和演化。一、背景直播间内用户聊天互动,形式上是常见的IM消息流;...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (63)
- oracle批量插入数据 (62)
- oracle事务隔离级别 (53)
- oracle 空为0 (50)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)