浅谈oracle RAC和HA的原理和异同 HA是High Availability的简称,即高可用性,在数据库应用上通常的高可用性是指广义的,应该是一种概念和模式而不是一种具体技术或者实现方式。简单来说,HA是让系统尽可能持续运行而不会中断的技术,包括软件的高可用,硬件的高可用,网络的高可用等等。具体实现的方案包括操作系统的集群,数据库的集群,硬件的冗余,网络的冗余等等。就oracle 高可用性来说实现方式有:高级复制(Advance Repication)、OPS/RAC(Real Application Cluster)、数据卫士(Data Guard)、oracle流(Oracle Streams)、oracle GG(GoldenGate)以及狭义上的HA即双机热备等等,本文所指的HA即为狭义上的HA(双机热备或者多机热备)。

实现原理:

相同点: 首先在目的上,HA和RAC都是为了尽可能保证数据库能持续运行而不间断或者最大程度缩短宕机时间,从而最大程度减少或者降低企业的损失。 其次在硬件上,无论是HA还是RAC都使用共享存储来存储数据,都是通过多台具有相同硬件结构的机器构成一个群集,各个机器和存储之间都使用光纤进行通信,每台机器都需要2个或者2个以上的网卡分别用于提供public和private连接,在IO上都要受到共享存储IO的限制。 在软件上HA和RAC环境中的所有机器都要装相同的操作系统(可以是Windows、Linux、Unix或者是AIX等等),相同版本的oracle软件和补丁等等。

差异性: rac中每个节点都有自己实例,自己undo表空间,自己的一套redo文件,自己的SGA,共享控制文件和其他数据文件;而HA每个节点都有自己的实例,共享redo文件,undo表空间和控制文件和其他数据文件。 在同一时刻,RAC 的所有节点都能分别对外提供服务,如果设置了负载均衡,群集软件还能根据各个节点的负载情况选择负载最小的节点为新的请求提供服务;而HA在同一时刻只能有一个节点对外提供服务,即使是群集中的其他节点都未发生宕机也是如此。 rac环境中,只要存在一个节点未宕机,则整体仍能持续对外提供服务,不会出现服务中断的情况;而HA原则上虽然只要存在一个节点未宕机,群集仍能将其切换为主服务节点,但是切换服务的过程由于群集软件的切换操作和节点的接管操作会造成短时间的服务中断。 在同一时刻,HA对外所能提供的最大IO为共享存储的IO,最大的内存和cpu资源均为当前主服务节点的资源;而在同一时刻rac对外所能提供的最大IO为共享存储的IO,最大内存和cpu资源为当前活着的节点的总和,在数据处理并发服务方面比HA有了硬件上的绝对优势。

结论: 在至少有一个节点存活的基础上,rac能持续对外提供服务,而HA可能会出现短暂的服务中断,因此rac在持续服务方面要优于HA; 由于在同一时刻rac能通过所以节点对外提供服务而HA只能由主服务节点提供对外服务,因此在并发服务和硬件资源上rac要明显优于HA; 由于rac还需要rac软件的license,而且一般rac的节点会比HA多,硬件资源配置一般也比较高,所以在成本投入方面rac要比HA高; 由于rac需要在多个节点之间进行数据同步和通信,原理和构成比HA更复杂,因此在维护性方面rac要比HA更复杂,一旦出现问题,需要投入更多的资源。