MFS文件系统结构:
1. 管理服务器:负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复.多节点拷贝。
2. 元数据日志服务器: 负责备份 master 服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在 master server 出问题的时候接替其进行工作。
3. 数据存储服务器:负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输。
4. 客户端: 通过 fuse 内核接口挂接远程管理服务器上所管理的数据存储服务器,看起来共享的文件系统和本地 unix 文件系统使用一样的效果。
MFS部署:
系统:rhel6.3 selinux and iptables disabled
master:192.168.1.120
chunkserver1:192.168.1.122
chunkserver2:192.168.1.123
client:192.168.1.124
软件下载 http://www.moosefs.org
---------------------------------------------------------------------------------------------------------------------------------------------------------
首先在master(192.168.1.120)配置:
将下载下来的tar包编译成rpm,方便安装
yum install -y gcc make rpm-build fuse-devel zlib-devel
rpmbuild -tb mfs -1.6.27.1.tar.gz (此时会报错:可作如下改动)
mv mfs-1.6.27.1.tar.gz mfs-1.6.27.tar.gz (因为rpmbuild是读取tar包里面的.spec文件进行编译,但是.spec里面写的是mfs-1.6.27.tar.gz,所以需要将原tar包的名字改成与spec里面一致,要不然会提示无法找到文件)
然后再执行:rpmbuild -tb mfs -1.6.27.tar.gz
完成之后进入:cd /rpmbuild/RPMS/x86_64
rpm -ivh mfs-cgi-1.6.27-2.x86_64.rpm mfs-cgiserv-1.6.27-2.x86_64.rpm mfs-master-1.6.27-2.x86_64.rpm
其中cgi文件是为了通过web界面进行管理,比较方便
cd /etc/mfs
将配置文件的模板(.dist),复制成真正的配置文件(.cfg)
cp mfsexports.cfg.dist mfsexports.cfg
cp mfsmaster.cfg.dist mfsmaster.cfg
cp mfstopology.cfg.dist mfstopology.cfg
打开mfsmaster.cfg可以看到默认WORKING_USER=nobody,SYSLOG_IDENT = mfsmaster,前者代表运行matser server的用户,后者代表master server在整个分布式系统中的标识,都可以根据自己需要更改,但是后续配置参数要保持一致即可。为了方便,这里不做任何改动,保持默认值。
vi /etc/hosts
添加:192.168.1.120 mfsmaster
cd /var/lib/mfs
cp metadata.mfs.empty etadata.mfs
chown nobody .-R(这里面写了数据的挂载目录,只用用户有读写权限,需将运行master server的用户改成对metadata.mfs可以读写,这里使用的是默认用户nobody)
启动mfsmaster start
用rpm -ql mfs-cgi 查看mfscgi管理工具安装目录为:/usr/share/mfscgi
cd /usr/share/mfscgi
chmod +x *.cgi(添加可执行权限)
mfscgiserv start
启动成功后可看到监听端口:9425
打开浏览器,输入192.168.1.120:9425回车,可看到MFS的网页管理界面,可以查看整个分布式文件系统的信息。
---------------------------------------------------------------------------------------------------------------------------------------------------------
chunckserver1(192.168.1.122)端的配置:
将master中编译的rpm包(cd /root/home/rpmbuild/RPMS/ x86_64 )中的mfs-chunkserver-1.6.27.x86_64.rpm复制到192.168.1.122中,这里复制到/root/home
cd /root/home
rpm -ivh mfs-chunkserver-1.6.27.x86_64.rpm
cd /etc/mfs
cp mfschunkserver.cfg.dist mfschunkserver.cfg
cp mfshdd.cfg.dist mfshdd.cfg
vi mfshdd.cfg
添加/mnt/chunk1
mkdir /mnt/chunk1
mkdir /var/lib/mfs(在配置文件中,默认moosefs产生的数据记录在这个目录中,需要手动创建)
chown nobody /var/lib/mfs
vi /etc/hosts
添加:192.168.1.120 mfsmaster
将一个lv(logical volum,lv的创建可参考我的另一篇关于lvm的文字)格式化:
mkfs.ext4 /dev/newvg/demo (demo是192.168.1.122上的lv)
mount /dev/newvg/demo /mnt/chunk1/并将挂载信息写如fstable中,以便开启自动挂载
然后mount -a 检查挂载是否正确
mfschunkserver start
然后刷新MFS网页管理界面,可以看到一个chunk server已经成功加入系统
chunkserver2(192.168.1.123)的配置和上面所述完全一样,也就是说后续想加入多个chunkserver配置均可参考上述步骤。
---------------------------------------------------------------------------------------------------------------------------------------------------------
client配置:
将master中编译的rpm包(cd /root/home/rpmbuild/RPMS/ x86_64 )中的mfs-client-1.6.27.x86_64.rpm复制到192.168.1.124中,这里复制到/root/home
yum localinstall mfs-client-1.6.27-2.x86_64.rpm (这里之所以不用rpm -ivh安装是因为客户端安装存在依赖性问题,yum可以自动检测并解决依赖性)
cd /etc/mfs/
cp mfsmount.cfg.dist mfsmount.cfg
vi mfsmount.cfg
mkdir /mnt/mfs
vi /etc/hosts
添加:192.168.1.120 mfsmaster
mfsmount
然后df可以看到/mnt/mfs已经自动挂载了mfsmaster:9421
这时在客户端读写数据,就是在向MFS读写数据,chunkserver1和chunkserver2可以对数据进行存储,和备份,轮循。