什么是分布式存储?先给他下个定义,满足下面四个特征的存储系统,就是分布式存储:
【软件+服务器 => 专业存储】分布式存储是通过网络连接起来的多个服务器,运行特殊软件,构成像磁盘阵列那样的专业存储系统。
【用软件整合硬盘 => 存储池】不同服务器节点的软件之间协同工作,把服务器上的硬盘都整合起来,成为一个大的存储池。
【容忍故障】这个存储系统可以容忍硬盘故障,也可以容忍服务器故障。
【可扩展】存储池容量不足,或者性能不足,可以通过增加硬盘,或者增加服务器,来扩展存储池的容量,或者扩展性能。
软件怎么整合硬盘呢?怎么容忍故障呢?下图是一个容易想到的方法,三个服务器节点构成一个组,把数据在这三个节点之间复制三份,用Raft这类共识协议来保证一致性。当其中一个节点故障了,换一个新节点进来;一个硬盘故障了,就换一个硬盘进来。这样,上面4个特征的前3个都可以满足。
唯独无法满足第4个特征【可扩展】,怎么办呢?
实际上,按照硬盘来构成Raft组,也无法扩展。解决扩展性问题的方法是:把硬盘分为小盘,用小盘来构成多个Raft组。每3个小盘构成的一个组,在Ceph中被叫做PG(Placement Group),放置组。在 zStorage 中借用了Ceph的概念,也被称为PG。zStorage与Ceph的不同在于:zStorage用了Raft,Ceph使用了自定义的共识协议。
如下图所示,每个硬盘被划分4个小盘,3个节点,一共6个硬盘,24个小盘。每3个小盘构成1个Raft组,这24个小盘构成8个Raft组。
如下图所示,增加一个服务器节点之后,小盘总数量不变,还是24个。但是以前3个节点中的部分小盘中的数据,被迁移到了新的服务器节点上,这样每个硬盘中只有3个小盘了,那么每个小盘的空间也就自动扩大了。就是通过这种方式,实现自动扩容的。
如下图所示,4个节点的情况下,如果一个节点故障了,那么再把这个故障节点上的小盘的数据,迁移到剩下的3个节点上,当然,前提是剩余存储空间足够。这样迁移之后,数据还能保持三副本。
分布式存储系统如何把数据分散(Sharding)存到不同的Raft组中(也叫做PG)?
分布式存储系统对外提供的接口有三种:对象接口、块接口、文件接口。下面以块接口为例,讲一下如何分散(Sharding)存数据。
所谓块接口,在客户端看来就是,它里面有多个虚拟的硬盘,存储术语叫做LUN。其实,每个虚拟的硬盘,就是从这个高可靠的、可扩展的存储池中,划分出的一部分存储空间。也就是,客户端看到虚拟硬盘的所有磁道(sectors),在存储池中都对应一个Raft组。每个Raft组里面都承载了很多个磁道(sector)。
这些Sector与Raft组怎么对应呢?如下图所示,每个虚拟的硬盘,有一个Lun_ID;每个磁道,有一个LBA地址。把LUN_id和LBA地址这两个值,交给hash算法,可以计算出一个PG_id,用这个PG_id就可以寻址唯一Raft组了(Raft组也叫做PG)。
如果读完了以上这三条,那么恭喜,您已经掌握了90%分布式存储系统基本原理。
作者简介
黄岩,云和恩墨分布式存储软件总架构师,十余年存储研发经验,在NAS和备份领域有深入钻研,曾担任某NAS产品性能SE,负责产品性能调优工作,该产品在2011年打破了SPESsfs性能测试世界纪录。
「墨读时刻」特别节目黄岩人物专访即将上线,听一位存储老兵讲述摸爬滚打的这些年和对未来自研存储的洞察,敬请期待... ...
数据驱动,成就未来,云和恩墨,不负所托!
云和恩墨创立于2011年,以“数据驱动,成就未来”为使命,是智能的数据技术提供商。我们致力于将数据技术带给每个行业、每个组织、每个人,构建数据驱动的智能未来。
云和恩墨在数据承载(分布式存储、数据持续保护)、管理(数据库基础软件、数据库云管平台、数据技术服务)、加工(应用开发质量管控、数据模型管控、数字化转型咨询)和应用(数据服务化管理平台、数据智能分析处理、隐私计算)等领域为各个组织提供可信赖的产品、服务和解决方案,围绕用户需求,持续为客户创造价值,激发数据潜能,为成就未来敏捷高效的数字世界而不懈努力。