当前位置: 首页 > news >正文

Oracle RAC是啥?

Oracle RAC,全称是Oracle Real Application Cluster,翻译过来为Oracle真正的应用集群,它是Oracle提供的一个并行集群系统,由 Oracle Clusterware(集群就绪软件)Real Application Cluster(RAC) 两大部分组成。

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

Oracle RAC的基本拓扑结构如下所示:

在这里插入图片描述

由上图可知,

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

Oracle 10g起,Oracle提供自己的集群软件Oracle ClusterWare,它通过CRS(Cluster Ready Services)来实现,这个软件是安装Oracle RAC的前提,也是RAC环境稳定运行的基础。在10g之前的版本,安装RAC必须借助于第三方的集群软件。

从Oracle运行机制来说,集群中每台服务器就是一个Oracle实例,多个Oracle实例对应同一个Oracle数据库,组成Oracle数据库集群。

在这里插入图片描述

1 RAC 体系结构与进程

1.1 RAC简介

RAC是一个具有共享缓存体系结构的集群数据库,它克服了传统的不共享和共享磁盘方法的限制,为所有业务应用程序提供了一种可伸缩性和可用性的数据库解决方案,一般与Oracle Clusterware或第三方集群软件共同组成Oracle集群系统。

RAC是一个全共享式的体系架构,所有数据文件、控制文件、联机日志文件、参数文件等都必须存放在共享磁盘中,因为只有这样,集群所有节点才能访问到,RAC支持多种存储方式,包括:

  1. 裸设备(Raw devices) - 不经过文件系统,数据直接写入磁盘,好处是磁盘I/O性能很高,适合写操作频繁的业务系统。缺点是数据维护和备份不方便,备份只能通过dd命令或基于块级别的备份设备来完成,增加了维护成本。
  2. 集群文件系统 - 为支持共享存储,Oracle开发了集群文件系统OCFS,可用于Windows、Linux和Solaris,现在已经发展为OCFS2。通过OCFS2,多个集群节点可以同时读写一个磁盘而不破坏数据,但对于大量读写的业务系统,性能不是很高。另外,Oracle RAC也支持第三方集群文件系统,如Redhat的GFS等。
  3. 网络文件系统(NFS)
  4. ASM(Automated Storage Management) - ASM是Oracle推荐的共享数据存储方式,它是Oracle 10g包含的一个特性。ASM其实就是RAW方式存储数据,但加入数据管理功能。它通过将数据直接写入磁盘,避免经过文件系统而产生的I/O消耗。因此使用ASM可以很方便的管理共享数据并提供异步I/O的性能。ASM还可以通过分配I/O负载来优化性能,免除手动调整I/O的需要。

1.2 RAC的优缺点

通过RAC数据库,可以构建一个高性能、高可靠的数据库集群系统,优势包括:

  1. 实现多个节点间的负载均衡。 RAC数据库可以根据设定的调度策略,在集群节点间实现负载均衡。RAC每个节点都是工作的,同时也处于互相监控状态,当某个节点故障时,RAC集群自动将失效节点从集群隔离,并将失效节点的请求自动转移到其它健康节点上,从而实现服务透明切换。
  2. 提供高可用服务。 Oracle Clusterware实现的功能,通过CRS实现节点状态监控,故障透明转移,保证数据库对外不间断的提供服务。
  3. 通过横向扩展提高并发连接数。 适用于大型的联机事务系统。
  4. 通过并行技术提高事务响应时间。 可用于数据分享系统。
  5. 很好的扩展性。 当集群不能满足繁忙业务系统时,可以方便的添加集群节点,且可以在线完成节点的添加,并自动加入集群系统,不存在宕机时间;在不需要某个节点时删除节点也很简单。

RAC的缺点包括:

  1. 对比单机数据库,管理维护更复杂,对维护人员要求更高。
  2. 底层规划设计不好时,整体性能较差,甚至不如单机系统。对RAC不是很好了解时,不建议马上在生产环境中使用。
  3. 由于是多个节点构成,需要购买多台服务器,同时需要企业级版本数据库,无形中增加了软硬件成本。

1.3 RAC的进程管理

RAC数据库在结构上与单实例库有一些不同之处:

  1. RAC数据库每个实例至少拥有一个额外的重做线程(redo thread)
  2. RAC数据库每个实例拥有自己的回滚表空间(undo tablespace)

显然,这种机制是每个实例独立的使用自己的重做线程和回滚表空间,各自锁定自己修改的数据。这种设计方式,把多个实例的操作相对独立的分开。

RAC数据库如何实现节点数据的一致性?每个RAC实例的SGA内有一个buffer cache(缓冲区),通过Cache Fusion(缓存融合)技术RAC在各个节点之间同步SGA中的缓存信息,从而保证节点数据的一致性,同时也提高集群的访问速度。

RAC最大的特点是共享,如何实现多个节点间的数据共享?RAC中有两个重要的进程:**Global Cache Service(全局缓存服务 GCS)**和 Global Enqueue Service(全局队列服务 GES)

全局缓存服务(GCS)和全局队列服务(GES)是最基本的RAC进程,主要用于协调对共享数据库和数据库内的共享资源的同时访问。 同时,GES和GCS通过使用全局资源目录(Global Resource Directory,GRD)记录和维护每个数据文件的状态信息,GRD保存在内存中,内容分布存储在所有实例上。

RAC中通过几个特别的进程与GRD相结合,使得RAC可以使用缓存融合技术,这几个进程为:

  • Global Cache Service Processes(LSMn)。 LSM进程主要用来管理集群内数据块的访问,并在不同实例的BUFFER CACHE中传输块镜像
  • Global Enqueue Service Monitor(LMON)。 LMON主要监视集群内的全局资源和集群间的资源交互,并管理实例和处理异常,以及集群队列的恢复操作。
  • Global Enqueue Service Daemon(LMD)。 LMD主要管理对全局队列和全局资源的访问,并更新相应队列的状态,处理来自其他实例的资源请求。
  • Lock Processes(LCK)。LCK主要用来管理实例间资源请求和跨实例调用操作,并管理除Cache Fusion以外的资源请求,比如library和row cache的请求等。
  • Diagnosability Daemon(DIAG)。 DIAG主要用来捕获实例中失败进程的诊断信息,并生成相应的trace文件。

1.4 RAC的存储规划

安装RAC数据库涉及的软件有Oracle Clusterware、RAC数据库软件,同时还有voting disk、OCR等,每部分占用磁盘空间如下:

在这里插入图片描述

下表列出Oracle可以使用的存储类型:

在这里插入图片描述
具体使用哪种存储策略,要根据安装RAC环境的不同而不同。推荐三种常用的存储方式:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2 Oracle Clusterware 体系结构与进程

2.1 Oracle Clusterware简介

Cluster Ready Services,简称CRS,是Oracle开发的一个集群软件。其主要完成集群成员管理、心中监控、故障切换等功能,CRS要求每个集群节点的操作系统必须相同,这样通过CRS将多个节点的操作系统绑定到了一起,客户端对集群的访问,就像访问一台服务器一样。

CRS主要有两个集群套件组成,分别为voting diskOracle Cluster Registry

  • voting disk,即为表决磁盘,集群中每个节点定期评估自身健康状况,然后把它的状态信息放入到表决磁盘上。节点之间也会互相查看其运行状态,并把信息传递给其他节点进而写入表决磁盘。当节点发生故障时,可以通过表决磁盘进行投票仲裁。因此,表决磁盘必须放在共享存储设备上, 以保证每个节点都能访问到。表决磁盘可以是一个裸磁盘分区,也可以是一个独立的文件。由于它仅记录节点运行信息,磁盘大小一般在10-20M左右。
  • Oracle Cluster Registry,简称OCR,即集群注册服务。OCR主要用于记录RAC中集群和数据库的配置信息,包括集群节点的列表、集群数据库实例到节点的映射以及CRS应用程序资源信息。

CRS使用两种心跳设备来验证节点成员的状态:

  1. 表决磁盘。集群同步服务进程每隔几秒钟都会向表决磁盘写入一条心跳信息,集群通过表决磁盘即可验证节点的状态。如果某个节点在指定的最大时间段内没有向表决磁盘写入信息,集群就认为此节点失效,进而执行故障切换。
  2. 节点间私有以太网的心跳。通过这个心跳机制可以判断节点间是否出现了网络故障。

两种心跳机制的结合,有效增加了集群的可靠性。另外,CRS建议用于内部通讯的私有以太网心跳必须与用于RAC节点间通讯的网络分开,不能在同一网络中,如果RAC节点间通讯的网络与私有以太网心跳在同一个网络内,则必须保证该网络不能被非集群系统的节点访问到。

2.2 Oracle Clusterware进程介绍

Oracle Clusterware通过Cluster Ready Services来完成集群功能,CRS包含一组相互协作的后台进程:

  1. Cluster Synchronization Services。简称CSS,用于管理与协调集群中各节点的关系,并用于节点间通信,当节点在加入或离开集群时,由CSS进行通知集群。CSS对应的后台进程为CSSD,由oracle用户运行和管理。当节点发生故障时,cssd会自动重启操作系统。
  2. Cluster Ready Services。 简称CRS,是管理集群内高可用操作的主要程序,CRS管理所有资源,包括数据库、服务、实例、vip地址、监听器、应用进程等。CRS对应的后台进程为CRSD,可以对集群资源进行启动、停止、监视和容错等操作。正常状态下,CRSD监控节点各种资源,当某个资源发生异常时,自动重启或切换该资源。
  3. Process Monitor Daemon。简称OPROCD,此进程被锁定在内存中,用于监控集群及提供I/O防护。OPROCD运行在每个节点上,定期执行健康检测,如果在超过所希望的时间隔内仍然不能和某个节点通信,则OPROCD会重置处理器及重启节点。
  4. Oracle Notification Service。简称ONS,即oracle通告服务,主要用于发布和订阅Fast Application Notification 事件。
  5. Event Management。简称EVM,是一个事件检测的后台进程,由oracle用户运行和管理。

相关文章:

Oracle RAC是啥?

Oracle RAC,全称是Oracle Real Application Cluster,翻译过来为Oracle真正的应用集群,它是Oracle提供的一个并行集群系统,由 Oracle Clusterware(集群就绪软件) 和 Real Application Cluster(RA…...

springboot中定时任务cron不生效,fixedRate指定间隔失效,只执行一次的问题

在调试计算任务的时候,手动重置任务为初始状态,但是并没有重新开始计算,检查定时任务代码: 从Scheduled(fixedRate 120000)可以看到,应该是间隔120秒执行一次该定时任务,查看后台日志,并没有重…...

苹果手机发热发烫是什么原因?看完这篇你就知道了!

苹果手机以其卓越的用户体验和优秀的性能得到了广大用户的喜爱和追捧。在日常使用苹果手机时,我们可能会遇到手机发热发烫的情况。那么,苹果手机发热发烫是什么原因呢?小编将为大家解析这一问题的原因,并为您提供相应的解决方案&a…...

民安智库(第三方满意度调研公司):助力健身房提升客户满意度的秘密武器

在当今的健身行业,客户满意度已经成为衡量健身房竞争力的关键因素。为了准确了解客户的需求和反馈,某健身房委托民安智库对其进行客户满意度调查。 本次调查的主要目的是了解客户对健身房的满意度,包括对设施、课程、教练和服务的评价。调查…...

2011年09月01日 Go生态洞察:Go语言词法扫描与App Engine演示

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...

pytorch搭建squeezenet网络的整套工程(升级版)

上一篇当中,使用pytorch搭建了一个squeezenet,效果还行。但是偶然间发现了一个稍微改动的版本,拿来测试一下发现效果会更好,大概网络结构还是没有变,还是如下的第二个版本: 具体看网络结构代码&#xff1a…...

222. 完全二叉树的节点个数

题目链接:222. 完全二叉树的节点个数 需复刷 全代码: class Solution { public:int getnums(TreeNode* Node){if(Node NULL){return 0;}int leftnums getnums(Node ->left);int rightnums getnums(Node ->right);int cns 1 leftnums righ…...

adb and 软件架构笔记

Native Service,这是Android系统里的一种特色,就是通过C或是C代码写出来的,供Java进行远程调用的Remote Service,因为C/C代码生成的是Native代码(机器代码),于是叫Native Service。 native服务…...

算术运算符、自增自减运算符、赋值运算符、关系运算符、逻辑运算符、三元运算符

1.算术运算符 public class OperatorDemo1 {public static void main(String[] args) {int a 10;int b 2;System.out.println(a b);System.out.println(a - b);System.out.println(a * b);System.out.println(a / b);System.out.println(5 / 2);System.out.println(5.0 / 2);…...

k8s 配置资源管理

配置资源管理 //Secret Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源,这类数据虽然也可以存放在 Pod 或者镜像中,但是放在 Secret 中是为了更方便的控制如何使用数据,并减少暴露的风险。 有三种类型: ●kubernetes.…...

expo + react native项目隐藏状态栏踩坑

我的app.tsx文件内容如下&#xff1a; import MainPage from "./screens/Main/index";export default function App() {return (<MainPage />); }需求&#xff1a;当屏幕方向旋转90度后&#xff0c;状态栏所在位置是处于顶部安全区域所在位置。需要忽略顶部安…...

若依:用sqlite3随便掰饬掰饬

“若依”这个开源项目&#xff0c;感觉是外包公司标配了啊&#xff0c;都在用。从README感觉像是某位阿里员工的工作之余的小整理。对于SprintBoot&#xff0c;个人感觉太重型&#xff0c;不过人家生态起来了&#xff0c;不是那么容易玩完。但是随着VMware被博通收购&#xff0…...

刚安装的MySQL使用Navicat操作数据库遇到的问题

刚安装的MySQL使用Navicat操作数据库遇到的问题 一、编辑连接保存报错二、打开数据表很慢三、MySQL的进程出现大量“sleep”状态的进程四、执行sql脚本报错&#xff0c;部分表导不进去五、当前MySQL配置文件 一、编辑连接保存报错 连接上了数据库&#xff0c;编辑连接保存报错…...

物奇平台耳机宕机恢复功能实现

是否需要申请加入数字音频系统研究开发交流答疑群(课题组)&#xff1f;可加我微信hezkz17, 本群提供音频技术答疑服务&#xff0c;群赠送语音信号处理降噪算法&#xff0c;蓝牙音频&#xff0c;DSP音频项目核心开发资料, 物奇平台耳机宕机恢复功能实现 一 需求与场景 1 使…...

前端学习地址_备忘录(随时更新)

前端基础&&体系: MDN:MDN Web Docs 菜鸟教程:菜鸟教程 - 学的不仅是技术&#xff0c;更是梦想&#xff01; 印记中文:印记中文 - 深入挖掘国外前端新领域&#xff0c;为中国 Web 前端开发人员提供优质文档 w3cschool:w3cschool官网 - 1000多本编程教程免费学 vue系…...

安卓数据恢复工具哪个强? 10 个最佳 Android 数据恢复应用程序

如果您是 Android 用户并且已经使用您的设备一段时间&#xff0c;那么您很可能遇到过与数据相关的问题。这可能是由于软件问题导致文件被意外删除或损坏。许多人不经常备份数据&#xff0c;从而丢失了重要的文档、图像、视频文件等。最糟糕的是&#xff0c;数据丢失可能随时发生…...

在IDEA中配置Web开发环境

一、idea配置Web开发环境 第一步&#xff1a;下载并安装Tomcat服务器&#xff08;建议放根目录&#xff0c;完整路径中不要出现中文&#xff09; 第二步&#xff1a;打开IDEA&#xff0c;新建java项目 第三步&#xff1a;为项目添加Web应用 在项目上右键➡️选择“Add Framew…...

Cesium 相机设置

1.setView 直接跳转到目的地 // 设置相机位置 const position Cesium.Cartesian3.fromDegrees(113, 31, 20000); // setView通过定义相机目的地&#xff08;方向&#xff09;,直接跳转到目的地 viewer.camera.setView({ destination: position, // 位置设置 orientation: { //…...

【虹科干货】TWAMP:什么是双向主动测量协议?

TWAMP&#xff08;双向主动测量协议&#xff09;是什么&#xff1f;它在网络性能测量中有什么作用&#xff1f;如果您对IP网络中设备之间的性能问题感兴趣&#xff0c;或者想了解TWAMP与OWAMP之间的区别&#xff0c;以及TWAMP测试的好处。 一、TWAMP是什么&#xff1f; TWAMP代…...

bool型的盲注

bool型的盲注...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

数据库正常,但后端收不到数据原因及解决

从代码和日志来看&#xff0c;后端SQL查询确实返回了数据&#xff0c;但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离&#xff0c;并且ai辅助开发的时候&#xff0c;很容易出现前后端变量名不一致情况&#xff0c;还不报错&#xff0c;只是单…...

Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合

无论是python&#xff0c;或者java 的大型项目中&#xff0c;都会涉及到 自身平台微服务之间的相互调用&#xff0c;以及和第三发平台的 接口对接&#xff0c;那在python 中是怎么实现的呢&#xff1f; 在 Python Web 开发中&#xff0c;FastAPI 和 Django 是两个重要但定位不…...