浅谈Oracle RAC (1)--概要

2022-08-19 20:21:02 浏览数 (1)

编者按:

本文作者系肖遥(花名),现任甲骨文技术支持工程师 ,目前专注于Oracle RAC领域。个人主页:

https://blog.csdn.net/weixin_50510978,经其本人授权发布。 【免责声明】本号文章仅代表个人观点,与任何公司无关。

一提到数据库,很多同学第一个反应就是装数据用的。然后有的同学会想起一大堆的SQL文,第一范式第二范式等等,搞得头都大了。

的确,在大学阶段我们所了解的数据库都局限在SQL编程的领域。回想起自己的大学时代,下载个MySQL,写几条SQL文,用Java开发个简单的图书借阅系统,然后给老师演示一下,老师给打个分数,自己的数据库课程大作业就算完成了。但是数据库到底是个什么样的存在,即便毕业当程序员多年后也是一头雾水。

后来进入甲骨文,专门从事Oracle数据库技术支持,对于数据库才有了清晰的认知。在工作中遇到了很多案例,琐碎无味,希望通过写博客的形式能稍加整理,同时与各位同学共勉。

关于普通的单实例的数据库,各大论坛和网站的文章已经很多了,我这里先专注于Oracle RAC。

1.什么是Oracle RAC

Oracle RAC 的全称是 Oracle Real Application Clusters。

从名称我们可以知道,这是一个集群(Cluster)。也就是说区别于单实例的数据库,Oracle RAC 是多节点实例的数据库集群。

如上图所显示的那样,数据库文件放在共享磁盘上,管理数据库的实例则由多个节点构成。

从技术上看,Oracle RAC 是架构在集群软件上的数据库。

2.什么是集群(Cluster)

引用华为云的话就是,集群是一组相互独立的、通过高速网络互联的节点(计算机),它们构成了一个组回,并以单一系统的模式加以管理。一个客户与集群相互作用时,对于客户来说集群像是一个独立的服务器。

3.Oracle RAC的特征是什么

Oracle RAC 集成了大部分类型的集群软件该有的特点。

3.1 高可用性。

对于单实例的数据库来说,一旦实例出现问题,那么应用程序就不能继续连接到数据库操作。而Oracle RAC 具有多个实例,只要还有一个实例存活,应用程序就可以继续连接数据库操作,这大大提高了数据库的可用性。

3.2 分散负载

数据库是由多个实例进行管理的,不管从哪个实例连接到数据库,得到的结果都是一样的。所以客户端可以随机或者按照负载均衡等原则连接到各个实例上,从而起到分散负载的作用。

3.3 可扩展性

构成 Oracle RAC 的各个节点是可以根据实际需要进行增减的。这不需要重建整个集群,使得集群规模能柔软变动。

4.Oracle RAC 各个节点实例中的信息是如何保持一致性的

Oracle RAC 中各个节点实例跟单实例数据库一样,都有SGA和PGA。SGA里面也都有shared pool和buffer cache等。所以一定存在一种技术来保证客户端不管从哪个实例连接进来,处理数据和查询数据的结果都是一样的。

这个技术就是内存融合技术(Cache Fusion)。这是Oracle RAC 的核心技术。随着内存融合技术的不断成熟,甲骨文才不断发展出了现在健全的数据库集群软件。

5.Oracle RAC 简史

早在1997年Oracle 8i时代,内存融合技术就已经有了雏形。

4年后的2001年,内存融合技术正式问世。但是这个时期,甲骨文一直没有成熟的集群管理软件,所以依然需要依赖第三方的集群管理软件。

2005年,甲骨文自己的集群管理软件CRS(Cluster Ready Service)问世。

4年后的2009年,结构更加标准,功能更加强大的集群管理软件GI(Grid Infrastructure)问世。从此Oracle RAC 开始了全面踢除第三方集群软件的时代。

2014年,Oracle RAC 12.1 问世。从集群软件的角度,Flex Cluster和Flex ASM架构出现。这是为了面向云应用的特点而设计的。从数据库角度看12.1最大的新特性是多租户和In-Memory,但是这不是Oracle RAC 独有的。

随后Oracle RAC 12.2 , 18c, 19c相继问世。但是从大的架构上来看,没有特别大的改动。

6.基于GI的其它数据库种类

除了多实例的 Oracle RAC 外,还有以下几种基于GI架构的数据库。主要基于成本考量而为客户提供的更便宜的数据库类型。

6.1 Oracle RAC One Node

千万不要望文生义,认为只有一个节点构成。它仍然由多个节点构成,但是数据库实例只有一个。当这个实例出现故障后,GI软件会将该实例failover到其它节点。

6.2 SIHA(Oracle Restart)

这是在单一节点上构建的由GI管理的单实例数据库类型。在最早版本中,Oracle Restart 的数据库文件必须存放在ASM中,在后来的版本中甚至可以构建没有ASM的Oracle Restart。GI已经与数据库没有高度冗余。这里面我为什么用甚至可以这样的词来形容,主要因为在其他类型架构中,没有ASM的话,GI是无法启动的。

*ASM是Automatic Storage Managment的简称。以后会专门介绍它,这里不做展开。

6.3 SEHA(Standard Edition High Availability)

在19c的版本中,新追加了SEHA。这也是一个多节点单实例结构。价格上比Oracle RAC One Node更低。但是SEHA一旦发生failover,坏掉的实例要马上修复,否则是要发生费用的。

从上面我们可以看出,Oracle RAC One Node,SEHA,SIHA都已经失去了Oracle RAC的主要特性。前两者因为有failover功能,还保持了一定的高可用性的话,SIHA则基本只是为了GI管理数据库实例以及可以使用ASM了。

Oracle RAC 是架构在GI上,是作为GI软件的一个资源被GI监控和管理。所以GI也是研究Oracle RAC 的重中之重。以后我们会深入探讨GI架构。

今天先分享到这里。以后我会找时间继续写一些Oracle RAC 的内容。

0 人点赞