Oracle 19C 安装RAC磁盘投票失败
ORACLE 19C 安装RAC第二个节点报错,没有找到足够的 voting 文件(投票磁盘)
1、磁盘投票失败分析
1.1、02节点报错日志
CRS-4123: Starting Oracle High Availability Services-managed resources
CRS-2672: Attempting to start 'ora.mdnsd' on 'p19c02'
CRS-2672: Attempting to start 'ora.evmd' on 'p19c02'
CRS-2676: Start of 'ora.mdnsd' on 'p19c02' succeeded
CRS-2676: Start of 'ora.evmd' on 'p19c02' succeeded
CRS-2672: Attempting to start 'ora.gpnpd' on 'p19c02'
CRS-2676: Start of 'ora.gpnpd' on 'p19c02' succeeded
CRS-2672: Attempting to start 'ora.gipcd' on 'p19c02'
CRS-2676: Start of 'ora.gipcd' on 'p19c02' succeeded
CRS-2672: Attempting to start 'ora.crf' on 'p19c02'
CRS-2672: Attempting to start 'ora.cssdmonitor' on 'p19c02'
CRS-2676: Start of 'ora.cssdmonitor' on 'p19c02' succeeded
CRS-2672: Attempting to start 'ora.cssd' on 'p19c02'
CRS-2672: Attempting to start 'ora.diskmon' on 'p19c02'
CRS-2676: Start of 'ora.diskmon' on 'p19c02' succeeded
CRS-2676: Start of 'ora.crf' on 'p19c02' succeeded
CRS-2672: Attempting to start 'ora.cssdmonitor' on 'p19c02'
CRS-2676: Start of 'ora.cssdmonitor' on 'p19c02' succeeded
CRS-1705: Found 0 configured voting files but 1 voting files are required, terminating to ensure data integrity; details at (:CSSNM00065:) in /u01/app/grid/diag/crs/p19c02/crs/trace/ocssd.trc
CRS-2883: Resource 'ora.cssd' failed during Clusterware stack start.
CRS-4406: Oracle High Availability Services synchronous start failed.
CRS-41053: checking Oracle Grid Infrastructure for file permission issues
CRS-4000: Command Start failed, or completed with errors.
2024/11/20 16:41:47 CLSRSC-117: Failed to start Oracle Clusterware stack
Died at /u01/app/19.3.0/grid/crs/install/crsinstall.pm line 1970.
1.2、报错原因分析
Oracle RAC 安装过程中失败的关键点是 CRS-1705 和 CRS-2883,原因是没有找到足够的 voting 文件(投票磁盘),导致 Clusterware 无法启动。这通常与共享存储配置或权限问题有关。
1.3、排查步骤
1.3.1、检查共享存储配置(确保 Oracle RAC 的共享磁盘能够正常使用)
ls -l /dev/asm_*
multipath -ll
1.3.2、Udev 规则配置 检查
文件中的 Udev 规则为 /dev/asm_ocr
和 /dev/asm_data
创建了符号链接,并设置了正确的所有者、组和权限。
cat /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-0QEMU_QEMU_HARDDISK_cec47c24-2a51-47fb-8",SYMLINK+="asm_data",OWNER="grid",GROUP="asmadmin",MODE="0660"
KERNEL=="dm-*",ENV{DM_UUID}=="mpath-0QEMU_QEMU_HARDDISK_064b7e43-99f2-4957-a",SYMLINK+="asm_ocr",OWNER="grid",GROUP="asmadmin",MODE="0660"
1.3.3、重新加载 Udev 规则
如果符号链接不存在或权限不正确:
udevadm control --reload-rules
udevadm trigger
1.3.4、确认节点间共享磁盘一致性
在每个节点上执行以下命令,确认多路径设备和符号链接的情况:
multipath -ll
ls -l /dev/asm_ocr /dev/asm_data
1.3.4、解决方法
修改ovirt磁盘为共享的
1.4、问题解决完成
rac2 #再次执行root.sh,成功完成
/u01/app/grid/12.2.0.1/root.sh
1.5、为什么用共享磁盘(GPT解释)
- 多节点访问:
- 当该磁盘被设置为“可共享”时,它允许在多个虚拟机之间共享。这对于需要集群节点共同访问同一个磁盘的场景非常重要,例如 Oracle RAC 集群,这样多个节点可以同时访问同一份数据,确保数据一致性。
- 在 Oracle RAC 环境中,多个节点都需要访问相同的存储资源(如投票盘、OCR 磁盘、ASM 磁盘),这些存储资源必须可以被所有节点同时访问,这样集群中的每个节点才能共同管理和同步数据库的状态。
- 共享总线设置:
- 在虚拟化环境中,如果您希望某个磁盘被多个虚拟机共享,通常需要选择一个共享的总线类型。例如,在截图中,接口选择了
VirtIO-SCSI
,配合“可共享的”选项,这样的配置可以确保该 SCSI 磁盘可以在多个虚拟机之间共享。- 共享总线的概念是指多个虚拟机使用相同的 SCSI 控制器连接到共享磁盘,这种方式可以模拟物理环境中的共享存储(例如 SAN 存储)。
可共享的”应用场景
- Oracle RAC 集群:如您当前的情况,安装 Oracle RAC 需要共享磁盘,以便多个节点可以同时访问 ASM 磁盘组和投票盘。
- 故障恢复和高可用:共享磁盘可以在故障发生时,让其他节点接管资源,保持集群的高可用性。
虚拟磁盘的共享设置需要注意的地方
- 一致性:
- 如果您的共享磁盘未正确配置为共享,那么只有一个节点可以独占访问该磁盘,这将导致 Oracle RAC 集群中的其他节点无法看到或使用该磁盘,导致集群配置失败。
- 请务必确保每个 RAC 节点的虚拟磁盘配置相同,且所有需要共享的磁盘都设置为“可共享”。
- SCSI 控制器的设置:
- 推荐将共享磁盘挂载在单独的 SCSI 控制器上,例如
scsi1
,而本地系统盘保持在scsi0
。这种方式能够避免共享盘和系统盘之间的冲突,提升共享磁盘的稳定性。- 在配置共享磁盘时,请确认“共享总线”或“总线共享”属性已经正确设置为虚拟机共享模式(例如
virtual
或类似选项)。
- 虚拟机配置的一致性:
- 在所有虚拟机中,确保共享磁盘的配置是完全一致的,尤其是挂载的 SCSI 控制器编号、磁盘大小、磁盘名称等。
总结
- 在您的虚拟磁盘配置中,“可共享的”选项允许该磁盘被多个虚拟机同时访问,这是实现集群环境的基础。
- 您需要确保在 KVM oVirt 管理控制台中对所有共享磁盘都设置了此选项,这样每个 RAC 节点都可以正常访问相同的共享存储资源。
- 在多个节点中保持 SCSI 控制器和共享磁盘配置的一致性,以保证集群的可靠性和稳定性。
相关文章:
Oracle 19C 安装RAC磁盘投票失败
ORACLE 19C 安装RAC第二个节点报错,没有找到足够的 voting 文件(投票磁盘) 1、磁盘投票失败分析 1.1、02节点报错日志 CRS-4123: Starting Oracle High Availability Services-managed resources CRS-2672: Attempting to start ora.mdnsd…...
vulfocus在线靶场:骑士cms_cve_2020_35339:latest 速通手册
目录 一、启动环境,访问页面,ip:端口号/index.php?madmin,进入后台管理页面,账号密码都是adminadmin 二、进入之后,根据图片所示,地址后追加一下代码,保存修改 三、新开标签页访问:①ip:端…...
【Linux内核深度解析】TCP协议栈之tcp_recvmsg
tcp_recvmsg 是 Linux 内核中用于处理 TCP 套接字接收数据的核心函数。它的主要任务是从接收队列中读取数据并将其复制到用户空间。 函数原型 int tcp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, size_t len, int nonblock, int flags, int *addr_le…...
android-studio-4.2下载 、启动
下载 分享一个国内的android studio网站,可以下载SDK和一些Android studio开发工具 https://www.androiddevtools.cn/ 启动 JAVA_HOME/app/zulu17.48.15-ca-jdk17.0.10-linux_x64/ /app5/android-studio-home/android-studio-ide-201.6568795-linux-4.2C1/bin/s…...
Excel——宏教程(2)
Excel——宏教程(2) 一)、处理单元格 1、直接赋值与引用 将变量、常量值直接赋给单元格、或将单元格的值直接赋给变量、常量,这是在excel中最简单的单元格赋值及引用方法。 如下例将工作表"Sheet1"A1单元格的值赋给Integer变量I,并将I1的值…...
React Native 全栈开发实战班 - 性能与调试之打包与发布
在完成 React Native 应用的开发与性能优化后,下一步就是将应用打包并发布到各大应用市场,如 Apple App Store 和 Google Play Store。本章节将详细介绍 React Native 应用的打包与发布流程,包括 Android 和 iOS 平台的打包步骤、签名配置、发…...
C# 5000 转16进制 字节(激光器串口通讯生成指定格式命令)
最近在做一个与激光器用串口进行通讯的程序文档中要求将频率参数以3个字节的方式进行发送。这里记录一下过程。以便以后再有类似问题时可以快速解决。 /// <summary>/// 设置频率/// </summary>/// <param name"sender"></param>/// <par…...
Win11下载和配置VSCode(详细讲解)
配置VSCode需要的工具: 一、MinGW-w64 二、Visual Studio Code 一、MinGW-w64下载 1、下载 MinGW官网地址: Downloads - MinGW-w64 直链下载: 下载 mingw-w64-install.exe (MinGW-w64 - 适用于 32 位和 64 位 Windows&#…...
基于Multisim的多路智力竞赛抢答器设计与仿真
(1)设计一个8路智力竞赛抢答器,主持人可控制系统的清零和抢答的开始,控制电路可实现最快抢答选手按键抢答的判别和锁定功能,并禁止后续其他选手抢答。 (2)抢答选手确定后给出一声音响的提示和选手编号的显示,抢答选手的编号显示保持到系统被清零为止。 …...
Three.js 闪电效果
闪电shader const shader new THREE.ShaderMaterial({uniforms: {iTime: this.iTime,color: { value: new THREE.Color("#D2F8FE") },},vertexShader: /* glsl */ varying vec2 vUv;varying float normalizeY;void main() {// vUv (uv * 2. - 2.) * vec2(0.3,2.);…...
高效序列化工具(1)-----Protobuf
目录 1.Protobuf Protobuf 的特点 工作原理 Protobuf 与 JSON、XML 的对比 2.protobuf语法 1.数据类型 2.消息 3.枚举 4.嵌套消息 5.重复字段 6.默认值 7.其他类型 1.oneof类型 2.any类型 8.文件组织 3.protobuf命令 1.常见命令 选项: 1. --proto_…...
湛江市社保卡申领指南:手机获取电子照片回执单号
在湛江市,社保卡的申领流程已经实现了数字化,为市民带来了极大的便利。特别是通过手机获取数码照片回执单号,这一环节更是简化了申领过程。今天,我们将详细介绍如何不去照相馆,利用手机来获取数码照片回执单号…...
HTML5实现剪刀石头布小游戏(附源码)
文章目录 1.设计来源1.1 主界面1.2 皮肤风格1.2 游戏中界面 2.效果和源码源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/143798520 HTM…...
TypeScript之常见类型
常见类型(Everyday Types) 本章我们会讲解 JavaScript 中最常见的一些类型,以及对应的描述方式。注意本章内容并不详尽,后续的章节会讲解更多命名和使用类型的方式。 类型可以出现在很多地方,不仅仅是在类型注解 (type annotations)中。我们不仅要学习类型本身,也要学习…...
MacOS java多版本安装与管理-sdkman
安装sdkman curl -s "https://get.sdkman.io" | bashsource "$HOME/.sdkman/bin/sdkman-init.sh"sdk version正常出现sdkman版本号就安装成功了 # 安装java # 安装java8 sdk install java 8.0.412.fx-zulu建议和上述一样安装 fx-zulu 的jdk,…...
NLP论文速读(多伦多大学)|利用人类偏好校准来调整机器翻译的元指标
论文速读|MetaMetrics-MT: Tuning Meta-Metrics for Machine Translation via Human Preference Calibration 论文信息: 简介: 本文的背景是机器翻译(MT)任务的评估。在机器翻译领域,由于不同场景和语言对的需求差异&a…...
20241121 android中树结构列表(使用recyclerView实现)
1、adapter-item的布局 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"wrap_content&…...
达索系统亮相第三十一届中国汽车工程学会年会暨展览会
伴随着改革开放以及中国入世WTO,三十多年来,中国汽车产销已经成为世界最大的单一市场而独占鳌头。近十年来,另辟蹊径的中国汽车产业人在新能源汽车赛道上引领了一波又一波令全球惊艳的创新成就,成为最为靓丽的新出口三大件的头牌。…...
Python网络爬虫实践案例:爬取猫眼电影Top100
以下是一个Python网络爬虫的实践案例,该案例将演示如何使用Python爬取猫眼电影Top100的电影名称、主演和上映时间等信息,并将这些信息保存到TXT文件中。此案例使用了requests库来发送HTTP请求,使用re库进行正则表达式匹配,并包含详…...
ROSSERIAL与Arduino IDE交叉开发(UBUNTU环境,包含ESP32、arduino nano)
ROSSERIAL与Arduino IDE交叉开发 一、简介二、安装1、Ubuntu下的Arduino IDE安装 **针对ESP32报错问题原因溯源和修改**三、运行结点 一、简介 这个教程展示在ubuntu环境下如何利用Arduino IDE配合rosserial开发机器人部件。通过Arduino IDErosserial实现arduino/esp32开发板通…...
爬虫开发工具与环境搭建——使用Postman和浏览器开发者工具
第三节:使用Postman和浏览器开发者工具 在网络爬虫开发过程中,我们经常需要对HTTP请求进行测试、分析和调试。Postman和浏览器开发者工具(特别是Network面板和Console面板)是两种最常用的工具,能够帮助开发者有效地捕…...
ceph 18.2.4二次开发,docker镜像制作
编译环境要求 #需要ubuntu 22.04版本 参考https://docs.ceph.com/en/reef/start/os-recommendations/ #磁盘空间最好大于200GB #内存如果小于100GB 会有OOM的情况发生,需要重跑 目前遇到内存占用最高为92GB替换阿里云ubuntu 22.04源 将下面内容写入/etc/apt/sources.list 文件…...
游戏引擎学习第19天
介绍 这段内容描述了开发者在进行游戏开发时,对于音频同步和平台层的理解和调整的过程。以下是更详细的复述: 开发者表达了他希望今天继续进行的工作内容。他提到,昨天他讲解了一些关于音频的内容,今天他想稍微深入讲解一下他正…...
简单实现vue2响应式原理
vue2 在实现响应式时,是根据 object.defineProperty() 这个实现的,vue3 是通过 Proxy 对象实现,但是实现思路是差不多的,响应式其实就是让 函数和数据产生关联,在我们对数据进行修改的时候,可以执行相关的副…...
TypeScript 中扩展现有模块的用法
declare module 是 TypeScript 中用于扩展现有模块的特性。它允许开发者在已有模块的基础上,添加新的功能(比如扩展接口、添加类型声明等)。通过 declare module,可以将额外的声明合并到原模块中。以下是用法详解: 用…...