原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://zyw1209.blog.51cto.com/1266169/580272
基于linux下分布式文件系统方案
前言
:
现在有大量的企业采用共享存储服务器NFS的方式,来对应用数据进行网络存储,但这存在性能瓶颈和单点故障的问题,于是分布式文件存储管理系统开始流行起来。其优点是不言而喻的,以下介绍的是分布式文件系统MFS,相信对大家有所帮助。
随着公司业务量的增加,相关的业务数据也随着成倍的增加.相应的机器存储空间不足的问题就成为目前一个比较突出的问题,随之而来的备份亦成为一个很为头痛的问题。公司虽然有几台大容量的计算机可用来存放相关数据,但其位置位于各个机房,一时较难以组织,即使将其组织起来只能满足在一段时间内的存储需求,这个需要利用多台服务器上空闲空间加以组织利用,以提供更大的磁盘空间。目前绝大多数业务系统采用NFS文件共享的方式来解决文件惟一性的问题,这种方法在规模较小、访问量低的时候还可以;随着量(访问及文件数目)的增加,这种共享架构显得有些力不从心了,性能与用户体验会有不小的下降。除此之外,还要努力保证这台NFS服务器不能宕机,所有靠共享提供数据的应用就不再可用。基于这样一种需求,我们需要对NFS服务器进行优化或采取别的解决方案,然而优化并不能对应对日益增多的客户端的性能要求,因此只能是采取别的解决方案了。分布式文件系统是一个比较合适的选择,采用分布式文件系统后,服务器之间的数据访问不再是一对多的关系(1个NFS服务器,多个NFS客户端),而是多对多的关系,这样一来,性能大幅提升毫无问题,同时可靠性也高了许多。
Moose File System
是一个具备容错功能的网络分布式文件系统,它将数据分布在网络中的不同服务器上,MooseFS通过 FUSE 使之看起来就是一个 Unix 的文件系统。
以下是使用mfs共享的网络拓扑图:
关于分布式文件系统MFS
之所以选择了moosefs(以下简称MFS)这种分布式文件系统来作为我的共享存储服务器。为什么要选它呢?
1.
安装简单方便(易用性)。
MFS
的安装、部署、配置相对于其他几种工具来说,要简单和容易得多。
!
2.
扩容方便(高可靠性)。
MFS
框架做好后随时增加服务器扩充容量;扩充和减少容量皆不会影响现有的
服务。
3.
管理方便(可操作性)。你可以很方便的动态调整集群运行参数,即时生效而不用重启服务!
4
.恢复服务容易。除了MFS本身具备高可用特性外,手动恢复服务也是非常快捷的。
MFS特性
★ 高可靠性(数据能被分成几个副本存储在不同的计算机里)
★ 通过增加计算机或增加新的硬盘动态扩充可用磁盘空间
★ 可以设置删除文件的空间回收时间
mfs系统的组成部分:
1
、元数据服务器。在整个体系中负责管理管理文件系统,目前MFS只支持一个元数据服务器master,这是一个单点故障,需要一个性能稳定的服务器来充当。希望今后MFS能支持多个master服务器,进一步提高系统的可靠性。
2
、数据存储服务器chunkserver。真正存储用户数据的服务器,存储文件时,首先把文件分成块,然后这些块在数据服务器chunkserver之间复制,数据服务器可以是多个,并且数量越多,可使用的"磁盘空间"越小,可靠性也越高。
3
、客户端。使用MFS文件系统来存储和访问的主机称为MFS的客户端,成功挂接MFS文件系统以后,就可以像以前使用NFS一样共享这个虚拟性的存储了。
元数据日志服务器
4
.Metalogger server(Metalogger)。负责备份master 服务器的变化日志文件,文件类型为changelog_ml.*.mfs ,以便于在master server 出问题的时候接替其进行工作。
以下是mfs的官方示意图:
以下是具体得安装步骤
:
主控服务器Master server 安装
当我们安装主控服务器时,在配置过程中
(
./configure
)
,可以取消安装
chunk server
(
--disable-mfschunkserver
)以及
MooseFS
客户端(
--disable-mfsmount
)
.
安装
主控服务器master 的具体步骤为:
1
、添加
mfs
组
#groupadd mfs
2
、新增系统用户
mfs
#useradd -g mfs mfs
3
、切换目录
#cd /usr/src
4
、解包归档文件
#tar -zxvf mfs-1.6.15.tar.gz
5
、进入安装目录
#cd mfs-1.6.15
6
、配置
#./configure --prefix=/usr --sysconfdir=/etc \
--localstatedir=/var/lib --with-default-user=mfs \
--with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
7
、编译并安装
#make
#make install
成功安装
master
以后,系统会在
/etc
目录自动生成样例配置文件,这些样例文件是以
.dist
后缀命名。这里我们将借用这些样例文件作为
MooseFS
主控服务器的目标配置文件:
1
、切换目录
#cd /etc
2
、复制样例文件,以得到
master
所需的配置文件
#cp mfsmaster.cfg.dist mfsmaster.cfg
#cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
#cp mfsexports.cfg.dist mfsexports.cfg
如果我们打算更改这些配置文件中的某些项目的值,则需要打开特定配置文件相关文本行前的注释,然后修改跟随其后的值。因为被注释掉的行,即是
MooseFS
内置的缺省值。
[root@nas etc]# cp mfsmaster.cfg.dist mfsmaster.cfg
[root@nas etc]# vi mfsmaster.cfg
# WORKING_USER = mfs
运行master server 的用户
# WORKING_GROUP = mfs
运行master server 的组
# SYSLOG_IDENT = mfsmaster master server
在syslog中的标识,说明是由master serve 产生的
# 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);
# MATOML_LISTEN_HOST = * metalogger
监听的IP 地址(默认是*,代表任何IP);
# MATOML_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 chunks
的回环频率(默认是:300 秒);
注:原文为Chunks loop frequency in seconds (default is 300)
# CHUNKS_DEL_LIMIT = 100
# CHUNKS_WRITE_REP_LIMIT = 1
在一个循环里复制到一个chunkserver 的最大chunk数目(默认是1)
# CHUNKS_READ_REP_LIMIT = 5
在一个循环里从一个chunkserver 复制的最大chunk数目(默认是5)
# REJECT_OLD_CLIENTS = 0
弹出低于1.6.0 的客户端挂接(0 或1,默认是0)
注意mfsexports 访问控制对于那些老客户是没用的
需要注意的是,凡是用#注释掉的变量均使用其默认值。
以上是对master server 的mfsmaster.cfg 配置文件的解释,对于这个文件不需要做任何修改就可以工作。
配置文件mfsexports.cfg
指定那些客户端主机可以远程挂接MooseFS 文件系统,以及授予挂接客户端什么样的访问权限。例如,我们指定只有192.168.2.x 网段的主机可以以读写模式访问MooseFS 的整个共享结构资源(/)。在配置文件mfsexports.cfg 文件的第一行,先取消注释,然后把星号(*)改成192.168.2.0/24,以便我们可以得到下面的文本行:
192.168.2.0/24 / rw,alldirs,maproot=0
[root@nas etc]# vi mfsexports.cfg
#* / ro
#192.168.1.0/24 / rw
#192.168.1.0/24 / rw,alldirs,maproot=0,password=passcode
#10.0.0.0-10.0.0.5 /test rw,maproot=nobody,password=test
* . rw
#* / rw,alldirs,maproot=0
192.168.3.98 /tt rw,alldirs,maproot=0
192.168.3.139 / rw,alldirs,maproot=0
192.168.3.138 / rw,alldirs,maproot=0,password=111111
该文件每一个条目分为三部分:
第一部分:客户端的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
段
目录部分需要注意两点:
/
标识MooseFS 根;
.
表示MFSMETA 文件系统
权限部分:
ro
只读模式共享
rw
读写的方式共享
alldirs
许挂载任何指定的子目录
maproot
映射为root,还是指定的用户
password
指定客户端密码
二进制文件metadata 和文本文件changelog 将被保存在目录/var/lib/mfs,这是因为我们安装过程的configure 步骤使用了选项 --localstatedir=/var/lib 。首次安装master 时,会自动生成一个名为metadata.mfs.empty 的元数据文件metadata,该文件是空的。MooseFSmaster 运必须有文件metadata.mfs,这个文件是从metadata.mfs.empty 改名而来:
1
、切换目录
#cd /var/lib/mfs
2
、重命名文件
#cp metadata.mfs.empty metadata.mfs
[
译者注]MooseFS master 运行以后,metadata.mfs 文件大小将发生变化,肯定不会是
空文件了。
这个时候,我们可以试着运行master 服务(服务将以安装配置configure 指定的用户运行,这我们的案例里,它是mfs):
#/usr/sbin/mfsmaster start
在一个生产环境里,我们应当设置自动启动脚本,以便操作系统重新启动时,MooseFS master也能自动运行。
为了监控MooseFS 当前运行状态,我们可以运行CGI 监控服务,这样就可以用浏览器查看整个MooseFS 的运行情况:
#/usr/sbin/mfscgiserv
现在,我们在浏览器地址栏输入http://ip地址:9425 即可查看master 的运行情况(这个时候,是不能看见chunk server 的数据)。
可通过命令检查如下:
[root@nas etc]# ps -ef|grep mfs
mfs 12327 1 0 08:38 ? 00:00:00 /usr/local/mfs/sbin/mfsmaster start
停止master server
安全停止master server 是非常必要的,最好不要用kill。利用mfsmaster –s 来安全停止master serve。
备份服务器Backup server (metalogger) 安装
用来安装metalogger 的主机,在性能上应该比master 强大(至少有更多的内存)。一旦主控服务器master 失效,只要导入changelogs 到元数据文件,备份服务器metalogger 将能接替发生故障的master,行使管理服务器的职能。
备份服务器Metalogger 安装跟主控服务器master 安装非常类似。其安装命令如下:
1
、 创建组mfs
#groupadd mfs
2
、创建用户mfs
#useradd -g mfs mfs
3
、切换目录
#cd /usr/src
4
、解包归档文件
#tar -zxvf mfs-1.6.15.tar.gz
5
、切换目录
#cd mfs-1.6.15
6
、配置
#./configure --prefix=/usr --sysconfdir=/etc \
--localstatedir=/var/lib --with-default-user=mfs \
--with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
7
、编译及安装
#make
#make install
8
、产生配置文件
#cd /etc
#cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
该服务只有一个配置文件,那就是mfsmetalogger.cfg。
[root@mail etc]# vi 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.3.34
# MASTER_PORT = 9419
# MASTER_TIMEOUT = 60
# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfsmetalogger.lock
这个文件中需要修改的是MASTER_HOST 变量,这个变量的值是master server 的IP 地址。
现在,我们来试着运行备份服务
mfsmetaloger:
#/usr/sbin/mfsmetalogger start
[root@mail sbin]# ./mfsmetalogger start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly
这说明metalogger 服务正常启动了。利用命令检查:
通过进程:
[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 TCP mail.tt.com:52456->192.168.3.34:9419 (ESTABLISHED)
在一个生产环境里,我们应当设置自动启动脚本,以便操作系统重新启动时,
MooseFS
mfsmetalogger
服务也能自动运行。
查看日志服务器的工作目录
[root@mail mfs]# pwd
/var//lib/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
这是运行18 小时后:
[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
停止metalogger服务
[root@mail sbin]# ./mfsmetalogger -s
working directory: /usr/local/mfs/var/mfs
sending SIGTERM to lock owner (pid:12284)
waiting for termination ... terminated
如果没有启动metalogger 服务,在master server 则会有如下提示信息产生:
tail -f /var/log/messages
Dec 30 16:53:00 nas mfsmaster[14291]: no meta loggers connected !!!
存储块服务器Chunk servers 安装
在每个chunk server 主机上执行下面的命令:
#groupadd mfs
#useradd -g mfs mfs
#cd /usr/src
#tar -zxvf mfs-1.6.15.tar.gz
#cd mfs-1.6.15
6
#./configure --prefix=/usr --sysconfdir=/etc \
--localstatedir=/var/lib --with-default-user=mfs \
--with-default-group=mfs --disable-mfsmaster
#make
#make install
准备chunk server 服务所需的配置文件:
#cd /etc/
#cp mfschunkserver.cfg.dist mfschunkserver.cfg
#cp mfshdd.cfg.dist mfshdd.cfg
mfschunkserver.cfg的配置
[root@mail etc]# vi 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.3.34
元数据服务器的名称或地址,可以是主机名,也可以是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 使用的磁盘空间配置文件的位置
在配置文件mfshdd.cfg 中,我们给出了用于客户端挂接MooseFS 分布式文件系统根分区所使用的共享空间位置。建议在chunk server 上划分单独的空间给 MooseFS 使用,这样做的好处是便于管理剩余空间。此处我们假定要使用两个共享点/mnt/mfschunks1 和/mnt/mfschunks2,为此,我们在mfshdd.cfg 加入下面的文本行:
/mnt/mfschunks1
/mnt/mfschunks2
在启动chunk server 前,需确保用户mfs 有权限读写将要被挂接的分区(因为chunk server 运行时要在此创建一个.lock 的文件):
#chown -R mfs:mfs /mnt/mfschunks1
#chown -R mfs:mfs /mnt/mfschunks2
启动mfschunkserver
#/usr/sbin/mfschunkserver start
检查如下:
[root@nas etc]# ps -ef|grep mfs
mfs 12327 1 0 08:38 ? 00:00:00 /usr/local/mfs/sbin/ mfschunkserver start
停止mfschunkserver
停止mfschunkserver,利用mfschunkserver–s 来安全停止mfschunkserver。
现在再通过浏览器访问
http://ip
地址:9425/ 应该可以看见这个MooseFS 系统的全部信息,包括主控master 和存储服务chunkserver 。
MFS客户端的安装及配置
为了挂接基于MooseFS 分布式文件,客户端主机必须安装FUSE 软件包( fuse 版本号至少2.6,推荐使用版本号大于2.7.2 的fuse)。如果系统没有安装fuse,你必须手动对其进行安装。一种常见的安装方式是从源码进行编译安装:
#cd /usr/src
#tar -zxvf fuse-2.8.3.tar.gz
#cd fuse-2.8.3
#./configure
#make
#make install
安装客户端软件 mfsmount 的步骤:
#groupadd mfs
#useradd -g mfs mfs
#cd /usr/src
#tar -zxvf mfs-1.6.15.tar.gz
#cd mfs-1.6.15
#./configure --prefix=/usr --sysconfdir=/etc \
--localstatedir=/var/lib --with-default-user=mfs \
--with-default-group=mfs --disable-mfsmaster \
--disable-mfschunkserver --enable-mfsmount
#make
#make install
注意:
在这个过程中,当执行到–enable-mfsmount 时可能出现”checking for FUSE… no configure: error:
mfsmount build was forced, but fuse development package is not installed
”这样的错误,........
checking for FUSE... no
******************************** mfsmount disabled ********************************
* fuse library is too old or not installed - mfsmount needs version 2.6 or higher *
***********************************************************************************
......
而不能正确安装MFS 客户端程序,这是因为环境变量没有设置,先编辑/etc/profile 在此文件中加
入如下条目:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
然后再利用source 命令/etc/profile 使修改生效:source /etc/profile 即可,也可直接在命令行中直
接执行:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
(注:此处包含的是fuse.pc,具体文件夹以安装fuse的目录为准,预编译处理)
挂接MFS文件系统
(1)、创建挂接点mkdir /mnt/mfs
(2)、加载fuse 模块到内核:modprobe fuse
(3)、挂接MFS
/usr/bin/mfsmount /mnt/mfs -H 192.168.3.34 -p
然后在输入密码就可以了。
特别需要注意的是,所有的MFS 都是挂接同一个元数据服务器master 的IP,而不是其他数据存储服务器chunkserver 的IP。
root@bzd mfs]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00 73G 25G 45G 36% /
/dev/sda1 99M 13M 82M 13% /boot
none 247M 0 247M 0% /dev/shm
MFS 45G 204M 45G 1% /mnt/mfs
MFSMETA 72K 72K 0 100% /mnt/mfsmeta
[root@www ~]# mount
mfsmeta#192.168.3.34:9421 on /mnt/mfsmeta type fuse (rw,nosuid,nodev,allow_other,default_permissions)
mfs#192.168.3.34:9421 on /mnt/mfs type fuse (rw,nosuid,nodev,allow_other,default_permissions
MFS文件系统管理
编译和安装
MooseFS
部署的首选方法是从源代码安装,源代码包安装支持标准./configure && make && make install 的步骤,重要的配置选项有:
--disable-mfsmaster
不创建成管理服务器(用于纯节点的安装)
--disable-mfschunkserver
不创建成数据存储chunkserver 服务器
--disable-mfsmount
不创建mfsmount 和m fstools(如果用开发包安装,他们会被默认创建的)
--enable-mfsmount
确定安装mfsmount 和mfstools
--prefix=DIRECTORY
锁定安装目录(默认是/usr/local)
--sysconfdir=DIRECTORY
选择配置文件目录(默认是${prefix}/etc)
--localstatedir=DIRECTORY
选择变量数据目录(默认是${prefix}/var,MFS 元数据被存储在mfs 的子目录下,默认是${prefix}/var/mfs )
--with-default-user
运行守护进程的用户,如果配置文件中没有设定用户,默认为nobody用户
--with-default-group=GROUP
运行守护进程的用户组,如果配置文件中没有设定用户组,默认为nogroup 用户组
本文出自 “it民工” 博客,请务必保留此出处http://zyw1209.blog.51cto.com/1266169/580272