跨中心的双活存储数据一致性如何保障?
一方面,当写入数据时,在复制过程中,数据传递是在缓存中进行的,这样做的好处是提升了性能,问题是当出现控制器节点异常宕机事件时,就会导致缓存内的数据不能写入存储中,从而造成数据的不一致,这时有没有保障单个存储数据一致性的措施?另外一方面,两个站点的存储之间的数据一致性,从缓存层、底层数据层又是如何保障的?
解析和解答
邓毓 某农信社资深骨干工程师
***个问题:前端节点写缓存与后端存储间的数据一致性如何保障?
存储跨中心双活中的单个存储架构分为三种:
1.物理存储的内部双控制器
比如V5000/V7000/V9000 HYPERSWAP,写存储的操作也就是写缓存的过程,写了一个控制器,控制器也会将缓存数据同步至另一控制器的缓存,只有当真正同步完,这次的写操作才算完成,当写缓存达到水位线后,会将写缓存刷入到磁盘组中,当一个控制器异常宕机时,IO HANG住一小段时间,另一控制器将接管,缓存数据也不会因此丢失,一致性得到保障;单控制器时,写缓存被禁止,之前的缓存被刷入后端存储,即使这时这个控制器也异常宕机,后端磁盘的数据完整性和一致性也得到了保障;如果不幸两个控制器的电源同时断电了,这时写缓存数据还未及时刷入磁盘组,不用怕,几乎所有存储都会考虑到这一点,都有专门的电池模块维持供电几分钟,保证缓存数据能够顺利落到磁盘组当中。
2.物理存储+存储虚拟化网关(有写缓存)
比如SVC ESC/HYPERSWAP,NETAPP MCC(叫写日志),这种架构也就是相当于在物理存储前端又加了一道控制器,也存在写缓存,相当于扩大了后端物理存储的缓存容量,写操作要先写入SVC节点,再同步至另一SVC节点,只有完全同步成功,才算做是一个完整的写周期,后面的操作也是等待写缓存达到水位线刷后端存储。佑了这种机制的保障,存储虚拟化网关的缓存与后端物理存储的数据完整性和一致性得到保障,无论是单SVC节点故障,另一节点缓存数据冗余,写缓存被禁止,所有缓存刷入后端存储,还是SVC的电源断电,SVC有专门的UPS供电模块保障写缓存及时刷入后端存储,都能完整的保障数据的完整性和一致性。这里不再赘述。
3.物理存储+存储虚拟化网关(无写缓存)
比如EMC VPLEX METRO,它只有读缓存,写缓存还是由后端的物理存储提供,所以该问题还是和前面说的类似的保障机制。
第二个问题:两个站点的双活存储间的数据一致性如何保障?
这里分两种方式来阐述这个问题:
1.一种是两个站点的主机识别的是相同的VOLUME
比如:SVC ESC、EMC VPLEX、HDS GAD等,两个站点的主机对这一个VOLUME写操作时,数据被刷入两个镜像的后端存储,这有两个存储都写完成返回,才算一个完整的缓存刷后端存储的写周期,这时两个存储从数据块角度来说,是一致的,一个站点或者存储故障,另一个站点的存储是可以接管,而不会造成数据丢失。
2.另一种是两个站点的主机识别的是不同的VOLUME
比如:SVC V7000/V5000 HYPERSWAP、NET APP MCC等,由于两个站点的主机识别的不是同一个VOLUME,必然存在存储或者存储虚拟化网关的VOLUME与VOLUME的同步复制技术,HYPERSWAP有METRO MIRROR,MCC有Syncmirror,它们的技术共同点是复制技术的一致性校验机制,更高级的有以多个卷为单位的卷组一致性校验机制,来保障跨站点的两个卷/卷组的一致性,在某站点所有控制器或者站点完全故障时,另一站点有完整的、一致的存储可以接管。