分布式原理:
分布式文件系统是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。简单来说就是把一些分散的(分布在局域网内各个计算机上)共享文件夹,集合成一个文件夹内(虚拟共享文件夹)利用分布式文件夹,对于用户来说,要访问这些共享文件夹时,只要打开这个虚拟共享文件夹,就可以看到所有链接到虚拟共享文件夹内的共享文件夹。用户感觉不到这些个共享文件是分散于各个计算机上的。分布式文件系统的好处是:集中访问,简化操作,数据容灾,提高文件存取性能。
MFS原理:
MFS是一个具有容错性的网络分布式文件系统。它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。MFS支持FUSE使之看起来就是一个Unix的文件系统。
整个MFS文件系统由以下几部分组成:
元数据服务器(Master)
在整个体系中负责管理文件系统,维护元数据。目前版本只支持单个Master服务器,存在单点故障的风险,建议采用性能稳定的服务器充当。
元数据日志服务器(Metal_ogger)
备份Master服务器的变化日志文件,文件类型为:changelog_ml.*.mfs。当Master服务器数据丢失或者损坏,可以从日志服务器中取得文件恢复。
数据存储服务器(Chunk Server)
真正存储数据的服务器。存储文件时,会把文件分块保存,并在数据服务器之间复制,数据服务器越多,能使用的“容量”就越大,可靠性就越高,性能越好。
客户端
可以像挂载NFS一样挂载MFS文件系统,操作一样。
MFS的读写过程:
MFS读处理过程:
客户端向元数据服务器发出读请求。
元数据服务器把所需数据存放的位置(Chunk Server的IP地址和chunk编号)告知客户端。
客户端向已知的Chunk Server请求发送数据。
Chunk Server向客户端发送数据。
MFS写处理过程:
客户端向元数据服务器发送写入请求。
元数据服务器与Chunk Server进行交互(只有当所需的分块Chunks存在的时候才进行这个交互):
a. 元数据服务器只是在某些服务器创建新的分块chunks。
b. Chunk Server告知元数据服务器,步骤a已经操作成功。
元数据服务器告知客户端,你可以在哪个Chunk Server的哪些Chunks写入数据。
客户端向指定的Chunk Server进行数据同步。
Chunk Server与其他ChunkServer进行数据同步。
Chunk Server之间同步成功。
Chunk Server告知客户端数据写入成功。
客户端告知元数据服务器本次写入完毕。
配置步骤:
首先在每台服务器上安装开发工具组和常用工具,关闭iptables或者指定端口进行开放。
#yum groupinstall �Cy “Development tools”
#yum install �Cy wget zlib-devel
#service iptables stop
下面介绍MFS各服务的搭建过程
安装和配置元数据服务(masterserver)
(1) 下载源码:
wget http://sourceforge.net/projects/moosefs/files/moosefs/1.6.27/mfs-1.6.27-5.tar.gz
(2) 创建用户:
useradd mfs -s /sbin/nologin
(3) 解压源码:
tar -zvxf mfs-1.6.27-5.tar.gz
cd mfs-1.6.27
(4) 配置,编译,安装
./configure --prefix=/usr/local/mfs --with-default-user=mfs--with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
make
make install
(5) 复制文件
cd /usr/local/mfs/etc/mfs/
cp mfsmaster.cfg.dist mfsmaster.cfg
cp mfsexports.cfg.dist mfsexports.cfg
cp mfstopology.cfg.dist mfstopology.cfg
cd /usr/local/mfs/var/mfs/
cp metadata.mfs.empty metadata.mfs
(6) 配置文件
需要用到配置文件有两个:mfsmaster.cfg(主配置文件)和mfsexports.cfg(被挂载目录及权限配置文件)。
mfsmaster.cfg文件常用参数如下:
# WORKING_USER = mfs 运行masterserver的用户
# WORKING_GROUP = mfs 运行masterserver的组
# SYSLOG_IDENT = mfsmaster
masterserver在syslog的标识,说明是由masterserver产生的
# LOCK_MEMORY = 0 是否执行mlockall()以避免mfsmaster进程溢出(默认为0)
# NICE_LEVEL = -19
运行的优先级(如果可以默认是-19;注意:进程必须是用root启动)
# EXPORTS_FILENAME = /usr/local/mfs/etc/mfs/mfsexports.cfg
被挂载目录及其权限控制文件的存放位置
# DATA_PATH = /usr/local/mfs/var/mfs 数据存放路径
# BACK_LOGS = 50 metadata的改变log文件数目(默认是50)
# REPLICATIONS_DELAY_INIT = 300 延迟复制的时间(默认是300s)
# REPLICATIONS_DELAY_DISCONNECT = 3600
Chunkserver断开的复制延迟(默认是3600)
# MATOML_LISTEN_HOST = * metalogger监听的IP地址(默认是*,代表任何IP)
# MATOML_LISTEN_PORT = 9419 metalogger监听的端口地址(默认是9419)
# MATOCS_LISTEN_HOST = * 用于chunkserver连接的IP地址(默认是*,代表任何IP)
# MATOCS_LISTEN_PORT = 9420 用于chunkserver连接的端口地址(默认是9420)
# MATOCL_LISTEN_HOST = * 用于客户端挂载连接的IP地址(默认是*,代表任何IP)
# MATOCL_LISTEN_PORT = 9421 用于客户端挂载连接的端口地址(默认是9421)
# CHUNKS_LOOP_MIN_TIME = 300 chunks的回环频率(默认是300秒)
# CHUNKS_WRITE_REP_LIMIT = 2
在一个循环里复制到一个chunkserver的最大chunk数
# CHUNKS_READ_REP_LIMIT = 10
在一个循环里从一个chunkserver复制的最大chunk数
# REJECT_OLD_CLIENTS = 0 弹出低于1.6.0的客户端挂载(0或1,默认是0)
注意mfsexports访问控制对于那些老客户是没用的
mfsexports.cfg文件参数格式如下:
# Allow everything but "meta".
* / rw,alldirs,maproot=0
# Allow "meta".
* . rw
该文件每一个条目分为三部分:
第一部分:客户端的IP地址
第二部分:被挂接的目录
第三部分:客户端拥有的权限
地址可以指定的几种表现形式:
# * = any ip (same as 0.0.0.0/0) 所有的IP地址
# A.B.C.D = given ip address 单个IP地址
# A.B.C.D-E.F.G.H = range ofip addresses IP地址段
# A.B.C.D/BITS = A.B.C.D networkwith BITS ones in netmask网络地址/位数掩码
# A.B.C.D/E.F.G.H = A.B.C.Dnetwork with E.F.G.H netmask 网络地址/子网掩码
目录部分需要注意两点:
# . = special 'path' thatmeans 'meta' 表示MFSMETA文件系统
# /... = path in mfsstructure 标识MFS根
权限部分:
ro 只读模式共享
rw 读写方式共享
alldirs 许挂载任何指定的子目录
maproot 映射为root,还是指定的用户
password 指定客户端密码
以上是对masterserver的mfsmaster.cfg和mfsexports.cfg配置文件的解释,对于这两个不需要做任何修改就可以工作。
(7) 启动Master Server
/usr/local/mfs/sbin/mfsmaster start
可如下检查:
[root@10-9-28-82 sbin]# ps -ef | grep mfs
mfs 30004 1 013:38 ? 00:00:00/usr/local/mfs/sbin/mfsmaster start
root 3000623846 0 13:38 pts/0 00:00:00 grep mfs
(8) 停止Master Server
/usr/local/mfs/sbin/mfsmaster �Cs
安装和配置元数据日志服务器(metalogger)
(1) 下载源码:
wget http://sourceforge.net/projects/moosefs/files/moosefs/1.6.27/mfs-1.6.27-5.tar.gz
(2) 创建用户:
useradd mfs -s /sbin/nologin
(3) 解压源码:
tar -zvxf mfs-1.6.27-5.tar.gz
cd mfs-1.6.27
(4) 配置,编译,安装
./configure --prefix=/usr/local/mfs --with-default-user=mfs--with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
make
make install
(5) 复制文件
cd /usr/local/mfs/etc/mfs/
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
(6) 配置文件
该服务只有一个配置文件,那就是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
# BACK_META_KEEP_PREVIOUS = 3
# META_DOWNLOAD_FREQ = 24
# MASTER_RECONNECTION_DELAY = 5
# MASTER_HOST = mfsmaster
# MASTER_PORT = 9419
# MASTER_TIMEOUT = 60
# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfsmetalogger.lock
文中的大多数变量不难理解,类似于mfsmaster.cfg中的变量,其中:这个文件中需要修改的是MASTER_HOST变量,这个变量的值是master server的IP地址
(7) 启动元数据日志服务器
/usr/local/mfs/sbin/mfsmetalogger start
[root@10-9-32-123 mfs]# ps -ef | grep mfs
mfs 19567 1 013:56 ? 00:00:00/usr/local/mfs/sbin/mfsmetalogger start
root 19569 8716 013:57 pts/0 00:00:00 grep mfs
(8) 停止元数据日志服务器
/usr/local/mfs/sbin/mfsmetalogger �Cs
安装和配置数据存储服务器(chunkserver)
(1) 下载源码:
wget http://sourceforge.net/projects/moosefs/files/moosefs/1.6.27/mfs-1.6.27-5.tar.gz
(2) 创建用户:
useradd mfs -s /sbin/nologin
(3) 解压源码:
tar -zvxf mfs-1.6.27-5.tar.gz
cd mfs-1.6.27
(4) 配置,编译,安装
./configure --prefix=/usr/local/mfs --disable-mfsmaster--disable-mfsmount --with-default-user=mfs --with-default-group=mfs
make
make install
(5) 复制文件
cd /usr/local/mfs/etc/mfs
cp mfschunkserver.cfg.dist mfschunkserver.cfg
cp mfshdd.cfg.dist mfshdd.cfg
(6) 配置文件
mfschunkserver.cfg文件内容如下:
# WORKING_USER =mfs
# WORKING_GROUP= mfs
# SYSLOG_IDENT =mfschunkserver
# LOCK_MEMORY =0
# NICE_LEVEL =-19
# DATA_PATH =/usr/local/mfs/var/mfs
#MASTER_RECONNECTION_DELAY = 5
# BIND_HOST = *
# MASTER_HOST =mfsmaster
# MASTER_PORT =9420
# MASTER_TIMEOUT= 60
#CSSERV_LISTEN_HOST = *
#CSSERV_LISTEN_PORT = 9422
#HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg
# HDD_TEST_FREQ= 10
# deprecated, tobe removed in MooseFS 1.7
# LOCK_FILE =/var/run/mfs/mfschunkserver.lock
# BACK_LOGS = 50
# CSSERV_TIMEOUT= 5
这个文件中需要修改的是MASTER_HOST变量,这个变量的值是masterserver的IP地址
mfshedd.cfg文件内容如下,添加一行/yy
# mount pointsof HDD drives
#
#/mnt/hd1
#/mnt/hd2
#etc.
/yy
在这里/yy是一个给mfs的分区,最好在使用独立的分区或磁盘挂载到此目录,本实验先使用一个目录,把属主改变为mfs
mkdir /yy
chown �CR mfs:mfs/yy
(7) 启动数据存储服务器
/usr/local/mfs/sbin/mfschunkserver start
[root@10-9-25-127 ~]# ps -ef | grep mfs
mfs 17232 1 013:39 ? 00:00:03 /usr/local/mfs/sbin/mfsmasterstart
mfs 21749 1 014:22 ? 00:00:00/usr/local/mfs/sbin/mfschunkserver start
root 21782 11038 0 14:22 pts/0 00:00:00 grep mfs
(8) 停止数据存储服务器
/usr/local/mfs/sbin/mfschunkserver �Cs
MFS客户端的安装及配置
由于MFS客户端依赖于fuse,所以要先安装fuse
安装FUSE
(1) 下载源码
wget http://nchc.dl.sourceforge.net/project/fuse/fuse-2.X/2.9.2/fuse-2.9.2.tar.gz
(2) 解压源码
tar -zvxf fuse-2.9.2.tar.gz
cd fuse-2.9.2
(3) 配置,编译,安装
./configure
make
make install
(4) 设置环境变量
先编辑/etc/profile,在此文件中加入如下条目:
exportPKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
然后再利用source命令/etc/profile使修改生效:
source /etc/profile
安装MFS客户端
(1) 下载源码
wget http://sourceforge.net/projects/moosefs/files/moosefs/1.6.27/mfs-1.6.27-5.tar.gz
(2) 创建用户
useradd mfs �Cs /sbin/nologin
(3) 解压源码
tar -zvxf mfs-1.6.27-5.tar.gz
cd mfs-1.6.27
(4) 配置,编译,安装
./configure --prefix=/usr/local/mfs --disable-mfsmaster--disable-mfschunkserver --enable-mfsmount --with-default-user=mfs--with-default-group=mfs
make
make install
(5) 挂载MFS文件系统
创建挂载点 mkdir /mnt/mfs
加载fuse模块到内核:modprobe fuse
挂载MFS
usr/local/mfs/bin/mfsmount /mnt/mfs -H 118.192.76.71
(6)查看挂载情况,使