找回密码
 新注册用户
搜索
查看: 17148|回复: 26

赛总交你创建简单的MooseFS分布式文件系统

  [复制链接]
发表于 2010-10-15 19:19:05 | 显示全部楼层 |阅读模式
本帖最后由 saco 于 2010-10-15 19:29 编辑

首先这篇文章的主旨要是让大家可以在廉价的硬件投入下创建强大的网络型类RAID文件系统

我们知道 在网络存储中,IO是开销最高的一块,如果在大量IO并发的情况下,不采用光纤或硬件ISCSI,根本不可能实现高负载的应用,而如果使用前两种方法,你基本就是百万级以上的投入。
今天我向大家介绍一种比较简单的方法来实现高效简便的方法来实现网络分布存储,举个例子来说,如果我们有10台计算机,每台的硬盘为1TB,那么我们就可以建立一个10TB的分布式文件系统,而将这10台计算机链接到一台非常低端的linksys千兆交换机上,就可以获得几乎等同于光纤的效率。

接下来介绍主角:开源的分布式文件系统 MooseFS

Moofs 分为4个部分,控制主机,存储主机,日志主机,以及客户端。
以下操作系统均为64位Centos 5.5 Linux

共分为8台主机,1台为控制主机 6台为存储主机 1台为客户端

1:安装MFS控制主机
  1. mkdir /software
  2. cd /software
  3. wget http://downloads.sourceforge.net/project/moosefs/moosefs/1.6.17/mfs-1.6.17.tar.gz
  4. tar zvf mfs-1.6.17.tar.gz
  5. cd mfs-1.6.17
  6. useradd mfs -s /sbin/nologin
  7. ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
  8. make
  9. make install
  10. cd /usr/local/mfs/etc/
  11. cp mfsmaster.cfg.dist mfsmaster.cfg cp mfsexports.cfg.dist mfsexports.cfg
  12. cd usr/local/mfs/var/mfs/
  13. cp metadata.mfs.empty metadata.mfs
  14. /usr/local/mfs/sbin/mfsmaster start
复制代码
停止控制主机服务命令
  1. /usr/local/mfs/sbin/mfsmaster -s
复制代码
启动和停止控制主机WEB GUI命令
  1. 启动: /usr/local/mfs/sbin/mfscgiserv
  2. 停止: kill /usr/local/mfs/sbin/mfscgiserv
复制代码
客户端网段设定
  1. 在mfsexports.cfg中,设定类似
  2. 192.168.28.0/24 . rw
  3. 192.168.28.0/24 /        rw
复制代码
2:安装MFS存储主机

以下操作需要在所有存储服务器上执行

安装ChunkServer
  1. mkdir /software
  2. cd /software
  3. wget http://downloads.sourceforge.net/project/moosefs/moosefs/1.6.17/mfs-1.6.17.tar.gz
  4. tar zvf mfs-1.6.17.tar.gz
  5. cd mfs-1.6.17
  6. ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
  7. make
  8. make install
  9. cd /usr/local/mfs/etc/
  10. cp mfschunkserver.cfg.dist mfschunkserver.cfg
  11. cp mfshdd.cfg.dist mfshdd.cfg
复制代码
创建50G的LoopDevice文件并挂载到/mfs目录
  1. dd if=/dev/zero of=/opt/mfs.img bs=1M count=50000
  2. cd /opt
  3. losetup /dev/loop0 mfs.img
  4. mkfs.ext3 /dev/loop0
  5. mkdir /mfs
  6. mount -o loop /dev/loop0 /mfs
  7. chown mfs:mfs /mfs
复制代码
编辑mfschunkserver.cfg文件
  1. nano /usr/local/mfs/etc/mfschunkserver.cfg

  2. 将内容替换为
  3. WORKING_USER = mfs
  4. WORKING_GROUP = mfs
  5. SYSLOG_IDENT = mfschunkserver
  6. LOCK_MEMORY = 0
  7. NICE_LEVEL = -19

  8. DATA_PATH = /usr/local/mfs/var/mfs

  9. MASTER_RECONNECTION_DELAY = 5

  10. # BIND_HOST = *
  11. MASTER_HOST = 此处填控制主机的ip地址
  12. MASTER_PORT = 9420

  13. MASTER_TIMEOUT = 60

  14. CSSERV_LISTEN_HOST = *
  15. CSSERV_LISTEN_PORT = 9422
  16. CSSERV_TIMEOUT = 5

  17. HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg
  18. HDD_TEST_FREQ = 10

  19. # deprecated, to be removed in MooseFS 1.7
  20. # LOCK_FILE = /var/run/mfs/mfschunkserver.lock
  21. # BACK_LOGS = 50
复制代码
编辑mfshdd.cfg文件
  1. nano /usr/local/mfs/etc/mfshdd.cfg

  2. 在最下方输入
  3. /mfs
复制代码
启动存储服务器
  1. /usr/local/mfs/sbin/mfschunkserver start
复制代码
如果要停止存储服务器
  1. /usr/local/mfs/sbin/mfschunkserver stop
复制代码
3:安装MFS客户端

安装fuse
  1. yum install kernel.x86_64 kernel-devel.x86_64 kernel-headers.x86_64
  2. reboot
  3. yum install fuse.x86_64 fuse-devel.x86_64 fuse-libs.x86_64
  4. modprobe fuse
复制代码
安装客户端
  1. mkdir /software
  2. cd /software
  3. wget http://downloads.sourceforge.net/project/moosefs/moosefs/1.6.17/mfs-1.6.17.tar.gz
  4. tar zvf mfs-1.6.17.tar.gz
  5. cd mfs-1.6.17
  6. ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount
  7. make
  8. make install
复制代码
挂载分布式文件系统
  1. mkdir /mfsmount
  2. /usr/local/mfs/bin/mfsmount /mfsmount -H 控制主机ip地址
复制代码
挂载分布式文件系统回收站
  1. mkdir /mfsmeta
  2. /usr/local/mfs/bin/mfsmount -m /mfsmeta -H 控制主机ip地址
复制代码
执行 df -ah
可以看到已挂载了一块分布式文件系统到 /mfsmount

在客户端设定副本份数
  1. /usr/local/mfs/bin/mfssetgoal -r 3 /mfsmount
复制代码
在客户端设定回收站自动删除的时间间隔
  1. /usr/local/mfs/bin/mfsgettrashtime 100 /mfsmount
复制代码
注意 可在多台主机上同时挂载分布式文件系统,以实现多机存储同步

接下来到了大家期待的性能测试部分了,本测试在6台50g SSD存储服务器上完成
执行以下命令可看到已挂载乐一块由6台服务器上50G硬盘组成的266G的硬盘
  1. df -ah
  2. mfs#10.0.0.2:9421     266G     0  266G   0% /mfsmount
复制代码
在客户端执行
  1. cd /mfsmount
  2. dd if=/dev/zero of=1.img bs=1M count=5000
  3. 5000+0 records in
  4. 5000+0 records out
  5. 5242880000 bytes (5240 MB) copied, 6.56476 seconds, 799 MB/s
复制代码
注意 可在多台同步的主机上同时创建文件,将受到交换机的速度的影响

如此便可以实现任何网域内的分布式存储系统了

评分

参与人数 4基本分 +40 收起 理由
ONLY + 6 这个牛!也烧钱!
vennyfan + 8 精品文章
caozhonghua + 6 精品文章
金鹏 + 20 精品文章

查看全部评分

回复

使用道具 举报

发表于 2010-10-15 19:28:21 | 显示全部楼层
没有看懂,这个东东到底能够实现什么功能?比如我家里有两台电脑,有千兆连接的话,可以实现什么存储功能呢?
回复

使用道具 举报

 楼主| 发表于 2010-10-15 19:37:47 | 显示全部楼层
很简单,当我要创建一个100TB的存储器时,如果是单机,我需要购买昂贵的RAID卡,并且需要一条光纤来实现传输速度,而且在客户端,也需要配套的光纤来接受数据

而采用分布式文件系统,网内所有计算机的磁盘都统一为一块存储器,通过简单的加法,所有的计算机的带宽将叠加在一起,从而实现在极小资金投入的情况下,实现IO效能的极大提升,这样的做法早在google及facebook等公司大量应用了
回复

使用道具 举报

发表于 2010-10-15 19:55:18 | 显示全部楼层
如果可以非常方便的做系统应用的备份与还原,这种低成本的方法,用到小公司也很有帮助.
回复

使用道具 举报

发表于 2010-10-15 20:57:33 | 显示全部楼层
12年专业存储经验飘过。
回复

使用道具 举报

发表于 2010-10-15 21:22:44 | 显示全部楼层
虽然看不太懂但是知道大神出品必属精品
回复

使用道具 举报

发表于 2010-10-15 22:18:22 | 显示全部楼层
赛总。。。

这个称号真给力。。
回复

使用道具 举报

发表于 2010-10-15 22:45:43 | 显示全部楼层
网络的话,如果单机需要IO太多,那还是受网络限制,除非是上万兆了。采用 N 千兆 + 1 万兆的交换机,就能让万兆的那台机享受超高的IO速度,而千兆的机只需要普通的硬盘。但这样下来,这么多千兆机去堆速度,可能也费不少钱。应该是各种方式有各种方式的好处,不同的场合有不同的需要,所以 光纤通道 和 ISCSI 才并存了这么久,就是有着不同的市场需求。

我想,楼主说的这种方式也是有前景的,因为如果它能将存储变得跟 NLB 一样简单的话,那会很方便,其中一台机坏了,不会影响数据,通过软件方式的实现,可以简单地通过数量上的增加来在线扩展,只受网络限制而不像硬件那样有固定的磁盘端口数限制(不过有些设备也是能通过类似级联的方式大量扩展),而且硬件式的存储机子如果坏了,那是比较麻烦的,就算有另一台热备不影响使用,但坏掉的总得修或换,在这个修或换的过程中,可就不是每个地方都有第三台硬件来热备了。
回复

使用道具 举报

发表于 2010-10-15 22:46:10 | 显示全部楼层
我突然想起了淘宝的图片存储系统
回复

使用道具 举报

 楼主| 发表于 2010-10-15 23:28:28 | 显示全部楼层
回复 8# 彬彬


首先从交换机层面来说,一台千兆交换机,并不是说,你只能同时交换1000Mb数据,而是交换机某一个端口的的峰值速度不可超过1000Mb,那就是说,一台比较好的48口千兆交换机,可以在48个端口同时输出1000Mb的数据,除以8,也就是125MBx48=6GB一秒

然后再说48个连接在交换机上的存储机,每台配置2块1TB希捷蓝盘,组成RAID0,然后同时级联到交换机上,组成96TB的存储器,顺发带宽的极限是6GB

注意,这里用到的仅仅是一台万元级千兆交换机,以及48台可以是每台1500元由AMD双核组成的存储主机,那么价格折算下来,1500x48+10000=73000 RMB,而73000RMB连一个专业RAID服务器都买不到,更不要说在这个RAID服务器上加硬盘和带宽了

我在一楼提供的开源分布式存储系统早已拥有了容灾,恢复,备份,复制以及回收站的功能,在这里我先说下未来的存储趋势,存储器与分布式计算异曲同工,将超级存储器的成本转化为无数台普通计算机上,从而实现成本的巨大下降

光纤通道和硬件ISCSI会应用在何种领域?单纯用他们去作存储的唯一方式,我想现今不会有任何一家国际公司笨到如此地步,他们只会被应用在更大的分布式存储架构上,抛开小型的MFS,例如Hadoop,级联2000台以上的存储器以及芯片时,需要为主机及主交换器配置万兆网络,那么光纤才会派的上用处。

我可以很负责任的告诉你

在Google,不开源的关键3种程序

1:GFS     Google FileSystem   超大型分布式文件系统
2:GBT     Google Big Table      超大型分布式B+树Hash数据库
3:关键算法

基于这3个基础,Google在全世界的服务器,除了最终的数据仓库,剩余的数万台服务器都只是四核/双核/单核 普通家用主机而已
回复

使用道具 举报

发表于 2010-10-15 23:46:18 | 显示全部楼层
回复 8# 彬彬

彬彬算友,给你再提个建议。以后不管对其他人是作有益的补充,还是挑战性的反驳,都需要对这个主题有点solid knowledge  or hands-on experience。

否则的话,论坛尽管是自由讨论的地方,但你的YY类言论会影响别人正常阅读的情绪。   

SACO的这个介绍本来很好,可被你这么所谓的辩驳一下,看起来就觉得不连贯。你觉得呢?
回复

使用道具 举报

发表于 2010-10-15 23:46:33 | 显示全部楼层
应用需推动 技术创新。技术没有最好只有最合适
回复

使用道具 举报

发表于 2010-10-16 09:26:55 | 显示全部楼层
这个东东的前面再挂上memcache,不知道会如何?   

对于现在的磁性介质来说,即便是48台RAID0,估计IOPS也不会有很高~~~

高性能场合貌似只能应用SSD来组建,不过SSD的成本对于中小型企业来说还是有点嫌高(除非是专在网上烧钱或者业务主要靠网络的主)~~~

再有一点,作为开源项目,其稳定性如何?有没大规模部署的实际案例等等均会影响用户选用~~~

不过这个东东结合了EXT3文件系统和网络分布式的优点,发展前景非常好,对IOPS有比较高要求的可以酌情选用~~~
回复

使用道具 举报

发表于 2010-10-16 11:10:09 | 显示全部楼层
暂时还用不上,先学习学习……
回复

使用道具 举报

 楼主| 发表于 2010-10-16 11:27:20 | 显示全部楼层
详细性能测试1 T3大文件读写测试
bonnie++ -d /mfs -u root -s 32104 -m billing
Using uid:0, gid:0.
Writing with putc()...done
Writing intelligently...done
Rewriting...done
Reading with getc()...done
Reading intelligently...done
start 'em...done...done...done...
Create files in sequential order...done.
Stat files in sequential order...done.
Delete files in sequential order...done.
Create files in random order...done.
Stat files in random order...done.
Delete files in random order...done.
Version  1.03       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
billing      32104M 47770  67 81706   9  3508   0 70727  88 66756   5  2968   4
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16  1793   5 +++++ +++  6719  12  1247   2  9358   8  3034   8
billing,32104M,47770,67,81706,9,3508,0,70727,88,66756,5,2967.7,4,16,1793,5,+++++,+++,6719,12,1247,2,9358,8,3034,8
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 新注册用户

本版积分规则

论坛官方淘宝店开业啦~
欢迎大家多多支持基金会~

Archiver|手机版|小黑屋|中国分布式计算总站 ( 沪ICP备05042587号 )

GMT+8, 2024-4-19 13:41

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表