Oracle RAC原理

2023-11-15

单点数据库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后台进程

LMON--Lock Monitor Processes
监控整个集群状况,维护GCS的内存结构。
 处理非正常终止的进程和实例。
 当实例离开和加入集群时,锁和资源的重新配置。
 管理全局的锁和资源。
 监控全局的锁资源,处理死锁和阻塞。
 也被称为Global enqueue service monitor

LMSn-- Lock Monitor Services
LMS进程主要用来管理集群内数据块的访问,并在不同实例的BUFFER CACHE
中传输块镜像。
当在某个数据块上发生一致性读时,LMS负责回滚该数据块,并将它copy到请求的实例上。
每个RAC节点至少有2个LMS进程。 也称作 GCS (Global Cache Services) processes.

LCK--Lock Process
LCK进程主要用来管理实例间资源请求和跨实例调用操作,调用操作包括数据字典等对象的访问;并处理非CACEH FUSION的CHACE资源请求(例如:DICTIONARY CACHE或row cache的请求)由于LMS进程负责主要的锁管理功能,所以每个实例只有一个LCK进程。

可以看到有这么多的进程都和锁有关系,归根结底就是一个数据块从一个实例到另外一个实例,维护一致性的依据就是锁。只有通过锁才可以维护数据块在两个实例之间的一致性。


 LMD--Lock Monitor Daemon Process
LMD进程主要管理对全局队列和资源的访问,并更新相应队列的状态,处理来
自于其他实例的资源请求。
每一个全局队列的当前状态存储在相应的实例共享内存中,该状态表明该实例
具有相应的权利使用该资源。
一个实例(master)的共享内存中存在一个特殊的队列,该队列纪录来自其他远
程实例的资源请求,当远程实例的LMD进程发出一个资源请求时,该请求指向
master实例的LMD,当master实例的LMD进程受到该请求后,在共享内存中的
特殊队列中监测该资源是否无效,如果有效则LMD进程更新该资源对列的状态
,并通知请求资源的LMD进程该资源队列可以使用了,如果资源队列正在被其
他实例使用或者当前无效,则LMD进程通知正在使用中的实例的LMD进程应该
释放该资源,等资源释放变得有效时,MASTER实例的LMD进程更新该资源队
列的状态并通知请求资源实例的LMD进程该资源队列可以使用了。

DIAG (Diagnostic Daemon)
Oracle10g新的后台进程。
例行对实例的健康情况进行监控,同时也监控实例是否挂起或者出现死锁。
收集实例和进程出错时的关键诊断信息。
这个进程会更新alert日志文件,写入一些重要告警信息。

上面这些都是RAC下面实例多出的进程,下面就是RAC自己的进程了。

 

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集群体系结构

Oracle RAC,全称是Oracle Real Application Cluster,即正真的应用集群,是Oracle提供的一个并行集群系统,整个集群系统由Oracle Clusterware(集群就绪软件)和Real Aplication(RAC)两大部分组成。

Oracle RAC的实质是位于不同的操作系统的Oracle实例节点同时访问访问同一个Oracle数据库,每个节点间可以通过私有网络进行通信,互相监控节点的运行状态,Oracle数据库所有的数据文件,联机日志文件,控制文件等均放在集群的共享设备上面,而共享设备可以是RAW,ASM,OCFS2等,所有集群节点可以同时读写共享存储,Oracle RAC的基本拓扑结构如下。(RAW就是裸设备,没有文件系统,就是直接在硬盘上面进行读写)。

这个图分为三个部分,第一个部分就是客户端,第二个部分是节点部分,最后一部分是共享存储部分。

作为用户会去访问集群数据库,在节点层有许多节点,每一个节点相当于一个主机,或者一个操作系统。每一个操作系统是安装在一台服务器上独立完成的。最底层是os,即操作系统。在操作系统上层安装的是clusterware,这是一个高可用的集群软件。再上面一层是oracle rac数据库,这个数据库还启动了rac监听,每一个节点都是有os,clusterware,oracle rac listener三部分组成的。

在10g之前的产品,如果要使用rac集群就必须要借助第三方高可用软件。在10g之后Oracle推出了自己的一款clusterware,对于高可用软件这部分可以使用oracle自身的,也可以使用第三方的。

 

在每一个节点上面启动相关的实例,每一个实例会启动相关的监听端口。这个端口就是监听客户端过来的请求,在Oracle集群当中可以有多个节点。

共享存储是rac为了实现数据的共享,实现共享方式有很多种,比如raw,asm等。

由拓扑结构可知:

一个Oracle Rac数据库有多个服务器节点组成,每个服务节点上面都有自己独立的OS,ClusterWare,Oracle RAC数据库程序等,每个节点都有自己的网络监听器。ClusterWare是一个集群软件,主要用于集群系统管理,Oracle RAC数据库程序用于提供Oracle实例进程,以提供客户端访问集群系统,监听服务主要用于监控自己网络端口的信息,所有的服务和程序提供操作系统都去访问一个共享存储,最终完成数据的读写。共享存储的方式有很多种,可以通过自动存储管理(ASM),Oracle集群文件系统(OCFS),裸设备(RAW),网络共享区域存储(NAS)等来保证整个集群系统的数据一致性。

Oracle rac数据库和经常所说的数据库有什么区别呢?Oracle rac数据库主要是提供oracle实例进程,以供客户端访问集群系统。从Oracle运行机制来说,集群中每台服务器就是一个Oracle实例,多个实例对应同一个Oracle数据库,组成了Oracle数据库的集群。

从图中可以看出,运行在两个节点上面的数据库访问同一个RAC数据库,并且两个节点的本地磁盘仅用存放Oracle安装程序和ClusterWare软件,而在共享存储上,存放着Oracle的控制文件,数据文件,联机日志文件,归档日志文件等,这是安装Oracle Rac时的一种数据存储方式,其实,RAC提供了多种数据存储方式。

集群里面的每一个服务器或者里面的每一个节点就是一个Oracle实例,有多个节点或者说是多个实例同时访问同一个数据库。从上图可以看到节点的本地磁盘上面存储的是Oracle的安装程序和clusterware集群软件的程序。在共享存储上面存放着Oracle的数据文件,控制文件,联机文件等等。

交个朋友 一起学习 一起玩耍


我的微信号 wxid_hsq9rbukl3m522  或者扫码

我的视频号:JhonWick约翰威克

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oracle RAC原理 的相关文章

  • kubernetes集群使用kubectl logs 无法查看node节点pod日志问题

    kubernetes集群使用kubectl logs 无法查看node节点上pod日志问题 最近在学习安装使用kubernetes集群 先把集群安装中遇到的一些困难记录下来方便以后查看 避免下次再次遇到相同的问题又得重新查找 使用了三台服务
  • 开山之作,简单说说什么是"集群(Cluster)"

    一 什么是集群 集群 Cluster 是由两台或多台节点机 服务器 构成的一种松散耦合的计算节点集合 为用户提 供网络服务或应用程序 包括数据库 Web服务和文件服务等 的单一客户视图 同时提供接近容错机的故 障恢复能力 集群系统一般通过两
  • rabbitmq命令小记录

    rabbitmq学习的一些链接 http blog csdn net anzhsoft article details 19563091 检查是否有内存泄露 sudo rabbitmqctl list queues name message
  • 【Fastdfs】通过 docker 快速搭建集群 fastdfs 环境

    Fastdfs 通过 docker 快速搭建集群 fastdfs 环境 1 镜像构建 码云地址 https gitee com hbsky fastDFS 构建新的镜像 使用我的镜像也行 docker build t registry cn
  • 【系统架构】什么是集群?为什么要使用集群架构?

    什么是集群 为什么要使用集群架构 1 什么是集群 2 为什么要使用集群 2 1 高性能 2 2 价格有效性 2 3 可伸缩性 2 4 高可用性 2 5 透明性 2 6 可管理性 2 7 可编程性 3 集群的常见分类 3 1 负载均衡集群 3
  • cuda学习笔记之异步并行执行

    异步函数使得主机端与设备端并行执行 控制在设备还没有完成前就被返回给主机线程 包括 kernel启动 以Async为后缀的内存拷贝函数 device到device内存拷贝函数 存储器初始化函数 比如cudaMemset cudaMemset
  • hbase集群在启动的时候报错:JAVA_HOME is not set and Java could not be found

    hbase集群在启动的时候报错 JAVA HOME is not set and Java could not be found 出现这种错误 一般应该是hbase下conf文件下的hbase env sh文件中的java home的环境变
  • websphere6.x 调用集群EJB的Context.PROVIDER_URL写法

    import java util Hashtable import javax naming Context import javax naming InitialContext Hashtable env new Hashtable en
  • spark-2.2.0安装和部署——Spark集群学习日记

    前言 在安装后hadoop之后 接下来需要安装的就是Spark scala 2 11 7下载与安装 具体步骤参见上一篇博文 Spark下载 为了方便 我直接是进入到了 usr local文件夹下面进行下载spark 2 2 0 wget h
  • 服务器虚拟化集群部署

    多服务器虚拟化集群部署 介绍 服务器虚拟化有有利于节省服务器开支 提高服务器资源利用率 将服务器物理资源逻辑化 动态分配内存 cpu 磁盘等物理资源 以dell的R730服务器为例 VMware ESXi5 5虚拟化软件 虚拟化服务器 1
  • Linux中使用Docker安装ElasticSearch7.10.x集群

    使用Docker安装ElasticSearch7 10 x单节点请访问这里 一 集群环境说明 服务器IP地址 192 168 137 1 192 168 137 2 192 168 137 3 二 前期准备 1 拉取镜像 docker pu
  • Elasticsearch集群搭建教程及生产环境配置

    Elasticsearch 是一个极其强大的搜索和分析引擎 其强大的部分在于能够对其进行扩展以获得更好的性能和稳定性 本教程将提供有关如何设置 Elasticsearch 集群的一些信息 并将添加一些操作技巧和最佳实践来帮助您入门 但应该强
  • Centos7 安装redis集群哨兵模式

    一 整体哨兵模式规划 redis节点规划 6381 master 6382 slave 6383 slave 6384 slave sentinel模式节点规划 26381 26382 二 Redis主从安装步骤 1 单机版Redis安装
  • 集群架构总结(Kafka、redis,zk,es)

    ZK集群 1 zk集群节点可见 通过配置文件达到节点间相互可见 2 为什么集群设置奇数个节点 1 奇数节省资源 zk容错 zk节点剩下的个数必须要大于挂掉的节点 大于n 2 整个集群才可用 5节点容错2个 6节点容错2个 2 奇数节点集群可
  • Redis 学习笔记(十五)Redis Cluster 集群扩容与收缩

    Redis Cluster 集群伸缩 1 伸缩原理 Redis提供了灵活的节点扩容和收缩方案 在不影响集群对外服务的情况下 可以为集群添加节点进行扩容也可以对下线节点进行缩容 我们在Redis Cluster 介绍与搭建这篇文章中搭建了一个
  • Springboot1.5.9集成Redis(单实例与分片集群)

    springboot集成redis只需要看懂RedisAutoConfiguration类即可 惯例先上pom start
  • ZooKeeper的学习与应用

    转载 http blog csdn net rengq126 article details 7393227 最近大概学习了一下ZooKeeper 本身并没有深入 LGG尝试着在虚拟机里面搭了平台 看了看一些教材 从网上到处看别人的博文并引
  • FastDFS的Tracker及Storage节点添加及删除

    1 增加Storage节点 通过配置 自动加入 1 安装Storage并配置mod fastdfs conf及storage conf 设置fdfs storaged及nginx自启动 2 启动新加的storage节点 会自动同步相同gro
  • Dubbo入门---搭建一个最简单的Demo框架

    原文地址 https blog csdn net noaman wgs article details 70214612 Dubbo背景和简介 Dubbo开始于电商系统 因此在这里先从电商系统的演变讲起 单一应用框架 ORM 当网站流量很小
  • ClickHouse安装(集群版)

    ClickHouse安装 集群版 一 准备工作 1 设置hostname 2 hosts映射 3 关闭防火墙 4 同步时间 5 关闭selinux 6 安装好zookeeper 7 重启 二 搭建ClickHouse集群 1 下载安装包 2

随机推荐

  • LC-3 机器语言 指令集

    目录 碎碎念念 LC 3指令 运算类指令 ADD addition AND Bit wise logical AND NOT Bit wise complement 数据搬移类指令 LD load ST store LDI load ind
  • FPN网络结构+源码讲解

    YOLOF前传 特征金字塔 FPN 前言 这几天在读CVPR2021的中稿论文YOLOF You Only Look One level Feature 文章回顾了单阶段的特征金字塔网络 FPN 指出FPN的成功的原因在于它对目标检测中优化
  • c++ map用法 入门必看 超详细

    1 map的作用 可以实现各种类型的映射 可以用数组来类比 都是由下标和值组成 但数组用法很局限 下标不能是负数 而且开数组需要消耗太多的内存 开到10 7就内存超限了 因此 很多时候都用高级的map类或vector类来代替数组 其里面的成
  • “对象创建”模式——抽象工厂

    动机 在软件系统中 经常面临着 一系列相互依赖的对象 的创建工作 同时由于需求的变化 往往存在更多系列对象的创建对象 如何应对这种变化 如何绕过常规的对象创建方法 new 提供一种 封装机制 来避免客户程序和这种 多系列具体对象创建工作 的
  • 互联网编程之基于 TCP 的单线程文件收发程序(CS架构)

    目录 需求 服务端实现 客户端实现 测试 需求 可试着根据java编程课所学到的java socket编程技术 尝试编写一个基于 TCP 的单线程文件收发程序 需满足 服务端程序预先定义好需要发送的文件并等待客户端的连接 客户端连接成功后
  • 非极大值抑制(non-maximum suppression)的理解

    最近在学习RCNN时看到了非极大值抑制 一开始有点不明白 在网上学习了之后记录一下 非极大值抑制就是一个寻找局部最大值的过程 在进行目标检测时一般会采取窗口滑动的方式 在图像上生成很多的候选框 然后把这些候选框进行特征提取后送入分类器 一般
  • MySQL执行update时的[ERROR 1093]处理方法

    版权声明 声明 本文档可以转载 须署名原作者 作者 无为 qq 490073687 周祥兴 zhou xiangxing210 163 com gt update TEST NOIDX set CREATETIME now where ID
  • 使用QFileInfo查看文件相关信息----大小,创建时间,属性

    QString file E workspace Data ColorTransfer txt QFileInfo info file qint64 size info size 文件大小 单位byte QDateTime created
  • [Cocos Creator] Cocos Creator 下拉框(Dropdown)组件的实现

    模仿Unity写了一个Dropdown的组件 使用方法可以见工程 链接见底下 https github com ETRick CocosCreator Dropdown tree master Dropdown
  • opencv-python学习教程【持续更新】

    Opencv python学习系列教程 一 图片的读取 代码 实验结果 二 视频的读取 代码 实验结果 三 颜色通道的读取 代码 实验结果 四 图像边界填充 代码 实验结果 五 图像融合 代码 运行效果 六 图像阈值 代码 实验结果 存疑
  • 《Spring cloud Alibaba全解》阅读笔记

    技术 2022 05 Spring cloud Alibaba全解 创建时间 2022 5 22 15 21 更新时间 2023 2 17 8 52 作者 HelloXF 第一章 微服务的介绍 1 1系统架构的演变 1 1 1单体应用架构
  • ospf综合实验v1

    实验题目 搭建拓扑图 部分配置 r3r4r5r6r7之间的mgre r3中心站点的配置 r5的配置 r6r7的配置以此类推 于r5相似 各个区域之间的ospf 解释 为了方便对不规则区域之间的联络 我采用多进程双点双向重发布来实现其中区域1
  • Swift 之 继承、构造过程与析构过程

    Swift 继承 继承我们可以理解为一个类获取了另外一个类的方法和属性 当一个类继承其它类时 继承类叫子类 被继承类叫超类 或父类 在 Swift 中 类可以调用和访问超类的方法 属性和下标脚本 并且可以重写它们 我们也可以为类中继承来的属
  • STC15单片机实战项目 - PCB打样

    PCB打样 一 设计文件链接 1 PADS9 5格式PCB设计文件 gt Project STC15 V1 0 pcb 2 AltiumDesigner格式PCB设计文件 gt Project STC15 V1 0 PcbDoc 二 获取开
  • Vue 实现商品分类、列表、详情、购物车、搜索(vant)

    商品分类Classify
  • MySQL 1130错误原因及解决方案

    相信大家在使用MySQL数据库的过程中肯定都遇到过报错 其中MySQl 1130就是一个我们在远程登陆是经常遇到的错误 本文树懒君就给大家介绍一下MySQL 1130报错的原因以及解决的思路 并给大家三种具体的解决方案供大家参考 错误概述
  • 简单理解DLL文件是什么,如何使用?

    DLL文件是什么 DLL文件是动态链接库的缩写 可以在多种程序中使用 如何编写DLL文件 可以使用C C VB之类的语言编写 其中包含了一个或者多个函数 以供其他程序调用 例如 如何在Python中使用DLL文件 使用ctypes模块 在P
  • 虚幻引擎(UE4)场景漫游交互项目制作

    1 模型导出 3dmax模型准备 导出FBX格式 导入UE4引擎等 2 模型导入UE4 项目创建 导入注意 模型查看 3 场景搭建 创建关卡 模型材质 搭建场景 4 地形制作 创建地形 资源导入 地形制作 5 场景漫游 碰撞 第一人称控制
  • 6. 整合Spring

    6 整合Spring MyBatis Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中 它将允许 MyBatis 参与到 Spring 的事务管理之中 创建映射器 mapper 和 SqlSession 并注入到
  • Oracle RAC原理

    单点数据库VS RAC 单节点数据库 如果实例宕机了 如果一个业务链接在实例上面 那么这个业务就中断了 这个时候系统就不具有可用性了 那么这个时候单节点的可用性是很差的 对于RAC来说 和单实例一样 还是一份数据文件 都是相同的存储上面放着