深信服分布式存储(又称为深信服虚拟存储,以下简称 Sangfor aSAN)是一款自主开
发的分布式存储系统,aSAN 利用分布式技术“池化”集群存储卷内通用 X86 服务器中的本
地硬盘,实现服务器存储资源的统一整合、管理及调度,最终向上层提供 NFS/iSCSI 存储接口,供虚拟机根据自身的存储需求自由分配使用资源池中的存储空间。aSAN 分布式存储系统通过多项技术,具备高性能、高可靠、易扩展、易运维四大特点。
副本:
多副本,是指将数据保存多份的一种冗余技术,通过将数据保存多份的方法来保证数据
在损坏时不会因为上层应用无法访问数据而导致的业务中断;多副本保存技术由 aSAN 的副
本复制模块来保证副本的一致性和副本之间的同步,避免多份副本存储的数据存在差异,导
致上层应用访问到不同数据对业务结果产生影响。底层管理的副本对上层服务是透明的,上
层不感知副本的存在。aSAN 支持两副本和三副本存储,数据副本所存放的位置必须满足主机互斥原则,即同一数据的多个数据副本不允许同时存在于同一台主机上,这样才能保证当主机发生故障时,仍然有数据副本可用
仲裁:
仲裁机制添加了一个arbiter节点(仲裁节点)。也就是,开启仲裁机制的两副本卷,其结构类似于一般的三副本卷,每个复制组都由三个brick组成,不过其中一个节点并不存放数据,只用于存放元数据(文件属性,扩展属性),该节点即为arbiter节点
本仲裁方案在原有两副本基础上,加入一个arbiter节点(仲裁节点),arbiter节点只存放元数据。
一个文件可以被写入的条件:
(3)Quorum满足要求,即在线子卷个数大于50%
(4)当前存在可写入源(写入源指没有被指控的数据副本,可以理解为好的副本)
可以看出,在原理上,本仲裁方案与vSAN的witness类似,为方便说明这两个条件是如果防止脑裂发生的,参见下面的图解:
A/B/C分别为文件的两个数据副本和arbiter。
Host-C上的app进程对文件进行写,可以写成功(B没有被指控,B是写入源),同时B,C副本的changelog更新,指控A副本。
Host-A上的app’进程对文件进行写,写失败(不满足quorum),changelog不更新。
Host-C上的app进程对文件进行写,写失败,因为没有写入源。(C指控A,且C没有被指控,但是C是仲裁节点,非数据节点,不可写入数据)
Host-B上的app进程对文件进行写,可以写成功,(B指控A,且B没有被指控,B是写入源),同时A,B副本更新changelog,指控C。
文件属性(gfid):
VS使用到了文件扩展属性特性,将文件一些额外信息记录在扩展属性中。
getfattr: 获取文件扩展属性
setfattr:设置文件扩展属性
setfattr:删除扩展属性
脑裂:
数据“脑裂”通常是由于网络发生故障,数据的多个副本出现了隔离,无法及时相互同步信息,并且副本各自孤立地写入更新了不同的数据,导致副本之间数据存在不一致,并且是“各自都存在对方不存在的数据”。
脑裂产生的过程
当前版本的aSAN,把脑裂分为两种:单点脑裂、多点脑裂。
单点脑裂
单点脑裂指只有一个写入源造成的脑裂情况。
多点脑裂指有多个写入源造成的脑裂情况。
多点脑裂是由于主机分裂,同一个虚拟机被拉起多个实例引起的。