sheepdog是NTT日本电报电话公司开源的一个分布式文件系统,初衷就是要做一个aws的ebs开源实现,可以实现镜像和块设备(block device)的分布式存储 sheepdog不是一个常规的文件系统,而是针对qemu/kvm的一个分布式存储管理系统,实现了存储的虚拟化
? 官网: http://www.osrg.net/sheepdog? 现在的稳定版是0.3 2012.6底要发布0.4版,预计2012年底发布1.0版 网上有个官方介绍的pdf,地址如下: http://vdisk.weibo.com/s/6c9tS
基本概念定义 节点node:指部署sheepdog的物理机,数据实际存储的地方 vdi:virtural disk image,虚拟磁盘镜像,包括系统镜像和块镜像,kvm-img命令建立的
1.设计理念 sheepdog把所有的镜像(系统镜像和块镜像)都当成小绵羊(vdi–vitural disk image),然后通过corosync这只dog来管理(集群管理,和consistent hash一致性hash算法组成类p2p的dht,distribute hashtable),比如某只小羊生病了或挂了,赶出羊圈,找某只小羊(定位vdi),安置某个小羊(分布存储)等等,贴张图
去中心化、全对称的架构(non-center or symmetric) 其设计思想是采用一致性哈希consistent hash算法(DHT的一种实现,关于一致性hash具体参考后面的链接)来定位文件在存储节点中的位置,从而取消了metadata server的角色
整个系统只有storage node一个角色,不区分元数据和数据块;
2.架构 sheepdog采用完全对称架构 fully symmetric,即集群中所有设备的角色和配置是一样的(其实基本没什么配置,编译安装完了,启动corosync和sheepdog守护进程就ok了),不像传统的分布式存储,有专门的metadata server来存储文件在集群中位置啊、文件大小啊等等元数据,然后还得考虑metadata的单点问题SPoF,比如FastDFS、hdfs、luster和moosefs就是如此。 sheepdog用corosync的多播和一致性hash算法来替代metadata server,实现 fully symmetric
sheepdog包括几个部分:
I,节点node文件系统File system 节点上的文件系统其实并不能算做sheepdog的组成部分,不关心下面的存储系统是什么,ext3、ext4、xfs都可以,但有个要求,需要支持xattr属性才行 对于ext3,ext4,执行下面的命令,以便支持xattr mount -o remount,user_xattr /rpool/vm0/sheepdog 为了实现多级卷备份和快照架构,建议采用zfs文件系统,后面的系列文章会详细介绍zfs+sheepdog实现高可用虚拟存储系统的方法;zfs默认挂载即支持xattr属性
II,对象存储Obj storage sheepdog对象存储采用常规的key/value hashmap的方式存储数据对象,大文件被分割成4M,可以存储多个副本,默认是3份,学ebs 云存储的冗余备份为啥是3份?(aws就这么干的),古埃及的罗塞塔rosetta石碑用古埃及象形文字、埃及拼音和古希腊文三种文字记录一段历史,就算象形文字缺了一部分,没人能看懂,也能破译补全,这大概也是raid5的思想起源吧
object storage包括两部分,一个gateway,一个object manager gateway是个数据对象读写的路由,根据一致性哈希算法,定位被分割对象在节点集群的读写位置 obj manager是本地存储的管理器,目录结构如下: ? ll /rpool/vm1/sheepdog/ 总用量 10 drwxr-x— 5 root root ? ?7 ? 6月 ? 5 16:12 ./ drwxr-xr-x 6 root root ? ?8 ? 6月 ? 5 16:39 ../ -rw-r—– 1 root root ? ?0 ? 6月 ? 5 16:12 config drwxr-x— 2 root root ? ?2 ? 6月 ? 5 16:12 epoch/ drwxr-x— 2 root root ? ?2 ? 6月 ? 5 16:12 journal/ drwxr-x— 2 root root ? ?2 ? 6月 ? 5 16:12 obj/ -rw-r–r– 1 root root 759 ? 6月 ? 5 16:13 sheep.log
III,VDI或者叫vm 就是虚拟机了,sheepdog通过qemu的接口使VDI挂载block卷
IV,corosync集群管理器 节点上安装,通过p2p多播muti-cast方式维护集群的节点信息。如果某个节点A状态有变,如宕机,token多次传递中断,主控就在群里吆喝一声,哥们A挂了,群里的节点们就更新自己的节点信息,登记A已阵亡。节点重新组环,数据重新排布,具体参考 http://www.slideshare.net/chinainvent/totemsrprrp 还在学习corosync和totem single ring 为了维护存储节点的信息,一般采用P2P技术的totem single ring算法(corosync是一种实现)来维护和更新node路由信息 对称架构有一个问题,采用totem single ring算法的存储节点数量有限,因为node数量超过1000,集群内的通信风暴就会产生,效率下降,sheepdog提出了一个解决方案,就是在一致性hash环上做嵌套处理,如图
参考资料 https://github.com/collie/sheepdog/wiki/Sheepdog-Design http://peterylh.blog.163.com/blog/static/12033201221594937257/ http://www.ntt.co.jp/RD/OFIS/active/2011pdfe/hot/pf/01.html 79457862