对于更大量的存储使用 MFS 分布式存储:
服务概述:
MFS : 网络分布式文件系统
Project web site: http://www.moosefs.com/
Installation and using MooseFS:
http://www.moosefs.org/reference-guide.html
mooseFS(moose 驼鹿)是一款网络分布式文件系统。它把数据分散在多台服务器上,但对于用户来讲, 看到的只是一个源。MFS 也像其他类 unix 文件系统一样,包含了层级结构(目录树),存储着文件属性
(权限,最后访问和修改时间),可以创建特殊的文件(块设备,字符设备,管道,套接字),符号链接, 硬链接。
MFS 分布式文件系统部署方案:
MooseFS 文件系统 4 种角色介绍
MooseFS 是一种分布式文件系统,MooseFS 文件系统结构包括以下四种角色:
1 管理服务器 managing server (master)
管理服务器:负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复.多节点拷贝
2 元数据日志服务器 Metalogger server(Metalogger)
元数据日志服务器: 负责备份 master 服务器的变化日志文件,文件类型为 changelog_ml.*.mfs,以便 于在 master server 出问题的时候接替其进行工作
3 数据存储服务器 data servers (chunk servers )
数据存储服务器: 听从管理服务器调度,提供存储空间,并为客户提供数据传输.。 真正存储用户数据的服务器。存储文件时,首先把文件分成块,然后这些块在数据服务器 chunkserver 之间复 制(复制份数可以手工挃定,建议设置副本数为 3)。数据服务器可以是多个,并且数量越多,可 使用的“磁盘空间”越大,可靠性也越高。
4 客户机挂载使用client computers
客户端: 挂载远程mfs服务器共享出的存储并使用。 通过fuse内核接口挂载远程管理服务器上所管理的数据存储服务器共享出的硬盘。 共享的文件系统的用法和nfs相似。
使用MFS文件系统来存储和访问的主机称为MFS的客户端,成功挂接MFS文件系统以后,就可以像以前使用NFS一样共享这个虚拟性的存储了。
内部运行机制:
xuegod62
端口号:
9420 : MFS master MFS chunck
9421 : MFS master MFS Client
9419 : MFS master 和 MFS metalogger 端通信端口
9422 : MFS chunck 和 MFS Client 端通信端口
9425 : MFS master web 界面监听端口,查看整体运行状态
实验环境:
服务器 角色
xuegod63 管理服务器 managing server (master) 和元数据日志服务器(Metalogger)
xuegod64 数据存储服务器 data servers (chunk servers )
xuegod62 客户机挂载使用 client computers
安装环境准备:
所有服务器端和客户端都要支持 fuse 内核模块。
由于 mfs 的客户端程序也就是加载 mfs 磁盘系统的命令是使用了 fuse,因此只要是想挂载 mfs 的服务器, 必要的前提条件就是先安装 fuse,这样编译 mfs 的时候才能顺利通过。
fuse 概述:
用户空间文件系统(Filesystem in Userspace,简称 FUSE)是操作系统中的概念,挃完全在用户态实 现的文件系统。目前 Linux 通过内核模块对此进行支持。一些文件系统如 NTFS-3G(作用:让 Linux 中 对 NTFS 文件系统提供支持) 使用 FUSE 实现。
注:2.6 以上内核,都自带 fuse
配置:mfs 管理服务器 xuegod63
注:所有角色都是用的同一个安装文件只是配置有所丌同
[[email protected] ~]# yum install rpm-build gcc gcc-c fuse-devel zlib-devel -y [[email protected] mfs]# useradd -s /sbin/nologin mfs #建立用户并禁示此用户登陆 [[email protected] ~]# tar zxvf mfs-1.6.27-5.tar.gz
[[email protected] ~]# cd mfs-1.6.27
[[email protected] mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs
--with-default-group=mfs
[[email protected] mfs-1.6.27]# make -j 4
...
/mfs/var/mfs#" <cgiserv.py.in >mfscgiserv
make[2]: Leaving directory `/root/mfs-1.6.27/mfscgi‘ make[2]: Entering directory `/root/mfs-1.6.27‘ make[2]: Leaving directory `/root/mfs-1.6.27‘ make[1]: Leaving directory `/root/mfs-1.6.27‘ [[email protected] mfs-1.6.27]#make install
查看安装后目录结构
[[email protected] mfs-1.6.27]# ls /usr/local/mfs bin etc sbin share var
注:各个文件的作用:
bin – 客户端工具
etc –服务器的配置文件都放在该目录中
sbin – 服 务 端 吭 劢 程 序 。 如 : 元 数 据 服 务 器 端 程 序 mfsmaster 、 数 据 存 储 服 务 器 端 服 务 程 序
mfschunkserver share – 文档
var – 元数据目录(可在配置文件中自定义到其他目录)
生成配置文件:
[[email protected] ~]# cd /usr/local/mfs/etc/mfs/ [[email protected] ~]# cp mfsmaster.cfg.dist mfsmaster.cfg [[email protected] ~]# cp mfsexports.cfg.dist mfsexports.cfg [[email protected] ~]#cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
[[email protected] ~]#cp /usr/local/mfs/var/mfs/metadata.mfs.empty
/usr/local/mfs/var/mfs/metadata.mfs
#首次安装 master 时,会自劢生成一个名为 metadata.mfs.empty 的元数据文件 metadata,该文件是 空的。MooseFS master 运必须有文件 metadata.mfs
[[email protected] mfs]# vim /usr/local/mfs/etc/mfs/mfsmaster.cfg #丌需要做修改
23 # MATOCS_LISTEN_HOST = * #监听所有 IP,也直接写一个 IP 地址,如 192.168.1.63
24 # MATOCS_LISTEN_PORT = 9420
11 # DATA_PATH = /usr/local/mfs/var/mfs
注:这个配置文件中所有注掉的设置都是默认的配置。
如果有需要还可以修改 DATA_PATH 的设置将元数据目录存储到其他的分区戒磁盘。其他的参数都很简 单根据需要调整即可。
master 会打开 9420 端口等待 mfschunkserver 数据存储服务器连接
2.1.2 修改目录权限
[[email protected] mfs]# chown -R mfs:mfs /usr/local/mfs
2.1.3 启动服务端
[[email protected] mfs]# /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
mfstopology: incomplete definition in line: 7 mfstopology: incomplete definition in line: 7 mfstopology: incomplete definition in line: 22 mfstopology: incomplete definition in line: 22 mfstopology: incomplete definition in line: 28
mfstopology: incomplete definition in line: 28
topology file has been loaded loading metadata ...
loading objects (files,directories,etc.) ... ok loading names ... ok
loading deletion timestamps ... ok loading chunks data ... ok
checking filesystem consistency ... ok connecting files and chunks ... ok
all inodes: 1 directory inodes: 1 file inodes: 0 chunks: 0
metadata file has been loaded stats file has been loaded
master <-> metaloggers module: listen on *:9419 master <-> chunkservers module: listen on *:9420 main master server module: listen on *:9421 mfsmaster daemon initialized properly
[[email protected] mfs]# netstat -antup | grep 942
tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN
11266/mfsmaster
tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN
11266/mfsmaster
注:没有看到 9419 是因为没有客户端来连接了
开机启动:
[[email protected] mfs]# echo ‘/usr/local/mfs/sbin/mfsmaster start‘ >> /etc/rc.local
关闭服务器
[[email protected] mfs]# /usr/local/mfs/sbin/mfsmaster stop sending SIGTERM to lock owner (pid:25665)
waiting for termination ... terminated
[[email protected] mfs]# /usr/local/mfs/sbin/mfsmaster start
查看产生的日志文件:
[[email protected] mfs]# ls /usr/local/mfs/var/mfs/
metadata.mfs.back metadata.mfs.back.1 metadata.mfs.empty sessions.mfs stats.mfs
[[email protected] mfs]#
挃定要共享的文件:
[[email protected] mfs]# vim /usr/local/mfs/etc/mfs/mfsexports.cfg #添加以下两行
# Allow everything but "meta".
* / rw,alldirs,maproot=0
# Allow "meta".
* . rw
192.168.1.64/24 / rw,alldirs,maproot=0
192.168.1.0/24 / rw,alldirs,maproot=0
mfsexports.cfg 文件每一条由三部分组成,第一部分表示客户端的 IP 地址,第二部分表示被挂接的目录,
第三部分表示客户端拥有的权限,下面对三给部分进行解释:
a.客户端 IP 地址
* 所有 IP 地址
x.x.x.x 单个 IP 地址
x.x.x.x/m.m.m.m IP 网络地址/子网掩码
f.f.f.f-t.t.t.t IP 段
b.被挂载的目录
/ 表示 MooseFS 的根
. 表示 MFSMETA 文件系统
c. 客户端拥有的权限
ro 只读
rw 读写
alldirs 允讲挂载任何挃定的子目录
maproot 映射为
root 用户还是指定的用户
password 指定客户端密码
2、配置 xuegod64 为元数据日志服务器(mfsmetalogger)安装主控备份服务器 元数据日志守护进程是在安装 master server 时一同安装的,最小的要求并不比 master 本身大,可以被 运行在任何机器上(例如任一台 chunkserver),但是最好是放置在 MooseFS master 的备份机上,备 份 master 服务器的变化日志文件,文件类型为 changelog_ml.*.mfs。因为主要的 master server 一旦 失效,可能就会将这台 metalogger 机器取代而作为 master server。
[[email protected] ~]# useradd mfs –s /sbin/nologin #建立用户并禁示此用户登陆
[[email protected] ~]# tar zxvf mfs-1.6.11.tar.gz
[[email protected] ~]# cd mfs-1.6.11
[[email protected] mfs-1.6.27]# ./configure --prefix=/usr/local/mfsmeta
--with-default-user=mfs --with-default-group=mfs
[[email protected] ~]# make -j 4 && make install
生成配置文件:
[[email protected] mfsmeta]# cd /usr/local/mfsmeta/etc/mfs/ [[email protected] mfs]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
[[email protected] mfs]# vim mfsmetalogger.cfg #修改红色标记内容
# 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.1.63
#MASTER_HOST,这个文件中需要修改的是 MASTER_HOST 变量,这个变量的值是 MASTER SERVER
的 IP 地址
# MASTER_PORT = 9419
# MASTER_TIMEOUT = 60
# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfsmetalogger.lock
修改目录权限
[[email protected] mfs-1.6.27]# chown -R mfs:mfs /usr/local/mfsmeta/
启动服务
[[email protected] mfs]# /usr/local/mfsmeta/sbin/mfsmetalogger start working directory: /usr/local/mfsmeta/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ... mfsmetalogger daemon initialized properly
开机启动
[[email protected] mfs]# echo ‘/usr/local/mfsmeta/sbin/mfsmetalogger start ‘ >> /etc/rc.local
关闭服务
[[email protected] mfs]# /usr/local/mfsmeta/sbin/mfsmetalogger stop sending SIGTERM to lock owner (pid:17622)
waiting for termination ... terminated
[[email protected] mfs]# /usr/local/mfsmeta/sbin/mfsmetalogger start
查看 MFS 通讯端口是否打开
[[email protected] mfs]# lsof -i:9419
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mfsmaster 26031 mfs 8u IPv4 60942 0t0 TCP *:9419 (LISTEN)
mfsmaster 26031 mfs 13u IPv4 61415 0t0 TCP
xuegod63.cn:9419->xuegod63.cn:47622 (ESTABLISHED)
mfsmetalo 26111 mfs 8u IPv4 61414 0t0 TCP
xuegod63.cn:47622->xuegod63.cn:9419 (ESTABLISHED)
数据存储服务器(chunkserver) 安装数据服务器(chunkservers),这些机器的磁盘上要有适当的剩余空间,而且操作系统要遵循 POSIX 标 准(验证了的有这些: Linux, FreeBSD, Mac OS X and OpenSolaris)。
Chunkserver 存储数据时,是在一个普通的文件系统如 ext4 上储存数据块戒碎片(chunks/fragments)
作为文件。 你在 chunkserver 上看不到完整的文件。
安装:
[[email protected] mfs-1.6.27]# useradd mfs -s /sbin/nologin
#建立用户并禁示此用户登陆
[[email protected] ~]# tar zxvf mfs-1.6.27-5.tar.gz
[[email protected] ~]# cd mfs-1.6.27
[[email protected] mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs
--with-default-group=mfs
[[email protected] mfs-1.6.27]# make -j 4 && make install
生成配置文件:
[[email protected] etc]# cd /usr/local/mfs/etc/mfs/
[[email protected] mfs]# cp mfschunkserver.cfg.dist mfschunkserver.cfg
[[email protected] mfs]# cp mfshdd.cfg.dist mfshdd.cfg
[[email protected] mfs]# vim mfschunkserver.cfg #修改以下红色内容
# WORKING_USER = mfs
# WORKING_GROUP = mfs
# DATA_PATH = /usr/local/mfs/var/mfs
# LOCK_FILE = /var/run/mfs/mfschunkserver.pid
# SYSLOG_IDENT = mfschunkserver
# BACK_LOGS = 50
# MASTER_RECONNECTION_DELAY = 30
MASTER_HOST = 192.168.1.63 元数据服务器的名称戒地址,可以是主机名,也可以是 ip 地址
MASTER_PORT = 9420
# MASTER_TIMEOUT = 60
# CSSERV_LISTEN_HOST = *
# CSSERV_LISTEN_PORT = 9422 这个监听端口用于不其它数据存储服务器间的连接,通常是数据复制
# CSSERV_TIMEOUT = 60
# CSTOCS_TIMEOUT = 60
# HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg 分配给 MFS 使用的磁盘空间配置文件 的位置
指定数据存放位置:
[[email protected] mfs]# vim /usr/local/mfs/etc/mfs/mfshdd.cfg
/tmp
#/mnt/hd2
在这里/tmp /tmp 是一个给 mfs 的分区,但在本机上是一个独立的磁盘的挂载目录 修改权限
[[email protected] mfs]# chown -R mfs:mfs /tmp
[[email protected] mfs]# chown -R mfs:mfs /usr/local/mfs/
启动服务
/usr/local/mfs/sbin/mfschunkserver start
[[email protected] mfs]# echo ‘/usr/local/mfs/sbin/mfschunkserver start‘ >> /etc/rc.local
查看:
[[email protected] mfs]# ls /tmp/
注:关闭服务
[[email protected] mfs]# /usr/local/mfs/sbin/mfschunkserver stop
配置 xuegod62 为 MFS 客户端
[[email protected] ~]# yum install rpm-build gcc gcc-c fuse-devel zlib-devel -y
[[email protected] ~]# useradd mfs -s /sbin/nologin
#建立用户并禁示此用户登陆
[[email protected] ~]# tar zxvf mfs-1.6.27-5.tar.gz
[[email protected] ~]# cd mfs-1.6.27
[[email protected] mfs-1.6.27]# ./configure --prefix=/usr/local/mfs
--with-default-user=mfs --with-default-group=mfs --enable-mfsmount
[[email protected] mfs-1.6.27]# make -j 4 && make install
测试: 挂接 MFS 文件系统 创建挂载点:
[[email protected] ~]# umount /mnt/
[[email protected] ~]# mkdir /mnt/mfs #挂载 MFS 存储 加载 fuse 模块到内核
[[email protected] ~]# lsmod | grep fuse
[[email protected] ~]# modprobe fuse [[email protected] ~]# lsmod | grep fuse fuse 66285 0
[[email protected] ~]# ln -s /usr/local/mfs/bin/mfsmount /usr/sbin/mfsmount
#将 mfsmount 链接到 sbin 目录中
将 mfs 共享出来的存储空间挂载到 xuegod62 的/mnt/mfs 目录下 [email protected] ~]# mfsmount /mnt/mfs -H 192.168.1.63 -p MFS Password: #密码为空,因为服务器端没有设置密码
mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to root:root
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 9.7G 3.4G 5.8G 37% /
tmpfs 569M 0 569M 0% /dev/shm
/dev/sda1 194M 28M 157M 15% /boot
192.168.1.63:9421 5.2G 0 5.2G 0% /mnt/mfs
开机自劢运行
[[email protected] ~]# echo ‘modprobe fuse‘ >> /etc/rc.local
[[email protected] ~]# /usr/local/mfs/bin/mfsmount /opt -H 192.168.1.63 >> /etc/rc.local
测试:写数据:
[[email protected] mfs]# rpm -ivh /mnt/Packages/tree-1.5.3-2.el6.x86_64.rpm
[[email protected] mfs]# tree /tmp/ | more #查看存储形势
/tmp/
├── 00
├── 01
│ └── chunk_0000000000000001_00000001.mfs
├── 02
├── 03
├── 04
多复制一些文件:
[[email protected] ~]# cp -r /boot/ /mnt/mfs
[[email protected] mfs]# tree /tmp/ | more
/tmp/
├── 00
├── 01
│ └── chunk_0000000000000001_00000001.mfs
├── 02
│ └── chunk_0000000000000002_00000001.mfs
├── 03
│ └── chunk_0000000000000003_00000001.mfs
├── 04
│ └── chunk_0000000000000004_00000001.mfs
├── 05
│ └── chunk_0000000000000005_00000001.mfs
[[email protected] ~]# ls /mnt/mfs boot hosts
在 MFS chunck server 上,MFS 客户端写入的文件,都是由一个个碎片
测试数据同步:支持多客户端同时挂载读写
[[email protected] ~]# mfsmount /opt/ -H 192.168.1.63
mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to root:root
[[email protected] ~]# cp /etc/passwd /opt/ [[email protected] ~]# ls /opt/
boot hosts passwd vmlinuz-2.6.32-220.el6.x86_64 [[email protected] ~]# ls /mnt/mfs
boot hosts passwd vmlinuz-2.6.32-220.el6.x86_64
实战:配置 MFS web 监控服务端
用来监控 MFS 各节点状态信息,可部署在任一节点服务器。
在 xuegod63 上配置 MFS web 监控服务端 [[email protected] ~]# /usr/local/mfs/sbin/mfscgiserv lockfile created and locked
starting simple cgi server (host: any , port: 9425 , rootpath: /usr/local/mfs/share/mfscgi)
查看方式在浏览器中输入 http://192.168.1.63:9425 (我这个部署在 MASTER 服务器上)