《分布式存储系统设计方案.docx》由会员分享,可在线阅读,更多相关《分布式存储系统设计方案.docx(5页珍藏版)》请在优知文库上搜索。
1、分布式存储系统设计方案备份容灾在分布式存储系统中,系统可用性是最重要的指标之一,需要保证在机器发生故障时,系统可用性不受影响,为了做到这点,数据就需要保存多个副本,并且多个副本要分布在不同的机器上,只要多个副本的数据是全都的,在机器故障引起某些副本失效时,其它副本仍旧能供应服务。本文主要介绍数据备份的方式,以及如何保证多个数据副本的全都性,在系统消失机器或网络故障时,如何保持系统的高可用性。数据备份数据备份是指存储数据的多个副本,备份方式可以分为热备和冷备,热备是指直接供应服务的备副本,或者在主副本失效时能马上供应服务的备副本,冷备是用于恢复数据的副本,一般通过DUmP的方式生成。数据热备按副
2、本的分布方式可分为同构系统和异步系统。同构系统是把存储节点分成若干组,每组节点存储相同的数据,其中一个主节点,其他为备节点;异构系统是把数据划分成许多分片,每个分片的多个副本分布在不同的存储节点,存储节点之间是异构的,即每个节点存储的数据分片集合都不相同。在同构系统中,只有主节点供应写服务,备节点只供应读服务,每个主节点的备节点数可以不一样,这样在部署上会有更大的敏捷性。在异构系统中,全部节点都是可以供应写服务的,并且在某个节点发生故障时,会有多个节点参加故障节点的数据恢复,但这种方式需要比较多的元数据来确定各个分片的主副本所在的节点,数据同步机制也会比较简单。相比较而言,异构系统能供应更好的
3、写性能,但实现比较简单,而同构系统架构更简洁,部署上也更敏捷。鉴于互联网大部分业务场景具有写少读多的特性,我们选择了更易于实现的同构系统的设计。系统数据备份的架构如下图所示,每个节点代表一台物理机器,全部节点按数据分布划分为多个组,每一组的主备节点存储相同的数据,只有主节点能供应写服务,主节点负责把数据变更同步到全部的备节点,全部节点都能供应读服务。主节点上会分布全量的数据,所以主节点的数量打算了系统能存储的数据量,在系统容量不足时,就需要扩容主节点数量。在系统的处理力量上,假如是写力量不足,只能通过扩容主节点数来解决;而在写力量不足时,则可以通过增加备节点来提升。每个主节点拥有的备节点数量可
4、以不一样,这在各个节点的数据热度不一样时特殊有用,可以通过给比较热的节点增加更多的备节点实现用更少的资源来提升系统的处理力量。接睥同步机制在上面的备份架构中,每个分组只有主节点接收写恳求,然后由主节点负责把数据同步到全部的备节点,如下图所示,主节点采纳一对多的方式进行同步,相对于级联的方式,这种方式在某个备节点故障时,不会影响其它备节点的同步。在CAP理论中,可用性和全都性是一对冲突体,在这里主节点执行写操作后会马上回复客户端,然后再异步同步数据到备节点,这样并不能保证主备节点的数据强全都性,主备数据会有短暂的不全都,通过牺牲肯定的全都性来保证系统的可用性。在这种机制下,客户端可能在备节点读到
5、老数据,假如业务要求数据强全都性,则可以在读恳求中设置只读主选项,这样读恳求就会被接口层转发到主节点,这种情况下备节点只用于容灾,不供应服务。为了保证主备节点的数据全都性,需要一种高效牢靠的数据同步机制。同步分为增量同步和全量同步,增量同步是主节点把写恳求直接转发到备节点执行,全量同步是主节点把本地的数据发到备节点进行掩盖。接下来具体介绍同步机制的实现,同步的整体流程如下图所示。系统中数据分片的单位是全都性哈希环中的VNOCie(虚拟节点),每个VNode有一个自增的同步序列号SyncSeq,VNode中所包含的数据的每一个写操作都会触发它的SyncSeq进行自增,这样在每个VNode内Syn
6、cSeq就标识了每一次写操作,并且SynCSeq的大小也反映了写操作的执行挨次。数据的每次写操作除了修改数据,还会保存写操作对应的SynCSeq,后面可以看到,SynCSeq是同步机制牢靠性的基础。主节点的写进程收到写恳求后,先修改数据,把当前VNode的SyncSeq加1并更新到数据中。接下来会纪录BinIog,BinIog是一个三元组VNode主节点备U点VNodelSyncSeqSyncSeqSyncSeqVNode2SyncSeqSyrxSeqSyncSeqVNode3SyncSeqSyncSeqSyncSeq主备节点的数据同步由主节点上的同步进程异步进行,通过扫描上图的同步进度表中主
7、备节点的SyncSeq差异就可知备节点需要同步哪些数据。同步进程通过同步进度表确定需要同步的二元组接下来介绍一下同步合同如何保证同步的高效和牢靠。为了让同步包严格根据主节点的发送挨次到达备节点,采纳TCP合同进行同步,在主节点的每个VNode上到每一个备节点建立一个TCP连接,记为一个同步连接。在每一个同步连接上,主节点会一次性批量发送多个同步包,备节点也会纪录已同步的SyncSeq,对每一个同步包会检查携带的SynCSeq是否符合预期,假如符合预期,则执行同步写操作,执行胜利是更新已同步的SynCSeq,在这种状况写备节点也不需要回应主节点,主节点在未收到备节点的回应时,会认为同步一切正常。
8、只有以下特别状况下,备节点才会回应主节点:在正常同步后第一次收到错误的SyncSeq,回应主节点自己所期望的SyncSeq,主节点收到回应后,会从备节点所期望的SynCSeq开头同步,需要留意的是,备节点在连续收到错误SynCSeq时,只需对第一个错误回应,否则主节点会消失重复同步的状况;同步连接在断连后重新连接时,备节点告知主节点自己所期望开头同步的SyncSeq,主节点从该SynCSeq开头同步;SynCSeq符合期望但执行出错,一般是增量同步才可能消失,备节点回应主节点同步出错,主节点收到回应后,把出错的同步包改为全量同步。在增量同步和全量同步交叉进行的状况下,假如某次全量同步已同步了最
9、新的数据,后续的增量同步可能导致写操作重复执行,为了避开这种状况,备节点会校验同步包中的SynCSeq和数据中的SynCSeq,假如前者不大于后者,说明数据已执行了这次写操作,直接跳过不执行,也不需要回应主节点,这就是为什么需要在数据中保存SyncSeq的缘由。通过上面介绍和分析,可以看出采纳同步连接、批量同步的方法,正常状况下只有单向的同步流量,是特别高效的;而在特别状况下,通过出错回应、SyncSeq校验等机制,保证了同步的牢靠性。容灾机制假如系统需要具有容灾力量,即在机器发生故障时,系统的可用性基本不受影响,那么系统中全部数据至少需要有两个以上的副本,并且系统的处理力量要有肯定的冗余,需
10、要保证在故障机器不能供应服务时,系统不会过载。一般来说,数据的副本数量越多,系统的处理力量越冗余,系统的容灾力量越强。更进一步,还需要考虑物理部署,通过把数据的不同副本分布在不同机架、不同机房、甚至是不同城市,来把系统的容灾力量提升到不同的级别。配置运维中心会监控系统存储层全部节点的状态,存储节点会定时上报心跳,假如配置运维中心在一段时间未收到某个存储节点的心跳,则把该节点的状态标记为故障,并进行故障处理流程。首先需要禁止故障节点连续供应服务,即通知接口层不再把客户端恳求转发的故隙节点,假如故隙节点是主节点,配置运维中心会查询并对比全部备节点的同步进度,选择数据最新的备节点,将其切换为主节点。
11、由于全部备节点也会纪录Binlog,所以在切换为主节点之后,可以直接向其它备节点进行同步。这里的主备切换可能会导致少量的数据丢失,假如业务不能容忍这样的数据丢失,则需要使用其它强全都性的方案。在容灾切换之后,还需要进行故障节点的恢复,以便系统恢复到正常的状态。故障机器恢复后,就会进入死机恢复流程,无论故障节点在故障前是主节点还是备节点,故障恢复后的角色都是备节点。首先待恢复节点需要把机器上全部的数据清空;接着主节点会把当前全部VNode的SyncSeq复制到待恢复节点,并且全量复制全部数据;在全量复制完成之后,开头进行数据同步,由前面的同步机制可知,同步的SynCSeq会从之前复制到待恢复节点
12、的状态开头追逐;在主节点和待恢复节点之间的SyncSeq差异缩小到正常范围时,待恢复节点的角色就变为备节点,开头供应服务。配置运维中心会监控主备节点之间的SyncSeq差异,假如某个备节点差异达到肯定的阈值,则禁止该备节点供应服务,假如差异在比较长的时间之后仍旧无法恢复,则会触发死机恢复流程。数据回档最终再简洁介绍下数据冷备和回档,主要是由备份系统负责。备份任务一般是手动或定时发起,属于业务级别的,备份系统收到一个业务的备份任务后,会远程备份业务的全部数据,过程比较简洁,就是遍历全部的存储节点,把属于该业务的全部数据写入到远程文件系统中,每次备份都需要纪录开头时间和结束时间,作为数据回档的基准
13、。系统中全部的写操作都会纪录一份远程的流水,每条流水都纪录了写操作的时间戳,由流水中心统一存储。结合数据冷备和流水,可以恢复到冷备完成后任意时刻的数据。备份系统收到一个业务回档任务后,首先停止该业务的服务,然后清空业务的全部数据,接着从冷备做一次全量的恢复,然后再重放流水到指定时间点,即可完成数据回档。需要留意的是这里的冷备并不是快照,在进行冷备的时候,写操作也正常执行,所以从冷备开头时间重放流水会导致许多的写操作重复执行,这里通过数据版本校验来避开这个问题,在数据中保存了版本信息,在写操作流水中也纪录了对应的写操作完成后的数据版本,重放流水的时候,假如流水中记录的版本不比数据中的版本新,则直接跳过这条流水,这样就保证了数据回档的精确性。