(1)关于MOoseFS

到目前为止,有数十种以上的分布式文件系统解决方案可选择,如Lustre、Hadoop、
PNFS等,现在我们来介绍下MFS这种分布式文件系统来作为我们的共享存储服务器。
为什么选择他,我们来看看一些看法:
. 实施起来简单
. 不停服务扩容。(MFS框架做好后,随时可以增加服务器的扩充容量和减少
 服务器的容量不影响现有的服务
. 恢复服务容易
(2)MFS文件系统的组成
MFS分布系统由元数据服务器、元数据日志服务器(也称备份服务器)、数据存储服务器
客户端(用户主机)等几部分组成
. 元数据服务器。在整个体系中负责管理文件系统,目前MFS只支持一个元数据服务器
 Master,这是一个单点故障,需要一个性能稳定的服务器来充当,希望今后MFS能支持
 多个Master服务器,进一步提高系统的可靠性
 
. 元数据日志服务器(Metalogger).备份Master服务器的变化日志文件,文件类型为
changelog_ml.*.mfs,当元数据服务器数据丢失或者损毁,可从日志服务器取得文件
进行恢复
 
. 数据存储服务器Chunk Server,真正存储用户数据的服务器,存储文件时,首先把
 文件分成块,然后这些快在数据服务器Chunk Server之间复制(复制份数科院手工
 指定,建议设置副本数为3)。数据服务器可以是多个,并且数量越多,可以使用的
 磁盘空间越大,可靠性越高
 
. 客户端。使用MFS文件系统来存储和访问的主机称为MFS的客户端,成功挂接MFS文件
 系统以后,就可以像以前用NFS一样共享这个虚拟性的存储了
(3)MFS读写处理过程
* MFS读取数据步骤:
1. 客户端向元数据服务器发出请求
2. 元数据服务器把所需数据存放的位置(Chunk Server 的IP地址及Chunk编号)告知客户端
3. 客户端向已知Chunk Server请求发送数据
4. 客户端取得所需数据
数据传输并不通过元数据服务器,这既减轻了元数据服务器的压力,同时也大大增加了
整个系统的吞吐能力,在多个客户端读取数据时,读取点(Chunk Server)有可能被分散到不同
的服务器
* MFS写入数据步骤:
1. 客户端向元数据服务器发送写入请求
2. 元数据服务器与Chunk Server进行交互如下:
(1)元数据服务器指示在某些Chunk Server创建分块Chunks
(2)Chunk Server告知元数据服务器,步骤(1)的操作成功
3. 元数据服务器告知客户端,你可以在哪个Chunk Server的哪个Chunks写入数据
4. 向指定的Chunk Server写入数据
5. 与其他Chunk Server进行数据同步,同步的服务器依据设定的副本数而定,副本
 为2,则需同步一个ChunkServer
6. Chunk Sever之间同步成功
7. Chunk Server告知客户端数据写入成功
8. 客户端告知元数据服务器本次写入完毕
* MFS的删除文件过程
1. 客户端有删除操作时,首先向Master发送删除信息;
2. Master定位到相应元数据信息进行删除,并将chunk server上块的删除操作加入队列异步清理;
3. 响应客户端删除成功的信号
* MFS修改文件内容的过程
1. 客户端有修改文件内容时,首先向Master发送操作信息;
2. Master申请新的块给.swp文件,
3. 客户端关闭文件后,会向Master发送关闭信息;
4. Master会检测内容是否有更新,若有,则申请新的块存放更改后的文件,删除原有块和.swp文件块;
5. 若无,则直接删除.swp文件块。
* MFS重命名文件的过程
1. 客户端重命名文件时,会向Master发送操作信息;
2. Master直接修改元数据信息中的文件名;返回重命名完成信息;
* MFS遍历文件的过程
1. 遍历文件不需要访问chunk server,当有客户端遍历请求时,向Master发送操作信息;
2. Master返回相应元数据信息;
3. 客户端接收到信息后显示
注:
 1、Master记录着管理信息,比如:文件路径|大小|存储的位置(ip,port,chunkid)|份数|时间等,元数据信息
 存在于内存中,会定期写入metadata.mfs.back文件中,定期同步到metalogger,操作实时写入changelog.*.mfs,
 实时同步到metalogger中。master启动将metadata.mfs载入内存,重命名为metadata.mfs.back文件。
 
 2、文件以chunk大小存储,每chunk最大为64M,小于64M的,该chunk的大小即为该文件大小(验证实际chunk文件略
 大于实际文件),超过64M的文件将被切分,以每一份(chunk)的大小不超过64M为原则;块的生成遵循规则:目录
 循环写入(00-FF 256个目录循环,step为2)、chunk文件递增生成、大文件切分目录连续。
 
 3、Chunkserver上的剩余存储空间要大于1GB(Reference Guide有提到),新的数据才会被允许写入,否则,你会看
 到No space left on device的提示,实际中,测试发现当磁盘使用率达到95%左右的时候,就已经不行写入了,当时
 可用空间为1.9GB。
 
 4、文件可以有多份copy,当goal为1时,文件会被随机存到一台chunkserver上,当goal的数大于1时,copy会由master
 调度保存到不同的chunkserver上,goal的大小不要超过chunkserver的数量,否则多出的copy,不会有chunkserver去存。
 
三、MFS的安装、部署、配置
 
测试环境:
IP     作用          
192.168.0.1 master server

192.168.0.2 metalogger server

192.168.0.3 chunk server
 
192.168.0.4 chunk server

192.168.0.5 mfs client
3.1  Master Server
 
在192.168.0.1进行如下操作:
 
   
   
   
   
  1. 3.1.1 安装: 
  2.     # useradd mfs -s /sbin/nologin 
  3.     # wget http://www.moosefs.org/tl_files/mfscode/mfs-1.6.20-2.tar.gz
  4. # tar zxvf mfs-1.6.20-2.tar.gz 
  5.     # cd mfs-1.6.20-2/ 
  6.     # ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs 
  7. --disable-mfschunkserver --disable-mfsmount 
  8.     # make 
  9.     # make install 
  10.     # cd /usr/local/mfs/etc 
  11.     # cp mfsmaster.cfg.dist mfsmaster.cfg  #主配置文件 
  12.     # cp mfsexports.cfg.dist mfsexports.cfg #被挂接目录及权限配置 
  13.  
  14. 3.1.2 配置:    
  15.     #   vi /usr/local/mfs/etc/mfsmaster.cfg 
  16.     # WORKING_ USER = mfs      #运行master server 的用户 
  17.     # WORKING_ GROUP = mfs     #运行master server 的组 
  18.     # SYSLOG_IDENT = mfsmaster #master server 在syslog 中的标识,说明是由master serve 产生的 
  19.     # LOCK_MEMORY = 0          #是否执行mlockall()以避免mfsmaster 进程溢出(默认为0) 
  20.     # NICE_LEVEL = -19         #运行的优先级(如果可以默认是-19; 注意: 进程必须是用root 启动) 
  21.     # EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg #被挂接目录及其权限控制文件的存放位置 
  22.     # DATA_PATH = /usr/local/mfs/var/mfs    #数据存放路径,此目录下大致有三类文件,changelog,sessions 和stats; 
  23.     # BACK_LOGS = 50                        #metadata 的改变log 文件数目(默认是50); 
  24.     # REPLICATIONS_ DELAY_INIT = 300        #延迟复制的时间(默认是300s); 
  25.     # REPLICATIONS_ DELAY_DISCONNECT = 3600 #chunkserver 断开的复制延迟(默认是3600); 
  26.     # MATOML_LISTEN_HOST = *     #metalogger 监听的IP 地址(默认是*,代表任何IP); 
  27.     # MATOML_LISTEN_PORT = 9419 #metalogger 监听的端口地址(默认是9419); 
  28.     # MATOCS_LISTEN_ HOST = *   #用于chunkserver 连接的IP 地址(默认是*,代表任何IP); 
  29.     # MATOCS_LISTEN_PORT = 9420 #用于chunkserver 连接的端口地址(默认是9420); 
  30.     # MATOCU_LISTEN_HOST = *    #用于客户端挂接连接的IP 地址(默认是*,代表任何IP); 
  31.     # MATOCU_LISTEN_PORT = 9421 #用于客户端挂接连接的端口地址(默认是9421); 
  32.     # CHUNKS_LOOP_TIME = 300    #chunks 的回环频率(默认是:300 秒);# CHUNKS_DEL_LIMIT = 100 
  33.     # CHUNKS_WRITE_REP_LIMIT = 1 #在一个循环里复制到一个chunkserver 的最大chunk 数目(默认是1) 
  34.     # CHUNKS_READ_REP_LIMIT = 5  #在一个循环里从一个chunkserver 复制的最大chunk 数目(默认是5) 
  35.     # REJECT_OLD_ CLIENTS = 0    #弹出低于1.6.0 的客户端挂接(0 或1,默认是0) 
  36.      
  37. 注意: 
  38.  1、凡是用#注释掉的变量均使用其默认值 
  39.  2、修改DATA_PATH指定的目录要权限为mfs,chown -R mfs:mfs /usr/local/mfs/var/mfs 
  40.  3、mfsexports 访问控制对于那些老客户是没用的 
  41.  4、注意开通监听的端口 
  42.   
  43.     # vi /usr/local/mfs/etc/mfsexports.cfg    #客户端IP        允许挂载的目录  客户端拥有的权限 
  44.     192.168.0.0/24     /            rw,alldirs,maproot=0  # /标识MFS的根 
  45.     192.168.0.0/24     .            rw                    # .标识MFSMETA 文件系统  
  46.      
  47.     地址可以指定的格式: 
  48.      
  49.     IP格式            说明         
  50.         *               所有的ip 地址 
  51.     n.n.n.n             单个ip 地址 
  52.     n.n.n.n/b           IP 网络地址/位数掩码   
  53.     n.n.n.n/m.m.m.m     IP 网络地址/子网掩码 
  54.     f.f.f.f-t.t.t.t     IP 段 
  55.  
  56.     权限说明: 
  57.     权限          说明         
  58.     ro          只读模式 
  59.     rw          读写模式 
  60.     alldirs     许挂载任何指定的子目录   
  61.     maproot     映射为root,还是指定的用户   
  62.     password    指定客户端密码 
  63.      
  64. 3.1.3  操作: 
  65.   
  66. # /usr/local/mfs/sbin/mfsmaster [-vdu] [-t locktimeout] [-c cfgfile] 
  67. [start|stop|restart|reload] 
  68.  #master服务操作#/usr/local/mfs/sbin/mfscgiserv  #启动WEBUI 监控服务,
  69. 访问http://192.168.0.1:9425/    
  70.   
  71. 注意:  
  72.     最好不要kill master,安全停止执行mfsmaster stop,否则下次启动因metadata.mfs.back而出现问题,
  73. 还需 
  74.     要使用备份来恢复。 
  75.   
  76. 文件说明: 
  77.   
  78. #ls -l /usr/local/mfs/var/mfs  #此目录见mfsmaster.cfg中DATA_PATH配置 
  79.       metadata.mfs.back  #MFS元数据信息,延迟将内存数据写入文件,默认频率1h,默认1d同步一次此文件
  80. 到metalogger server 
  81.       changelog.*.mfs      #文件操作日志记录,实时记录、同步到metalogger server 
  82.       sessions.mfs  #客户操作状态记录 
  83.       stats.mfs        #?  

3.1.4 备注: 1、用户操作日志见:changelog.*.mfs 2、进程产生的日志放到系统日志中:/var/log/messages 3、Master可以单独启动,注意开通监听的端口

 

    
    
    
    
  1. 3.2  Chunk Server 
  2.   
  3. 在192.168.0.3-在192.168.0.4 进行如下操作 
  4.  3.2.1 安装: 
  5.     #useradd mfs -s /sbin/nologin 
  6.     #wget http://www.moosefs.org/tl_files/mfscode/mfs-1.6.20-2.tar.gz 
  7.     #tar zxvf mfs-1.6.20-2.tar.gz 
  8.     #cd mfs-1.6.20-2/ 
  9.     #./configure --prefix=/usr/local/mfs --with-default-user=mfs 
  10. --with-default-group=mfs --disable-mfsmaster --disable-mfsmount 
  11.     #make 
  12.     #make install 
  13.     #cd /usr/local/mfs/etc 
  14.     #cp mfschunkserver.cfg.dist mfschunkserver.cfg #chunk配置文件#cp mfshdd.cfg.dist mfshdd.cfg  #MFS使用空间配置 
  15.      
  16. 3.2.2 配置: 
  17.   
  18.  
  19.  
  20. $vi /usr/local/mfs/etc/mfschunkserver.cfg 
  21. WORKING_USER = mfs 
  22. WORKING_GROUP = mfs 
  23. DATA_PATH = /usr/local/mfs/var/mfs 
  24. LOCK_FILE = /var/run/mfs/mfschunkserver.pid 
  25. SYSLOG_IDENT = mfschunkserver 
  26. BACK_LOGS = 50 
  27. MASTER_RECONNECTION_DELAY = 30 
  28. MASTER_HOST = 192.168.0.1 #元数据服务器的名称或地址,可以是主机名,也可以是ip 地址 
  29. MASTER_PORT = 9420 #为Matser中 MATOCS_LISTEN_PORT指定的端口 
  30. MASTER_TIMEOUT = 60 
  31. CSSERV_LISTEN_HOST = * 
  32. CSSERV_LISTEN_PORT = 9422 这个监听端口用于与其它数据存储服务器间的连接,通常是数据复制 
  33. CSSERV_TIMEOUT = 60 
  34. CSTOCS_TIMEOUT = 60 
  35. HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg 分配给MFS 使用的磁盘空间配置文件的位置  
  36.  
  37.  
  38. 注意: 
  39.  1、MASTER_HOST 不能为localhost或127.0.0.1,做单机测试的童鞋们注意了,要使用对外IP。 
  40.  2、MASTER_PORT必须为元数据服务器配置中MATOCS_LISTEN_PORT指定的端口,且IP必须被master允许。 
  41.  3、注意开通监控的端口(这里是9422) 
  42.   
  43. $chown -R mfs:mfs /data      #没有这一操作,会出现写权限问题,因进程是用mfs运行的。
  44. $vi /usr/local/mfs/etc/mfshdd.cfg 
  45.     /data  
  46. 注意: 
  47.  1、在这里/data 是一个给mfs 的分区,但在本机上是一个独立的目录,最好是一个单独的硬盘或者一个raid 卷,
  48. 最低要求是一个分区。 
  49.  2、不要忘了更改目录的权限,因为mfschunkserver进程是用mfs运行的。 
  50.   
  51. 3.2.3 操作 
  52.   
  53. /usr/local/mfs/sbin/mfschunkserver [-vdu] [-t locktimeout] [-c cfgfile] [start|stop|restart|reload]  #chunkserver操作命令  
  54.   
  55.   
  56. 3.3 MetaLogger Server 
  57.   
  58. 在192.168.0.2上执行如下操作: 
  59.   
  60. 3.3.1 安装: 
  61.   
  62. 同Master的安装步骤。 
  63.   
  64. 3.3.2 配置: 
  65.   
  66.  
  67.  
  68. $vi /usr/local/mfs/etc/mfsmetalogger.cfg 
  69. WORKING_USER = mfs 
  70. WORKING_GROUP = mfs 
  71. SYSLOG_IDENT = mfsmetalogger 
  72. LOCK_MEMORY = 0 
  73. NICE_LEVEL = -19 
  74. DATA_PATH = /usr/local/mfs/var/mfs 
  75. BACK_LOGS = 50 
  76. META_DOWNLOAD_FREQ = 24 元数据备份文件下载请求频率。默认为24小时,即每隔一天从元数据服务器(MASTER)下载一个metadata.mfs.back 文件。当元数据服务器关闭或者出故障时,matedata.mfs.back 文件将消失,那么要恢复整个mfs,则需从metalogger 服务器取得该文件。请特别注意这个文件,它与日志文件一起,才能够恢复整个被损坏的分布式文件系统。 
  77. MASTER_RECONNECTION_DELAY = 5 
  78. MASTER_HOST = 192.168.0.1 
  79. MASTER_PORT = 9419 
  80. MASTER_TIMEOUT = 60 
  81. # deprecated, to be removed in MooseFS 1.7 
  82. LOCK_FILE = /var/run/mfs/mfsmetalogger.lock  
  83.  
  84.  
  85. 注意: 
  86.  1、MASTER_HOST 不能为localhost或127.0.0.1,做单机测试的童鞋们注意了,要使用对外IP。 
  87.  2、MASTER_PORT必须为元数据服务器配置中MATOCS_LISTEN_PORT指定的端口,且IP必须被master允许。 
  88.   
  89. 3.3.3 操作 
  90.  /usr/local/mfs/sbin/mfsmetalogger [-vdu] [-t locktimeout] [-c cfgfile]
  91.  [start|stop|restart|reload] 
  92.  #chunkserver操作命令  
  93.   
  94.   
  95. 3.4 MFS Client 
  96.  在192.168.0.6上执行如下操作: 
  97.  3.4.1 FUSE安装: 
  98.     $wget http://nchc.dl.sourceforge.net/project/buluoos/0.2/src/fuse-2.8.5.tar.gz 
  99.     $tar zxf fuse-2.8.5.tar.gz 
  100.     $cd fuse-2.8.5 
  101.     $./configure 
  102.     $make && make install 
  103.     $echo 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' >>/etc/profile 
  104.     $source /etc/profile$lsmod |grep fuse #检查fuse是否加载到内核,若没有,执行下面命令$modprobe fuse&&lsmod |grep fuse  #若将下列mfsmount挂载操作加入开机自启动,一定将modprobe fuse也加入开机自启  
  105.  
  106.     注意: 
  107.  1、一定要将fuse环境变量配置ok,否则安装mfsmount会装不上 
  108.  2、若将下列mfsmount挂载操作加入开机自启动,一定将modprobe fuse也加入开机自启,且在其执行之前执行。 
  109.   
  110.  3.4.2 MFSMount安装: 
  111.     $useradd mfs -s /sbin/nologin 
  112.     $wget http://www.moosefs.org/tl_files/mfscode/mfs-1.6.20-2.tar.gz 
  113.     $tar zxvf mfs-1.6.20-2.tar.gz 
  114.     $cd mfs-1.6.20-2/ 
  115.     $./configure --prefix=/usr/local/mfs --with-default-user=mfs 
  116. --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver 
  117.     $make;make install  
  118.  
  119. 3.4.3 挂载MFS 
  120.     $mkdir /mnt/mfs /mnt/mfsmeta  #创建挂载点 
  121.     $/usr/local/mfs/bin/mfsmount /mnt/mfs -H 192.168.0.1 
  122.     $/usr/local/mfs/bin/mfsmount -m /mnt/mfsmeta -H 192.168.0.1 
  123.     $df -h #检查是否挂载成功$umount /mnt/mfs #操作如下出错,说明客户端本机有正在使用此文件系统,
  124. 可以查明是什么命令正在使用,然后推出就可以了,最好不要强制退出。  
  125.  
  126.     到此为止,我们的MFS集群已经搭建完成。 
  127.      
  128.     注:如果在挂载的时候出现  mfsmaster register error: Permission denied 
  129.         我们应该检查下元数据服务器(Master)的/usr/local/mfs/etc/mfsexports的设置是
  130. 否你的Client是添加进去的 
  131.