mfs分布式文件系统
前言:为什么要使用mfs
1.1nfs已经满足不了业务频繁的请求,之前是三台nginx公用一台nfs服务器,这样读写频繁直接导致了io瓶颈,但是已经是线上业务,不能通过更换设备来解决当前io问题,所以选择一套新的文件系统就提上了日程,构建高可用MFS分布式文件存储架构成了当务之急
角色角色作用
管理服务器
managingserver (master)
负责各个数据存储服务器的管理,文件读写调
度,文件空间回收以及恢复.多节点拷贝
元数据日志服务器
Metaloggerserver(Metalogger)
负责备份master 服务器的变化日志文件,文
件类型为changelog_ml.*.mfs ,以便于在
master server 出问题的时候接替其进行工作
数据存储服务器
dataservers (chunkservers)
负责连接管理服务器,听从管理服务器调度,
提供存储空间,并为客户提供数据传输.
客户机挂载使用
client computers
通过fuse 内核接口挂接远程管理服务器上所
管理的数据存储服务器,.看起来共享的文件
系统和本地unix 文件系统使用一样的效果.
1.4mfs之所以优于nfs
1.4 MooseFS优点
i. Free(GPL)
ii.通用文件系统,不需要修改上层应用就可以使用(那些需要专门api的dfs好麻烦哦!)。
iii. 可以在线扩容,体系架构可伸缩性极强。(官方的case可以扩到70台了!)
iv. 部署简单。(sa们特别高兴,领导们特别happy!)
v. 体系架构高可用,所有组件无单点故障。 (您还等什么?)
vi.文件对象高可用,可设置任意的文件冗余程度(提供比raid1+0更高的冗余级别),而绝对不会影响读或者写
的性能,只会加速哦!)
vii. 提供Windows回收站的功能.(不怕误操作了,提供类似oralce 的闪回等高级dbms的即时回滚特性,
oralce这些特性可是收费的哦!)
viii. 提供类似Java语言的 GC(垃圾回收)。
ix.提供netapp,emc,ibm等商业存储的snapshot特性。
x. google filesystem的一个c实现。(google在前面开路哦!)
xi.提供web gui监控接口。
xii. 提高随机读或写的效率
xiii. 提高海量小文件的读写效率
2部署mfs分布式文件系统
2.1部署mfs-master 管理服务器
2.1.1mfs-master安装
wgethttp://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 (新建mfs用户,用于编译安装)
./configure --prefix=/usr/local/mfs--with-default-user=mfs --with-default-group=mfs (编译安装)
make
make install
cd /usr/local/mfs/etc/ (进入mfs配置文件目录)
cp mfsmaster.cfg.distmfsmaster.cfg (复制主配置文件)
cpmfsexports.cfg.dist mfsexports.cfg
vim mfsmaster.cfg
vim mfsexports.cfg
cd ..
cd var/
mfs/
cp metadata.mfs.emptymetadata.mfs
cat metadata.mfs
ln –s /usr/local/mfs/sbin/mfsmaster/etc/init.d/ mfsmaster
/usr/local/mfs/sbin/mfsmaster start
ps axu | grep mfsmaster
lsof -i
tail -f /var/log/messages
2.1.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 filehas been loaded
no charts data file - initializing emptycharts
master <-> metaloggers module: listenon *:9419
master <-> chunkservers module:listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly
2.1.3停止Master服务
/usr/local/mfs/sbin/mfsmaster -s
2.1.4启动和停止Web GUI
启动:/usr/local/mfs/sbin/mfscgiserv
停止: kill/usr/local/mfs/sbin/mfscgiserv
2.1.5访问Web GUI方式
mfs-master IP:9425
http://192.168.17.139:9425
2.1.6相关配置文件
vim mfsexports.cfg
192.168.200.0/24 . rw (允许192.168.200.0访问所有)
192.168.17.0/24 / rw (允许192.168.17.0访问/目录)
2.1.7添加/usr/local/mfs/sbin/mfsmaster 软链接
ln -s /usr/local/mfs/sbin/mfsmaster/etc/init.d/mfsmaster
/etc/init.d/mfsmaster restart (启动mfs-master )
/etc/init.d/mfsmaster stop (关闭mfs-master)
2.2部署mfs-chunk 存储服务器
2.2.1从块设备创建本地文件系统
fdisk -l
mkfs.ext3 /dev/sdb
mkdir /data
chown mfs:mfs /data
mount -t ext3 /dev/sdb /data
df -ah
/dev/sdb 133G 188M 126G 1% /data
2.2.2创建1个10G的LoopDevice文件
/dev/sdb1挂载到/data1 在data1目录下生成文件10G mfs.img
fdisk /dev/sdb (磁盘分区)
mkdir /mfs
mount /dev/sdb1 /mfs (挂载/dev/sdb1分区给/mfs)
cd /mfs
dd if=/dev/zero of=mfs.img bs=1M count=10000 (创建mfs.img镜像)
mkfs.ext3 mfs.img (格式化镜像mfs.img文件)
losetup /dev/loop2 mfs.img (把mfs.img镜像分配给/dev/loop2虚拟分区)
mkfs.ext3 /dev/loop2 (格式化虚拟分区)
mkdir –p /opt/mfs (创建分区挂载目录)
chown mfs:mfs /opt/mfs (目录权限修改)
mount –o loop /dev/loop2 /opt/mfs (把虚拟分区分配给/opt/mfs)
2.2.3安装Chunk Server
wgethttp://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.distmfschunkserver.cfg
cp mfshdd.cfg.dist mfshdd.cfg
修改配置文件
cd /usr/local/mfs/etc/
2.2.4修改配置文件
vi mfsadd.cfg (添加分区挂载目录)
vi mfschunkserver.cfg (修改chunk主配置文件指向服务器IP和端口)
2.2.5启动Chunk Server
启动方法一 #/usr/local/mfs/sbin/mfschunkserverstart
#ln –s /usr/local/mfs/sbin/mfschunkserve/etc/init.d/mfschunkserver
启动方法二#/etc/init.d/mfschunkserverrestart
ps axu |grep mfs
tail -f /var/log/messages
登录Web GUI http://192.168.17.138:9425发现disk+设备
2.2.6停止Chunk Server
/usr/local/mfs/sbin/mfschunkserver stop
2.2.7添加/usr/local/mfs/sbin/mfschunkserver软链接
ln -s /usr/local/mfs/sbin/mfschunkserver/etc/init.d/mfschunkserver
/etc/init.d/mfschunkserverrestart
2.3部署Metaloggerserver 元日志服务器
安装和配置元数据日志服务器(metalogger)
2.3.1安装元数据日志服务
mfsmetalogger.cfg的配置
该服务只有一个配置文件,那就是mfsmetalogger.cfg。
[root@nas etc]# ps -ef|grep mfs
mfs 12327 1 0 08:38 ? 00:00:00/usr/local/mfs/sbin/mfsmaster start
创建用户
useradd mfs –s /sbin/nolog in
安装
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
./configure –prefix=/usr/local/mfs –with-default-user=mfs –with-default-group=mfs
make ; make install
文中的大多数变量不难理解,类似于mfsmaster.cfg 中的变量,其中:
这个文件中需要修改的是MASTER_HOST 变量,这个变量的值是master server 的IP 地址。
2.3.2启动metalogger服务
这说明metalogger 服务正常启动了。利用命令检查:
通过进程:
通过检查端口:
[root@mail etc]# vi mfsmetalogger.cfg (修改配置文件MASTER_HOST)
# WORKING_USER =mfs
# WORKING_GROUP = mfs
# SYSLOG_IDENT =mfsmetalogger
# LOCK_MEMORY = 0
# NICE_LEVEL = -19
# DATA_PATH= /usr/local/mfs/var/mfs
# BACK_LOGS = 50
# META_DOWNLOAD_FREQ = 24 元数据备份文件下载请求频率。默认为24小时,即每隔一天从元数据服务器
(MASTER)下载一个metadata.mfs.back 文件。当元数据服务器关闭或者出故障时,matedata.mfs.back 文件将消失,那么
要恢复整个mfs,则需从metalogger 服务器取得该文件。请特别注意这个文件,它与日志文件一起,才能够恢复整个被
损坏的分布式文件系统。
# MASTER_RECONNECTION_DELAY = 5
MASTER_HOST = 192.168.17.139
# MASTER_PORT = 9419
# MASTER_TIMEOUT = 60
# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfsmetalogger.lock
[root@mail sbin]# ./mfsmetalogger start ( 启动mstalogger元日志服务器)
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly
[root@mail sbin]# ps -ef |grepmfs
mfs 12254 1 0 15:25 ? 00:00:00 ./mfschunkserver start
[root@mail sbin]# lsof -i:9419
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
mfsmetalo 12292 mfs 7u IPv4 1395372 TCPmail.tt.com:52456->192.168.3.34:9419 (ESTABLISHED)
查看日志服务器的工作目录
这是运行18 小时后:
2.3.3停止metalogger服务
如果没有启动metalogger 服务,在master server 则会有如下提示信息产生:
[root@mail mfs]# pwd
/usr/local/mfs/var/mfs
[root@mail mfs]# ll
total 8
-rw-r----- 1 mfs mfs 249 Jan 13 15:39 changelog_ml.1.mfs
-rw-r----- 1 mfs mfs 519 Jan 13 15:40 sessions_ml.mfs
[root@mail mfs]# ll
total 1808
-rw-r----- 1 mfs mfs 0 Jan 14 08:40 changelog_ml.0.mfs
-rw-r----- 1 mfs mfs 4692 Jan 13 23:39 changelog_ml.10.mfs
-rw-r----- 1 mfs mfs 4692 Jan 13 22:39 changelog_ml.11.mfs
-rw-r----- 1 mfs mfs 4692 Jan 13 21:39 changelog_ml.12.mfs
-rw-r----- 1 mfs mfs 4692 Jan 13 20:39 changelog_ml.13.mfs
-rw-r----- 1 mfs mfs 4692 Jan 13 19:39 changelog_ml.14.mfs
-rw-r----- 1 mfs mfs 4692 Jan 13 18:39 changelog_ml.15.mfs
-rw-r----- 1 mfs mfs 4692 Jan 13 17:39 changelog_ml.16.mfs
-rw-r----- 1 mfs mfs 4722 Jan 13 16:39 changelog_ml.17.mfs
-rw-r----- 1 mfs mfs 249 Jan 13 15:39 changelog_ml.18.mfs
-rw-r----- 1 mfs mfs 4692 Jan 14 08:39 changelog_ml.1.mfs
-rw-r----- 1 mfs mfs 4692 Jan 14 07:39 changelog_ml.2.mfs
-rw-r----- 1 mfs mfs 4692 Jan 14 06:39 changelog_ml.3.mfs
-rw-r----- 1 mfs mfs 4692 Jan 14 05:39 changelog_ml.4.mfs
-rw-r----- 1 mfs mfs 4692 Jan 14 04:39 changelog_ml.5.mfs
-rw-r----- 1 mfs mfs 4692 Jan 14 03:39 changelog_ml.6.mfs
-rw-r----- 1 mfs mfs 4692 Jan 14 02:39 changelog_ml.7.mfs
-rw-r----- 1 mfs mfs 4692 Jan 14 01:39 changelog_ml.8.mfs
-rw-r----- 1 mfs mfs 4692 Jan 14 00:39 changelog_ml.9.mfs
-rw-r----- 1 mfs mfs 915016 Jan 14 09:00 csstats.mfs
-rw-r----- 1 mfs mfs 777640 Jan 14 08:10 metadata_ml.mfs.back
-rw-r----- 1 mfs mfs 519 Jan 14 09:16 sessions_ml.mfs
[root@mail sbin]# ./mfsmetalogger –s (停止mstalogger元日志服务器)
working directory: /usr/local/mfs/var/mfs
sending SIGTERM to lock owner (pid:12284)
waiting for termination ... terminated
安装配置数据存储服务器(chunkserver)
安装数据存储服务
配置文件位于安装目录/usr/local/mfs/etc ,需要的配置文件有两个: mfschunkserver.cfg 和
mfshdd.cfg,mfschunkserver.cf 是主配置文件,mfshdd.cfg 是服务器用来分配给MFS 使用的空间,最
好是一个单独的硬盘或者一个raid 卷,最低要求是一个分区。
mfschunkserver.cfg的配置
文中的大多数变量不难理解,类似于mfsmaster.cfg 中的变量
tail -f /var/log/messages
Dec 30 16:53:00 nas mfsmaster[14291]: no meta loggers connected !!!
2.4mfs- Client的安装
2.4.1安装fuse
yuminstall kernel.x86_64 kernel-devel.x86_64 kernel-headers.x86_64
###rebootserver####
yuminstall fuse.x86_64 fuse-devel.x86_64 fuse-libs.x86_64
modprobefuse
2.3.2安装MooseFS Client
wgethttp://ncu.dl.sourceforge.net/project/moosefs/moosefs/1.6.11/mfs-1.6.11.tar.gz
tarzxvf mfs-1.6.11.tar.gz
cdmfs-1.6.11
useraddmfs -s /sbin/nologin
./configure--prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
--enable-mfsmount
make
makeinstall
2.4.2挂载文件系统
cd/mnt/
mkdirmfs
/usr/local/mfs/bin/mfsmount/mnt/mfs/ -H 192.168.17.138
mkdirmfsmeta
/usr/local/mfs/bin/mfsmount-m /mnt/mfsmeta/ -H 192.168.17.138
df-ah