- 论坛徽章:
- 0
|
我的一点看法:
我是做售前的,对技术细节没有深入了解,以下观点未必正确,请大家指正。
1.基于阵列的同步模式远程复制是能够保证数据一致性的,至于数据是在阵列Cache还是写入了Disk没有什么关系;在数据库Cache中的数据不一致是由数据库自己的log机制负责的,和阵列没有关系;
2.在异步模式下比较复杂
1).异步模式丢数据很正常,但是需要保证2个事情,a.链路中断后已传输的数据始终是一致的,b.链路恢复后续传的数据也是一致的(当链路再次中断仍然能够保持正确)
2)大多数阵列异步模式的实现方法:在Cache中建立IO队列(可能有timestamp),在多个磁盘卷之间建立一致性组(包括数据库的数据文件、日志文件等),这样基本都能满足a.的需求
3)问题是阵列Cache大小有限,当链路速度太慢或者长时间中断时,Cache队列溢出了,有些阵列只能放弃复制,等链路恢复后重新来过(所有源数据再拷贝一次),有些阵列放弃队列模式,改用Bitmap模式,在链路恢复后先按照Bitmap复制,完成后再回到正常的队列模式,这两种阵列都不能满足b.的需求。在容灾系统规划中就是“二次容灾问题”,当第一次灾难结束/链路恢复后,如果在数据没有完全同步时再来一次灾难,那么远端数据就是不一致的,容灾就白做了(仅指阵列层面),所以在第一次链路恢复后,不能立刻同步数据,而是先把远端的数据做一个本地复制(Shadowimage之类),然后再同步,即使再次发生灾难,至少远端还有一份老一点的数据。关键它是"一致的",可以用来恢复应用;
4)在高端磁盘阵列中(其实真正的高端也就HDS USP和EMC,加HP OEM的XP),USP/XP有3种复制模式:“同步”,“异步”,“日志异步”。日志异步就是在阵列中专门配置一个RAID组用于存放IO日志(带Timestamp),这样在链路中断时可以继续记录IO队列(RAID组可以保存TB级的数据,Cache是GB级的),因此可以满足b.的需求。还有一些其他的好处,日志异步方式是由远端主动到本地读取日志的“拉”模式,而不是本地发送到远端的“推”模式,这样本地阵列在复制中始终是被动的,负载较小,而且链路中断时也不需要操心,链路恢复后由远端来“拉”即可;另外日志模式可以容易实现1点对多点的容灾,1个本地阵列可以复制到多台远端阵列
5)在中端阵列中(EMC CX, HP EVA, IBM/SUN/ DS, Netapp FAS),我只知道EVA的异步复制是日志模式的,称作"WHL"(Write History Log),因为EVA的磁盘空间是划分是自动分配的,所以阵列上没有专门的日志盘,所有空闲的磁盘空间都可以拿来做日志,无需管理员干预,所以EVA基本也可以满足二次容灾的需求。
6)综上所述,异步有“Cache队列Timestamp+磁盘Bitmap”,“磁盘写日志”2中模式,后面一种可以始终保持数据一致性
3.顺便说句和存储无关的题外话
在容灾中要求保证一致性其实有很多层面的方法,阵列是其中一个层次,还需要其它层面的配合
1)业务流程,例如每个业务操作都留有凭证,即使数据库中丢了数据也能再输进去
2)应用软件,在写数据库之前先做一个log并传到异地
3)数据库、操作系统/文件系统层面的日志/回滚技术
4)最低层,最简单的是阵列复制层面的
[ 本帖最后由 ffaatt 于 2009-6-4 18:46 编辑 ] |
|