深入剖析SVC Stretch Cluster双数据中心存储方案

来源:互联网 发布:新奔腾预算软件 编辑:程序博客网 时间:2024/05/19 07:07


      SVC为网关形态的存储产品,支持2—8节点集群,每个节点为一个服务器。两个互为Cache镜像的节点为一个I/O Group,每个卷都有自己的归属I/O Group。若需要迁移卷的归属到其它I/O Group,一般需要中断该卷的主机业务。


      SVC的卷镜像(vDisk Mirror)特性可以在两个后端存储阵列间建立镜像关系的卷(Mirrored Volume),可以通过SVC向主机呈现一个高可用的卷。在镜像一致的情况下系统可指定其中一个拷贝为Primary;当主机向Mirrored volume中写入数据时,SVC会把数据同时写入两份拷贝,即数据被分别写入两个虚拟化镜像的存储设备中;当处理读请求时,系统会选择向其中一个拷贝读取数据。


      当Mirrored volume的一个拷贝不可用时,另一份拷贝仍可提供数据读写,并且通过位图记录写操作,记录两份拷贝的数据差异,一旦不可用的vDisk恢复时,则可自动同步数据。


      对于SVC的标准Local Cluster集群,所有节点都位于同一个位置(即同一个数据中心),一套SVC集群最少包含2个节点,最大8个节点,两两节点组成一个I/O group,因此一套SVC集群最大可以包含4个I/O Group



      每一个存储LUN都分配给一个I/O group,你也可以手动转换存储LUN的I/O group,比如说LUN1属于I/O group0,当I/O group完全不可用时,需要手动转换至I/O group1,因为每一个I/O group均由两个SVC节点组成,所以每个存储LUN均分配给一个优先的节点和一个非优先节点



      不同的存储LUN的优先节点可以不一样,这是SVC集群系统自动负载和分配的,同一SVC I/O group节点均衡负载着存储LUN,对于读I/O请求来说,来自于优先的SVC节点,而写I/O请求在同一I/O group的两个节点间同步,一次SVC I/O写请求,分解为以下5个步骤。


  • 1、主机发送写I/O请求至SVC I/O group

  • 2、优先的SVC节点A写入I/O至缓存,并发送I/O至同一I/O group的另一SVC节点B

  • 3、节点B将写入I/O至缓存后,并回响应至节点A

  • 4、节点A收到节点B的回响应后,向主机回响应

  • 5、节点A将缓存写I/O写入LUN当中写I/O流转图如图。



      最后第5步才将缓存数据写入LUN当中,那么当还没有写LUN时,SVC节点突然断电了怎么办?这种情况SVC也是考虑了,每个SVC节点均配备了UPS电源,可以维持供电,可以保证缓存数据正常写入LUN当中。基于以上这种机制,同一I/O group的两个SVC节点是实时同步的,当I/O group中的主节点故障时,另一SVC节点将接管,并进入写直通模式,并禁止写缓存


      从SVC 5.1起提供的Split Cluster/Stretched Clustre配置,SVC Stretch Cluster也就是SVC拉伸式集群架构,SVC集群的所有节点可均布于相隔一定距离的两个数据中心。其中该SVC集群内每一对I/O Group节点都拆开部署,一个在站点A,另一个在站点B。它们之间通过光纤链路连接,并且需要第三地的仲裁设备


      基于vDisk Mirror特性,将SVC集群同一个I/O Group的互为Cache镜像的两个节点分别部署在两个站点(Split I/O Group)。两个站点间通过远距离光纤连接,形成远距离集群。在两个站点分别连接不同的存储阵列,两个站点间的SVC节点处于同一个集群,每个站点占一半的SVC节点。通过这种方式,提供存储双活解决方案


      一个vDisk只能归属于一个I/O Group,其它I/O Group的节点不能处理该vDisk的I/O,除非该vDsik被Move到其它I/O Group。因此,SVC仅仅在同一个I/O Group的两个节点上实现了分布式Cache,同时提供读/写Cache功能。对于写I/O数据,仅在IO Group的一对控制器上对cache进行双写,主机写入的数据会同步写入到两个站点的阵列中;对于读请求,可以读本站点的Cache或阵列。


      SVC Stretch Cluster是将一套SVC集群下的同一I/O group的两个节点拉开,分别放在两个数据中心,之前连接SVC的一套存储,拉开后各放置一套存储,通过SVC做vDisk镜像同步。说白了还是同一套SVC集群,同一个I/O group,SVC Local VDM(vDisk Mirror)拉开成SVC Stretch VDM,映射给主机的Volume还是同一个。SVC、存储、主机及第三站点光纤连线下图所示。



      对于SVC Stretch Cluster来说,为了防范脑裂,仲裁站点是必需的。首先是Configuration Node(配置节点),配置SVC集群后,由系统自动产生的保存所有系统配置行为的节点,不能人工更改配置节点,当配置节点失效后,系统会自动选择新的配置节点,仲裁的排序规则依次是配置节点,距离仲裁站点近的节点,距离仲裁站点远的节点


      配置节点十分重要,它对SVC节点仲裁胜利起着决定性作用,下图为SVC Stretch Cluster两个站点的仲裁配置示意图。



      当两站点间光纤链路中断,第三站点仲裁节点活动时,此时脑裂发生,将通过投票仲裁选举获胜的站点,按照上述的仲裁胜利规则,Configuration Node位于节点2,选举站点2优先赢得仲裁,通过站点2恢复业务的正常存储访问。



      当第三站点仲裁节点不活动时,不影响主机的正常存储访问,但是此时,两站点间光纤链路也中断了,同时发生脑裂,这时因为节点2为Configuration Node,它所拥有候选的Quorum将变为Active Quorum,该Quorum选举站点2为仲裁胜利站点,通过站点2恢复业务的正常存储访问。



      在SVC版本到了7.2时,又出了一个叫做Enhanced Stretched Cluster的新功能,增强版拉伸集群增强点在哪?


      先看看Local Cluster和Stretched cluster的问题之前的Stretched Cluster看似实现了双活,实则只为数据级双活,主机访问SVC实则只访问了一个I/O group优先节点,另一非优先节点,则只是完成了写缓存同步的任务而已,无论是Local Cluster还是Stretched cluster,实际的读写卷操作并未通过非优先节点进行,通俗的说就是主备模式(Active-Passive)。


      由于优先节点是由SVC系统自动分配的,这就可能会出现一种情况:主机在站点A,但是存储卷的Preferred优先节点却在站点B,主拷贝的存储却在站点A时,站点A的主机会一直访问站点B的SVC节点,再转到站点A的存储。这样的存储路径完全不是最优的,对主机I/O性能造成影响。


      原因是SVC通过SCSI的Report Target Port Groups命令集(ALUA)告知主机多路径那个节点为Preferred节点。主机多路径查询得知Preferred节点后,将所有读、写命令发给Preferred节点,由Preferred节点承担所有的读Cache、写Cache、下盘任务。


      对于多路径不支持SVC Preferred节点的主机来讲,读写请求被发给哪个节点,完全取决于多路径软件。在VMware跨站点集群的场景,SVC要求指定连接本地SVC节点的路径为优选路径,并且将VMware多路径的选路策略为即固定使用所指定的优选路径


      这些问题在Enhanced Stretched Cluster中均得到改善,实现了SVC双节点双站点读写双活,在该版本对SVC节点、主机、存储等元素均被赋予Site属性,不同站点的主机对各自站点的SVC节点和存储进行读写操作。对同一Volume来说,站点A的主机访问站点A的SVC节点,站点A的存储;站点B的主机访问站点B的SVC节点,站点B的存储,存储访问路径最优。两个站点的SVC节点、主机、存储都同时活动,实现应用级双活(Active-Active)


      在Site属性模式中,SVC优先节点概念不起作用了,配置了Site模式的主机,优先访问活动的同Site的SVC节点和同Site的存储。如下图所示为读写模式下的Enhanced Stretched Cluster 流转图,绿色的箭头为优先的读I/O流转,红色箭头为站点2的存储失效后的读I/O流转


      站点存储发生故障后的情况如下,绿色的箭头为优先的写I/O流转,红色箭头为站点1/2的存储失效后的写I/O流转


      在写操作时,两个站点的SVC节点的缓存是保持同步的,但是这个过程不同于Local Cluster,Stretched Cluster整个写操作的过程中SVC节点的写操作响应在写入缓存后就发生了,而不需要等待另一SVC节点写缓存完成并回复响应,这样一来,优化了整个写性能,具体过程如下。


  • 1、主机向SVC写I/O请求。

  • 2、同站点的SVC节点将写I/O写入缓存,并向主机回复响应,同时将写I/O同步至另一站点的SVC节点。

  • 3、另一站点的SVC节点将写I/O写入缓存,并回复响应。两个站点的SVC节点陆续将缓存写入各自站点的存储当中。


      对于双活应用而言,通过减少站点间的交互次数,可以大大提升数据传输的效率,大大降低单个I/O的响应时延。在标准SCSI协议中,一次I/O写流程在发起设备和目标设备间共需要两次交互,通过优化协议实现流程中取消Ready_to_Xfer交互流程,可使一次I/O写操作的站点间交互合并为1次,两站点间的写性能可以提高一倍。


      SVC就合并了IO流程,实现一次I/O写操作,两个站点间只需要一次交互。大大减少了写I/O延迟。另外,从I/O流程分析来看,双活和本地镜像采用相同流程,代码上可以共用。但是SVC也存在一些问题,如单控故障后会导致Cache透写。主机和本站点连接故障后,主机会通过远程链路访问对端站点的SVC。卷在I/O Group间迁移,需要手工干预,甚至中断主机业务来操作。



温馨提示:
请搜索“ICT_Architect”“扫一扫”下面二维码关注公众号,获取更多精彩内容。

听说点赞和分享的朋友都已走上人生巅峰

阅读全文
0 0
原创粉丝点击