Oracle+Fusionio+Dataguard的高可用方案

5 30th, 2011 | Posted by jacky | Filed under 大话技术

传统的Oracle的高可用方案必须基于共享存储设备,不管是双机主备模式,还是Oracle RAC,数据库必须放在共享的SAN存储上,通过HA或集群软件实现高可用。Oracle DataGuard是很好的容灾软件,但是作为HA解决方案,功能有很多局限性,比如数据丢失,应用透明切换,只能读无法写(11g)等等,目前都没有非常好的解决方案。

自从固态存储技术出现后,单机的IO能力大幅度提升,比如采用PCIE接口的fusionio卡,单块卡就可以提供数万IOPS的能力,单机的IO能力已经超过了传统的磁盘存储。但是,一直困扰我们的是,如何解决无共享存储环境下Oracle数据库的高可用问题?我们团队设计了一种架构,提供简单可靠的高可用功能。

Oracle+fusionio+DataGuard的高可用解决方案

方案简述:利用fusionio卡的强大的IO能力,取代传统存储设备,双机采用DataGuard复制,将主库的controlfile和redo放在一套共享的存储设备上。当主机发生故障时,利用共享存储上的controlfile和redofile将standby数据库恢复到一致状态。

硬件:DELL R710,48G mem,Fusionio ioDrive 320G(数据文件),6×300G SAS RAID10(归档文件)。

存储:SAN存储,存放主库的controlfile与redofile,与其他数据库共用,性能与空间要求不高。

软件:Veritas Cluster Service,提供HA功能,自定义切换脚本。

切换步骤

1.关闭standby;

2.指向共享存储上主库的redofile和controlfile;

3.mount standby;

4.recover database;

5.open database。

优点

1.零数据丢失;

2.简单,可靠;

3.应用透明切换;

4.对存储性能要求不高;

5.适合读多写少应用,提升读性能。

缺点

1.依然需要共享存储,但是可以与其他系统共用;

2.切换时间依赖standby恢复时间,必须保证standby恢复的进度;

3.共享的redofile可能会成为写入瓶颈,最好使用配置write cache的存储。

改进计划

1.实现类似switchover的功能,主备互相切换,无需人工干预;

2.本地fusionio空间不足时,可以将部分数据放在共享存储上,实现混合存储。

–EOF–

目前,这个方案已经通过初步验证,进入方案完善阶段。如果有兴趣,可以与我一起探讨,并不断改进。

标签: ,
  1. 呆呆虫
    6 12th, 201110:51

    您好,想请教你一下,你们在使用mysql的过程中,master和slave的切换过程中可能会出现丢数据的情况,你们是怎么来补偿丢失的数据的呢?
    有没有考虑过使用像semisynchronous replication这样的补丁来减少丢失数据的量呢?

  2. ASE
    7 13th, 201119:39

    这套方案的切入点实际不是Fusionio而是san存放controlfile和一组redo吧…

  3. parameters
    9 19th, 201114:02

    共享上的控制文件和redo如果在正常时只对primary 可见,故障时自动对 standby 可见就可以省去更改控制文件指向一步;standby 和 primary 中的 数据库文件的位置应该一致;这样可以省去 重建控制文件一步,而直接恢复;
    脚本应该能自动恢复和切换吧;
    仅仅猜测一下大师的做法啊;以前见过 sybase 的类似的配置;
    期待大师的详解;