一、MFS具有容错功能,高可用,可扩展的功能。MFS把数据分散在多台服务器上,但用户看到的只是一个源。
- 工作原理
1、分布式原理
分布式文件系统就是把一些分散在多台计算机上的共享文件夹,集合到一个共享文件夹内,用户要访问这些文件夹的时候,只要打开一个文件夹,就可以的看到所有链接到此文件夹内的共享文件夹。
2、MFS原理
MFS是一个具有容错性的网络分布式文件系统,它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。
3、MFS的组成
- 元数据服务器(Master):在整个体系中负责管理文件系统,维护元数据,目前不支持高可用。
- 元数据日志服务器(MetaLogger):备份Master服务器的变化日志文件,当master服务器损坏,可以从日志服务器中取得文件恢复。
- 数据存储服务器(Chunk Server):真正存储数据的服务器,服务器越多,容量就越大,可靠性越高,性能越好。
- 客户端(Client): 可以像挂载NFS一样 挂载MFS文件系统(通过 fuse 内核接口挂载进程管理服务器上所管理的数据存储服务器共享出的硬盘。)
4、mfs的读写处理过程
- MFS读数据的处理过程
- 客户端向元数据服务器发出读请求
- 元数据服务器把所需数据存放的位置(Chunk Server的IP地址和Chunk编号)告知客户端
- 客户端向已知的Chunk Server请求发送数据
- Chunk Server向客户端发送数据
- 写入的过程
- 客户端向元数据服务器发送写入请求
- 元数据服务器与Chunk Server进行交互,但元数据服务器只在某些服务器创建新的分块Chunks,创建成功后由Chunk Servers告知元数据服务器操作成功
- 元数据服务器告知客户端,可以在哪个Chunk Server的哪些Chunks写入数据
- 客户端向指定的Chunk Server写入数据
- 该Chunk Server与其他Chunk Server进行数据同步,同步成功后Chunk Server告知客户端数据写入成功
- 客户端告知元数据服务器本次写入完毕
二、环境
主机 | os | IP地址 | 主要软件 |
master | centos6.5 | 192.168.1.10 | mfs-1.6.27-5.tar.gz
|
Metalogger | centos6.5 | 192.168.1.11 | mfs-1.6.27-5.tar.gz
|
chunks server | centos6.5 | 192.168.1.12 | mfs-1.6.27-5.tar.gz |
chunk2 server | centos6.5 | 192.168.1.13 | mfs-1.6.27-5.tar.gz |
client | centos6.5 | 192.168.1.14 | fuse-2.9.2.tar.gz |
三、搭建master server
yum -y install zlib-devel
useradd mfs -s /sbin/nologin
tar zxf mfs-1.6.27-5.tar.gz
cd mfs-1.6.27
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount && make && make install
注:prefix=/usr/local/mfs //指定安装目录
--with-default-user=mfs //指定程序运行用户
--with-default-group=mfs //指定程序运行组
--disable-mfschunkserver //禁用Chunk功能
--disable-mfsmount //禁用mfsmount功能
ls -lh /usr/local/ #安装完成生成的目录
drwxr-xr-x 2 root root 4096 Dec 3 11:24 bin #客户端工具
drwxr-xr-x 3 root root 4096 Dec 3 11:24 etc #服务器的配置文件都放在该目录中
drwxr-xr-x 2 root root 4096 Dec 3 11:24 sbin #服务端启动程序。如:元数据服务器端程序 mfsmaster、数据存储服务器端服务程序mfschunkserver
drwxr-xr-x 4 root root 4096 Dec 3 11:24 share #文档
drwxr-xr-x 3 root root 4096 Dec 3 11:24 var #元数据目录(可在配置文件中自定义到其他目录)
cd /usr/local/mfs/etc/mfs/ #复制mfs生成的配置文件
cp mfsexports.cfg.dist mfsexports.cfg #配挂载目录及访问权限
cp mfsmaster.cfg.dist mfsmaster.cfg #主配置文件
cp mfstopology.cfg.dist mfstopology.cfg #元数据log
cd /usr/local/mfs/var/mfs/
cp metadata.mfs.empty metadata.mfs #首次安装 master 时,会自动生成一个名为 metadata.mfs.empty 的元数据文件 metadata,该文件是空的。MooseFS master 运必须有文件 metadata.mfs
/usr/local/mfs/sbin/mfsmaster -s #-s 表示停止服务
/usr/local/mfs/sbin/mfsmaster start 3启动服务
netstat -anpt | grep mfs
tcp 0 0 0.0.0.0:9419 0.0.0.0:* LISTEN 49618/mfsmaster
tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN 49618/mfsmaster
tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN 49618/mfsmaster
注:master 会打开 9420 端口等待 mfschunkserver 数据存储服务器连接
echo "/usr/local/mfs/sbin/mfsmaster start" >> /etc/rc.local
chmod +x /etc/rc.local
ll /usr/local/mfs/var/mfs/ //查看生成的日志文件
-rw-r----- 1 mfs mfs 95 Dec 24 14:30 metadata.mfs
-rw-r----- 1 mfs mfs 95 Dec 24 14:28 metadata.mfs.back.1
-rw-r--r-- 1 mfs mfs 8 Dec 24 14:13 metadata.mfs.empty
-rw-r----- 1 mfs mfs 10 Dec 24 14:28 sessions.mfs
-rw-r----- 1 mfs mfs 762516 Dec 24 14:30 stats.mfs
iptables -I INPUT -p tcp --dport 9419 -j ACCEPT
iptables -I INPUT -p tcp --dport 9420 -j ACCEPT
iptables -I INPUT -p tcp --dport 9421 -j ACCEPT
service iptables save
mfsmaster.cfg常用的参数如下,默认全部都是不需要修改的,全文都是以#开头,也就是说都是默认配置
vim mfsmaster.cfg
WORKING_USER = mfs //运行masterserver的用户
# WORKING_GROUP = mfs //运行masterserver的组
# SYSLOG_IDENT = mfsmaster //masterserver在syslog的标示,说明是由masterserver产生的
# LOCK_MEMORY = 0 //是否执行mlokall(),以避免mfsmaster进程溢出默认为0
# NICE_LEVEL = -19 //运行的优先级,进程必须由root启动
# EXPORTS_FILENAME = /usr/local/mfs/etc/mfs/mfsexports.cfg
//被挂载目录及其权限控制文件的存放位置
# TOPOLOGY_FILENAME = /usr/local/mfs/etc/mfs/mfstopology.cfg
# DATA_PATH = /usr/local/mfs/var/mfs //数据存放路径
# BACK_LOGS = 50 //metadata改变的log文件数目(默认是50)
# BACK_META_KEEP_PREVIOUS = 1
# REPLICATIONS_DELAY_INIT = 300 //延迟复制的时间(默认300)
# REPLICATIONS_DELAY_DISCONNECT = 3600 //Chunkserver断开复制延迟(默认是3600秒)
# MATOML_LISTEN_HOST = * //metalogger监听的IP地址默认是所有地址
# MATOML_LISTEN_PORT = 9419 //metalogger监听的端口地址(默认为9419)
# MATOML_LOG_PRESERVE_SECONDS = 600
# MATOCL_LISTEN_HOST = * //用于chunkserver连接的IP地址(默认为*代表所有IP)
# MATOCL_LISTEN_PORT = 9421 //用户客户端挂在的监听端口9421
# CHUNKS_LOOP_MAX_CPS = 100000
# CHUNKS_LOOP_MIN_TIME = 300 //chunks的回环频率(默认300)
# CHUNKS_SOFT_DEL_LIMIT = 10
# CHUNKS_HARD_DEL_LIMIT = 25
# CHUNKS_WRITE_REP_LIMIT = 2 //在一个循环里复制到另外一个Chunkserver的最大Chunk数
# CHUNKS_READ_REP_LIMIT = 10 //在一个循环里从一个Chunkserver复制的的最大Chunk数
# ACCEPTABLE_DIFFERENCE = 0.1
# SESSION_SUSTAIN_TIME = 86400
# REJECT_OLD_CLIENTS = 0 //弹出低于1.6.0的客户端挂接(0或1,默认是0)
# deprecated:
# CHUNKS_DEL_LIMIT - use CHUNKS_SOFT_DEL_LIMIT instead
# LOCK_FILE - lock system has been changed, and this option is used only to search for old lockfile
vim mfsexport.cfg //文件参数格式如下
# Allow everything but "meta".
* / rw,alldirs,maproot=0
# Allow "meta".
* . rw
该文件,每一个条目分为三个部分
第一部分:客户端IP地址
第二部分:被挂载的目录
第三部分:客户端拥有的权限
地址可以指定几种表现形式
*代表所有的IP地址
n.n.n.n单个ip地址
n.n.n.n/b IP网络地址/位数掩码
n.n.n.n/m.m.m.m IP网络地址/子网掩码
f.f.f.f-t.t.t.t IP段
目录部分的标示如下
/标示MFS根
.表示MFSMETA文件系统
权限部分如下所示
ro——只读模式共享
rw——读写模式共享
alldirs——允许挂载任何指定的子目录
maproot——映射为root,还是普通用户
password——指定客户端的密码
以上就是对mfsmaster.cfg和mfsexport文件的解释,默认就是最好的,不需要做任任何修改。
搭建Metalogger
yum -y install zlib-devel
useradd mfs -s /sbin/nologin
tar zxf mfs-1.6.27-5.tar.gz
cd mfs-1.6.27
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount && make && make install
cd /usr/local/mfs/etc/mfs/
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
vim mfsmetalogger.cfg #修改
MASTER_HOST = 192.168.1.1
#MASTER_HOST,这个文件中需要修改的是 MASTER_HOST 变量,这个变量的值是 MASTER SERVER 的 IP 地址
chown -R mfs:mfs /usr/local/mfs/
echo "/usr/local/mfs/sbin/mfsmetalogger start" >> /etc/rc.local
/usr/local/mfs/sbin/mfsmetalogger start #启动元数据日志服务器
netstat -antp | grep 9419
lsof -i :9419
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mfsmaster 49647 mfs 8u IPv4 58608 0t0 TCP *:9419 (LISTEN)
mfsmaster 49647 mfs 11u IPv4 63142 0t0 TCP xuegod63.cn:9419->xuegod63.cn:47563 (ESTABLISHED)
mfsmetalo 54672 mfs 8u IPv4 63141 0t0 TCP xuegod63.cn:47563->xuegod63.cn:9419 (ESTABLISHED)
iptables -I INPUT -p tcp --dport 9419 -j ACCEPT #配置防护墙策略
service iptables save
搭建chunk server(注chunk配置都一样)
#在chunkserver1
yum -y install zlib-devel
useradd mfs -s /sbin/nologin
cd mfs-1.6.27
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmount --disable-mfsmaster && make && make install
cd /usr/local/mfs/etc/mfs/
cp mfschunkserver.cfg.dist mfschunkserver.cfg #主配置文件
cp mfshdd.cfg.dist mfshdd.cfg #使用的磁盘空间配置文件
vim mfschunkserver.cfg
MASTER_HOST = 192.168.1.1 #元数据服务器的名称或地址,可以是主机名,也可以是 ip 地址
MASTER_PORT = 9420 #可以启用它,也可以不启用,不启用,默认就是9420
vim mfshdd.cfg
/data #在这里/data 是一个给 mfs 的分区,但在生产环境是一个独立的磁盘的挂载目录
mkdir /data
chown -R mfs:mfs /data
ps -ef | grep mfs
/usr/local/mfs/sbin/mfschunkserver start
echo "/usr/local/mfs/sbin/mfschunkserver start" >> /etc/rc.local
chmod +x /etc/rc.local
iptables -I INPUT -p tcp --dport 9422 -j ACCEPT
service iptables save
在chunk2
yum -y install zlib-devel
useradd mfs -s /sbin/nologin
cd mfs-1.6.27
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmount --disable-mfsmaster && make && make install
cd /usr/local/mfs/etc/mfs/
cp mfschunkserver.cfg.dist mfschunkserver.cfg
cp mfshdd.cfg.dist mfshdd.cfg
vim mfschunkserver.cfg
MASTER_HOST = 192.168.1.1
vim mfshdd.cfg
/data
mkdir /data
chown -R mfs:mfs /data
/usr/local/mfs/sbin/mfschunkserver start
ps -ef | grep mfs
iptables -I INPUT -p tcp --dport 9422 -j ACCEPT
service iptables save
查看/data下的数据 #分块存储,人工无法认识滴
搭建client
yum -y install zlib-devel
useradd mfs -s /sbin/nologin
tar zxf fuse-2.9.2.tar.gz
tar zxf mfs-1.6.27-5.tar.gz
cd fuse-2.9.2
./configure && make && make install
vim /etc/profile
export PATH=/usr/local/mfs/bin:$PATH
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
source /etc/profile
cd ../mfs-1.6.27
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount --disable-mfschunkserver && make && make install
mkdir /mnt/mfs
modprobe fuse
echo "modprobe fuse" >> /etc/rc.local
echo "/usr/local/mfs/bin/mfsmount /mnt/mfs -H 192.168.1.1" >> /etc/rc.local
chmod +x /etc/rc.local
/usr/local/mfs/bin/mfsmount /mnt/mfs/ -H 192.168.1.1 #将mfs共享出来的存储空间挂载到192.168.1.1的/ /mfs目录下 加-p数密码
df -hT
192.168.1.1:9421 fuse.mfs 77G 0 77G 0% /mnt/mfs
/usr/local/mfs/bin/mfsgetgoal -r /mnt/mfs/
mfssetgoal -r 1 /mnt/mfs/ #mfssetgoal用来设置文件被复制的分数,生产环境下Chunk server节点数量应大于
cd /mnt/mfs/
touch test
mfsgetgoal test
分别打开两台chunk查看/data下,都产生了加密的数据,说明成功了
回收站
mfsrsettrashtime 600 /mnt/mfs/ //回收站清空时间,s计算,设置文件或目录的删除时间。一个删除的文件能够存放在“ 垃圾箱”中的时间称为隔离时间, 这个时间可以用mfsgettrashtime 命令来查看,用mfssettrashtime 命令来设置。单位为秒。
单独安装或挂载MFSMETA 文件系统,它包含目录/ trash (包含仍然可以被还原的删除文件的信息)和/ trash/undel (用于获取文件)。
把删除的文件,移到/ trash/undel下,就可以恢复此文件。
在MFSMETA 的目录里,除了trash 和trash/undel 两个目录,还有第三个目录reserved,该目录内有已经删除的文件,但却被其他用户一直打开着。在用户关闭了这些被打开的文件后,reserved 目录中的文件将被删除,文件的数据也将被立即删除。此目录不能进行操作。
mfsmaster配置文件
#WORKING_USER = mfs #运行master server 用户
# WORKING_GROUP = mfs #运行master server 组
# SYSLOG_IDENT = mfsmaster #master server 在syslog中的标识,说明是由master产生的
# LOCK_MEMORY = 0 #是否执行mlockall()避免mfsmaster 进程溢出(默认为0)
# NICE_LEVEL = -19 #运行的优先级(如果可以默认-19;注意:进程必须是用root启动)
# EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg #被挂接的目录及其权限控制文件的存放位置
# DATA_PATH = /usr/local/mfs/var/mfs #数据存放路径,此目录分三类文件,changelog ,sessions 和stats
# BACK_LOGS = 50 #metadata的改变log文件数目(默认是50)
# REPLICATIONS_DELAY_INIT = 300 #延迟复制的时间(默认是300s)
# REPLICATIONS_DELAY_DISCONNECT = 3600 #chunkserver 断开的复制延迟(默认是3600)
# MATOCS_LISTEN_HOST = * #metalogger 监听的ip地址(默认是*,代表任何ip)
# MATOCS_LISTEN_PORT = 9419 #metalogger 监听的端口地址(默认是9419)
# MATOCS_LISTEN_HOST = * #用于chunkserver 连接的ip地址(默认是*,代表任何ip)
# MATOCS_LISTEN_PORT = 9420 #用于chunkserver 连接的端口地址(默认是9420)
# MATOCU_LISTEN_HOST = * #用于客户端挂接的ip地址(默认*,代表任何ip)
# MATOCU_LISTEN_PORT = 9421 #用于客户端挂接连接的端口地址(默认9421)
# CHUNKS_LOOP_TIME = 300 #chunksde 回环频率(默认是:300秒)
# CHUNKS_WRITE_REP_LIMIT = 1 #在一个循环里复制到一个chunkserver的最大chunk数目
# CHUNKS_READ_REP_LIMIT = 5 #在一个循环里从一个chunkserver复制的最大chunk数目
#CHUNKS_READ_REP_LIMIT = 0 弹出低于1.6.0的客户端挂接(0或1,默认是0
mfs回收站部署及测试
/在客户端创建目录并且赋权
#mkdir /mfs/mfsmeta
#cd /mfs
#chown -R mfs:mfs mfsmeta
//挂载目录
#/usr/bin/mfsmount -m /mfs/mfsmeta/ -H 192.168.0.11 //mfsmaster可以使用Master机IP
#/usr/bin/mfsmount /mfs -H 192.168.0.11
///查看挂载后的目录结构
#cd /mfs/mfsmeta/
#ll
#cd trash
#ll
#cd undel
开始删除并还原测试
#cd /mfs/mfsmeta/
#ll
#rm -rf web
#cd /mfs/mfsmeta/
#cd trash
#ls
#mv 0000000F\|gagag undel
#ls
#cd /mfs
MFS监控
mfscgiserv是用python编写的一个web服务器,其监听端口是9425,可以再masster server 上通过 /usr/local/mfs/sbin/mfscgiserv来启动,用户利用浏览器就可以完全监控所有客户挂接、Chunk server、Master server等。在一台客户端上通过浏览器访问http://192.168.1.1:9425
在master开启mfs监控
/usr/local/mfs/sbin/mfscgiserv
iptables -I INPUT -p tcp --dport 9425 -j ACCEPT
在一台客户端上通过浏览器访问http://192.168.1.1:9425
灾难恢复
MFS维护及灾难恢复
1)MFS集群的启动与停止
- MFS集群的启动顺序如下
(1)启动mfsmaster进程
(2)启动所有的mfsChunkserver进程
(3)启动mfsmetalogger进程
(4)在所有客户端上挂载NFS文件系统
- MFS集群的停止顺序如下
(1)在所有客户端卸载MFS挂载
(2)停止Chunkserver进程
(3)停止mfsmetalogger进程
(4)停止mfsmaster进程