Upgrade to Pro — share decks privately, control downloads, hide ads and more …

glusterfs 文件系统

LI Daobing
October 25, 2008

glusterfs 文件系统

LI Daobing

October 25, 2008
Tweet

More Decks by LI Daobing

Other Decks in Programming

Transcript

  1. 你的需求是什么? 我知道你需要一个分布式文件系统,但你的需求究竟是什么? •文件储存与提取 只需要支持文件的存储,提取,删除,比如 flickr 这类的网站。 那么mogilefs 能够满足你的需求, 甚至你可以自行设计系统。 •一个通用的文件系统

    你需要你的程序无须做任何更改就可以运行在新的文件系统, 那么 glusterfs 可以满足你的需求, 当然 NAS 也不错,不过他比 较贵。 • 一个通用的块设备 我玩过LVM, 他很酷,但是不能跨网络,SAN应该能满足你的需 求,不过也许你想了解一下 iSCSI
  2. 我还应当关心写什么? •解决方案是否廉价: 找几台破机器,装一堆硬盘,软件装上就可 以用,还是从 IBM 买一个黑盒子? •是否能防止单点故障: 一台机器坏了,没关系,系统不受影响。 •是否支持在线扩容? •小文件/大文件:系统优化的目标

    •文件切割: 是否需要支持文件切割(stripe) •数据冗余: •容错还是容灾: 容错(版本关系系统,延后删除),容灾(异地备 份) •同步/备份距离: 为了预防火灾,地震,暴乱,嗯,我在月球弄了 一个镜像服务器。 •技术是否稳定: 平均故障时间
  3. 我还应当关心写什么?(glusterfs的表现) •解决方案是否廉价: 找几台破机器,装一堆硬盘,软件装上就可 以用,还是从 IBM 买一个黑盒子? (是) •是否能防止单点故障: 一台机器坏了,没关系,系统不受影响。 (是)

    •是否支持在线扩容? (否) •小文件/大文件:系统优化的目标 (大文件较好) •文件切割: 是否需要支持文件切割(stripe) (是) •支持数据冗余: (是) •容错: 容错(版本管理系统,延后删除) (否) •容灾: 容灾(异地备份) (是) •同步/备份距离: 为了预防火灾,地震,暴乱,嗯,我在月球弄了 一个镜像服务器。 (否) •技术是否稳定: 平均故障时间 (否)
  4. 大规模文件存储的几种实现 •硬件 ◦DAS ◦NAS ◦SAN •软件 ◦glusterfs (Z Research, GPL)

    ◦MogileFS(DANGA, GPL/Artistic) ◦lustre (SUN, GPL) ◦GFS (Google,Proprietary) ◦Hadoop (Apache Software Fundation, Apache License)
  5. 设计上的难点 •多客户端,竞态,一致性 ◦如果多台电脑同时打开同一个文件,读写过程中会造成系统 不一致。 ◦没有稳定的文件锁 API 实现(?)。 • 该死的 Cache

    ◦你伪装成一个本地文件系统,系统就信以为真了。 ◦你向系统写一个文件,完成后通知另外一个客户端读文件, 结果文件还在系统的缓存里。 ◦情况更糟糕,即是同一个客户端的另外一个进程也会出错。
  6. Quote Nobody should start to undertake a large project. You

    start with a small _trivial_ project, and you should never expect it to get large. If you do, you'll just overdesign and generally think it is more important than it likely is at that stage. Or worse, you might be scared away by the sheer size of the work you envision. So start small, and think about the details. Don't think about some big picture and fancy design. If it doesn't solve some fairly immediate need, it's almost certainly over-designed. And don't expect people to jump in and help you. That's not how these things work. You need to get something half- way _useful_ first, and then others will say "hey, that _almost_ works for me", and they'll get involved in the project. Linus Travalds, Linux Times (2004-10-25)