搭建MFS分布式文件系统

搭建MFS分布式文件系统

分类: 代码/架构Linux 145人阅读 评论(0) 收藏 举报
元数据服务器: 192.168.242.131
元数据日志服务器:192.168.242.133
数据存储服务器:192.168.242.129 , 192.168.242.130 , 192.168.242.132
MFS客户端:192.168.242.134


同步所有节点时间。


一、安装元数据服务器Master


1、建立运行所需用户


# useradd -s /sbin/nologin mfs


2、编译mfs源码包mfs-1.6.11.tar.gz


# tar xvf mfs-1.6.11.tar.gz -C /usr/src
# cd /usr/src/mfs-1.6.11/
# ./configure �Cprefix=/usr/local/mfs �Cwith-default-user=mfs �Cwith-default-group=mfs
# make && make install


3、配置元数据服务器
配置文件存放在安装目录/usr/local/mfs/etc


1) 拷贝主配置文件的模板文件,并编辑
# cd /usr/local/mfs/etc
# cp mfsmaster.cfg.dist mfsmaster.cfg
# vim mfsmaster.cfg <―尽管里面的选项都被注释掉,但都是默认值,要改变,就取消注释,自定义其值。


一些项目的含义:


EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg :权限控制文件的存放位置,相当于nfs的exports


DATA_PATH = /usr/local/mfs/var/mfs :元数据的存放路径。


MATOML_LISTEN_PORT = 9419 : 元数据服务器和元数据日志服务器通信的端口。


MATOCS_LISTEN_PORT = 9420 : 元数据服务器和数据服务器通信的端口。


MATOCU_LISTEN_PORT = 9421 : 元数据服务器和客户端通信的端口。


2)编辑权限控制文件
# cp mfsexports.cfg.dist mfsexports.cfg
# vim mfsexports.cfg
192.168.242.0/24 / rw,alldirs,maproot=mfs


3)复制文件元数据文件
# cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs
这个文件讲记录整个文件系统的元数据信息。


4、启动元数据服务器
尽管其他服务器都没有配置,也可以启动它。
1)启动
# /usr/local/mfs/sbin/mfsmaster start
2)检查运行状况:
# ps -ef | grep mfsmaster | grep -v grep
mfs 7882 1 1 06:41 ? 00:00:00 /usr/local/mfs/sbin/mfsmaster start


# netstat -ntlp | grep mfs
tcp 0 0 0.0.0.0:9419 0.0.0.0:* LISTEN 7882/mfsmaster
tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN 7882/mfsmaster
tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN 7882/mfsmaster


# tail -10 /var/log/messages

Jan 6 06:41:01 fence mfsmaster[7882]: matoml: listen on *:9419
Jan 6 06:41:01 fence mfsmaster[7882]: matocs: listen on *:9420
Jan 6 06:41:01 fence mfsmaster[7882]: matocu: listen on *:9421



3)关闭元数据服务器
如果需要关闭服务器,请运行:
# /usr/local/mfs/sbin/mfsmaster stop
或者
# /usr/local/mfs/sbin/mfsmaster -s


注意:务必使用这种方式关闭,否则将导致下次启动时会出现找不到相关文件,而不能正常启动,需要通过mfsmetastore来恢复。


二、安装元数据日志服务器


元数据日志服务器作为元数据服务器的客户端,从元数据服务器上去的日志文件进行备份。


1、建立运行所需用户


# useradd -s /sbin/nologin mfs


2、编译mfs源码包mfs-1.6.11.tar.gz


# tar xvf mfs-1.6.11.tar.gz -C /usr/src
# cd /usr/src/mfs-1.6.11/
# ./configure �Cprefix=/usr/local/mfs �Cwith-default-user=mfs �Cwith-default-group=mfs
# make && make install


3、配置元数据日志服务器
该服务器仅需要一个配置文件,从模板文件复制一个,然后编辑。
# cd /usr/local/mfs/etc
# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
# vim mfsmetalogger.cfg

MASTER_HOST = 192.168.242.131 <�C修改为元数据服务器的IP



其他一些重要选项的说明:
SYSLOG_IDENT = mfsmetalogger : 把运行信息输出到系统日志/var/log/messages
DATA_PATH = /usr/local/mfs/var/mfs : 从元数据服务器中读取回来的文件保存路径
BACK_LOGS = 50 : 存放备份日志的总个数为50,超过50则自动轮转。元数据服务器恢复靠的就是这些备份日志。
META_DOWNLOAD_FREQ = 24 : 元数据备份文件下载请求频率。默认24小时,即每隔一天从元数据服务器上下载一个
metadata.mfs.back文件。如果元数据服务器关闭或者出现故障时,元数据服务器
上的该文件将会消失,如果需要恢复整个mfs,需要从日志服务器取得该文件。
特别注意:该文件必须与日志文件一起,才能恢复被 损坏的分布式文件系统。


4、运行元数据日志服务器


1)启动
# /usr/local/mfs/sbin/mfsmetalogger start


2)检查运行状态


# tail -f /var/log/messages

Jan 6 07:27:06 mysql2 mfsmetalogger[7511]: connected to Maste



# netstat -an | grep 9419
tcp 0 0 192.168.242.133:37625 192.168.242.131:9419 ESTABLISHED


验证是否下载了相关日志文件(需要等待几分钟)
# ls /usr/local/mfs/var/mfs/
changelog_ml.*.mfs


3)关闭指令
如果需要关闭服务器,请运行:
# /usr/local/mfs/sbin/mfsmetalogger stop
或者
# /usr/local/mfs/sbin/mfsmetalogger -s


三、数据存储服务器的搭建
一个MFS分布式系统,可以集群很多存储服务器,容量可以上PB。建议使用专门的服务器作为存储服务器,并且3台以上。


1、建立运行所需用户


# useradd -s /sbin/nologin mfs


2、编译mfs源码包mfs-1.6.11.tar.gz


# tar xvf mfs-1.6.11.tar.gz -C /usr/src
# cd /usr/src/mfs-1.6.11/
# ./configure �Cprefix=/usr/local/mfs �Cwith-default-user=mfs �Cwith-default-group=mfs
# make && make install


3、配置数据存储服务器
数据存储服务器需要配置两个文件,主配置文件mfschunkserver.cfg和另一个配置文件mfshdd.cfg。
每个服务器最好使用一个单独的硬盘或者一个RAID卷作为MFS共享存储。最低要求就是一个分区。


1)修改主配置文件mfschunkserver.cfg
# cd /usr/local/mfs/etc
# cp mfschunkserver.cfg.dist mfschunkserver.cfg
# vim mfschunkserver.cfg

MASTER_HOST = 192.168.242.131
MASTER_PORT = 9420



其中一些选项解释:
CSSERV_LISTEN_PORT = 9422 : 与其他数据存储服务器通信的端口,通常用于数据复制
HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg : 分配给MFS使用的块设备配置文件的位置


2)编辑mfshdd.cfg
该文件定义了导出本地哪个设备作为MFS共享存储。
# cp mfshdd.cfg.dist mfshdd.cfg
# vim mfshdd.cfg
/mfsdata


3)格式化导出设备
这里使用/dev/sdb,并把sdb格式为ext3,挂载到/mfsdata
# mkfs.ext3 /dev/sdb
# mkdir /mfsdata
# mount /dev/sdb /mfsdata/
# chown mfs:mfs /mfsdata/


4、运行数据存储服务器


1)启动
# /usr/local/mfs/sbin/mfschunkserver start


2)检查运行状态
# ps -ef | grep mfschunkserver | grep -v grep
#
# tail -f /var/log/messages

Jan 6 04:44:05 web1 mfschunkserver[9331]: connected to Master



# netstat -anp | grep mfs | grep EST 与元数据服务器建立了链接
tcp 0 0 192.168.242.129:57859 192.168.242.131:9420 ESTABLISHED 9331/mfschunkserver


3)关闭命令
如果需要关闭服务器,请运行:
# /usr/local/mfs/sbin/mfschunkserver stop
或者
# /usr/local/mfs/sbin/mfschunkserver -s


其他的数据存储服务器采用相同的方法配置,这里略。


四、MFS客户端搭建


1、安装依赖包fuse
# tar xvf fuse-2.7.4.tar.gz -C /usr/src
# cd /usr/src/fuse-2.7.4/
# ./configure && make && make install
# modprobe fuse


2、建立运行所需用户


# useradd -s /sbin/nologin mfs


3、设定环境变量
如果不执行该设定,配置mfs源码包的时候,可能会出现说找不到FUSE的报错,在/etc/profile最后追加:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
然后
# source /etc/profile


3、编译mfs源码包mfs-1.6.11.tar.gz


# tar xvf mfs-1.6.11.tar.gz -C /usr/src
# cd /usr/src/mfs-1.6.11/
# ./configure �Cprefix=/usr/local/mfs �Cwith-default-user=mfs �Cwith-default-group=mfs �Cenable-mfsmount


# make && make install


客户端指令都安装在/usr/local/mfs/bin目录下。


4、挂载并测试mfs文件系统


# mkdir /mnt/mfs
# modprobe fuse 保证已经把fuse模块加载到内核。
# /usr/local/mfs/bin/mfsmount /mnt/mfs/ -H 192.168.242.131
# df -h

mfs#192.168.242.131:9421 22G 0 22G 0% /mnt/mfs



验证是否能读写数据
# cp /etc/hosts /mnt/mfs/
# ls /mnt/mfs


挂载元数据目录


需要注意的是,如果要决定挂载mfsmeta,那么一定要在mfsmaster 的mfsexports.cfg 文件中加入
如下条目:
* . rw


mfsmount -m /mnt/mfsmeta


5、设置文件副本数量(即保存在多少个chunk server上),建议3份


# /usr/local/mfs/bin/mfsrsetgoal 3 /mnt/mfs


查看设置是否成功
# /usr/local/mfs/bin/mfsgetgoal /mnt/mfs/hosts
/mnt/mfs/hosts: 3 <�C3 说明已经保存为3份副本


假如改变一个已经存在的文件的拷贝个数,那么文件的拷贝份数将会被扩大或者被删除,这个过
程会有延时。可以通过上面的命令来证实。


实际的拷贝份数可以通过mfscheckfile 和mfsfile info 命令来证实,例如:
# mfscheckfile /mnt/mfs-test/test1
# ./mfsfileinfo /mnt/mfs/mmm 可以知道拷贝在哪些节点上


6、设置删除文件后空间回收时间。
默认回收时间为7天(604800秒)
# /usr/local/mfs/bin/mfssettrashtime 600 /mnt/mfs


# /usr/local/mfs/bin/mfsgettrashtime 600 /mnt/mfs


删除文件可以通过一个单独安装MFSMETA 文件系统。特别是它包含目录/ trash (包含任然可以
被还原的被删除文件的信息)和/ trash/undel (用于获取文件)。只有管理员有权限访问MFSMETA(用户
的uid 0,通常是root)。 通过 -m参数挂载


$ mfssettrashtime 3600 /mnt/mfs-test/test1
/mnt/mfs-test/test1: 3600
$ rm /mnt/mfs-test/test1
$ ls /mnt/mfs-test/test1
ls: /mnt/mfs-test/test1: No such file or directory
# ls -l /mnt/mfs-test-meta/trash/*test1
-rw-r�Cr�C 1 user users 1 2007-08-09 15:23 /mnt/mfs-test-meta/trash/00013BC7|test1


被删文件的文件名在“垃圾箱”目录里还可见,文件名由一个八位十六进制的数i-node 和被删文
件的文件名组成,在文件名和i-node 之间不是用“/”,而是用了“|”替代。如果一个文件名的长度超
过操作系统的限制(通常是255 个字符),那么部分将被删除。通过从挂载点起全路径的文件名被删除
的文件任然可以被读写。


移动这个文件到trash/undel 子目录下,将会使原始的文件恢复到正确的MooseFS 文件系统上路
径下(如果路径没有改变)
# mv ‘/mnt/mfsmeta/trash/0000000B|dgg’ ./undel/


从“垃圾箱”中删除文件结果是释放之前被它站用的空间(删除有延迟,数据被异步删除)。在这种
被从“垃圾箱”删除的情况下,该文件是不可能恢复了。


在MFSMETA 的目录里,除了trash 和trash/undel 两个目录外,还有第三个目录reserved,该目
录内有已经删除的文件,但却有一直打开着。在用户关闭了这些被打开的文件后,reserved 目录中的
文件将被删除,文件的数据也将被立即删除。在reserved 目录中文件的命名方法同trash 目录中的一样,
但是不能有其他功能的操作。


五、破坏性测试
把环境中的数据存储服务器依次停止,剩下一个,整个mfs还能继续提供服务。
然后上传一个文件,把文件副本更改为3,接着依次启动刚被关闭的另外两台数据存储服务器,再关闭刚才没有关闭的那台数据存储服务器,最后验证最后上传的那个文件是否可以正常访问,如果可以,证明文件被同步到多台数据存储服务器了。


六、测试元数据服务器


1、模拟元数据服务器进程被意外结束,执行恢复操作


1) 停止元数据服务器
kill -9 杀掉mfsmaster进程


2)备份元数据服务器数据
# cd /usr/local/mfs/var
# tar cvf mfs.tar mfs


3)启动元数据服务器
/usr/local/mfs/sbin/mfsmaster start
提示初始化数据失败


4)执行恢复操作
# /usr/local/mfs/sbin/mfsmetarestore -a


5)启动元数据服务器
/usr/local/mfs/sbin/mfsmaster start


6)客户端挂载验证数据是否还存在


2、模拟进程被意外关闭,并且日志文件被损毁。


、模拟元数据服务器进程被意外结束,执行恢复操作


1) 停止元数据服务器
kill -9 杀掉mfsmaster进程


2)备份元数据服务器数据(该操作主要以防实验失败,集群无法恢复而做的一个预防操作)
# cd /usr/local/mfs/var
# tar cvf mfs.tar mfs


3)删除目录,模拟故障
# rm -rf mfs/*


4)启动元数据服务器
/usr/local/mfs/sbin/mfsmaster start
提示初始化数据失败


5)从元数据日志服务器把备份文件恢复过来
# rsync -alvR 192.168.242.133:/usr/local/mfs/var/mfs /
把所有文件名字去掉_ml
# mv changelog_ml.0.mfs changelog.0.mfs
# mv changelog_ml.2.mfs changelog.2.mfs
# mv changelog_ml.1.mfs changelog.1.mfs
# mv metadata_ml.mfs.back metadata.mfs.back
# mv sessions_ml.mfs sessions.mfs


6)执行恢复操作
# /usr/local/mfs/sbin/mfsmetarestore -a


7)启动元数据服务器
/usr/local/mfs/sbin/mfsmaster start


8)客户端挂载验证数据是否还存在


你可能感兴趣的:(搭建MFS分布式文件系统)