用ASM和iSCSI实现的另类HA方案

12 10th, 2009 | Posted by jacky | Filed under 大话技术

普通PC本地磁盘,没有共享存储,如何实现HA?Dataguard挺好,但是存在数据丢失的可能性,而且很难做到应用透明切换。我们用ASM,Heartbeat和iSCSI可以实现一个廉价的HA方案,如下图:

用iSCSI将本地磁盘输出到对方的机器上,利用ASM的failgroup做mirror,保证数据mirror在两台不同的机器上,就算一台机器完全损坏,数据可以做到百分之百不丢失。用Heartbeat作HA探测,如果发现主机故障,则强行关闭DB和ASM,并在备机启动ASM和DB。如果使用Oracle 11g R2,还可以利用Preferred mirror read的特性,保证主库读自己的本地磁盘,而不是通过iSCSI读备机磁盘,这样可以达到更好的性能。

缺点:Heartbeat作为HA软件,我们并不是十分了解其探测机制,可能出现误判或者无法切换的情况。但是其实IBM hacmp这种HA软件一样有问题,比如Oracle hang住时,现在的hacmp根本无法探测,因为hacmp只是判断Oracle的进程在不在,而不管数据库是否活着。

我想不管什么HA软件,都无法处理所有的异常情况,我们只要有完善的监控和应对措施就可以了。比如我们现在所有的DB都有一个监控,就是定时模拟应用去更新数据库中的数据,如果发现超时或者报错,就认为数据库出现hang的情况,并发出报警。

–EOF–

另:之前我有一篇文章介绍用ASM和iSCSI搭建RAC的文章,在实际测试过程中,发现存在一些问题,因为在11g R2之前,voting disk和OCR都必须放在RAW devices上。因为没有共享存储,如果发生某台机器全部宕机,voting disk可能会丢失一部分,造成RAC的cluster机制发生误判。所以在11g R2之前,这个方案是有问题的,在11g R2中,Oracle几乎所有的东西都可以放在ASM中,这个方案也许可行,我还没有测试过。

在我写完这篇博文后,发现这个方案存在一些问题,通过iscsi将online redo输出到另外一个主机后,log file sync的响应时间需要40-60ms,这个响应时间肯定是无法接受的。现在两台主机的互连是四块千兆网卡直连,通过Linux的Multipath来管理多路径,为什么响应时间这么久,我们还在进一步查找问题。

标签: ,
  1. P.Linux
    12 15th, 200916:23

    Oracle 10g r2我记得OCR可以放在OCFS2上的,不一定要RAW Device吧。
    会不会因为iSCSI本身速度很慢的问题?我在虚拟机里装GFS和GNBD的时候,用Multipath管理多路径,切换iSCSI的速度就很慢甚至有时候Failover不成功,搜索结果是要normal–>timeout–>failed–>restarable这个过程完成之后Multipath才能实现对线路的切换,因为iSCSI本身切换速度就慢,所以有时候不成功。

  2. wxf
    12 17th, 200915:22

    两台pc 做rac private net 中间用直连吗?

    如果用直连,其中一台机器异常了,网卡不能访问了.
    会引起另一台正常机器的网卡感应不到网络也变成无连接, Heartbeat在这台正常机器上将可能无法工作.
    你是怎么Heartbeat的?

  3. jacky
    12 18th, 200916:41

    这不是RAC,heartbeat是linux下的HA软件。

  4. jacky
    12 18th, 200921:43

    现在还是主要怀疑问题出在multipath上。

  5. Obuntu
    12 19th, 200920:09

    楼主,http://www.hellodba.com是不是也属于你的站呀。。

  6. jacky
    12 19th, 200922:41

    hellodba.com是另一位DBA

  7. 冬瓜头
    1 6th, 201123:08

    原因找到了么?

  8. 沈询
    3 21st, 201123:14

    看性能需求,ha这个 我觉得基于现有db也可以做到对业务保证的不丢,就是需要对db进行再设计。
    我倒是有信心做到ha,就是我cpp都还给老师了。。现在得从新拿起来,有些关键的东西没办法很快掌握的像java一样熟练。。

  9. liee
    3 29th, 201218:50

    性能问题解决了么?我用一台emc的存储,linux5.5的操作系统,两个网卡连接一台存储的两个控制器,用multipath做多路径负载均衡。path_grouping_policy 选择multibus模式下,如果一条链路中断,另一个网卡的数据流也断了。等2-3分钟。这个和你的有些类似吧。