guwenkuan
作者guwenkuan2020-09-05 21:14
系统架构师, 金融

城商行双活如何通过存储仲裁的合理配置规避“脑裂”问题探讨

字数 19848阅读 2650评论 0赞 1

存储双活更是双活数据中心建设的基石。而存储双活方案设计过程中,首要关注的风险是“脑裂”风险。集群分裂会导致“脑裂”,从而使得集群节点间的协调机制失效,进而发生互相资源争抢的情况。而对于双活存储的“脑裂”来说,一般可分为两种情况:一是存储系统本身出现异常,比如心跳响应异常等情况,进而导致存储节点互相争抢接管权;另外一种是双活存储间的心跳链路故障,导致存储节点无法获知对方节点状态。双活存储“脑裂”会造成非常严重的后果,会导致存储读写IO挂起,进一步会导致应用、数据库以及操作系统磁盘IO超时或挂起,从而给生产系统造成重大影响。而最有效地规避双活存储“脑裂”风险的措施就是引入仲裁机制。
twt社区平台组织了一场同行的线上交流,来自十多家城商行和金融行业专家一起参与探讨交流,交流探讨话题如下,希望给大家同行带来启发以及帮助。

1、针对目前主流的一些存储双活方案中,分别有哪些存储仲裁机制来规避双活存储“脑裂”风险?

针对目前主流的一些存储双活方案中,分别有哪些存储仲裁机制来规避双活存储“脑裂”风险?各种存储仲裁方案优劣对比?

回复:guwenkuan  系统架构师 , 金融
主流双活存储基本就两种模式,仲裁服务器和静态优先,一般情况下采取仲裁服务器和静态优先并存模式,仲裁服务器为主,当仲裁服务器宕机后,启用静态优先模式。

回复:yfwang  SE , 戴尔科技金融行业解决方案中心
一般就是两类:
1、 一类是静态式仲裁,通过在存储内部设定“优胜者”来实现,优势是不需要外置仲裁装置,不需要仲裁网络,劣势是在某些故障场景下,会业务中断,比如“优胜者”存储失败的的时候,但是不会发生脑裂。
2、 另外一类是外置仲裁机制,一般又包括两种,一种是虚拟机监控程序,比如 vplex 的 witness ,另外一种是基于仲裁盘的仲裁机制,比如 hds 的双活仲裁。这类仲裁的优势比第一类方式的系统连续性好,劣势是需要准备单独的服务器或者存储,以及仲裁需要的网络连接。
不管那类仲裁,正常情况下都可以预防脑裂的出现,当然从业务连续性的角度来看,外置仲裁的方式更优一些,具体采用监控程序还是仲裁盘的方式,可根据实际情况和现有环境来定,如果采用外置式的一般要求部署在第三个故障域,且对仲裁网络有一些要求,相比而言,监控程序的方式部署更简单一些,对实施条件要求低一些,也是未来的发展方向。

回复:邓毓  系统工程师 , 江西农信
在存储双活方案,防范脑裂通用的做法就是使用仲裁机制,在第三站点放置仲裁服务器或者仲裁存储阵列。通常有以下三种方式:一是优先级站点方式。这种方式最简单,在没有第三方站点的情况下使用,从两个站点中选一个优先站点,发生脑裂后优先站点仲裁成功。但如集群发生脑裂后,优先站点也发生故障,则会导致业务中断,因此这种方案并非推荐的方案;二是软件仲裁方式。这种方式应用比较普遍,采用专门的仲裁软件来实现,仲裁软件放在第三站点,可以跑在物理服务器或虚拟机上,甚至可以部署到公有云上;三是阵列仲裁盘方式。这种方式是在第三站点采用另外一台阵列创建仲裁盘。这种方式稳定性,可靠性比较高。

2、双活存储在仲裁规则的配置上,如何协调好双活数据库的仲裁规则,从而保证两者的仲裁结果一致?

回复:guwenkuan  系统架构师 , 金融

这个不太好保障,我们在使用VPLEX 双活存储架构时模拟过此问题,当存储出现脑裂情况下,优先站点数据库能够访问存储,另外一个站点直接被存储offline,优先站点数据库是online状态。

回复:yfwang  SE , 戴尔科技金融行业解决方案中心
以Oracle RAC为例,数据库一般有两个仲裁规则,一个是数据库节点之间的心跳,一个与存储之间的心跳,实际实施时,一般需要把这两个仲裁等待时间设置的比存储仲裁的等待时间长一些,当存储复制链路发生中断时,先让存储仲裁哪边活,仲裁完之后另外一台存储由于停止了对外服务,所以连接它的数据库将丢失存储,数据库存储仲裁机制生效,连在存活的存储之上的数据库继续服务,另一端被踢出集群,实现仲裁结果的一致性。
同时,我们一般建议有条件的话,复制链路最好有单独的交换机,不要和生产主机共用交换机,这时最佳实践指导。

3、基于存储网关和存储引擎的优缺点以及价值?

1)基于存储网关和基于存储引擎,两种存储双活实现方式的区别和优劣势是?

2)在存储引擎本身支持双活的情况下,使用类似VPLEX的网关型存储双活的必要性和方案价值是什么?

回复:cpc1989  存储工程师 , 某保险公司
1.存储网关方式:
优势是主要通过网关层来实现异构存储的一致管理,赋予后端存储存储双活等高级别的管理功能 ,也可以简化异构存储的管理。
劣势在于增加了网关的管理成本,整个架构中,网关的地位的重要性和稳定性也会变得尤为突出。
存储引擎方式:
优势是同构存储管理上更为简单,缺点是存储方案选择余地较少。
2. 在存储引擎本身支持双活 的情况下,VPLEX网关的最大价值就是纳管异构存储,简化异构存储管理,消除存储孤岛,自身稳定性也足够高。

回复:guwenkuan  系统架构师 , 金融
EMC Vplex存储双活方案是基于Vplex网关产品实现,能够将EMC和其他厂商存储异构整合,虚拟化为统一的存储资源池,实现异构存储双活。Vplex双活方案有Vplex Metro和Vplex Geo两种方案,方案由两个站点的两套Vplex集群系统组成,每个站点的Vplex集群都有自己专属的本地存储阵列,通过创建分布式镜像卷为跨集群的镜像卷,提供Vplex Access Anywhere功能,两个站点的Vplex集群各有一个卷,两个卷的ID一样。
Vplex Metro双活方案主机跨集群连接组网架构。主机与Vplex集群间访问、Vplex集群与后端存储数据传输、Vplex集群间通信网络全部隔离.
后续再补充 基于存储引擎方案,以及补充使用类似VPLEX的网关型存储双活的必要性和方案价值是什么?

回复:skey_deng  系统运维工程师 , 某农商业银行股份有限公司
第一问的回答:
1、存储网关的优势在于利旧设备或者多品牌设备的兼容使用(最主要的优势)。
2、同时适合保持本地冗余性的增强,在EMC的vplex metro双活架构中,使用VPlex后,本地可以使用local mirror保证数据的双副本或者多副本,而又可以通过vplex metro保证双活(多点多活)。但是srdf的方案中,本地无法使用local mirror功能保证双副本或者多副本,仅仅能保证双中心的数据副本(就是无法使用三台存储做零延迟的数据同步)。简单的说就是用了VPlex,那么我本地可以用多台存储做副本,数据安全性上来了,但是设备用的多,如果不用vplex,那么用的设备少,数据安全性相对较低,受跨中心光纤链路传输影响较大。
3、数据迁移的时候,使用VPlex的话,其迁移难度比较低,安全性较高,但是如果不适用VPLex,那么数据迁移的难度相应就有所提升,安全性也相对降低,尤其是异构存储的数据迁移,影响更大,基本都涉及业务割接。
4、使用VPlex的话,增加了存储链路的复杂性,多了故障节点,而且目前看VPLEX很容易成为性能瓶颈,造成存储的高性能无法更好发挥。
5、双活时,使用VPlex的双活理论上不需要手动切割,但是SRDF需要手动执行,当然也可以通过一些设置实现自动切割,手动切割和自动切割各有利弊,看业务及设计的合理性。

第二问的回答:
个人认为SRDF的方案是一种趋势,华为,日历,EMC都开始推这种双活方案,一方面节省成本,一方面降低运维难度。
1、减少了网关设备,采购成本降低;减少了节点,运维复杂度降低,运维成本也降低。
2、因为当前的存储其安全性也来越高,缓存越来越大,数据丢失的风险越来越小(不包括逻辑错误导致的数据丢失),而且我们为了防范数据的逻辑丢失,必然会使用一些诸如ORACLE ADG技术等进行保障,因此本中心多副本需求的必要性会降低,SRDF的双活结构是符合当前发展的。
3、如果行内存在多个品牌,多种档次的存储,那么用VPlex还是较为划算的,否则多厂家的多种双活方案也是很令人头疼的。

回复:yfwang  SE , 戴尔科技金融行业解决方案中心
网关型:
优势:可以支持异构平台;可以聚合容量;可实现多点多活;提供单独的计算资源
劣势:需要增加硬件;管理复杂度

存储型
优势:实施、管理、维护更加简单;消除虚拟层对性能的影响;实施更加简单;
劣势:一般不支持异构;一般只支持两点双活;需要同品牌同型号
VPLEX 作为网关型双活方案,其价值在于可以搭建一个存储无关的双活平台,这个平台可以给用户带来的好处主要有:
1、 增加用户在存储选型上的灵活性;
2、 平台搭好以后,只要有双活需求的存储,直接挂载到 vplex 的环境中即可实现,简单简便;
3、 Vplex 下面的存储的维护、升级、更新换代甚至意外宕机都不会影响主机的正常工作,可以大大提升业务连续性。

回复:bbaimm88  系统架构师 , 银行
带网关方案的横向扩展能力更强,可以整合异构存储。后端存储维护时候主机几乎几乎无感知。维护更加方便安全。

回复:刘文  系统工程师 , CMBC
基于存储网关双活:可以接入异构存储品牌,网关可以复用,对外统一访问,工作量集中在存储底层,对于上层的改造小。缺点是增加了网关层,也就增加了底层链路节点和复杂性。
基于存储引擎:由存储本身集成双活特性,兼容性好,运维难度小。缺点是不能统一纳管异构存储,对外形成统一访问入口。

4、VPLEX Metro同城存储双活方案下的异地扩展方案有哪些实现方式?

回复:邓毓  系统工程师 , 江西农信
Vplex 的两地三中心扩展方案有两种实现方式,第一种是借助 EMC RecoverPoint 设备实现。在 Vplex Metro 双活 +CDP 方案中, Vplex 接受到主机写 I/O 之后,同时写入两个数据中心的存储。此外 Vplex 内部集成 I/O 分流软件, Vplex 将每个主机写 I/O 同步复制到 RecoverPoint 。 RecoverPoint 将每个 I/O 记录下来,采用 CDP 实现任意时间点恢复,如下图 1 所示。在该方案之上还可进阶实现 3DC 方案:站点 2 的 RecoverPoint 通过异步复制将 I/O 复制到站点 3 部署的 RecoverPoint 设备,站点 2 的 RecoverPoint 都将每个 IO 记录下来,实现任意时间点恢复,站点 3 的 RecoverPoint 设备异步记录从站点 2 RecoverPoint 设备传输过来得 I/O ,并落地至后端的存储阵列。站点 2/3 的 RecoverPoint 设备对接的存储需要能够支持 RecoverPoint ,可以是 Vplex Local 集群,也可以是存储阵列,如下图 2 和 3 所示。由 EMC RecoverPoint 、 VPLEX Local (或存储阵列)和 Metro 组成的三个站点拓扑将减少主站点或存储阵列故障相关的停机时间,同时能够快速从应用程序数据损坏、病毒或人为错误中恢复,即具备物理和逻辑性错误的双重防范能力。如果丢失多个 VPLEX 站点或虚拟卷的逻辑损坏,可以通过第三方软件集成 , 自动恢复远程站点(第三站点)到虚拟卷的一致时间点。

图 1 Vplex Metro + RecoverPoint CDP

图 2 Vplex Metro to Vplex Local

图 3 Vplex Metro to Array-based Splitter
第二种是在 Vplex Metro 的基础上,借助 EMC 存储自身的复制技术实现 3DC 方案,即 Vplex Metro+EMC SRDF/A 方案,如下图所示,主站点和同城灾备站点为双活,主站点 Vplex 集群的底层存储为 EMC 存储(需具备 SRDF 复制许可),通过 SRDF 异步将数据传输至异地灾备站点后端的 EMC 存储(也需具备 SRDF 复制许可),实现数据级异地灾备。

回复: yfwang  SE , 戴尔科技金融行业解决方案中心
在存储层面主要有两种方式:
1、 基于底层存储实现异地异步复制,比如 SRDF ,或者 HUR 之类的,优点是简单,缺点是要求同存储平台,不能跨异构,且复制链路要求较高。
2、 基于 Recoverpoint 实现异步复制,两个 site 都部署 Recoverpoint ,通过 RP 来实现数据复制,优势包括:可实现三点环形复制方案;异地端存储可以异构;复制链路要求低,劣势是需要部署 Recoverpoint 硬件。
当然也可以考虑应用层面的方案,比如 Oracle 的 DG 或者 GG , vplex 不影响这些方案实施。

5、详细介绍下VPLEX Metro存储双活方案下的读写I/O流程和步骤?

回复:guwenkuan  系统架构师 , 金融
分布式一致性缓存技术:EMC Vplex是一个集群系统,提供分布式缓存一致性保证,能够将两个或多个Vplex的缓存进行统一管理,从而使主机访问到一个整体的缓存系统。当主机向Vplex的一个缓存区域写I/O时,Vplex缓存将锁定这个缓存区域,同一时刻其他主机是无法向这个缓存区域写入I/O的。但是,当主机读取I/O时,Vplex缓存允许多个主机访问一个缓存区域,尤其是主机访问其他Vplex集群中其他Vplex节点所管理的数据时,统一缓存管理会将这个I/O的具体缓存位置告知主机,主机直接跨Vplex集群访问。分布式一致性缓存技术在实现上面,并没有强求所有的Cache都保持统一,而是基于卷缓存目录的形式来跟踪细小的内存块,并通过锁的粒度来保证数据一致性。每个引擎的cache分为本地Cache(Cache Local)和全局Cache(Cache Global),每引擎的本地Cache只有26GB,其余为全局Cache。
分布式缓存模式:Vplex Local和Vplex Metro采用了写直通缓存模式,当Vplex集群的虚拟卷接收到了主机的写请求时,写I/O直接透写到该卷映射的后端存储LUN(Vplex Metro包含两套后端存储LUN)中,后端阵列确认写I/O完成后,Vplex将返回确认信号至主机,完成本次写I/O周期。写直通缓存模式需要等待后端存储阵列落盘完成,对写I/O时延要求较高。这种写直通缓存模式并适合Vplex Geo方案,该方案最大支持50ms的跨站点往返延迟,采用该缓存模式将对主机产生非常大的性能影响,对于大多数应用而言显然是无法接受的。因此,Vplex Geo采用了回写缓存模式,在该模式下,Vplex收到了主机的写请求后,直接写入引擎控制器的缓存,并将写I/O镜像至引擎另一个控制器和另一套Vplex集群的引擎控制器的内存中,然后向主机确认本次写I/O周期。最后再将数据异步转储到引擎后端的存储阵列中。当出现电源故障时,Vplex引擎自带的备用电源能够保证缓存中的所有未持久化的数据暂存到本地SSD存储上。回写缓存模式无需等待后端存储阵列落盘,即可回响应主机,大幅提升了Vplex双活方案的距离和时延要求。

回复:邓毓  系统工程师 , 江西农信
1 、读 I/O : EMC Vplex 具有读缓存,可以通过写 I/O 的独特机制,实现读 I/O 的加速。 Vplex Local/Metro/Geo 架构的读 I/O 流程如下:
( 1 )读 I/O 的时候先读 Local Cache ,如命中则直接读取,相较于直接读后端存储阵列,内存较机械硬盘的读取性能有着显著提升,因此,从 Cache 内存中直接命中读 I/O ,将大幅提升读 I/O 性能;
( 2 )如果没有命中 Local Cache ,将继续在 Global Cache 中查找,如果命中,则从对应的 Vplex 引擎 Cache 中将其读取到 Local Cache ,因此,两引擎的 VplexMetro/Geo 架构存在 1 倍的跨站点往返时延;
( 3 )如果在 Global Cache 中没有命中,则从本地后端的存储阵列中读取到 Local Cache 中,并同时修改 Local 和 Global Cache 中的信息与索引信息(表明其他引擎可以从该引擎 Cache 读取数据),本次读 I/O 加速无效果。
( 4 )无论有没有命中 Cache ,最后都将反馈主机读 I/O 结果,本次读 I/O 周期结束。从整个读 I/O 流程可以看出,相较于常见的后端存储直接读取,由于读 Cache 的存在,对读 I/O 性能的提升是有积极意义的,命中 Local Cache 将提升数倍读响应时间,没有命中 Local Cache 几乎和直接后端存储读取性能一致,在实际联机型应用读写比例大致为 7 : 3 的情况下,提升读 I/O 的效果是显而易见的。
2、 写 I/O : EMC Vplex 同样也具备“写缓存”, Vplex Metro 没有真实的“写缓存”,实际上是读缓存,用于加速读 I/O ,模式采用的是写直通缓存; Vplex Geo 具有真实的写缓存,模式采用的是回写缓存。其中 Vplex Metro 写 I/O 流程如下图所示:

Vplex Metro/Geo 的写 I/O 步骤如下:

(1) 写 I/O 时先判断是否在 Local 、 Global Cache 中有对应的旧数据,如果没有,则直接写入本地 Local Cache ;

(2) 如果有旧数据,需先废除旧数据再写入 Local Cache 。若通过 Global Cache 查询到 旧数据存在于其他站点 Vplex 引擎中,则需要跨数据中心查询和废除旧数据,通讯具有 1 倍的跨站点往返时延;

(3) 写入 Local Cache 后, Vplex Metro 和 Geo 的处理方式有所区别, Vplex Metro 通过写直通缓存模式将写 I/O 刷入两套后端存储阵列,刷入跨站点的后端存储将引入 1 倍的跨站点往返时延;而 Vplex Geo 通过回写缓存模式将写 I/O 写入引擎控制器的缓存,并异步镜像至另一套 Vplex 集群的引擎控制器的写 Cache 中;

(4) Vplex Metro 待两套存储全部写反馈完成,最后将反馈主机写 I/O 周期完成,同时 Global Cache 中的索引做相应修改,并在所有引擎上共享该信息,实现分布式缓存一致性;而 Vplex Geo 在镜像异步写发起后,直接反馈主机写I/O 周期完成,并待两个引擎的 Cache 达到高水位后刷入后端存储。

从整个写 I/O 流程可以看出, Vplex Metro 为了加速读 I/O ,引入了读 Cache ,为了保证读 I/O 的数据一致性( AccessAnyWhere ),又引入了 Global Cache ,造成写 I/O 必须要查询本地和其他引擎的 Local Cache 是否有旧数据,以及时废弃旧数据,更新和同步所有引擎的 Global Cache 。这样的机制原理势必牺牲了一定的写 I/O 性能,相较于后端存储直接写,引入了两倍的 RTT 和更新同步 Local 、 Global Cache 过程的时延。其应用场景更适合于查询比例远高于更新比例的联机型应用。

回复:yfwang  SE , 戴尔科技金融行业解决方案中心
补充两点:
1、现在vplex GEO模式已经没有了,也就是缓存只有透写模式,没有回写模式了。
2、虽然vplex的透写机制会造成写I/O的延时,但是这个延时和双活复制链路延时比起来,基本可以忽略,加上一般数据交易业务都是读多写少,所以实际对整体性能影响不大
3、如果一个业务是写I/O密集型的,理论上都不建议部署双活方案,甚至不建议部署同步复制方案,对性能的影响比较大,不管是谁家的方案,一般可以考虑异步方案。

6、VPLEX方案下的故障场景和故障转移机制有哪些?

回复:邓毓  系统工程师 , 江西农信
EMC Vplex 同样具备两种仲裁规则,第一种是分离规则,在没有第三仲裁节点时选用,通过预定义两个 Vplex 集群间链路中断后 I/O 一致性组的处理方式来实现防脑裂目的。第二种是 Vplex Witness ,通过整合 Witness 自身的观察与集群定期向 Witness 的报告信息,来区分判断是集群内故障还是集群间链路故障。但该仲裁方式无法和分离规则并用,只能在分离规则设置为“无自动优胜者”时,才能生效。
在以下单 / 多故障场景中, C1 和 C2 为两个双活的 Vplex 集群, W 为 Witness 节点,存在有以下 15 种通用的故障场景:( 1 )当 Witness 节点故障时, C1 和 C2 两个 Vplex 集群能够持续提供读写服务;( 2/3 )当单个 Vplex 集群出现故障时, Witness 将进行脑裂仲裁,选举正常的 Vplex 集群为存活集群,存活集群所在站点的主机通过 PowerPath 多路软件配置的 ACTIVE/PASSIVE 路径,访问本地 Vplex 集群,而非存活端的主机则切换跨站点 PASSIVE 路径为 ACTIVE 路径,访问远端存储的 Vplex 集群;( 4/5 )当 Witness 节点和单个 Vplex 集群同时故障时,发生脑裂同时也没有第三方仲裁,所以将读写 I/O 挂起,所有集群读写将全部中断;( 6 )当两个集群间的链路中断时, Witness 将介入仲裁,获胜的 Vplex 集群将继续提供读写服务,且只有该存活集群所在站点的主机能够读写访问,远端主机无法切换多路径跨站点读写;( 7/8 )当任意一个 Vplex 集群与 Witness 节点间的链路发生中断时,两个 Vplex 集群间可以相互通信,无任何读写中断,两个集群继续提供读写服务;( 9/10 )当两个集群间、单个集群到 Witness 节点间的链路同时中断时,发生脑裂现象,但 Witness 节点可以与另一集群正常通讯,由该集群继续提供读写服务,且只有该集群所在站点的主机能够继续访问集群后端存储数据;( 11 )当两个集群和 Witness 节点间的链路同时中断时,类似于 Witness 节点自身故障场景,两个集群可继续提供读写服务;( 12 )当 Witness 节点和两个集群间链路同时故障时,发生脑裂现象,但无第三方仲裁节点对此进行仲裁,所有集群读写服务中断;( 13/14 )当单个 Vplex 集群、 Witness 节点与另一个 Vplex 集群间的链路同时故障时,发生脑裂现象,按规则将选举正常的 Vplex 集群获胜,然而 Witness 节点却无法和该 Vplex 集群正常通信,无法顺利仲裁,造成所有读写服务中断;( 15 )当两个集群间、集群和 Witness 节点间所有的链路中断时,发生脑裂现象,但 Witness 节点无法和任何集群正常通信,无法选举获胜站点,造成所有集群读写服务中断。

另一个需要详细说明的是主机跨集群连接拓扑,合理的主机与本地 Vplex 集群、主机与远端 Vplex 集群连接拓扑,可以防止的故障场景将根据主机光纤通道适配器端口的数量, WAN 和跨集群主机连接通道的数量以及 SAN Fabric 的数量而有所不同。有几种不同类型的 SAN Fabric 拓扑可用于主机与 Vplex 集群间的连接。可以根据以下特征对这些拓扑进行分组:

( 1 )两个或四个 SAN Fabric :对于两个 SAN Fabric 的拓扑,主机的每个 HBA 端口与到本地和远端 Vplex 集群的前端端口做成一个 ZONE ;对于四个 SAN Fabric 的拓扑,将使用一组独立的主机 HBA 端口访问本地 Fabric ,另一组独立的 HBA 端口用于跨数据中心(站点)访问合并的 Fabric 。

( 2 )共享或独立的 WAN 通道:对于共享 WAN 通道,当主机跨集群连接拓扑,配置为与 VPLEX WAN 路径相同的物理 WAN 时被视为共享;对于独立 WAN 通道,当 VPLEX WAN 使用物理上独立的通道连接到交叉连接网络时,交叉连接配置被视为专用配置。

如下表所示为主机跨 Vplex 集群连接 SAN 网络拓扑提供保护的各种高级故障场景。该表根据发生双重故障时的每种拓扑和类型,表明在首选和非首选站点对主机 I/O 的影响。

因此,如上表所示,最佳做法是将跨 Vplex 集群连接的主机增加额外的 HBA 端口(不在站点之间合并 Fabric ),并使用单独的专用通道,以便不与 VPLEX WAN 共享主机交叉连接路径。

回复:guwenkuan  系统架构师 , 金融
之前做过测试,供参考!

7、能否详细介绍下VPLEX存储双活方案的技术特点?

详细介绍下VPLEX存储双活方案的技术特点,包括存储层组网、分布式一致性缓存、分布式缓存模式、读I/O加速能力等特点?

回复:guwenkuan  系统架构师 , 金融

EMC Vplex 存储双活方案是基于 Vplex 网关产品实现,能够将 EMC 和其他厂商存储异构整合,虚拟化为统一的存储资源池,实现异构存储双活。 Vplex 双活方案有 Vplex Metro 和 Vplex Geo 两种方案,方案由两个站点的两套 Vplex 集群系统组成,每个站点的 Vplex 集群都有自己专属的本地存储阵列,通过创建分布式镜像卷为跨集群的镜像卷,提供 Vplex Access Anywhere 功能,两个站点的 Vplex 集群各有一个卷,两个卷的 ID 一样。
存储层组网:下图为 Vplex Metro 双活方案主机跨集群连接组网架构。主机与 Vplex 集群间访问、 Vplex 集群与后端存储数据传输、 Vplex 集群间通信网络全部隔离,为保证最高级别的高可用性,每个 Vplex Director 前端 I/O 模块和一对 SAN 光纤交换机之间必须保证 2 个以上的物理连接,每个主机和每个 Vplex 引擎的 A Director 和 B Director 都需要保持一个以上的路径连接,因此主机和一个 Vplex 引擎间具有 8 条逻辑路径。对于每个站点 2 个、 4 个引擎的 Vplex 集群来说,主机连接需要覆盖所有引擎;后端存储阵列通过 SAN 交换机或者直接连接 Vplex 引擎的后端 IO 模块,不需要配置到其他 Vplex 集群的跨站点连接路径;根据需要选用 Witness 作仲裁, Witness 需部署于两个 Vplex 集群不同的故障域中 ( 第三方站点 ) 。
分布式一致性缓存技术: EMC Vplex 是一个集群系统,提供分布式缓存一致性保证,能够将两个或多个 Vplex 的缓存进行统一管理,从而使主机访问到一个整体的缓存系统。当主机向 Vplex 的一个缓存区域写 I/O 时, Vplex 缓存将锁定这个缓存区域,同一时刻其他主机是无法向这个缓存区域写入 I/O 的。但是,当主机读取 I/O 时, Vplex 缓存允许多个主机访问一个缓存区域,尤其是主机访问其他 Vplex 集群中其他 Vplex 节点所管理的数据时,统一缓存管理会将这个 I/O 的具体缓存位置告知主机,主机直接跨 Vplex 集群访问。分布式一致性缓存技术在实现上面,并没有强求所有的 Cache 都保持统一,而是基于卷缓存目录的形式来跟踪细小的内存块,并通过锁的粒度来保证数据一致性。每个引擎的 cache 分为本地 Cache(Cache Local) 和全局 Cache(Cache Global) ,每引擎的本地 Cache 只有 26GB ,其余为全局 Cache
分布式缓存模式: Vplex Local 和 Vplex Metro 采用了写直通缓存模式,当 Vplex 集群的虚拟卷接收到了主机的写请求时,写 I/O 直接透写到该卷映射的后端存储 LUN ( Vplex Metro 包含两套后端存储 LUN )中,后端阵列确认写 I/O 完成后, Vplex 将返回确认信号至主机,完成本次写 I/O 周期。写直通缓存模式需要等待后端存储阵列落盘完成,对写 I/O 时延要求较高。这种写直通缓存模式并适合 Vplex Geo 方案,该方案最大支持 50ms 的跨站点往返延迟,采用该缓存模式将对主机产生非常大的性能影响,对于大多数应用而言显然是无法接受的。因此, Vplex Geo 采用了回写缓存模式,在该模式下, Vplex 收到了主机的写请求后,直接写入引擎控制器的缓存,并将写 I/O 镜像至引擎另一个控制器和另一套 Vplex 集群的引擎控制器的内存中,然后向主机确认本次写 I/O 周期。最后再将数据异步转储到引擎后端的存储阵列中。当出现电源故障时, Vplex 引擎自带的备用电源能够保证缓存中的所有未持久化的数据暂存到本地 SSD 存储上。回写缓存模式无需等待后端存储阵列落盘,即可回响应主机,大幅提升了 Vplex 双活方案的距离和时延要求。
读 I/O 加速能力:具有读 Cache ,写 I/O 的机制能对读 I/O 实现加速。为了提升读 I/O 性能,写 I/O 的时候先判断是否在 Local 、 Global Cache 中有对应的旧数据,如没有直接写入本地 Local Cache ;如有旧数据,先废除旧数据再写入 Local ;再通过写直通缓存模式将写 I/O 刷入两套后端存储阵列;最后反馈主机写 I/O 周期完成,同时 Global Cache 中的索引做相应修改,并在所有引擎上共享该信息,实现分布式缓存一致性。

回复:yfwang  SE , 戴尔科技金融行业解决方案中心
简单概括几点VPLEX方案的特点:
1、 存储复制网络支持 FC 和万兆以太网连接,只要延时小于 5ms 就可以,复制链路对距离没有特别限制
2、 分布式缓存一致性是 vplex 的核心技术,在 vplex 出来之前,其他的网关都不具有这个技术,缓存一致性的核心是将所有控制器的缓存全局化,任何一个控制器进来的 I/O 可以访问到任何一个控制器管理的后端存储上的数据,而且可以跨集群扩展,所以不论主机从哪个 vplex 集群接入,访问到的数据是一致的,关于缓存一致性的内容,楼上解释的很详细,赞。
3、 Vplex 的可用性标准和 VMAX 一样,以高端存储的性能和可靠性标准设计,可以胜任企业核心业务的要求。
4、 VPLEX 支持大容量的读缓存,读 I/O 如果在 vplex 缓存里命中,直接返回主机确认,如果 vplex 缓存没有命中,则去后端存储缓存去查找,如果命中返回,如果没命中才去后端磁盘读取数据,所以加了 vplex 相当于多了一级读缓存,读的性能一般会有所提升。
5、 Vplex 的写操作采用透写的模式,即写 I/O 直接穿过 vplex 写到后端存储才确认,这样做的好处是 vplex cache 里没有脏数据,可以时刻保证后端存储数据的一致性,从而不影响后端存储的所有数据服务功能。
6、 Vplex 的仲裁采用监控程序的方式,部署简单,成本低,可用性高。

8、vplex与国产存储双活方案对比?

vplex与基于国产存储双活方案优缺点对比,以及在实际部署中,怎样规划设计物理灾难和逻辑灾难的双重防护方案?

回复:cpc1989 存储工程师 , 某保险公司
VPLEX方案的优势是方案成熟,提供异构存储纳管以及为底层存储提供双活的能力,能盘活现有存储资产;劣势在于维护成本高,不仅要关注底层存储的容量和性能,还需要关注VPLEX网关的稳定性。

国产存储双活方案在于维护简单,产品方案大多处于快速迭代期和稳定成熟期之间,需要有一定的故障容忍。

物理灾难防护主要通过存储和计算的多节点部署的方式,不管是同机房两台存储,还是异地机房两台存储的布局设计都可以。方案上可以选择存储双活或者存储复制技术,计算节点可以采用Active-Standby或者 Active-Active,具体方案根据RTO,RPO的需求来定。

逻辑灾难防护重点可以通过数据库或文件的备份,也可以采用类似DG的方案,还可以通过CDP来数据同步, 具体方案也是根据RTO,RPO的需求来定。

回复:guwenkuan 系统架构师 , 金融
组网方式不同,vlpex 网关外置,国产存储如华为网关内置。VPLEX存储组网方式,数据库主机访问单边站点;国产存储数据库主机访问双边存储,SAN网络要两边打通。
逻辑灾难的保护建议通过ADG或其它的备份方式实现。
最好的方案是存储双活+逻辑备库(adg或ogg)+备份软件实现。确保存储故障时,通过逻辑备库提升为主库实现业务不中断。

回复:yfwang SE , 戴尔科技金融行业解决方案中心
国内双活方案以存储型双活为主,属于两类技术,网关型的更加灵活、兼容异构且对存储平台无绑定;基于存储引擎的组网更简单、不需要额外的硬件,但需要绑定存储,每种方案都有各自比较适应的场景,效果差不多,但实现的方式不一样,具体采用哪种建议根据实际需求和现有环境来定。

所有存储双活方案都只能预防物理故障,对于逻辑故障无能为力, EMC 有专门预防逻辑故障的方案 -RecoverPoint, 可以实现 I/O 级别的连数据保护功能,可预防类似人为误删除或者病毒攻击等逻辑灾难, RP 可以和 vplex 配合来实现,用 vplex 实现物理故障的保护,用 recoverpoint 实现逻辑故障的保护,这也是我们一般推荐用户使用的最高可用性保护方案。

回复:bbaimm88 系统架构师 , 银行
主库使用双活卷,有双活保障,从库使用非双活卷当普通存储使用。双活架构使用要用在关键地方。从库也可以单独出来。从而做到物理灾难逻辑灾难保护。

回复:刘文 系统工程师 , CMBC 
目前的存储网关产品,vplex,svc等都是年头久的老牌产品了,不过随着依托于存储网关的双活数据中心成本高,链路质量要求苛刻等客观条件限制,基于存储底层设备复制的方案,入场玩家越来越少。

国产存储双活基本也只有华为这样的传统大厂在在做。

我认为目前基于国产存储双活,未来的发展趋势是会向上层靠拢,比如mysql的主从复制,数据库的cdc, 基于数据传统的dts等技术,都是针对特定场景,从保证数据的最终可用性和仅传输必要数据等方面有,数据库事务等方面提出新的双活,甚至多活解决方案。

回复:skey_deng 系统运维工程师 , 某农商业银行股份有限公司
国外存储走过较长的发展过程,踩过更多的坑,有更多更加成熟的解决,保障方案,国内华为已经迎头赶上。

双活不能防止逻辑灾难的发生,使用DG类似的技术防范。

推荐关注 邓毓 大哥, 老赵 大哥的主页,可以看到很多精辟的论断,但是老赵比较懒,发帖不多。

而且他们是使用方,并非厂商,与业务更加贴合,更适合甲方的人学习。

9、双活存储在仲裁规则的配置上,如何协调好双活数据库的仲裁规则,从而保证两者的仲裁结果一致?

回复:guwenkuan 系统架构师 , 金融
这个不太好保障,我们在使用VPLEX 双活存储架构时模拟过此问题,当存储出现脑裂情况下,优先站点数据库能够访问存储,另外一个站点直接被存储offline,优先站点数据库是online状态。

回复:yfwang SE , 戴尔科技金融行业解决方案中心
以Oracle RAC为例,数据库一般有两个仲裁规则,一个是数据库节点之间的心跳,一个与存储之间的心跳,实际实施时,一般需要把这两个仲裁等待时间设置的比存储仲裁的等待时间长一些,当存储复制链路发生中断时,先让存储仲裁哪边活,仲裁完之后另外一台存储由于停止了对外服务,所以连接它的数据库将丢失存储,数据库存储仲裁机制生效,连在存活的存储之上的数据库继续服务,另一端被踢出集群,实现仲裁结果的一致性。
同时,我们一般建议有条件的话,复制链路最好有单独的交换机,不要和生产主机共用交换机,这时最佳实践指导。

10、在存储双活与数据库双活中,如何确保仲裁的一致性?

存储双活的仲裁与数据库双活仲裁一致性,是为了确保在存储双活发生故障后,数据库系统能同时响应,这样就可有效保障应用访问数据库,而不会发生访问失效,因此双活建设中如何确保仲裁一致性是需考虑的重要一环?

回复:guwenkuan 系统架构师 , 金融
一般情况下存储层仲裁响应时间15秒内或者更低,首先是存储仲裁生效,再次是数据库仲裁。我们在测试ORACLE RAC与双活存储故障场景时,数据库承压时间30秒。之前用EMC 方案和华为的方案都进行过测试。

回复:yfwang SE , 戴尔科技金融行业解决方案中心
默认设置下,数据库层的仲裁确认时间一般都比存储仲裁的时间长很多,这样可以保证存储先仲裁,数据库跟着存储仲裁的结果走,这样就不会发生不一致的情况。
不过,在某些极端情况下,比如数据库心跳和存储心跳同时发生故障的时候,有可能会导致数据库节点和存储节点仲裁结果不一致的额情况,不过,如果采用vplex方案,也可以通过一些预先设置来避免的,因为vplex可以预先定义“优先者”,再结合数据设置,来保证仲裁的一致性。

11、双活存储在仲裁规则的配置上,如何与主机层面的PowerHA、RHCS以及数据库层面的oracle rac的仲裁保持一致?

回复:yfwang SE , 戴尔科技金融行业解决方案中心
我觉得这个问题要分两种情况来看,以 RAC 为例说明:
1 、对于主机和存储是交叉互联的方案
即每台主机都有连接到两台存储的路径,在这种情况下,如果存储发生了仲裁,主机还可以访问另外一台,不会发生仲裁;如果主机发生了仲裁,存活的主机也都可以看到两台存储,存储不需要仲裁;
唯一有可能发生仲裁不一致的场景是主机和存储同时需要仲裁,比如 RAC 节点心跳和存储心跳同时断了,这时不仅 RAC 需要仲裁防止脑裂,存储也一样,为了保证仲裁的一致性,需要在设置的时候注意一下,一般 RAC 心跳断后,如果两边节点数一致,那么编号小的一边存活,对于 EMC 的存储方案,存储可以设置“优先者”,可以通过把和节点编号小的在一个站点的存储设置成“优先者”,来保证存储和 RAC 仲裁结果的一致性。

2 、对于主机和存储是非交叉连接的方案
VPLEX 支持交叉连接,也支持非交叉连接,当非交叉连接时,因为 RAC 节点只有到本地存储的路径,所以当存储发生仲裁时,因为有一边的存储将被挂起,所以这一边的 RAC 节点将访问不到存储, RAC 机制也会开始仲裁,会将失去存储这边的节点踢出群集,从而保证仲裁的一致性,这种情况下,需要保证存储先于 RAC 仲裁,这个顺序可以在 vplex 和 RAC 中设置。

回复:guwenkuan 系统架构师 , 金融
首先是两个纬度的: 存储和 主机( 应用或数据库 )
存储双活的仲裁:我拿IBM svc给你举例说明,一套2个节点的svc管理底层三套存储,那么仲裁怎么配置呢,仲裁磁盘都是从底层存各划一个quarm盘,假如svc本身的 san心跳仲裁没有了,那么底层的存储就会投票仲裁
主机层面的仲裁:双击管理软件(hacmp rhcs)有网络心跳、磁盘心跳以及oracle rac数据库有自己的网络心跳
没有办法保持一致:举个列子:因为就算存储双活发生仲裁了,保证了一个节点正常运行,主机层面 是不会发生仲裁的,只是路径减半,磁盘是共享的,主机层面认为磁盘是没有变化的。反之 如果应用主机或数据库主机网络出现异常或主机其中一个主机节点故障,那么双机管理软件会触发切换,但是存储没有任何感知,不会触发存储的仲裁机制。

12、同城双活网关方案对比优劣?

同城双活的vplex解决方案和svc解决方案,两个都是存储双活网关的解决方案,这两套方案进行对比的话,各有什么优劣吗

回复:guwenkuan 系统架构师 , 金融
Vplex提供基本双活功能,远端数据可读写,SVC提供除双活功能外,还可以提供一些存储的其他功能,比如快照、容灾等等。但远端双活不如Vplex。

回复:yfwang SE , 戴尔科技金融行业解决方案中心
两款产品定位不同:
Vplex 定位为双活解决方案,所以主打方案是 vplex metro ,可以比较简单地实现跨站点的双活功能,相对而言存储虚拟化的功能没有那么多,当然也可以实现;
SVC 定位为存储虚拟化解决方案,存储虚拟化功能比较强大,但是双活方案实现起来比较复杂,真正的双活是 Stretch Cluster 方案,需要把一个 IO group 里的两个 node 拆开,方案的弹性较弱,而 hyperswap 并非一个真双活的方案。
两个平台各有专长,可根据实际需求选择。

13、如何吃透 Vplex Globa distributed cache工作原理,大神来细讲一下,让运维人员心里踏实应对故障?

双写原理,数据落盘的全过程 是什么样的一个流程??

如何保证cache一致性,【这个一致了,两边存储数据就一致了】?? 欢迎大神指点迷津。

回复:yfwang SE , 戴尔科技金融行业解决方案中心
讲起来比较复杂,试着说一下,看看能不能讲清楚。
分布式缓存一致性,是 VPLEX 的核心技术,也是 VPLEX 实现双活的主要技术基础。分布式是指缓存的管理是跨控制器的,一致性是指所有控制的缓存是全局的,互相能感知对方状态。
VPlex 实现分布式缓存一致性的关键组件是缓存一致性目录,该目录记录着 cache 里的所有数据的归属信息,比如数据块 37 属于哪个控制器,该目录状态会实时更新且 share 给所有控制器,对于 VPLEX Metro 方案,缓存一致性目录可以跨 VPLEX 集群扩展,以提供实现跨站点的缓存一致性。

下面用读写 I/O 的流程来简单描述一下如何实现的。
对于读请求来讲:
读 I/O 从某个控制器的前端口进来,先查看该控制器本地 cache 是否命中,如果命中,直接返回,如果没有命中,则去查找缓存一致性目录,看看别的控制器缓存里是否有要访问的数据,如果有,则从对应的控制器 Cache 中将其读取到本地 Cache ,再返回给主机;如也没有命中,则从本地后端的存储中读到本地 Local 中,修改缓存一致性目录的状态,然后返回给主机。
在双活状态下,虽然缓存一致性目录是跨 VPLEX 集群的,但对于读操作来讲,如果在本地集群缓存没命中,就直接去后端存储读数了,不会去远端的 VPLEX 缓存中读数据,因为机制认为链路的延时要大于本地存储的延时。

对于写请求来讲:
写 I/O 从某个控制器的前端口进来,先找本地 cache 中有没有对应的旧数据,有的话先把它废除,同理,根据缓存一致性目录查找别的控制器缓存中是否有旧数据,有的话也要废除,然后新数据写入本地缓存,并且透写到后端存储中,存储返回确认。
与此同时,另外一个 vplex 集群也会执行相应的操作,将旧数据废除,然后写入新数据,同时新数据透写到后端存储,返回确认给 vplex 。
Vplex 在收到两边存储返回的确认后,认为该写操作成功,给主机返回写入确认。
这一系列的步骤说起来比较繁琐,实际情况下几乎都是同时瞬间完成的,所以不用担心对性能的影响。通过这种机制,可以保证不论是本地主机访问本地 vplex ,还是异地主机访问异地 vplex ,看到的数据是完全一致性的,这个也是双活的技术基础。
不过分布式缓存一致性是 vplex 内部机制,可以了解一下原理,实际运维中不用担心数据一致性的问题,这是 VPLEX 内在机制保证的。

回复:cpc1989 存储工程师 , 某保险公司
VPLEX现在主要就local和Metro两种方案了,Geo方案本身也少,也由其他方案替代了,不知道你是不是想了解的是VPLEX Metro 的分布式缓存的原理。

VPLEX Metro在物理上是两个站点,逻辑上两个集群,而且VPLEX只有读cache,没有写cache,这也是VPLEX保持强一致性的关键。数据落盘的过程中是数据写动作分为两个路线,一个写到本地VPLEX集群的本地存储,一个同步到异地站点的VPLEX集群,并写到异地存储中,只有两个落盘动作都完成后,写到VPLEX的动作才结束。

回复:guwenkuan 系统架构师 , 金融 
分为两部分全局 cache 目录,和每个 director 的 cache 。读 IO 会首先查询全局目录看看是否在 cache 里,如果有也从相应的 director 里读取数据,如果没有,也从存储读取,并更新全局目录,下次短期内再读取则会命中。

14、Vplex的 仲裁机 Witness 故障时执行原理?

回复:yfwang SE , 戴尔科技金融行业解决方案中心
singlefailure 与 double failure 。谁来讲透,你们就不用担心 仲裁如何 选取位置了。不懂仲裁建哪里都一样,当发生故障时候你也没法人工干预。

官方有16个场景,比较复杂。 原厂专家来好好分析一下,多多赐教。
官方的 16 个场景考虑了主机集群的切换,太复杂,容易搞晕,其实理解 witness 主要关注存储层面就可以了,主机层面按主机的仲裁规则去理解。
对于存储层面,双活方案由三点三线组成,三点是:生产站点 A 、生产站点 B 、仲裁站点 C ;三线是: A 和 B 之间的复制链路、 A 和 C 之间的仲裁链路、 B 和 C 之间的仲裁链路。
加起来可以理解为一共 6 个故障点, 6 个故障点可以有两种失败情形:
1 、单点故障:
vplex 双活机制下,可以保证任何一个单点故障,都不会引起业务中断,比如只是 A 站点发生灾难(是最严重的情况,如果只是 A 站点里面的存储坏了或者 vplex 坏了或者交换机坏了,破坏性不会超过整个站点的灾难), witness 会通知 B 站点继续处理业务,业务不中断,不需要人为干预。
2 、双点故障:
双点故障指上面的 6 个故障点有两个同时发生了故障,比如站点 A 和站点 C 同时发生了灾难,就属于双点故障。
双点故障下,会不会发生业务中断分情况来看, 6 个故障点两两组合,会导致业务中断的共有以下五种情况,此时需要人为手动干预才能恢复业务,这五种情况如下(见图):


除了这五种两点故障场景外,其他的场景也不会造成业务中断,不需要人为干预。

注意以下最后两个场景下,其实它说明了为什么 witness 要放在第三个站点,因为如果 witness 和 vplex 放在同一个站点,当这个站点发生了失败,虽然是个单点故障,但是相当于发生了如最后两图所示的双点故障,会导致业务中断,如果 witness 在第三个站点就不会有问题,这时 witness 建议在不同站点的主要原因。
综上所述,一般只需要避免发生如上五种双点故障,就可以避免业务中断,或者说如果进行灾难演练,可以着重演练这几种场景,因为这几个场景是需要人为操作恢复的。
不过只要按照最佳实践来部署,发生双点故障属于极小概率事件,实际环境中很少能碰上。

回复:guwenkuan 系统架构师 , 金融
双活存储基本就两种模式,仲裁服务器和静态优先,一般情况下采取仲裁服务器和静态优先并存模式,仲裁服务器为主,当仲裁服务器宕机后,启用静态优先模式。

15、如果要实现数据库双活,需要什么前提条件?

如果要实现数据库双活,需要什么前提条件?主要指Oracle RAC在双中心一边放一个的情况下。

回复:yfwang SE , 戴尔科技金融行业解决方案中心
物理层面:
网络层面一般需要二层打通,这是跨站点 RAC 的网络要求。
同时需要实现存储层的双活,可以通过数据库的方案实现,比如 ASM ,也可以通过像 vplex 或者 vmax 这样的存储层解决方案实现。

应用层面:
要实现跨站点的 RAC 比较大的挑战来自于数据库层面,因为 cache fusion 的机制,节点拉开距离之后有可能会导致数据库性能的下降,所以实施之前需要对数据库负载进行评估,对数据库的部署和设置有可能需要进行一定的调整,以减少对性能的影响,详细内容可咨询数据库工程师。

更多交流问题汇总查看https://www.talkwithtrend.com/Activity/index/op/question/id/1605

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

1

添加新评论0 条评论

Ctrl+Enter 发表

本文隶属于专栏

活动总结
活动总结是社区交流活动内容的总结及延伸,为大家提供了社区专家们丰富且高水平的理论知识、实践经验以及常见问题的最佳解决方法,非常值得大家收藏学习。

核心存储选型优先顺序调查

发表您的选型观点,参与即得50金币。