本文摘要与知识点:

  • 去重与压缩是VSAN6.2新加入的特性。

  • 去重与压缩只在全闪存VSAN才有。

  • 去重与压缩特性是捆绑在一起的,必须同时启用或关闭。

  • 去重与压缩作用范围是磁盘组。

  • 去重与压缩发生在数据从缓存层destage到容量层时。

  • 去重的粒度是4KB的数据块。

  • 压缩发生在去重之后。


以下正文节选自正在翻译中的《VMware VSAN权威指南 第二版》 第五章


  VSAN 6.2中加入了2种新的数据简化特性:去重(deduplication)和压缩(compression)。当这2个特性在群集层面启用时,VSAN会试图在把数据块回写到容量层之前对每个块进行去重并压缩。这2个特性仅存在于全闪存VSAN中。压缩和去重不能分开启用,要么一起开启要么一起关闭。去重和压缩作用于磁盘组层面上。换句话说,只有部署在同一个磁盘组上的对象才可以利用这些特性来节省空间。如果完全相同的2台虚拟机被部署在了不同的磁盘组上,即使数据块完全相同也不会有去重发生。然而,去重和压缩特性是群集范围的特性,要么开启要么关闭。你无法选择对某一个虚拟机或某一个磁盘组来开启这2个特性。

  对于部署在同一个磁盘组上的组件,如果开启了去重和压缩,那么去重将会在4KB数据块的粒度上实现。磁盘组上只会保留那个4KB数据块的一个拷贝而其他所有重复的数据块都会被清除,如图5-11所示。

wKioL1hee2WRgESyAABj3vRt5XI736.png-wh_50

  去重的过程在数据块从缓存层回写入容量层的时候发生,并使用哈希表来跟踪已去重的数据块。去重过的数据块和哈希表的元数据(metadata)散布在组成此磁盘组的容量设备中。

  同一磁盘组内不同的组件间的去重并没有什么不同——数据块去重可能发生在虚拟机主页名字空间、虚拟机交换文件、VMDK对象或快照增量对象上。

  如果一个磁盘组的容量快被填满,VSAN会检查那些去重过的组件的构成,并将那些会对磁盘组容量产生最大变化的数据块移走。

  不过请注意,如果去重和压缩被启用,那么磁盘组中的单个设备故障会使得整个磁盘组显示为不健康状态。

  一旦数据块被去重,VSAN会试图将那个4KB的数据块压缩到2KB或更小。如果VSAN可以做到将那个数据块压缩到小于2KB,它将会保留那个压缩过的数据块,否则会保留未压缩过的数据块。

  如图5-12所示,整个过程相对简单明了。第一步,虚拟机将数据写入VSAN的缓存层。当数据变“冷”需要被回写的时候,VSAN将这些数据块读入内存(第二步)。它将会计算哈希值,清除掉重复的块,并将剩余的数据块进行压缩,最后写入容量层(第三步)。

wKioL1hee1jzfjJfAACHwrSDorg201.png-wh_50

  写给有兴趣的读者:VSAN现在使用SHA1作为去重哈希算法,并使用LZ4算法来压缩。当然这些在将来的版本可能会变。



备注:图5-11和5-12应该是反了,但是原书如此。我会去和原作者核实。正式出版可能会更正。