基于moosefs的系统架构,开源界已经有了很多成熟的案例。我们的mfs系统已经运行了一段时间,在这里给出架构图以及相关测试数据。对于moosefs不要奢求其读写速度有多快,更应该看中其设计原理带给我们安全上的便利。有很多同学喜欢提及mfs的master不具备热备功能,我想说的是,任何一个应用软件其设计自身都有一定的狭义性,就如同squid与varnish,apache与nginx一样,我们要做的是如何扩展以及如何组合它们,用以达到我们系统运维的目的。

一.概述
硬件环境: 2 hp 380g648G内存,460G sas15K硬盘6块),11dell r7108G内存,sata 7.2K 1T磁盘共40t),5dellr6106g内存,sas15k硬盘共15块)
软件环境:centos 5.4 64bit,varnish2.0.6,nginx0.8.34,moosefs 1.6.0
总体架构图:
简要说明:
lvs将请求转发到varnish群集上面,由varnish轮询位于moosefs client上面的nginx群集,如果出现404,500等出错页面则下面的nginx自动启用,其实就是备份机的功能。client通过fuse与master通信以获取位于chunk server上面的数据。
 
二.安装
1.安装varnish
下载2.0.6版本
groupadd www -g 48 && useradd -u 48 -g www www
mkdir /varnishcache
chmod +w /varnishcache/
chown -R www:www /varnishcache/
mkdir /var/varnishlog
chmod +w /var/varnishlog/
chown  -R www:www /var/varnishlog/
tar zxvf varnish-2.0.6.tar.gz
cd varnish-2.0.6
./configure --prefix=/usr/local/varnish
 make;make install
修改配置文件,这里给出我的样版(多谢kevin兄指点):
2.在client上面安装nginx
useradd www
mkdir /var/nginxlog
chmod +w /var/nginxlog
chown -R www:www /var/nginxlog
tar zxvf pcre-8.01.tar.gz
cd pcre-8.01/
./configure
make && make install
cd ../
tar zxvf nginx-0.8.34.tar.gz
cd nginx-0.8.34/
./configure --prefix=/usr/local/nginx --user=www --group=www  --with-http_stub_status_module --with-http_ssl_module --with-http_p_w_picpath_filter_module
make;make install
cd ../
cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak
echo  > /usr/local/nginx/conf/nginx.conf
修改配置文件,可以暂时不把虚拟主机的root指向到mfs的挂载点
几点说明:
涂黑部分是我们自己写的module,在没有决定开源之前,请大家见谅。
关于nginx配置文件的解释,这里就不多说了
 
3.安装moosefs
moosefs安装过程大同小异,注意fuse不要安装目前的最新版,因为我遇到无法加载fuse模块的错误,不建议yum安装fuse模块。这里引用两篇篇安装mfs的教程,地址为:http://bbs1.chinaunix.net/viewthread.php?tid=1644309
大家可以去详细了解情况
 
安装:
3.1 安装mfs master
wget http://ncu.dl.sourceforge.net/project/moosefs/moosefs/1.6.11/mfs-1.6.11.tar.gz
tar zxvf mfs-1.6.11.tar.gz
cd mfs-1.6.11
useradd mfs -s /sbin/nologin
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
make
make install
cd /usr/local/mfs/etc/
cp mfsmaster.cfg.dist mfsmaster.cfg
cp mfsexports.cfg.dist mfsexports.cfg
vim mfsmaster.cfg
vim mfsexports.cfg
cd ..
cd var/
mfs/
cp metadata.mfs.empty metadata.mfs
cat metadata.mfs
/usr/local/mfs/sbin/mfsmaster start
ps axu | grep mfsmaster
lsof -i
tail -f /var/log/messages

3.2 启动master服务
/usr/local/mfs/sbin/mfsmaster start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules ...
loading sessions ... ok
sessions file has been loaded
exports file has been loaded
loading metadata ...
create new empty filesystemmetadata file has been loaded
no charts data file - initializing empty charts
master <-> metaloggers module: listen on *:9419
master <-> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly

3.3. 停止master服务
/usr/local/mfs/sbin/mfsmaster -s

3.4  启动和停止web gui
启动: /usr/local/mfs/sbin/mfscgiserv
停止: kill /usr/local/mfs/sbin/mfscgiserv

3.5  相关配置文件
vim  mfsexports.cfg
192.168.28.0/24  . rw
192.168.28.0/24  /       rw

3.6 安装chunkserver
wget http://ncu.dl.sourceforge.net/project/moosefs/moosefs/1.6.11/mfs-1.6.11.tar.gz
tar zxvf mfs-1.6.11.tar.gz
cd mfs-1.6.11
useradd mfs -s /sbin/nologin
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
make
make install
cd /usr/local/mfs/etc/
cp mfschunkserver.cfg.dist mfschunkserver.cfg
cp mfshdd.cfg.dist mfshdd.cfg


3.8 启动chunkvserver
/usr/local/mfs/sbin/mfschunkserver start
ps axu |grep mfs
tail -f /var/log/messages

3.9 停止chunksever
/usr/local/mfs/sbin/mfschunkserver stop

3.10 安装fuse
 
 Mfsmount需要依赖FUSE,因此需要先安装好fuse,这里我选用 fuse-2.7.4.tar.gz。
1、解包 tar zxvf fuse-2.7.4.tar.gz
2、切换目录 cd fuse-2.7.4.
3、配置 ./configure
4、编译安装 make;make install
 
1、修改环境变量文件/etc/profile ,追加下面的行,然后再执行命令source /etc/profile使修改生效。
 export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

3.11 安装mfsclient
wget http://ncu.dl.sourceforge.net/project/moosefs/moosefs/1.6.11/mfs-1.6.11.tar.gz
tar zxvf mfs-1.6.11.tar.gz
cd mfs-1.6.11
useradd mfs -s /sbin/nologin
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount
make
make install

3.12 挂载文件系统
cd /mnt/
mkdir mfs
/usr/local/mfs/bin/mfsmount /mnt/mfs/ -H 192.168.28.242

mkdir mfsmeta
/usr/local/mfs/bin/mfsmount -m /mnt/mfsmeta/ -H 192.168.28.242
mount 查看是否挂载成功

3.13 管理命令

设置副本 的份数,推荐3份(我们实际使用了2份)
/usr/local/mfs/bin/mfssetgoal -r 3 /mnt/mfs

查看某文件
/usr/local/mfs/bin/mfsgetgoal  /mnt/mfs

查看目录信息
/usr/local/mfs/bin/mfsdirinfo -H /mnt/mfs
GUI查看mfs状态
在master上面启动mfscgisrv,如果出现错误则查看端口是否被占用以及升级python版本尝试解决
在浏览器中输入 http://masterip:9452 查看汇总状况
 
四.我们的测试数据
1.我们的使用数据
 
2.测试数据对比
2.1 单client读性能
2.2 单client写性能与本机对比
2.3 单client写性能与本机对比2
2.4 两台client读性能
2.5 两台client写性能
2.6 四台client写性能
3.小结
我们可以看到mfs的读写性能与本机对比有很大差距,随着client数目的增加,读写性能都呈现很快的下降趋势。我们现在是5台client同时工作,读写性能并不高,满足搜索业务的需求尚可。
另外,我这不还有一些测试数据就不一一粘上来了,有需要查看的联系我好了
hdparm,sar,iostat,iozone结果截图