2016-05-25 09:54 1150人阅读 评论(0) 收藏 举报
 分类:
oracle(2) 

1.RAC原理

Oracle 数据库系统是美国oracle公司(甲骨文股份有限公司)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一,至今仍在数据库市场上占有主要份额。

1.1 RAC原理

对于每个软件相关从业人员来说,都有必要了解一下Oracle数据库,下面我将对Oracle RAC原理做如下介绍。

Oracle RAC是Oracle Real Application Cluster的简写,官方中文文档一般翻译为“真正应用集群”。RAC集群是由若干物理机组成,每个物理机为一个节点,这些节点间通过网线连接(也叫心跳网络)。每个节点上都运行一个实例,这些实例通过CRS(CRS通过一系列的进程和服务来保证集群的运行,提供高可用性)的协助,共同操作一个数据库,是一个典型的“多实例,单数据库”架构,数据库被所有节点共享、并行访问。共享存储是RAC架构的核心。数据库的数据文件、控制文件、参数文件、重做日志文件等等都要放到共享存储上,各节点可以对这些文件进行并行访问。如果其中某个节点发生故障,RAC能够将连接自动切换到另外一个节点上,无单点故障问题,从而实现应用的无缝切换。

下图为基本的RAC拓扑图:

2.RAC 特性

依上文所说,RAC是一堆特性应用的集合,下面重点介绍几个特性:VIP漂移、脑裂和IO隔离。

2.1 VIP漂移特性

这里有必要解释下RAC为什么要使用VIP地址:在TCP/IP四层模型中,TCP header中最重要的信息是源端口和目标端口,IP header 中记录的最重要的信息是源IP和目标IP地址,而数据库监听中记录了IP地址和端口号,位于应用层,所以客户端的连接请求只有发现TCP层超时才能感知数据库或者是监听出了问题。TCP/IP协议栈超时,其时间阀值由OS内核决定,每个操作心跳的阀值不相同。为了解决TCP/IP协议栈超时问题,Oracle RAC引进了VIP。

VIP 和一般的IP不同的是:一般的IP是固定到物理网卡上的,VIP是浮动的。一旦某个节点出现了故障,其上运行的VIP会漂移到活着的节点上,但是活着的节点上的监听里找不到该VIP的地址。应用程序立马会感知到,并向其他VIP地址发起连接请求。捕获错误的时间大大缩短。

VIP漂移原理:假设有两个节点的RAC,分别是节点1和节点2。正常运行时节点1上有VIP1,节点2上有VIP2 ;当节点1发生故障,RAC 会做如下操作:

1) CRS 在检测到节点1异常后,会触发Clusterware 重构,最后把节点1剔除集群,由节点2组成新的集群。

2)RAC的Failover 机制会把节点1的VIP转移到节点2上(也就是VIP漂移),这时节点2的PUBLIC 网卡上就有3个IP 地址: VIP1、VIP2、PUBLIC IP2。

3)用户对VIP1的连接请求会被IP层路由转到节点2。

4)因为在节点2上有VIP1的地址,所有数据包会顺利通过路由层、网络层、传输层。

5)但是节点2上只监听VIP2和PUBLIC IP2的两个IP地址。并没有监听VIP1,故应用层没有对应的程序接收这个数据包,这个错误立即被捕获。

6)客户端能够立即接收到这个错误,之后客户端会重新发起向VIP2的连接请求。VIP2就自动接管交易处理。

2.2 脑裂

在集群环境中,节点间需要心跳机制了解彼此的健康状况,假如心跳出了故障,就会出现脑裂。这时每个节点还在正常运行,每个节点都会认为其他节点都不复存在,自己是唯一的幸存者,之后就会控制整个集群。数据是共享的,如果每个节点都想控制独享,势必会破坏共享数据的完整性和一致性。这样的状况就是脑裂。

为了解决这个脑裂问题,通过投票机制,获得高票数或是最早到达的获得投票,幸存,其他节点被踢出。Oracle RAC中的Voting Disk用来记录节点间成员状态,出现脑裂时,仲裁哪个节点获得控制权,其他的节点被剔除。

2.3 IO隔离

IO隔离是上一个问题的延伸,投票机制虽然已经判断出哪个成节点该获得集群掌控权,哪些节点被剔除,但仅仅这样做是不够的,还必须保证被剔除的节点不能操作共享数据。为了限制已踢出节点对共享数据的访问,必须进行IO隔离。Oracle RAC采取的是直接重启故障节点。

3.RAC测试案例

上文介绍了RAC的原理以及三个特性,下面我将重点讲解“如何在测试中测试RAC的有效性”。

3.1 测试案例1名称:RAC有效性测试-异常关机

测试目的:

验证系统数据库RAC中的一个节点发生故障后,另一个节点能否自动接管交易处理;以及故障恢复后,节点处理能力能否恢复正常。

测试方法:

1)使用HP LoadRunner模拟客户发压,按照混合模型的比例,以被测试系统最大处理能力的50%作为负载压力向被测试系统施压,待系统稳定运行5分钟;

2)在某一台数据库服务器上手工执行halt -q(不同OS命令有区别),模拟异常宕机;

3)继续稳定运行5分钟;

4)恢复故障节点,同时启动该节点上的Oracle 实例;

5)继续稳定运行5分钟;

6)执行回切操作。

预期测试结果:

1)步骤3后被测试系统数据库RAC切换成功,切换过程中,交易响应时间延长

2)切换后VIP漂移到另一个实例;

3)交易在1分钟内能够100%恢复正常,交易错误率、响应时间均满足测试指标,各主机资源使用正常;

4)步骤5后故障节点恢复后,该节点实例不接管交易,连接也不恢复,该实例不处理交易;

5)步骤7后执行回切操作后,服务器状态恢复为初始状态,交易由原主机处理并稳定运行。

实际测试结果:

LoadRunner总体趋势图

节点1: CPU趋势图

节点2:CPU趋势图

查看VIP是否漂移,当节点1故障后,查看节点2的网卡上有节点1的VIP地址,说明节点1的VIP地址漂移到节点2的网卡上。

测试结果分析:

从上述测试结果的图表和日志截图可以清楚的看到:节点1模拟宕机后,RAC切换成功,节点1的VIP 漂移至节点2;TPS下降,交易有少量失败,40秒内TPS完全恢复。

恢复节点1后,交易由原主机节点1处理并稳定运行。

测试结果符合预期结果,测试结果通过。

3.2 测试案例2名称:RAC有效性测试-停实例(shutdown abort)

测试目的:

考察系统在一定并发下,手动异常停止一个数据库实例后,另一个数据库实例能否自动接管交易处理;以及故障恢复后,节点处理能力能否恢复正常。

测试方法:

1)使用测试工具LoadRunner发压,按照混合测试场景中交易的比例,以被测试系统最大处理能力的50%作为负载压力向被测试系统施压,稳定运行5分钟;

2)手动(shutdown abort)停止一个数据库实例,场景持续运行5分钟;

3)启动停止的数据库实例,场景持续运行5分钟;

4)执行回切操作,场景持续运行5分钟。

预期测试结果:

1.步骤2手动停止数据库实例后,另一节点实例会很快接收请求(Failover机制生效)。切换后停掉实例的节点,CPU、IO下降;正常接收交易实例的节点,CPU、IO上升。MTTR(平均失效恢复时间)小于1分钟,失效交易处理能力恢复水平99.99%;

2.步骤3重启停止节点实例后,连接正常,与切换后保持一致;

3.执行回切操作后,服务器状态恢复为初始状态,交易由原主机处理, 并稳定运行。

实际测试结果:

LoadRunner总体趋势图

节点1:128.196.36.22 CPU利用率图

节点2:128.196.36.25  CPU利用率图

测试结果分析:

1)手动停止节点1实例后,节点2实例会很快(2秒内)接收请求。停掉实例的节点1 ,CPU、IO下降,接收交易的节点2,CPU、IO上升;交易有少量失败,在20秒内TPS完全恢复;

2)重启节点1实例后,AP为长连接,该实例的连接不恢复;交易不受影响;

3)执行回切操作后,TPS下降,交易有少量失败,40秒内TPS完全恢复,交易由原主机节点1处理,并稳定运行;

4)实际测试结果符合预期结果,测试结果通过。

3.3 测试案例3名称:AC有效性测试-心跳网络异常

测试目的:

验证数据库RAC中的心跳网络(主备网卡置down)异常后,另一节点能否自动接管交易处理;以及故障恢复后,节点处理能力能否恢复正常。

测试方法:

1)使用测试工具LoadRunner发压,按照混合模型的比例以被测试系统最大处理能力的50%作为负载压力向被测试系统施压;

2)场景平稳运行5分钟时,将节点1的网卡置down,观察各交易错误率、处理能力、响应时间及各主机资源情况;验证VIP是否可以正常切换;

3)恢复该节点心跳主备网卡,重启CRS,交易稳定运行5分钟,观察被测试系统交易恢复情况;

4)场景结束,分析和记录测试结果。

预期测试结果:

1)步骤2后,实例名权重大的实例重启,主机不重启;

2)步骤3后,CRS能正常启动,数据库可正常启动并加入RAC。

实际测试结果:

TPS趋势图

节点1:CPU趋势图

节点2:CPU趋势图

测试结果分析

1)宕掉节点1的心跳主备网卡,出现脑裂,节点2实例重启,CRS重启,节点2的VIP漂移到节点1;TPS下降,交易有少量失败,在50秒内TPS完全恢复至100%。

2)节点1心跳主备网卡故障恢复后,VIP回漂,数据库可正常启动并加入RAC,交易不受影响。

3)实际测试结果符合预期结果,测试结果通过。

从以上三个案例可以看出:如果其中某个节点发生故障,RAC能够自动切换到另外一个节点上,无单点故障问题。

Oracle RAC的机制与测试方法的更多相关文章

  1. Oracle RAC/Clusterware 多种心跳heartbeat机制介绍 RAC超时机制分析

    ORACLE RAC中最主要存在2种clusterware集群件心跳 &  RAC超时机制分析: 1.Network Heartbeat 网络心跳 每秒发生一次: 10.2.0.4以后网络心跳 ...

  2. 【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)

    Oracle 11G RAC数据库安装(八) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总 ...

  3. Oracle rac集群环境中的特殊问题

    备注:本文摘抄于张晓明<大话Oracle RAC:集群 高可用性 备份与恢复> 因为集群环境需要多个计算机协同工作,要达到理想状态,必须要考虑在集群环境下面临的新挑战. 1.并发控制 在集 ...

  4. Oracle Redo Log 机制 小结(转载)

    Oracle 的Redo 机制DB的一个重要机制,理解这个机制对DBA来说也是非常重要,之前的Blog里也林林散散的写了一些,前些日子看老白日记里也有说明,所以结合老白日记里的内容,对oracle 的 ...

  5. oracle rac理解和用途扩展

    Oracle RAC的优势在于利用多个节点(数据库实例)组成一个数据库,这样在保证了数据库高可用性的情况下更充分的利用了多个主机的性能,而且可以通过增加节点进行性能的扩展.实现Oracle RAC需要 ...

  6. 【转】Oracle RAC 环境下的连接管理

    文章转自:http://www.oracle.com/technetwork/cn/articles/database-performance/oracle-rac-connection-mgmt-1 ...

  7. Oracle RAC Failover

    Oracle  RAC 同时具备HA(High Availiablity) 和LB(LoadBalance). 而其高可用性的基础就是Failover(故障转移). 它指集群中任何一个节点的故障都不会 ...

  8. Oracle RAC 常用维护工具和命令

    Oracle RAC 常用维护工具和命令 分类: Oracle Basic Knowledge Oracle RAC2010-03-09 01:02 13987人阅读 评论(6) 收藏 举报 orac ...

  9. Oracle RAC LoadBalance

    LoadBalance 就是把负载平均的分配到集群中的各个节点,从而提高整体的吞吐能力. Oracle 10g RAC 提供了两种不同的方法来分散负载: 通过Connection Balancing, ...

随机推荐

  1. elasticsearch 路由文档到分片

    路由文档到分片 当你索引一个文档,它被存储在单独一个主分片上.Elasticsearch是如何知道文档属于哪个分片的呢?当你创建一个新文档,它是如何知道是应该存储在分片1还是分片2上的呢? 进程不能是 ...

  2. MySql Server 5.7的下载及安装详细步骤

    1.下载安装包 1)找到官网下载地址(https://dev.mysql.com),选择downloads,找到windows

  3. javaScript 变量提升 var let const,以及JS 的解析阶段和执行阶段

    我们先来看一道面试题,大家猜想一下,下面这段代码,打印出来的结果是什么 var name = 'World!'; (function () { if (typeof name === 'undefin ...

  4. laravel中通过查询构造器,实现数据的curd

    //查询构造器: public function query1(){ //利用查询构造器,插入数据: /*$num=DB::table('student')->insert( ['name'=& ...

  5. 玩转X-CTR100 l STM32F4 l W25Q64 SPI串行FLASH存储

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 板载FLA ...

  6. 2019.1.10 L223

    Heavy rains that brought additional pollution downstream last year contributed to the first decline ...

  7. anu - event

    import { document } from "./browser"; import { isFn, noop, options } from "./util&quo ...

  8. 基于Eclipse的Android开发环境搭建

    1.  Java开发环境搭建 1.1  JDK下载安装 JDK(Java Development Kit )是针对Java开发人员发布的软件开发工具包.JDK 是整个Java的核心,包括了Java运行 ...

  9. Gym - 101550A Artwork (并查集在线做法)

    题目链接 题意:给你一个n*m的网格图,初始时格点全白,每次可以将一段连续的格点涂黑.求出每次操作之后白色连通块的数量. 看了看网上的题解,基本全是离线的做法.其实这道题是有在线的做法的,利用了对偶图 ...

  10. ZOJ2067 经典 DP(单调队列优化)

    题目:一个由‘.’和‘#’组成矩形,统计里面'.'组成的矩形的个数. 点击打开链接 自己写挂了,懒得搞了 #include <stdio.h> #include <string.h& ...