分布式存储系统

分布式存储系统

1.分布式系统

1.1基本概念

(1)节点:在分布式系统中,将一台服务器或者服务器上运行的一个进程成为一个节点。节点与节点之间通过网络互联。

(2)大规模分布式存储的一个核心问题在于自动容错

(3)异常

  1. 服务器宕机

    原因:内存错误、服务器停电等。

    ​ 当发生宕机时,节点无法正常工作。称为不可用。服务器重启时,节点将失去所有内存信息。因此,设计存储系统时需要考虑如何通过读取持久化介质(如机械硬盘,固态硬盘)中的数据来恢复内存信息。

  2. 网络异常

    原因:消息丢失,消息乱序(如采用UDP方式通信)或者网络包数数据错误。

    ​ 有一种特殊的网络异常称为**“网络分区”**,即集群的所有结点被划分为多个区域,每个区域内部可以正常通信,但是区域间无法通信。例如,某分布式系统部署在两个数据中心,由于网络调整,导致数据中心之间无法通信,但是数据中心内部可以正常通信。

    ​ 设计容错系统基本原则:网络永远是不可靠的,任何一个消息只有收到对方的回复后才可以认为发送成功,系统设计时总是假设网络将会出现异常并采取相应的处理措施。

    3.磁盘故障

    分为磁盘损坏磁盘数据报错

    ​ 磁盘损坏:会丢失存储在上面的数据,因而,分布式存储系统需要考虑将数据存储在多台服务器,即使其中一台服务器磁盘出现故障,也能从其他服务器上恢复数据。

    ​ 磁盘数据错误:采用校验和(checksum)机制来解决。这个既可以在操作系统层面实现,又可以在上层的分布式存储系统层面实现。

    4.超时

    ​ 在分布式系统中,如果某个节点向另外一个节点发起RPC(Remote Procedure Call)调用,这个RPC执行的结果有三种状态:“成功”、“失败”、“超时”在这里插入图片描述

(4)一致性

​ 由于异常的存在,分布式存储系统往会将数据冗余存储多分,每一份称为一个副本(replica/copy)。这样,当某一个节点出现故障时,可以从其他副本上读取到数据。

副本是分布式存储系统容错技术的唯一手段。由于多个副本的存在,如何保证副本之间的一致性是整个分布式系统的理论核心。

​ 可以从两个角度理解一致性:第一个角度是用户,或者说是客户端,即客户端读写操作是够符合某种特性。第二个角度是存储系统,即存储系统的多个副本之间是否一致,更新的顺序是否相同,等等。

1.2 数据分布

​ 分布式系统区别于传统单机系统在于能够将数据分布到多和节点。并在多个节点之间实现负载均衡。

​ 数据分布式方式有两种:

  1. 哈希分布:如一致性哈希

  2. 顺序分布:

  3. 负载均衡:

    ​ 分布式存储系统的每个集群中一般有一个总控节点,其他节点为工作节点,由总控节点根据全局信息进行整体调度。工作节点刚上线时,总控节点需要将数据迁移到该节点,另外,系统运行过程中也需要不断地执行迁移任务,将数据从负载较高的工作节点迁移到负载较低的工作节点。

    ​ 工作节点通过心跳包(Hearbeat,定时发送)将节点负载相关信息,如CPU,内存,磁盘,网络等资源使用率,读写次数及读写数据量等发送给控制节点。主控节点计算出工作节点的负载以及需要迁移的数据,生成迁移任务放入迁移队列中等待执行。

    ​ 负载均衡操作需要控制节奏,比如一个全新的工作节点刚上线时,由于负载最低,如果主控节点将大量的数据同时迁移到这台新加入的机器,整个系统在新增机器的过程中服务能力会大幅下降。

    ​ 负载均衡需要执行数据迁移操作。在分布式存储系统中往往会存储数据的多个副本,其中一个副本为主副本,其他副本为备副本,由主副本对外提供服务。迁移备副本不会对服务造成影响,迁移主副本也可以首先将数据的读写服务切换到其他备副本。

1.3 复制

​ 为了保证分布式存储系统的高可靠和高可用,数据在系统中一般存储多个副本。当某个副本所在的存储节点出现故障时,分布式存储系统能够自动将服务切换到其他的副本,从而实现自动容错。分布式存储系统通过复制协议将数据同步到多个存储节点,并确保多个副本之间的数据一致性。

​ 复制协议分为两种,强同步复制以及异步复制,二者的区别在于用户的写请求是否需要同步到备副本才可以返回成功。假如备份副本不止一个,复制协议还会要求写请求至少需要同步到几个备副本。

1.3.1 强同步复制

在这里插入图片描述

如图,客户端将写请求发送给主副本,主副本将写请求复制到其他备副本,常见的做法是同步操作日志(Commit Log)。主副本首先将操作日志同步到备副本,备副本回放操作日志,完成后通知主副本。接着,主副本修改本机,等所有的操作都完成后再通知客户端写成功。

​ 强同步协议提供了强一致性,但是如果备副本出现问题将阻塞写写操作,系统可用性较差。

​ 假设所有副本的个数为N,且N>2。那么,实现强同步协议时,主副本可以将操作日志并发地发给所有备副本等待回复,只要至少一个备副本返回成功就可以回复客户端操作成功。

​ 强同步的好处在于如果主副本出现故障,至少有1个备副本拥有完整的数据,分布式存储系统可以自动地将服务切换到最新的备副本而不用担心数据丢失的情况。

1.3.2 异步复制

​ 主副本不需要等待备副本的回应,只需要本地修改成功就可以告知客户端写操作成功。另外,主副本通过异步机制,比如单独的复制线程将客户端修改操作推送到其他副本。好处在于系统可用性较好,但是一致性较差,如果主副本不可恢复故障,可能丢失最后一部分更新操作。

​ 强同步复制和异步复制都是将主副本的数据以某种形式发送到其他副本,这种复制协议成为基于主副本的复制协议。这种方法要求在任何时刻只能有一个副本为主副本,由它来确定写操作之间的顺序。如果主副本出现故障,需要选举一个备副本成为新的主副本,这步操作为选举,经典的选举协议为Paxos协议

​ 主备副之间的复制一般通过操作日志来实现。

操作日志原理:为了利用磁盘的顺序读写特性,将客户端的写操作先顺序写入磁盘中,然后应用到内存中,由于内存是随机读写设备,可以很容易通过各种数据结构,比如B+树将数据有效地组织起来。当服务器宕机重启时,只需要回放操作日志就可以恢复内存状态。为了提高系统的并发能力,系统会积攒一定的操作日志再批量写入到磁盘中,这种技术一般称为成组提交。

​ 如果每次服务器出现故障都需要回放所有的操作日志,效率是无法忍受的,**检查点(checkpoint)**正是为了解决这个问题。系统定期将内存状态以检查点文件的形式dump到磁盘中,并记录检查点时刻对应的操作日志回放点。检查点文件成功创建后,回放点之间的日志可以被垃圾回收,以后如果服务器故障,只需要回放检查点之后的操作日志。

1.4 容错

​ 容错是分布式存储系统设计的重要目标,只有实现了自动化容错,才能减少人工运维成本,实现分布式存储的规模效应。

​ 分布式存储系统需要能够检测到机器故障,在分布式系统中,故障检测往往通过租约(Lease)协议实现。接着,需要能够将服务复制或者迁移到集群中的其他正常服务的存储节点。

1.4.1常见故障

单机故障磁盘故障发生概率最高。

	1. 系统设计首先需要对单台服务器故障进行容错处理。分布式存储系统会保存多份数据,当其中一份数据所在服务器发生故障时,能通过其他副本继续提供服务。
	2. 机架故障发生的概率也是相对较高的,需要避免将数据的所有副本都分布在同一个机架内。

1.4.2 故障检测

​ 容错处理的第一步是故障检测,心跳是一种很自然的想法。

1.5 可扩展性

​ 通过数据分布,复制以及容错等机制,能够将分布式存储系统部署到成千上万台服务器。可扩展性的实现手段很多,如通过增加副本个数或者缓存提高读取能力,将数据分片使得每个分片被分配到不同的工作节点以实现分布式处理,把数据复制到多个数据中心等。

1.5.1 总控节点

		1. 分布式存储系统中往往有一个**总控节点**用于**维护数据分布信息,执行工作机管理,数据定位,故障检测和恢复,负载均衡等全局调度工作**。
		2. 分布式文件系统的总控节点除了执行全局调度,还需要维护文件系统目录树,内存容量会率先成为性能瓶颈;其他分布式存储系统的总控节点只需要维护数据分片的位置信息,一般不会 成为瓶颈。
		3. 如果总控节点成为瓶颈,列如需要支持超过一万台的集群规模,或者需要支持海量的小文件,那么可以采用**两级结构**。在总控机与工作机之间增加一层元数据节点,每个**元数据节点只维护一部分而不是整个分布式文件系统的元数据**。![在这里插入图片描述](https://img-blog.csdnimg.cn/20210420105727791.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDYyMTYxNw==,size_16,color_FFFFFF,t_70)

1.5.2 数据库扩容

  1. 通过主从 复制提高系统的读取能力,通过垂直拆分和水平拆分将数据分布到多个存储节点,通过主从复制将系统扩展到多个数据中心。当主节点出现故障时,可以将服务切换到从节点。

  2. 当数据库整体服务能力不足时,可以根据业务特点从新拆分数据进行扩容。

  3. 在这里插入图片描述

1.5.3 异构系统

​ 将存储节点分为若干组,每个组内的节点服务完全相同的数据,其中有一个节点为主节点,其他节点为备节点。由于同一个组内的节点服务相同的数据,这样的系统成为同构系统在这里插入图片描述

​ 同构系统的问题在于增加副本需要迁移的数据量太大,假设每个存储节点服务的数据量为1TB,内部传输的带宽限制为20MB/s,那么增加副本拷贝数据需要的时间为在这里插入图片描述

由于拷贝过程中存储节点再次发生故障的概率很高,所以这样的架构很难做到自动化,不适用于大规模分布式存储系统。

​ 大规模分布式存储系统要求具有线性可扩展性,即随时加入或者删除一个或者多个存储节点,系统的处理能力与存储节点个数成线性关系。为了实现线性可扩展性,存储系统的存储节点之间异构的。

异构系统数据划分为很多大小接近的分片,每个分片的多个副本可以分布到集群中的任何一个存储节点。如果某个节点发生故障,原有的服务将由整个集群不是某个固定的存储节点来恢复。在这里插入图片描述

​ 如图3-9所示,系统中有五个分片(A,B,C,D,E),每个分片包含三个副本,如分片A的三个副本分别为A1,A2,A3。假设节点1发生永久性故障,那么可以从剩余节点中任意选择健康的节点来增加A,B已经E的副本。由于整个集群都参与到节点1的故障恢复过程 ,故障恢复时间很短,而且集群规模越大,优势越明显。

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值