一、oracle 数据库架构
单节点数据库,如果实例宕机了,如果一个业务链接在实例上面,那么这个业务就中断了。这个时候系统就不具有可用性了,那么这个时候单节点的可用性是很差的。
对于RAC来说,和单实例一样,还是一份数据文件,都是相同的存储上面放着oracle的文件,但是是由多个实例共用同一份数据文件。这样的好处是在多个实例之间做了冗余。
data guard可以实现物理备份,将redo日志同步然后应用,也可以实现逻辑备份先将redo日志转换成sql然后再执行,逻辑备份有较高的多平台可移植行。
二、rac系统架构

其中的存储可参考该篇(nfs+asm)oracle rac部署
其中clusterware是oracle实现集群的软件:
ORACLE Clusterware 有以下几个组件:
1、OCR Oracle Cluster Registry 为了解决集群“健忘”的问题,最简单的解决办法就是整个集群只 有一份配置,所有节点共用这份配置。ORACLE采用的方法就是把这个配置文件放在共享存储上,这个文件 就是OCR DISK。 节点通过OCR Process读写OCR。 但只有一个节点能够读写OCR DISK 叫OCR Master节点,其它节点 通过本节点的OCR process 向master node的OCR process提交请求,由master OCR Process 完成物理读写,并同步所有节点OCR cache中的内容。(配置不同步)
2、Voting Disk 这个文件主要用于记录节点中成员状态,在出现脑裂时,仲裁那个Partition获得集群的控制权
3、Cluster Synchronization Service(css) : CSS 服务 通过 多种心跳机制 实时监控集群的健康状态,提供脑裂保护等集群服务功能
CSS服务有二个心跳机制:私有网络的Network Heartbeat 用于监控节点之间的健康状态(超时阈值参数MisCount MC) ,通过Voting Disk 的Disk Heartbeat (超时阈值参数IO timeout IOT) 。用于监控是否有访问共享存储的IO故障如HBA卡故障,SAN交换机或者存储的线缆损坏导致I/O超时。
这两个心跳机制决定节点是否应驱逐。下面描述了驱逐行为发生的条件:
(1) 都不超时,不会驱逐
(2) 网络PING在MC时间内完成 ,磁盘ping超过了MC,但是在 IOT内,也不会驱逐
(3) 网络ping在MC时间内完成,磁盘ping超过了IOT,则节点被驱逐
(4) 网络ping超过MC设置,磁盘ping在MC内完成,节点也会被驱逐
4、Cluster Ready Service CRS管理的任何事物被称之为资源,它们可以是一个数据库、一个实例、一个监听、一个虚拟IP(VIP)地址、一个应用进程等等。CRS是根据存储于OCR中的资源配置信息来管理这些资源的。这包括启动、关闭、监控及故障切换(start、stop、monitor及failover)操作。当一资源的状态改变时,CRS进程生成一个事件。当你安装RAC时,CRS进程监控Oracle的实例、监听等等,并在故障发生时自动启动这些组件。默认情况下,CRS进程会进行5次重启操作,如果资源仍然无法启动则不再尝试。集群的高可用HA就靠它了
5、Event Manager Service 负责发布CRS产生的各种事件
6、Oracle Notification Service(ONS):FAN Fast Application Notification事件的发布及订阅服务
7、RACG 为clusterware进行功能扩展以支持Oracle的特定需求。它在FAN事件发生时执行服务器端的调用脚本(server callout script)
8、Process Monitor Daemon: 监视集群和提供I/O隔离(fencing)

二、rac网络架构

1、 VIP IP
我们先说一下PUBLIC和VIP Oracle RAC中每个节点都有一个虚拟IP,简称VIP, 与PUBLIC IP在同一个网段。vip 附属在public网口接口。 VIP和PUBLIC IP最主要的不同之处在于:VIP是浮动的,而PUBLIC IP是固定的。在所有节点都正常运行时,每个节点的VIP会被分配到public NIC上;在linux下ifconfig查看,public网卡上是2个IP地址;如果一个节点宕机,这个节点的VIP会被转移到还在运行的节点上。也就是幸存的节点的public NIC这个网卡上,会有3个IP地址。

2、 Private IP
再看RAC中的 Private RAC中的 Private私有IP用于心跳同步,这个对于用户层面,可以直接忽略。这个Ip用来保证两台服务器同步数据用的,属于RAC内部之间通信。priv 与public 不应同属一个接口。

3、 SCAN IP
RAC中的SCAN IP 在11gR2中,SCAN IP是作为一个新增IP出现的, scan ip其实是oracle在客户端与数据库之间,新加的一个连接层,当有客户端访问时,连接到 SCAN IP LISTENER, 而SCAN IP LISTENER接收到连接请求时,会根据 LBA 算法将该客户端的连接请求,转发给对应的instance上的VIP LISTENER,从而完成了整个客户端与服务器的连接过程。简化如下: client -> scan listener -> local listener -> local instance 也可以把scan理解为一个虚拟主机名,它对应的是整个RAC集群。客户端主机只需通过这个scan name即可访问数据库集群的任意节点。当然访问的节点是随机的,oracle强烈建议通过DNS Server的round robin模式配置解析SCAN,实现负载均衡(即轮换连接SCAN对应的IP地址)。这有点类似通过vip和listener loadbalance配置实现负载均衡的原理。