MFS 分布式文件系统

1、分布式文件系统简介

分布式文件系统(Distrbuted File System)是一个具有容错性的网络分布式文件系统。它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。分布式文件系统的好处是集中访问、简化操作、数据容灾、提高文件存取性能。

1.1 SAN和MFS比较

image-20191115112400700

当我们存储服务器的容量达到瓶颈之后,那我们就需要采用分布式的文件系统来扩大存储容量,类似于百度云的存储,也是采用分布式存储!

mooseFS(moose 驼鹿)是一款网络分布式文件系统。它把数据分散在多台服务器上,但对于用户来讲,看到的只是一个源。MFS也像其他类unix文件系统一样,包含了层级结构(目录树),存储着文件属性(权限,最后访问和修改时间),可以创建特殊的文件(块设备,字符设备,管道,套接字),符号链接,硬链接。

1.2 MFS 的特征

  1. 层析结构(目录树)

  2. 存储文件属性(权限,访问和修改时间)

  3. 支持特殊文件(块设备,字符设备,管道)

  4. 符号链接,软硬链接

  5. 对文件系统访问可以通过IP地址或者密码进行访问限制

  6. 高可靠(数据的多个拷贝存储在不同的计算机上)

  7. 通过附加新的计算机或者硬盘可以实现容量的动态拓展

  8. 删除文件可以根据一个可配置的时间周期进行保留

  9. 不受访问和写入影响的文件连贯快照

1.3 MooseFS

官网:http://www.moosefs.com/

img

安装和帮助文档:http://www.moosefs.org/reference-guide.html

1.4 MFS分布式文件系统部署方案

MooseFS 是一种分布式文件系统,MooseFS 文件系统结构包括以下四种角色:

  1. 管理服务器(元数据服务器) managing server (master server):负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复.多节点拷贝。目前版本只魂单个Master服务器,存在单点故障的风险,建议采用性能稳定的服务器充当。
  2. 元数据日志服务器 Metalogger server(Metalogger):负责备份 master 服务器的变化日志文件,文件类型为 changelog_ml.*.mfs,当Master服务器数据丢失或者损坏,可以从日志服务器中取得文件恢复。
  3. 数据存储服务器 data servers (chunk servers ) :听从管理服务器调度,提供存储空间,并为客户提供数据传输.。 真正存储用户数据的服务器。存储文件时,首先把文件分成块,然后这些块在数据服务器 chunkserver之间复 制(复制份数可以手工指定,建议设置副本数为 3)。数据服务器可以是多个,并且数量越多,可使用的“磁盘空间”越大,可靠性也越高。
  4. 客户机挂载使用 client computers :挂载进程 mfs 服务器共享出的存储并使用。 通过 fuse 内核接口挂载进程管理服务器上所管理的数据存储服务器共享出的硬盘。 共享的文件系统的用法和 nfs 相似。 使用 MFS 文件系统来存储和访问的主机称为 MFS 的客户端,成功挂接 MFS 文件系统以后,就可以像以前使用 NFS 一样共享这个虚拟性的存储了。

image-20191115113144278

1.5 MFS对数据的处理过程

MFS读取数据的处理过程

image

  1. 客户端向元数据服务器发出读请求

  2. 元数据服务器把所需数据存放的位置(Chunk Server的IP地址和Chunk编号)告知 客户端

  3. 客户端向已知的Chunk Server请求发送数据

  4. Chunk Server向客户端发送数据

MFS写入数据的处理过程

img

  1. 客户端向元数据服务器发送写入请求

  2. 元数据服务器与Chunk Server进行交互,但元数据服务器只在某些服务器创建新的分块Chunks,创建成功后由Chunk Servers告知元数据服务器操作成功

  3. 元数据服务器告知客户端,可以在哪个Chunk Server的哪些Chunks写入数据

  4. 客户端向指定的Chunk Server写入数据

  5. 该Chunk Server与其他Chunk Server进行数据同步,同步成功后Chunk Server告知客户端数据写入成功

  6. 客户端告知元数据服务器本次写入完

image-20191115113443825

1.6 MFS 端口关系图

image-20191115113515509

端口号:

9420:MFS master和MFS chunck通信端口

9421:MFS master和MFS Client端通信端口

9419:MFS master和MFS metalogger端通信端口

9422:MFS chunck 和MFS Client端通信端口

9425:MFS master web界面监听端口,查看整体运行状态

2、搭建MFS文件系统

环境配置

主机操作系统IP地址主要软件
MasterCentOS 6.5 x86_64192.168.1.100mfs-1.6.27-5.tar.gz
MetaLoggerCentOS 6.5 x86_64192.168.1.101mfs-1.6.27-5.tar.gz
Chunk Server1CentOS 6.5 x86_64192.168.1.102mfs-1.6.27-5.tar.gz
Chunk Server2CentOS 6.5 x86_64192.168.1.103mfs-1.6.27-5.tar.gz
Chunk Server3CentOS 6.5 x86_64192.168.1.104mfs-1.6.27-5.tar.gz
ClientCentOS 6.5 x86_64192.168.1.105mfs-1.6.27-5.tar.gz
fuse-2.9.2.tar.gz

2.1 搭建Master Server

2.1.1 关闭防火墙,并安装好依赖包

1
2
3
4
5
[root@centos1 ~]# service iptables stop
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
[root@centos1 ~]# yum -y instal zlib-devel

2.1.2 创建运行用户

1
[root@centos1 ~]# useradd mfs -s /sbin/nologin

2.1.3 安装源码包

1
2
3
4
[root@centos1 ~]# tar xf mfs-1.6.27-5.tar.gz 
[root@centos1 ~]# cd mfs-1.6.27
[root@centos1 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmout
[root@centos1 mfs-1.6.27]# make && make install

2.1.4 复制相关文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@centos1 mfs-1.6.27]# cd /usr/local/mfs/etc/mfs/
[root@centos1 mfs]# ll
total 16
-rw-r--r-- 1 root root 4060 Oct 27 10:32 mfsexports.cfg.dist
-rw-r--r-- 1 root root 1020 Oct 27 10:32 mfsmaster.cfg.dist
-rw-r--r-- 1 root root 417 Oct 27 10:32 mfsmetalogger.cfg.dist
-rw-r--r-- 1 root root 1123 Oct 27 10:32 mfstopology.cfg.dist
[root@centos1 mfs]# cp mfsmaster.cfg.dist mfsmaster.cfg
[root@centos1 mfs]# cp mfsexports.cfg.dist mfsexports.cfg
[root@centos1 mfs]# cp mfstopology.cfg.dist mfstopology.cfg
[root@centos1 mfs]# cd /usr/local/mfs/var/mfs/
[root@centos1 mfs]# ll
total 4
-rw-r--r-- 1 root root 8 Oct 27 10:32 metadata.mfs.empty
[root@centos1 mfs]# cp metadata.mfs.empty metadata.mfs

2.1.5 了解配置文件

(无需改动)

需要用到的配置文件有两个:mfsmaster.cfg(主配置文件)和mfsexports.cfg(被挂载目录及权限配置文件)
mfsmaster.cfg文件常用参数如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
[root@centos1 mfs]# cd /usr/local/mfs/etc/mfs/
[root@centos1 mfs]# vim mfsmaster.cfg

# WORKING_USER = mfs //运行master server的用户
# WORKING_GROUP = mfs //运行master server的组
# SYSLOG_IDENT = mfsmaster //master server在syslog的标识,说明是由master server产生的
# LOCK_MEMORY = 0 //是否执行mlockall(),以避免mfsmaster进程溢出(默认为0)
# NICE_LEVEL = -19 //运行的优先级(如果可以,默认是-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 //延迟复制的时间(默认300s)
# REPLICATIONS_DELAY_DISCONNECT = 3600 //chunk server断开的复制延迟(默认是3600s)

# MATOML_LISTEN_HOST = * //metalogger监听的IP地址(默认是*,代表任何IP)
# MATOML_LISTEN_PORT = 9419 //metalogger监听的端口地址(默认是9419)
# MATOML_LOG_PRESERVE_SECONDS = 600

# MATOCS_LISTEN_HOST = * //用于chunk server连接的IP地址(默认是*,代表任何IP)
# MATOCS_LISTEN_PORT = 9420 //用于客户端挂载连接的端口地址(默认是9420)

# MATOCL_LISTEN_HOST = *
# 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 //在一个循环里复制到一个chund server的最大chunk数
# CHUNKS_READ_REP_LIMIT = 10 //在一个循环里从一个chunk server复制的最大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

mfsexports.cfg文件参数如下:

1
2
3
4
5
# Allow everything but "meta".
* / rw,alldirs,maproot=0

# Allow "meta".
* . rw

mfsexports.cfg 文件每一条由三部分组成,第一部分表示客户端的 IP 地址,第二部分表示被挂接的目录,第三部分表示客户端拥有的权限,下面对三给部分迚行解释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1.客户端 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 段
2.被挂载的目录
/ 表示 MooseFS 的根
. 表示 MFSMETA 文件系
3.客户端拥有的权限
ro 只读
rw 读写
alldirs 允许挂载任何指定的子目录
maproot 映射为 root 用户还是指定的用户
password 指定客户端密码

2.1.6 启动Master Server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@centos1 mfs]# /usr/local/mfs/sbin/mfsmaster start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules ...
loading sessions ... file not found
if it is not fresh installation then you have to restart all active mounts !!!
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 ...
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

[root@centos1 mfs]# ps -ef | grep mfs
mfs 8495 1 0 10:40 ? 00:00:01 /usr/local/mfs/sbin/mfsmaster start
root 8575 3529 0 11:15 pts/1 00:00:00 grep mfs

2.2 搭建MetaLogger Server

2.2.1 关闭防火墙,并安装好依赖包

1
2
3
4
5
[root@centos2 ~]# service iptables stop
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
[root@centos2 ~]# yum -y instal zlib-devel

2.2.2 创建运行用户

1
[root@centos2 ~]# useradd mfs -s /sbin/nologin

2.2.3 安装源码包

1
2
3
4
[root@centos2 ~]# tar xf mfs-1.6.27-5.tar.gz 
[root@centos2 ~]# cd mfs-1.6.27
[root@centos2 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmout
[root@centos1 mfs-1.6.27]# make && make install

2.2.4 复制相关文件

1
2
3
4
5
6
7
8
[root@centos1 mfs-1.6.27]# cd /usr/local/mfs/etc/mfs/
[root@centos1 mfs]# ll
total 16
-rw-r--r-- 1 root root 4060 Oct 27 10:32 mfsexports.cfg.dist
-rw-r--r-- 1 root root 1020 Oct 27 10:32 mfsmaster.cfg.dist
-rw-r--r-- 1 root root 417 Oct 27 10:32 mfsmetalogger.cfg.dist
-rw-r--r-- 1 root root 1123 Oct 27 10:32 mfstopology.cfg.dist
[root@centos2 mfs]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

2.2.5 编辑配置文件

修改 META_DOWNLOAD_FREQMASTER_HOST 部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@centos2 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
# BACK_META_KEEP_PREVIOUS = 3
META_DOWNLOAD_FREQ = 0.1 //每隔6分钟下载日志文件,默认24小时

# MASTER_RECONNECTION_DELAY = 5

MASTER_HOST = 192.168.1.100 //修改为Master Server的IP地址
# MASTER_PORT = 9419

# MASTER_TIMEOUT = 60

# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfsmetalogger.lock

2.2.6 启动MetaLogger Server

1
2
3
4
5
6
7
8
9
[root@centos2 mfs]# /usr/local/mfs/sbin/mfsmetalogger start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly

[root@centos2 mfs]# ps -ef | grep mfs
mfs 8185 1 0 11:23 ? 00:00:00 /usr/local/mfs/sbin/mfsmetalogger start
root 8187 3202 0 11:23 pts/1 00:00:00 grep mfs

2.3 搭建Chunk Server 01 ,02 ,03

2.3.1 关闭防火墙,并安装好依赖包

1
2
3
4
5
[root@centos3 ~]# service iptables stop
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
[root@centos3 ~]# yum -y instal zlib-devel

2.3.2 创建运行用户

1
[root@centos3 ~]# useradd mfs -s /sbin/nologin

2.3.3 安装源码包

1
2
3
4
[root@centos3 ~]# tar xf mfs-1.6.27-5.tar.gz 
[root@centos3 ~]# cd mfs-1.6.27
[root@centos3 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount
[root@centos1 mfs-1.6.27]# make && make install

2.3.4 复制相关文件

1
2
3
4
5
6
7
8
[root@centos3 mfs-1.6.27]# cd /usr/local/mfs/etc/mfs/
[root@centos3 mfs]# ll
total 8
-rw-r--r-- 1 root root 531 Oct 27 11:27 mfschunkserver.cfg.dist
-rw-r--r-- 1 root root 57 Oct 27 11:27 mfshdd.cfg.dist
[root@centos3 mfs]# cp mfschunkserver.cfg.dist mfschunkserver.cfg
[root@centos3 mfs]# cp mfshdd.cfg.dist mfshdd.cfg
[root@centos3 mfs]# vim mfschunkserver.cfg

2.3.5 编辑配置文件

修改 MASTER_HOST 部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@centos3 mfs]# vim mfsmetalogger.cfg# WORKING_USER = mfs

# 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 = 192.168.1.100
# 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, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfschunkserver.lock
# BACK_LOGS = 50
# CSSERV_TIMEOUT = 5

2.3.6 添加,并挂载目录

1
2
3
4
5
6
7
8
9
10
[root@centos3 mfs]# vim mfshdd.cfg
# mount points of HDD drives
#
#/mnt/hd1
#/mnt/hd2
#etc.
/data

[root@centos3 mfs]# mkdir /data
[root@centos3 mfs]# chown -R mfs.mfs /data/

2.3.7 启动mfschunkserver

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@centos3 mfs]# /usr/local/mfs/sbin/mfschunkserver start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfschunkserver modules ...
hdd space manager: path to scan: /data/
hdd space manager: start background hdd scanning (searching for available chunks)
main server module: listen on *:9422
no charts data file - initializing empty charts
mfschunkserver daemon initialized properly

[root@centos3 mfs]# ps -ef | grep mfs
mfs 5696 1 0 19:15 ? 00:00:00 /usr/local/mfs/sbin/mfschunkserver start
root 5722 1165 0 19:15 pts/0 00:00:00 grep mfs

2.4 客户端配置

2.4.1 关闭防火墙,并安装好依赖包

1
2
3
4
5
[root@centos6 ~]# service iptables stop
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
[root@centos6 ~]# yum -y instal zlib-devel

2.4.2 安装FUSE

1
2
3
4
[root@centos6 ~]# tar xf fuse-2.9.2.tar.gz 
[root@centos6 ~]# cd fuse-2.9.2
[root@centos6 fuse-2.9.2]# ./configure
[root@centos6 fuse-2.9.2]# make && make install

2.4.3 配置环境变量

1
2
3
[root@centos6 ~]# vim /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
[root@centos6 ~]# source /etc/profile

2.4.4 安装MFS客户端

1
2
3
4
5
[root@ centos6 ~]# useradd mfs -s /sbin/nolgoin
[root@centos6 ~]# tar xf mfs-1.6.27-5.tar.gz
[root@centos6 ~]# cd mfs-1.6.27
[root@centos6 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver --enable-mfsmount
[root@centos6 fuse-2.9.2]# make && make install

2.4.5 挂载MFS文件系统

1
2
3
4
5
6
7
8
9
10
11
12
[root@centos6 mfs-1.6.27]# mkdir /mnt/mfs
[root@centos6 mfs-1.6.27]# modprobe fuse
[root@centos6 mfs-1.6.27]# /usr/local/mfs/bin/mfsmount /mnt/mfs/ -H 192.168.1.100
mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to root:root

[root@centos6 mfs-1.6.27]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg_rhel2-lv_root 47066056 3685168 40990056 9% /
tmpfs 957756 224 957532 1% /dev/shm
/dev/sda1 495844 39945 430299 9% /boot
/dev/sr0 1366 1366 0 100% /media/20150112_143405
192.168.1.100:9421 121132608 0 121132608 0% /mnt/mfs

2.4.6 添加环境变量

1
2
3
4
5
[root@centos6 mfs]# vim /etc/profile
export PATH=/usr/local/mfs/bin:$PATH
[root@centos6 mfs]# source /etc/profile
[root@centos6 mfs]# echo $PATH
/usr/local/mfs/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

mfsgetgoal命令用来查询文件被复制的份数,利用 -r 命令可以对整个目录进行递归,goal是指文件被复制的份数。

1
2
3
[root@centos6 mfs]# mfsgetgoal -r /mnt/mfs/
/mnt/mfs/:
directories with goal 1 : 1

命令mfsgetgoal用来设置文件被复制的份数,生产环境Chunk Server节点数量应至少大于2文件副本数小于等于Chunk Server服务器的数量。

1
2
3
4
5
6
7
8
[root@centos6 mfs]# mfssetgoal -r 3 /mnt/mfs/
/mnt/mfs/:
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0
[root@centos6 mfs]# mfsgetgoal -r /mnt/mfs/
/mnt/mfs/:
directories with goal 3 : 1

2.4.7 创建测试文件

1
2
3
4
5
6
[root@centos6 mfs]# touch test.a
[root@centos6 mfs]# touch test.b
[root@centos6 mfs]# mkdir tab
[root@centos6 mfs]# mkdir chen
[root@centos6 mfs]# ls
tab test.a test.b

2.4.8 MFS监控

Mfscgiserv是用python编写程序的服务器,其监听端口是9425,可以在Master Server上通过命令/usr/local/mfs/sbin/nfscgiserv来启动,用户利用浏览器就可全面监控所有客户挂接,Chunk Server、Master Server,以及客户端的各种操作等。

1
2
3
[root@centos1 mfs]# /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.100:9425 ,如下图所示:

image-20191115142929863

其中部分的含义如下 :

  1. Info部分:显示了MFS的基本信息。

  2. Servers部分:列出现有Chunky Server。

  3. Disks部分:列出现有Chunky Server硬盘信息。

  4. Exports部分:列出可被挂载的目录。

  5. Mounts部分:列出被挂载的目录。

  6. Operations部分:显示正在执行的操作。

  7. Master Charts部分:显示Master Server的操作情况,读、写、删除等操作。

  8. Server Charts部分:显示Chunk Server的操作情况,数据传输率及系统状态。

2.5 MFS维护及灾难恢复

2.5.1 MFS集群的启动停止

MFS集群启动的顺序如下:

  1. 启动mfsmaster进程
  2. 启动所有的mfschunkserver进程
  3. 启动mfsmetalogger进程(如果配置了mfsmetalogger)
  4. 在所有的客户端挂载MFS文件系统

MFS集群停业的顺序如下:

  1. 在所有的客户端卸载MFS文件系统
  2. 用mfschunkserver -s 命令停止chunkserver进程
  3. 用mfsmetalogger -s 命令停止 metalogger进程
  4. 用mfsmaster -s 命令停止master进程

2.5.2 MFS灾难恢复

整个MFS体系中,直接断电只有Master有可能无法启动,可以在master上使用命令/usr/local/mfs/sbin/mfsmetarestore -a 修复

2.5.2.1 MFS元数据通常有两部分的数据,分别如下:
  1. 主要元数据文件metadata.mfs,当mfsmaster运行时会被命名为metadata.mfs.back
  2. 元数据改变日志changelog.*.mfs,存储了过去的N小时的文件改变(N的数值是由BACK_LOGS参数设置的,参数的设置在mfschunkserver.cfg配置文件中)

断电后在Master Server上执行/usr/local/mfs/sbin/mfsmetarestore -a 修复

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[root@centos1 ~]#  /usr/local/mfs/sbin/mfsmetarestore -a
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
progress: current change: 0 (first:6 - last:0 - 100% - ETA:finished)
store metadata into file: /usr/local/mfs/var/mfs/metadata.mfs

[root@centos1 ~]# /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: 2
directory inodes: 2
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

在客户端上查看文件是否存在

1
2
3
[root@centos6 mfs]# cd /mnt/mfs
[root@centos6 mfs]# ls
tab test.a test.b
2.5.2.2 在Master发生故障时,可以从MetaLOgger中恢复Master,步骤如下:
  1. 安装一台mfsmaster,利用同样的配置来配置这台mfsmaster。
  2. 将metalogger上/usr/local/mfs/var/mfs/目录下的文件复制到mfsmaster相应的目录中。
1
2
3
4
5
6
7
8
9
10
11
[root@centos1 ~]# cd /usr/local/mfs/var/mfs/
[root@centos1 mfs]# scp ./* root@192.168.1.100:/usr/local/mfs/var/mfs/
root@192.168.1.100's password:
changelog_ml.0.mfs 100% 48 0.1KB/s 00:00
changelog_ml_back.0.mfs 100% 26 0.0KB/s 00:00
changelog_ml_back.1.mfs 100% 0 0.0KB/s 00:00
metadata.mfs.empty 100% 8 0.0KB/s 00:00
metadata_ml.mfs.back 100% 95 0.1KB/s 00:00
metadata_ml.mfs.back.1 100% 250 0.2KB/s 00:00
metadata_ml.mfs.back.2 100% 95 0.1KB/s 00:00
sessions_ml.mfs 100% 189 0.2KB/s 00:00
  1. 利用mfsmetarestore命令合并元数据changelogs,可以用自动恢复模式mfsmetarestore –a,也可以利用非自动化恢复模式。

指定实际的文件名 mfsmetarestore 语法,例如。

1
[root@centos1 ~]# $mfsmetarestore -m metadata.mfs.back -o metadata.mfs changelog_ml.*.mfs

强制使用metadata.mfs.back创建metadata.mfs,可以启动master,但丢失的数据暂无法确定。
注:如果是全新安装的Master,恢复数据后,要更改metalooger和chunkserver配置MASTER_HOST的IP,客户端也需要重新挂载。

2.6 MFS的常见问题和建议对策

2.6.1 Master性能瓶颈

master本身的性能瓶颈。
短期对策:按业务切分

2.6.2 体系架构存储文件总数的瓶颈

mfs把文件系统的结构缓存到master的内存中,个人认为文件越多,master的内存消耗越大,8g对应2500kw的文件数,2亿文件就得64GB内存。
短期对策:按业务切分

2.6.3 单点故障解决方案(可参考以下)

Drbd+heartbeat+Moosefs分布式存储双机冗余
http://wenku.baidu.com/view/825d69f9aef8941ea76e055e.html

2.6.4 垃圾回收

默认的垃圾回收时间是86400,存在一种可能性是垃圾还没回收完,你的存储容量就暴掉了。
方案一:设置垃圾回收时间,积极监控存储容量。
经过测试,把垃圾回收时间设置300秒,完全可以正确回收容量。
方案二:手动周期性去删除metamfs里的trash目录下的文件(健壮性还有待测试,反正删除后容量是回收了,不晓得有没有什么后遗症。)

2.6.5 理想的平均写和读的速度是多少?

原始的读/写速度很明显是主要取决于所使用的硬盘的性能、网络的容量和拓扑结构的,使用的硬盘和网络的吞吐量越好,整个系统的性能也就会越好。官方的测试环境中,将MFS安装在linux(Debian)上设置存储的份数为2,一般的测试服务器(还做了其他较大量的计算),G太网络,使用Pbyte级别的数据,测试的结果为写的速度大约在20-30MB/s,读的速度为30-50MB/s。对于小文件写的速度有些下降,但是对于读的速度是没有影响的。

2.6.6 设置文件存储的份数是否影响写/读的速度?

一般来说,它是有影响的。在一定条件下,存储份数的设置会影响的读取的速度。例如,当文件设置存储两份而不是一份时能加快对同一文件有多个客户端读取的速度。但是在真实的环境中,多个机器同时读取同一个文件的机率是比较小的,因此,存储份数的设置对读取的速度影响是比较小的。
同样,设置存储份数对写的速度影响也是不太大的。(只有文件超过64M的时候)

-------------本文结束感谢您的阅读-------------