GlusterFS组件

GlusterFS,含有以下组件:

  • 客户与服务器组件。这部分是复杂双方传输一个总的接口,服务器组件负责把自己的子卷发布出来,客户组件负责挂载GlusterFS 到内核的VFS 上。
  • 翻译器模式, 一种来自GNU/Hurd的设计机制,(hurd 是借鉴IBM vms 系统设计的,内核只有最简单的功能,其上层设计了模拟器可以模拟很多操作系统)该设计可以扩展GlusterFS 的功能,包括调试器,性能调优的工具,加密验证等都是使用的该模式。xlators 文件夹下的都是翻译器的实现。
  • 传输模块,protocol translators
  • 调度模块,Scheduler 文件夹下面有4种调度器实现,其作用是对子卷做负载均衡。

4 种调度器实现了unify 翻译器,分别为:

  • Adaptive Least Usage (ALU) 利用它的一种评价方式,把一些要素如磁盘利用率、文件访问频率(读、写分开)、响应速度等综合起来考虑,做出的一种自适应的调度方式。其实现是4 种调度中最复杂的。
  • Non-Uniform Filesystem Scheduler 这个有点象NUMA ,一种结合SMP 和Mpp以及cluster 优点的内存管理方式,它的一个特点就是在创建文件时优先在本地创建文件。
  • Random scheduler 随机调度器,使用随机数发生器,选择子卷。
  • Round-Robin (RR) scheduler 螺旋线调度算法,它会将数据包均匀的分发给各台服务器,它把所有的服务器放在相等的地位上,而不会实际的去考虑各台服务器的差异,如负载,响应等等,如有4 台服务器,调度序列可能就是ABCDABCDABCDABCD。。。


glusterfs提供3种形式的磁盘组织方式:

  1. unify(有点像jbod,需要namespace服务器)、
  2. stripe(有点像raid0)
  3. afr(有点像raid1)

每种磁盘组织方式都涉及到一个io的调度,叫io scheduler,有上述4种调度方式:   

 

unify中对数据的分配是基于file,stripe是基于block。   glusterfs的server端(提供磁盘)的配置简单,只需要运行一个glusterfsd进程。磁盘如何使用取决于client端的配置文件,可对server端export出来的目录进行多种搭配,达到各种性能效果。例如先做afr,在做stripe,即可实现类似raid1+0的效果。


理论上的东西文档较少,如果只有一台client,多台server的搭配下,并不能发挥glusterfs的性能优势,甚至比单纯的 nfs还要差好多,至于为什么,一个是由于资料较少,我不敢妄下定论;另外一个原因是我试验环境下网络条件实在太差,在测试stripe的情况总是受限于 10M的带宽。官方测试用的是Infiniband,这个我没接触过,不知实际情况。   官方强调的是,在多client且client相同数量的情况下,client的总带宽是大大优于nfs的,测试数据可以参考官方。

 

参考:http://bbs.chinaunix.net/thread-2085059-1-1.html

你可能感兴趣的:(gluster)