jxnxsdengyu
作者jxnxsdengyu课题专家组·2017-11-03 09:45
系统工程师·江西农信

核心系统存储双活三大难点解读

字数 2461阅读 7312评论 2赞 15

核心系统是企业最为重要的系统,尤其是金融行业,它是金融企业的生命线, 一旦信息科技风险越过了这条底线,企业的整个金融信息系统将全面瘫痪,后果不堪设想。所以为了牢牢守护住这条命脉,企业一直在不断的寻求更好的技术和更优的解决方案,来对核心系统的优化之路进行探索,这其中之一便是核心系统存储双活优化。传统的核心系统存储都是采用集中式存储,通过搭建两地三中心的存储架构来防范核心系统数据的物理性错误,并通过数据备份来防范数据的逻辑错误。然而目前的两地三中心存储架构为主备架构,一来如果主存储发生故障,必然需要进行存储主备切换,由于核心系统数据量巨大,切换时间漫长,即使成 功切换之后 RPO=0,RTO 也不少于 10 分钟;二来虽然备存储实时存在一份和主存储一样的数据副本,但是这份副本长时间不对外提供读写服务,资源使用率低倒也无所谓,这份副本能否在切换之后正常使用,是需要打一个大大的问号。所以企业每年都会定期进行灾难演练,也可能是出于对这份备副本的“不放心”。 基于这两点,核心系统是有需要进行分布式双活架构的转型,来尽量降低故障带来的影响,满足 RPO=0,RTO小于 1 分钟的要求,而转型的最关键一步便是存储双活。虽然存储双活技术方案层出不穷,几乎所有主流的存储厂商都有一套甚至多套存储双活技术解决方案,但基于核心系统的重要地位和独特的特征,存储双 活技术的真正落地实现还是存在着诸多难点,下面对其中三个核心难点一一剖析:

首先最“突出”的难点就是性能影响问题。传统的集中式主备存储架构,在主存储写入数据时,需要将数据同步一份至备存储,完成后算是一次完整的写周期;而双活存储架构则不一样,两个存储虽然都同时受理写请求,也会将写入的数据同步一份至另一端,但关键点在于两个存储并不同时对同一个存储块写操作,也就是说写同一个数据块时,抢占成功的存储会对该存储块加一道“锁”,防止被另一端写,另一端想要读该数据块,也得乖乖等数据同步完成之后才能进行,所以这样看来,双活存储虽然物理上实现了双活读写,但实际的读写性能上,由于存在着大量的“等待锁释放”和“数据同步完成”两个动作,造成了性能的影响,这个影响面跟什么有关系呢?第一个动作取决于写操作的频繁度,也就是写IOPS,写 IOPS 越高,锁竞争现象越严重;第二个动作取决于两个存储间的距离和存储缓存的大小,距离越远,写同步往返延时越高,存储缓存越小,写缓存延 迟现象的比例越高。然而核心系统正是由于业务集中度和并发度高,对读写响应时间也特别严格,特别是对流水表的写入操作,如果两个存储都同时承担着高并发地对这些集中式的数据表读写的任务,那造成的锁竞争现象将更加严重,再加上本身两个存储间距离原因导致的延时,性能影响将成倍放大,轻者业务处理缓慢,重则核心系统直接瘫痪,核心系统如果难以破解该难点,也将无法使用存储双活技术。

其次最具“风险”的难点就是脑裂与链路隐患问题。一方面,在传统主备存储架构中,由于两个存储间的关联是松耦合的关系,存储与存储间心跳探测也只是为了保证数据同步,心跳链路中断也只是数据复制中断而已,并不会造成实质的存储切换等动作,最多会因为中断,造成主存储的 IO 短暂HANG住,对业务也几乎无感知。然而倘若升级为存储双活架构,由于整个架构呈现的是一种对称式的架构,两个存储都是作为主存储,必然需要一个第三方的仲裁设备,在存储间链路中断时,来投票选举出存活的主存储,不至于因两个存储互相争抢主动权,而造成两败俱伤的惨烈局面。然而问题就在于此,当发生脑裂现象时,仲裁之后存储恢复时间需要多久?这个时间取决于投票表决的时间和竞选失败的存储前一刻的 IO 吞吐量,因为竞选成功的存储需要将这部分 IO 回退来保证业务数据的一致性,而核心系统存储的 IO 吞吐量无疑是非常大的,尤其是在晚间批量时,这也将意味着当发生链路中断,为了防范脑裂,需要将整个存储 IO HANG 住,并且这个 HANG 住的时间也因为是核心系统变得更长。而矛盾点却在于,核心系统是最重要的系统,对业务连续性的要求比任何业务系统都要高上一大截,链路中断造成的 RTO 太长将无法接受,更令人恐怖的是,如果此时正处晚间核心系统批量,那第二天白天还能否开业就真的是一个问号了,所以换句话说,建设核心系统存储双活需要保证高可靠的链路,无论这个链路是本地还是跨中心的,只有这个最重要的前提条件具备了,才能开始着手存储双活;另一方面,如果双活存储间的链路是跨中心的,还需要考虑链路的稳定性问题。由于这个链路通常是租用运营商的裸光纤,光衰问题和抖动问题也是目前无法解决的难点,一旦发生于核心系统,性能受影响不说,如果因此触发脑裂仲裁,造成 IO HANG 住,又是一场全局性的灾难,所以核心系统上跨中心的存储双活更是难上加难。

最后最具“考验”的难点就是存储架构转型过程问题。如果前面两道鬼门关要么因自身企业核心系统 IO 压力不大,业务连续性要求不高而“ 不太在乎”,要么靠着过软硬件技术而“化险为夷”,那在将传统存储高可用架构转型为双活存储架构时,依旧存在些许技术难点的考验。表现为:在存储双活技术选型时,该技术是否为真正的存储双活?而不是备存储将 IO 转发至主存储的模式,该技术的成熟度和稳定性如何?是否能够保护原有存储投资?能否支持两地三中心扩展等等;在存储双活实施过程中,巨量的核心系统数据如何快速同步到另一份存储副本?完成同步之后的两个存储副本以怎样的方式挂载给多台核心系统主机?是两个副本再虚拟成一个卷共享给主机还是分别挂给不同的主机?实施时,是否需要停止核心系统,停机窗口如何安排等等;在存储双活运维时,如何实时监控存储双活的性能状况,遇到紧急存储故障或者链路波动时,应急措施是怎样的,是否需要人工干预,需要人工干预时,采取哪些应急解决办法等等。以上问题一个个接踵而至,都是在转型存储双活架构时,需要事先进行周全缜密的考虑, 只有通过了这层“考验”,方能大胆放心的着手核心系统存储双活优化。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

15

添加新评论2 条评论

wuwenpinwuwenpin软件开发工程师南京
2017-11-03 21:37
学习了。
thomas_lhbthomas_lhb联盟成员系统工程师eccom
2017-11-03 21:22
最近在某行做个主生产中心存储双活,oracle ADG到同城,存储异步复制到异地,感觉效果不错。一是同城链路较远,抖动比较频繁,这种架构对链路抖动相对不敏感,二是机房级灾难相对发生频率少,主机房高可用发生频率反而高些,三是存储加数据库复制保护也比较全面。

jxnxsdengyu@thomas_lhb 存储的ACTIVE-STANDBY或者ACTIVE-QUERY架构各个方面都是不错的,这也是大多数企业选择的方式,存储跨中心双活落地目前还是很难的,需要考虑的因素太多,风险也大。不过存储双活放到一个机房倒是一个选择

2017-11-04 11:50
Ctrl+Enter 发表

本文隶属于专栏

最佳实践
不同的领域,都有先行者,实践者,用他们的最佳实践来加速更多企业的建设项目落地。

作者其他文章

相关文章

相关问题

相关资料

X社区推广