Chinaunix首页 | 论坛 | 博客
  • 博客访问: 923375
  • 博文数量: 119
  • 博客积分: 6248
  • 博客等级: 准将
  • 技术积分: 1419
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-08 14:14
文章分类

全部博文(119)

文章存档

2014年(1)

2012年(1)

2011年(2)

2010年(22)

2009年(81)

2008年(12)

分类: LINUX

2009-12-14 18:05:46


由于公司需要,为了能够提供一个安全的文件系统,需要搭建一个分布式文件系统,因此在网上进行了一翻的搜索之后发现了moosefs这个分布式文件系统,比起其他分布式文件系统来说这个分布式文件系统安装以及配置都是相当的简单,于是就在本地进行安装以及配置,把自己安装以及过程写出来以防以后的查阅.此文章参考了
网上的一些资料,如有雷同请作者见谅.
 
moosefs分布式文件系统分为3个部分:
1、 元数据服务器.在整个体系中负责管理管理文件系统,目前MFS只支持一个元数据服务器master,这是一个单点故障,需要一个性能稳定的服务器来充当.希望今后MFS能支持多个master服务器,进一步提高系统的可靠性.
 
2、 数据存储服务器chunkserver.真正存储用户数据的服务器.存储文件时,首先把文件分成块,然后这些块在数据服务器chunkserver之间复制(复制份数可以手工指定,建议设置副本数为3).数据服务器可以是多个,并且数量越多,可使用的“磁盘空间”越大,可靠性也越高.
 
3、客户端.使用MFS文件系统来存储和访问的主机称为MFS的客户端,成功挂接MFS文件系统以后,就可以像以前使用NFS一样共享这个虚拟性的存储了.
 
元数据服务器安装和配置
 
 
下载地址为:
 
 1.安装元数据
 
 #tar zxvf mfs-1.5.12.tar.gz
 #cd mfs-1.5.12
 #useradd mfs –s /sbin/nologin 
 #./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
 #make
 #make install
 
 2.配置元数据
 
   元数据服务器的配置文件是mfsmaster.cfg,其内容如下:
   
   # WORKING_USER = mfs
   # WORKING_GROUP = mfs
   # LOCK_FILE = /var/run/mfs/mfsmaster.pid
   # DATA_PATH = /usr/local/mfs/var/mfs
   # SYSLOG_IDENT = mfsmaster
   # BACK_LOGS = 50
   # REPLICATIONS_DELAY_INIT = 300
   # REPLICATIONS_DELAY_DISCONNECT = 3600
   # MATOCS_LISTEN_HOST = *
   # MATOCS_LISTEN_PORT = 9420
   # MATOCU_LISTEN_HOST = *
   # MATOCU_LISTEN_PORT = 9421
   # CHUNKS_LOOP_TIME = 300
   # CHUNKS_DEL_LIMIT = 100
   # CHUNKS_REP_LIMIT = 15
    LOCK_FILE = /var/run/mfs/mfsmaster.pid 文件锁所在的位置,它的功能是避免启动多次启动同一个守护进程.由于系统中本来不存在目录 /var/run/mfs,因此需要手动创建 mkdir /var/run/mfs,然后更改其属主 chown -R mfs:mfs /var/run/mfs 这样MFS 服务就能对这个目录有创建/写入 mfsmaster.pid 文件的权限了.
  
   DATA_PATH = /usr/local/mfs/var/mfs 数据存放路径,只元数据的存放路径.
  
   MATOCS_LISTEN_PORT = 9420 MATOCS--master to chunkserver,即元数据服务器使用9420这个监听端口来接受数据存储服务器chunkserver端的连接.
  
   MATOCU_LISTEN_PORT = 9421 元数据服务器在9421端口监听,用以接受客户端对MFS进行远程挂接(客户端以mfsmount挂接MFS
  
   其他部分看字面意思都不难理解.还有几个与时间有关的数值,其单位是秒.
 
   元数据服务器可以单独启动,即使没有任何数据存储服务器(chunkserver)也是能正常工作的,因此当我们安装配置完MFS后,即可启动它.执行命令 /usr/local/mfs/sbin/mfsmaster start,如果没有意外,元数据库服务器就应该作为一个守护进程运行起来.通过如下方法看是否启动成功了:
   
   #netstat -lntpu
   tcp        0      0 0.0.0.0:9420                0.0.0.0:*                   LISTEN      14164/mfsmaster    
tcp        0      0 0.0.0.0:9421                0.0.0.0:*                   LISTEN      14164/mfsmaster    
 
  
   关闭元数据服务器,务必使用 /usr/local/mfs/sbin/mfsmaster –s 这种方式,如果直接使用kill杀死进程,将导致下次启动时出现找不到相关文件,而不能正常启动服务器。这个一定要谨慎.当然,如果发生了这个事情,还是可以通过 mfsmetastore 来恢复的.
 
  数据存储chunkserver服务器的安装配置
 
 
  1.安装数据存储
  
   
    #tar zxvf mfs-1.5.12.tar.gz
    #cd mfs-1.5.12
    #useradd mfs –s /sbin/nologin 
    #./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default- group=mfs
    #make
    #make install
 
  2.配置数据存储
 
   
    数据存储服务器有2个配置服务器需要修改,一个是主配置文件 mfschunkserver.cfg,另一个配置文件是 mfshdd.cfg.每个服务器用来分配给MFS使用的空间最好是一个单独的硬盘或者一个raid卷,最低要求是一个分区.这里我使用的是在虚拟机上新添加一块硬盘,并且把这个硬盘独立为一个分区/dev/sdb  20G   77M   19G   1% /mfs.
   
   修改配置文件 /usr/local/mfs/etc/mfschunkserver.cfg.下面是修改了的配置文件:
   
   # WORKING_USER = mfs
   # WORKING_GROUP = mfs
   # DATA_PATH = /usr/local/mfs/var/mfs
   # LOCK_FILE = /var/run/mfs/mfschunkserver.pid
   # SYSLOG_IDENT = mfschunkserver
   # BACK_LOGS = 50
   # MASTER_RECONNECTION_DELAY = 30
   MASTER_HOST = 10.10.1.161
   MASTER_PORT = 9420
   # MASTER_TIMEOUT = 60
   # CSSERV_LISTEN_HOST = *
   # CSSERV_LISTEN_PORT = 9422
   # CSSERV_TIMEOUT = 60
   # CSTOCS_TIMEOUT = 60
   # HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg
  
    MASTER_HOST = 10.10.1.161 元数据服务器的名称或地址,可以是主机名,也可以是ip地址,只要数据存储服务器能访问到元数据服务器就行.
   
    LOCK_FILE = /var/run/mfs/mfschunkserver.pid 与元数据服务器master的处理完全相同.
   
    CSSERV_LISTEN_PORT = 9422 CSSERV—chunkserver,这个监听端口用于与其它数据存储服务器间的连接,通常是数据复制.
   
    HDD_CONF_FILENAME = 分配给MFS使用的磁盘空间配置文件的位置.
 
    修改配置文件/usr/local/mfs/etc/mfshdd.cfg.
   
    这里我使用的是在虚拟机上新添加一块硬盘,并且把这个硬盘独立为一个分区/dev/sdb  20G   77M   19G   1% /mfs.为了使mfs拥有写目录的权限,需要修改目录的属主.我的服务器的分区挂接点是 /mfs , chown -R mfs:mfs /mfs 把属主改变.因为我的每个服务器只需贡献一个分区做为MFS,因此配置文件只需要如下一行内容就可以了:
  
   /mfs
  
   启动数据存储
  
   #/usr/local/mfs/sbin/mfschunkserver start
   #netstat -lntpu
  
   tcp        0      0 0.0.0.0:9422                0.0.0.0:*                   LISTEN      4139/mfschunkserver
  
   可以看到数据存储已经打开了相关的端口,这个时候我们到元数据服务器上看看链接情况
   #netstat -an
  
   tcp        0      0 10.10.1.161:9420            10.10.1.58:35284            ESTABLISHED
tcp        0      0 10.10.1.161:9421            10.10.2.176:19714           ESTABLISHED
 
   可以看到元数据服务器以及有相关的链接了,说明数据存储与元数据节点已经进行了通信,
   我在另外一台虚拟机上重新配置了一个数据存储,配置上相同的.
 
   关闭数据存储服务器
 
  跟元数据服务器master相似,执行命令 /usr/local/mfs/sbin/mfschunkserver –s,
  chunkserver服务就停下来了.为了使系统重启过程能自动启动chunkserver 服务,可以通过
  在/etc/rc.local文件追加行  /usr/local/mfs/sbin/mfschunkserver start
 
  
  MFS客户端的安装及配置
 
  1.安装MFS客户端
  Mfsmount需要依赖FUSE,因此需要先安装好fuse,这里我选用 fuse-2.7.4.tar.gz.
 
  #tar zxvf fuse-2.7.4.tar.gz
  #cd fuse-2.7.4.
  #./configure
  #make
  #make install
  2.安装MFS客户端程序
 
   修改环境变量文件/etc/profile,追加下面的行,然后再执行命令source /etc/profile使修改生效
   export KG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
 
    #tar zxvf mfs-1.5.12.tar.gz
    #cd mfs-1.5.12
    #useradd mfs –s /sbin/nologin 
    #./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default- group=mfs --enable-mfsmount
    #make
    #make install
   
    挂接和使用MFS文件系统
 
     创建挂接点 mkdir /mnt/mfs
     挂接MFS /usr/local/mfs/bin/mfsmount –h 10.10.1.161.注意,所有的MFS都是挂接同一个
     元数据服务器master,而不是其他数据存储服务器chunkserver!
    
     原分区情况:
     # df -h
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/hda1              15G  4.0G   11G  27% /
    udev                  249M  108K  249M   1% /dev
    /dev/hda2              22G  511M   22G   3% /home
   
     挂载了MFS以后的情况

    # df -h
   Filesystem            Size  Used Avail Use% Mounted on
   /dev/hda1              15G  4.0G   11G  27% /
   udev                  249M  108K  249M   1% /dev
   /dev/hda2              22G  511M   22G   3% /home
   MFS                    40G  2.7G   37G   7% /mnt/mfs
   
     可以看到MFS分区是40G,因为我使用了2个各为20G的硬盘作为mfs分区.
     我们可以进去进行文件的添加以及删除来判断我们的挂载时候成功.
 
    
     设置文件副本数量,我这里设置为3个.
     #cd /usr/local/mfs/bin
     #./mfsrsetgoal 3 /mnt/mfs
 
       /mnt/mfs:
   inodes with goal changed:         2 (2)
   inodes with goal not changed:     0 (0)
   inodes with permission denied:    0 (0)
  
    设置删除文件后空间回收时间,默认为7天,我这里改为10分钟
   
     #cd /usr/local/mfs/bin
     # ./mfsrsettrashtime 600 /mnt/mfs/
   /mnt/mfs/:
   inodes with trashtime changed:         2 (2)
   inodes with trashtime not changed:     0 (0)
   inodes with permission denied:         0 (0)
   
    这样整个MFS的分布式系统全部安装配置完成了.
 
 
   
  破坏性测试
 
 一、测试数据存储服务器
   
    我用3个服务器组成了MFS的存储平台,其中1个是master,其余2个服务器是chunkserver.先停止一个chunkserver服务,然后在某个MFS客户端往挂接点的目录(/mnt/mfs)里复制数据或者创建目录/文件、或者读取文件、或者删除文件,观察操作是否能正常进行.
 
    通过增减chunkserver服务器的测试,服务的可靠性确实不错,哪怕只剩下最后一个服务器,也能正常提供存储访问服务.
 
二、测试元数据服务器
 
   元数据服务器最重要的文件在目录 /usr/local/mfs/var/mfs,MFS每一个数据的变化,都被记录在这个目录的文件里,我们可以通过备份这个目录的全部文件,来保障整个MFS文件系统的可靠性.在正常情况下,元数据服务器的改变日志文件(changelogs)实时地、自动地复制到所有的数据存储服务器,并且以changelog_csback.*.mfs的形式命名.换句换说,即使元数据服务器报废了,也能再部署一个元数据服务器,然后从数据存储服务器chunkserver取得恢复所需要的文件.
 
   本地测试
  
   1、停止元数据服务 /usr/local/mfs/sbin/mfsmaster
   2、备份元数据服务器数据 cd /usr/local/mfs/var; tar czvf mfs.tgz mfs
   3、删除目录 mv mfs mfs.bk rm –rf mfs
   4、启动元数据服务 ../sbin/mfsmaster start 启动失败,提示不能初始化数据.
   5、解包 tar zxvf mfs.tgz
   6、执行恢复操作 .. /sbin/mfsmetarestore –a
   7、启动元数据服务 ../sbin/mfsmaster start
   8、在MFS客户端检查MFS存储的数据是否跟恢复前一致?能否正常访问等等.
  
   迁移测试
   
    1、  安装新的MFS元数据服务器.
2、  复制元数据服务器数据目录(/usr/local/mfs/var/mfs)到这个新的元数据服务器.
3、  停止原先的那个元数据服务器(关闭计算机或停止它的网络服务).
4、  更改新的元数据服务器的ip为原来那个服务器的ip.
5、  启动新的元数据服务 /usr/local/mfs/sbin/mfsmaster start
6、  MFS客户端检查MFS存储的数据是否跟恢复前一致?能否正常访问等等.
阅读(1487) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

huifeideluotuo2009-12-21 09:51:55

用于生产环境没有? 有没有发现什么异常?