百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Oracle云上构建RAC,看这1篇就够了(附代码)

mhr18 2025-02-08 11:55 14 浏览 0 评论


本文根据王鹤松老师在〖deeplus直播第259期〗线上分享演讲内容整理而成。
(文末有获取回放的方式,不要错过)


王鹤松

中国东南地区甲骨文用户组(SECOUG)核心成员


  • Oracle 11g OCM,拥有十几年的数据库经验,曾服务于电信,税务,交通,金融等行业,有丰富的性能优化、故障诊断、数据库设计、异常恢复经验,热衷于技术的研究与分享。


随着国家政策逐步推进企业上云,云计算做为重点发展的战略性产业受到多方关注。市面上云厂家很多,各有各的优势。Oracle云凭借独一无二的技术,成为私有云和公有云部署的理想平台。本次技术分享会在Oracle云上完整搭建一套RAC,告诉大家在搭建过程中的注意事项以及要规避的“坑”。还会分享FlEX ASM新特性,同时结合云上高可用最佳实践来保证用户不间断访问。


一、Oracle云的使用


1、个人测试账户申请


https://www.oracle.com/cn/cloud/free/


除了要进行邮箱验证和必要的信息录入外,还需要准备一张支持国际货币交易的信用卡,可支持一下三种:



验证过程会模拟一次交易,但会马上撤销,(或者会显示扣费失败,实际验证成功),最终以收到的邮件为准。


2、账号登陆


登陆地址

https://cloud.oracle.com/

或者


https://console.ap-tokyo-1.oraclecloud.com (区域选择日本登录地址)


https://console.ap-seoul-1.oraclecloud.com(区域选择韩国登录地址)


https://console.us-phoenix-1.oraclecloud.com(区域选择美西登录地址)




3、创建虚拟云网络


建议使用虚拟网络向导创建,并验证入站和出站规则正常。





4、创建SSH秘钥


以xshell工具为例



按提示输入信息外,要注意:要选择RSA算法




生成的密钥属性里,可以将公钥另存成文件,或记录下公钥的具体信息,便于上传服务器


5、创建集群



根据页面提示填写注意事项,其中配置选项里要VM Standard2.2以上,节点总数要选2,添加SSH密钥部分将上个步骤生成的密钥文件上传:






创建成功后,可以在数据库详细信息的节点部分,看到对应的公网IP



6、配置ssh链接




ssh链接后,使用sudo切换用户,如sudo su - oracle


二、12C 新特性-FLEX集群


1、FLEX集群介绍



Oracle RAC 12c 引入了两个新概念:


  • 中心节点:和以前的版本一样,它们通过专用网络相互连接,并且可以直接访问共享存储。这些节点可以直接访问 Oracle 集群注册表 (OCR) 和表决磁盘 (VD);
  • 叶节点:这些节点是轻型节点,彼此不互连,也不能像中心节点一样访问共享存储。每个叶节点与所连接的中心节点通信,并通过所连接的中心节点连接到集群。


从架构上来说,Oracle Flex 集群包括一个中心和叶架构,其中只有中心节点可以直接访问 Oracle 集群注册表 (OCR) 和表决磁盘 (VD)。但是应用可以通过叶节点访问数据库,而不必在叶节点上运行 ASM 实例。通过中心节点连接到数据库使得它对应用透明。


2、FLEX ASM的体系结构:



3、FLEX集群与传统集群的区别



Flex 集群RAC12C 与传统集群的11G RAC相比,最大不同是有Hub以及Leaf节点的存在,而Hub节点类似于传统集群节点,但是存在一个最大区别:即传统集群节点11G RAC是ASM实例与数据库实例绑定,ASM实例宕机则直接导致数据库实例无法访问,但是该方式在Flex集群中已将ASM和数据库实例进行了分割,本机ASM实例宕了,其ASM服务飘在其他节点,数据库实例仍然是可以访问的


4、FLEX ASM新特性模拟实验


1.在ASM实例中检查集群状态正常


[grid@cat1 ~]$ crsctl check cluster

CRS-4537: Cluster Ready Services is online

CRS-4529: Cluster Synchronization Services is online

CRS-4533: Event Manager is online


2.检查 RAC 数据库实例中 ASM 实例两个节点的状态正常


[grid@cat1 ~]$ srvctl status asm

ASM is running on cat2,cat1


3.检查 Oracle Flex ASM 是否启用的命令


[grid@cat1 ~]$ asmcmd showclustermode

ASM cluster : Flex mode enabled - Direct Storage Access

[grid@cat1 ~]$ asmcmd showclusterstate

Normal


4.确认Oracle Flex ASM 的状态


[grid@cat1 ~]$ srvctl status asm -detail

ASM is running on cat2,cat1

ASM is enabled.

ASM instance +ASM1 is running on node cat1

Number of connected clients: 2

Client names: cat1:_OCR:cat-cluster whs11:whs1:cat-cluster

ASM instance +ASM2 is running on node cat2

Number of connected clients: 2

Client names: cat2:_OCR:cat-cluster whs12:whs1:cat-cluster


[grid@cat1 ~]$ srvctl config asm -detail

ASM home:

Password file: +OCR/orapwASM

Backup of Password file: +OCR/orapwASM_backup

ASM listener: LISTENER

ASM is enabled.

ASM is individually enabled on nodes:

ASM is individually disabled on nodes:

ASM instance count: 3

Cluster ASM listener: ASMNET1LSNR_ASM


5.sqlplus连接入RAC的节点2的实例 2 (whs12)


sqlplus / as sysdba


6.查询一定数据量的表单,需要能形成刷屏效果


7.在 RAC 实例任意节点中关闭节点2的ASM 实例


[grid@cat1 ~]$ srvctl stop asm -node cat2 -stopoption abort –force


8.验证查询未被终止,并能正常输出


9.在 RAC 实例 2 (cat2) 中检查 ASM 实例的状态 ,发现ASM实例并未运行在节点2上


[grid@cat1 ~]$ srvctl status asm

ASM is running on cat1


10.在 RAC 实例 2 (cat2) 中检查 ASM 和 RAC 数据库的状态


[grid@cat1 ~]$ ps -ef | grep pmon

oracle 39297 1 0 10:43 ? 00:00:00 ora_pmon_whs11

grid 101927 100740 0 15:26 pts/3 00:00:00 grep --color=auto pmon


注:由此可以验证flex集群的特性,ASM实例与数据库实例非绑定状态


11.恢复节点2的ASM实例


[grid@cat1 ~]$ srvctl start asm -node cat2


三、高可用性实践


1、创建针对PDB1_WHS 的故障转移服务


srvctl add service -d whs1 -s ser_whs_pdb1 -r whs11,whs12 -P basic -e select -m basic -z 180 -w 5 -pdb PDB1_WHS


2、启动服务


srvctl start service -d whs1 -s ser_whs_pdb1


3、检查服务状态


srvctl status service -d whs1 -s ser_whs_pdb1


4、在RAC的节点1创建连接串


45_pdb_whs =


(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.45)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME =ser_whs_pdb1)

)

)


5、使用创建的连接串登陆


sqlplus test/test@45_pdb_whs


6、检查会话连接的实例信息


set line 1000

select INSTANCE_NUMBER,INSTANCE_NAME,STATUS,HOST_NAME from v$instance;

INSTANCE_NUMBER INSTANCE_NAME STATUS HOST_NAME

------------ ------------- -------------------- ---------------------------------

1 whs11 OPEN cat1


7、查询一定数据量的表单,需要能形成刷屏效果


8、强行停止会话所在的实例


srvctl stop instance -d whs1 -i whs11 –f


9、验证查询未被终止,并能正常输出


10、检查节点1进程信息,发现数据库实例没有启动


[grid@cat1 ~]$ ps -ef | grep pmon

oracle 39297 1 0 10:43 ? 00:00:00 ora_pmon_ASM1

grid 101927 100740 0 15:26 pts/3 00:00:00 grep --color=auto pmon


11、再次检查会话连接的实例信息,发现会话在无感知情况下已切换至节点2


set line 1000

select INSTANCE_NUMBER,INSTANCE_NAME,STATUS,HOST_NAME from v$instance;

INSTANCE_NUMBER INSTANCE_NAME STATUS HOST_NAME

------------ ------------- -------------------- ---------------------------------

2 whs12 OPEN cat2


注:使用TAF服务来实现业务在云端节点之间的弱感知甚至零感知的会话漂移


>>>>Q&A


Q1:公有云上部署高性能Oracle RAC集群有哪些比较好的方法啊?


A1:首先要注意的是,目前除了Oracle云,甲骨文官方不支持其他云使用Oracle数据库的。当然技术上,其他云是可以安装、部署Oracle数据库的。Oracle云上搭建RAC集群是自动化完成的,对于核心业务可以参考视频的高可用测试进行配置。


Q2:我们公司Oracle数据库是单机模式的,如果想要云上搭建Oracle RAC,您有什么建议?


A2:云上搭建RAC服务器,使用DATAGUARD的方式从本地单机服务器实时同步数据到云端服务器,然后使用主备切换的方式,将数据库的主库迁移到云上RAC,实现数据库上云。这种是最为成熟的一种上云方式。要注意云上的单机和云上的RAC收费不是一个量级的,建议搭建一个测试环境模拟下。


Q3:已部署普通集群,普通集群如何转换为flex集群?后续要怎么做?


A3:按照以下步骤:


  • 步骤1:先使用asmca图形界面的convert to oracle flex asm按钮将ASM改为flex asm;
  • 步骤2:root用户使用命令crsctl set cluster mode flex将集群改为flex集群;
  • 步骤3:重启集群生效。


Q4:企业上云有必要全部都搬上云吗?上云哪些是重点?


A4:现阶段企业上云没有必要全部上云,建议最核心的系统不上云,非最核心和边缘系统上云。虽然上了云,还是建议本地有一个备机以防万一。


上云的有许多优点,例如:


  • 可以降低企业技术开发成本;
  • 现在公有云技术越来越成熟,丰富的产品线可以实现一站式上云;
  • 企业云计算的灵活性非常高;
  • 系统升级方便;
  • 企业上云可以减少运维开支。但最核心不容有失,现阶段,建议还是采用最传统的两地三中心的容灾方法最为稳妥,这种方案相比上云还是更为成熟。


Q5:本地迁移上Oracle云有哪些地方容易出错?怎么选择迁移方案?


A5:本地迁移上Oracle云在私网通信配置最容易出错,在视频中有介绍。迁移方式的方式有很多,可以根据具体业务的情况的做出选择。这边建议还是DATAGUARD、OGG、数据泵、XTTS等方法为主。各种方法有各自的优缺点,同平台同版本、停机时间短的,建议使用DATAGUARD;数据库数据量小的,可以使用数据泵方法;应用停机时间短、同步粒度灵活(记录级)、不同平台的,建议使用OGG。可以根据实际情况选择其中一种或几种方式结合使用。


Q6:Oracle云创建的云服务器本身有哪些安全防护功能,是否具备病毒防护等功能?


A6:Oracle云创建的云服务器具有病毒防护功能。具体的防护功能有:


  • Oracle云会自动查询漏洞信息,根据季度发布的补丁信息给予用户是否打补丁。具体的补丁更新权取决于用户;
  • Oracle云服务器本身的还有IP访问控制和端口访问控制,严格审计登录用户;
  • SSH连接秘钥带有安全审计功能。要注意,云端的数据安全是要用户自己负责的,所以常规的备份和容灾也不可或缺。

↓点这里可回看本期直播

Oracle云构建RAC以及云上高可用性最佳实践

相关推荐

IT界10倍高效学习法!用这种方式,一年学完清华大学四年的课程

有没有在某一个瞬间,让你放弃学编程刚开始学python时,我找了几十本国内外的python编程书籍学习后,我还是似懂非懂,那些书里面到处都是抽象的概念,复杂的逻辑,这样的书,对于专业开发者来说,在平常...

数据库设计原则:构建高效可靠的数据存储

简介数据库设计是软件开发中至关重要的一环,它决定了数据在系统中的存储方式和组织结构。良好的数据库设计可以提高系统的性能、可靠性和可维护性。本文将介绍一些常见的数据库设计原则,包括范式化、冗余与一致性、...

Deno 操作 Oracle 数据库全解析:从入门到精通的实战指南

在企业级应用开发中,Oracle数据库凭借其强大的功能、高可靠性和安全性,一直是大型系统的首选数据存储方案。Deno作为新一代JavaScript/TypeScript运行时,以安全、高效和现...

APIJSON快速入门-零后端代码,接口所见即所得

1.流程说明一个接口的开发,比如Java用SpringBoot,Mybatis来开发一般来说就像下面这个流程部署上这个项目后,流程变成了这样如果使用apijson-framework,还可进一步简化...

每天从外包系统同步百万数据,用什么方案?Java实战讲解

用户问的是每天从外包系统同步百万数据,用什么方案,还要Java实战讲解。首先,我需要明确用户的需求。他们每天需要处理的数据量是百万级别,这个量级不算特别大,但也要考虑效率和稳定性。可能用户是企业的开发...

SpringBoot条件化配置(@Conditional)全面解析与实战指南

一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...

禁止join,我该怎么办(禁止后不再提示是什么意思)

join是什么SQL中JOIN子句用于把来自两个或多个表的行结合起来。在实际的数据库应用中,经常需要从多个数据表中读取数据,这时就可以使用SQL语句中的连接(JOIN)子句,在两个或多个数据...

Spring IoC Container 原理解析(spring的ioc底层实现原理)

IoC、DI基础概念关于IoC和DI大家都不陌生,我们直接上martinfowler的原文,里面已经有DI的例子和spring的使用示例《InversionofControlContainer...

SUSE再次宣布推出自己的 RHEL 兼容发行版

SUSE再次宣布推出自己的RHEL兼容发行版变色龙牧场主选择了一条新的岩石路线周三12七月2023SUSE正在重新考虑去年初所做的改变:它正在推出自己的RHEL兼容发行版,或者用它的话说...

Seatunnel介绍与datax对比及使用教程

什么是SeatunnelSeaTunnel是一款极简易用、性能卓越的分布式数据集成平台。它以轻量高效的架构设计,为用户提供了一站式数据集成解决方案,可轻松实现跨系统、跨格式的数据实时/批量同步与...

Spring Boot 大屏展示,私活项目,已开源,接私活必备,真香

一款基于代码生成器的低代码平台!前后端分离架构SpringBoot2.x,SpringCloud,AntDesign&Vue,Mybatis-plus,Shiro,JWT,支持微服务。强大的代码生...

互联网大厂后端必看Spring Boot3与Oracle数据库的高效连接全攻略

你是不是在使用SpringBoot3开发项目时,正为连接Oracle数据库而头疼?明明按照常规方法配置,却总是出现各种错误,耗费大量时间却毫无进展?别担心,这篇文章就是为你量身定制的!开发现...

Oracle 和 Microsoft 推出 Oracle Exadata 数据库服务

据oracle网3月20日报道,Oracle宣布在OracleDatabase@Azure的百万兆次级基础设施上全面推出OracleExadata数据库服务。百万兆次级部署选项无需供应...

Oracle数据库中查询最前面的100条数据,三种方法对比

在Oracle数据库中查询最前面的100条数据,可通过多种方法实现,不同方法适用于不同场景和版本。以下是基于当前技术文档的三种核心方案及其适用性分析:一、使用ROWNUM伪列(通用方案,全版本适用...

Oracle数据库中判断字段不为空?(oracle判断字段是否包含数字)

Oracle数据库中如何判断字段不为空在Oracle数据库中,判断字段(列)不为空通常涉及到几种不同的场景和需求。下面是一些常见的方法来检查字段是否不为空:1.使用NVL函数NVL函数可以用来将NU...

取消回复欢迎 发表评论: