MFS分布式文件系统

 

文件系统:ext4、xfs、ext3  

 

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

 

MooseFS[MFS]是一个具有容错性的网络分布式文件系统。它把数据分散存放在多个物理服务器上,但呈现给用户的则是一个统一的资源

 

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

 

MFS特征:

1、层析结构(目录树)

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

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

4、符号链接,软硬链接

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

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

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

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

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

 

应用场景:分布式文件系统的应用场景

1、大规模高并发的数据存储及访问(小文件,大文件)

2、大规模的数据处理,如日志分析

 

官方网站:https://moosefs.com

 

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

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

1、管理服务器 managing server(master)

负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复,多节点拷贝

 

2、元数据日志服务器  Metalogger  Server(Metalogger)

负责备份master服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在master server出问题的时候接替其进行工作。

 

3、数据存储服务器data servers(chunk servers)

听从管理服务器调度,提供存储空间,并为客户提供数据传输。真正存储用户数据的服务器。

存储文件时,首先把文件分出块,然后这些块在数据服务区chunk server之间复制(复制份数可以手工指定,建议设置副本数为3)。数据服务器可以是多个,并且数量越多,可使用的“磁盘空间”越大,可靠性也越高。

 

4、客户机挂载使用client  computers

客户端挂载远程mfs服务器共享出的存储并使用。

通过fuse内核接口挂载进程管理服务器上所管理的数据存储服务器共享出的硬盘。

共享的文件系统的用法和nfs相似。

使用MFS文件系统来存储和访问的主机称为MFS的客户端,成功挂载MFS文件系统以后,就可以像以前使用NFS一样共享这个虚拟性的存储了

 

 

 

 

分布式文件系统原理

 

分布式文件系统是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。就是把一些分散的(分布在局域网内各个计算机上)共享文件夹,集合到一个文件夹内(虚拟共享文件夹)。对于用户来说,要访问这些共享文件夹时,只要打开这个虚拟共享文件夹,就可以看到所有链接到虚拟共享文件夹内的共享文件夹,用户感觉不到这些共享文件是分散于各个计算机上的。

 

分布式文件系统优势:

    集中访问

    简化操作

    数据容灾

    提高文件存取性能、在线扩容

 

 

 

 

MFS读取数据原理

 

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

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

3.客户端向己知的Chunk Serve请求发送数据

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

 

 

过程:

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

2.元数据服务器与Chunk Server进行交互(只有当所需的分块Chunks存在的时候才进行这个交互),但元数据服务器只在某些服务器创建新的分块Chunks,创建完告知元数据服务器操作成功

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

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

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

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

 

端口号:

9420:MFS master和MFS chunk通信端口

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

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

9422:MFS chunk和MFS client端通信端口

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

 


全部仅主机模式

 

系统环境

主机

操作系统

ip地址

软件包

master

centos7.4

192.168.80.181

mfs

metalogger

centos7.4

192.168.80.182

mfs

chunk01

centos7.4

192.168.80.183

mfs

chunk02

centos7.4

192.168.80.184

mfs

chunk03

centos7.4

192.168.80.185

mfs

client

centos7.4

192.168.80.186

mfsfuse

 

 



一、搭建master  server

 

1、安装相关编译器、工具包(所有服务器都得安装)

yum  install gcc gcc-c++ make   zlib-devel  fuse-devel -y

 

2、创建进程用户

useradd   -M -s   /sbin/nologin   mfs

 

3、安装mfs软件包

https://pan.baidu.com/s/1Pjtcyi7PtBZTNvqi0UM_tQ  (软件包)

unzip   moosefs-master.zip    -d /opt

 

cd  /opt/moosefs-master

 

./configure    --prefix=/usr/local/mfs  \

--with-default-user=mfs  \

--with-default-group=mfs  

 

 make && make install  #编译及编译安装

 

4、修改相关文件信息

cd   /usr/local/mfs/

 

cp   mfsexports.cfg.dist    mfsexports.cfg     #输出目录配置文件,定义挂载以及权限设定文件

 

cp mfsmaster.cfg.dist mfsmaster.cfg #主配置文件

 

cp mfstopology.cfg.dist mfstopology.cfg #元数据日志文件

 

cd /usr/local/mfs/var/mfs/

 

cp metadata.mfs.empty metadata.mfs #master元数据文件

 

5、详解主配置文件

cd /usr/local/mfs/etc/mfs/

 

vi   mfsmaster.cfg  #此文件中,有注释符号的就是默认配置

 

# WORKING_USER = mfs             #运行master服务的用户

# WORKING_GROUP = mfs            #运行master服务的组

# SYSLOG_IDENT = mfsmaster       #syslog中表示是mfsmaster产生的日志,在syslog的标识,说明由master服务产生的

# LOCK_MEMORY = 0                #是否执行mlockall(),避免master进程溢出(默认为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

# REPLICATIONS_DELAY_DISCONNECT = 3600

 

# MATOML_LISTEN_HOST = *         #metalogger监听的IP地址(默认是*,代表任何IP)

# MATOML_LISTEN_PORT = 9419      #metalogger监听的端口地址(默认是9419)

# MATOML_LOG_PRESERVE_SECONDS = 600

 

# MATOCS_LISTEN_HOST = *         #用于chunkserver连接的IP地址(默认是*,代表任何IP)

# MATOCS_LISTEN_PORT = 9420      #用于chunkserver连接的端口IP地址(默认是9420)

 

# MATOCL_LISTEN_HOST = *        

# MATOCL_LISTEN_PORT = 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

 

# 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

 

 

 

6、详解被挂载目录及权限配置文件

 

 cd /usr/local/mfs/etc/mfs/

 

vi mfsexports.cfg

 

# Allow everything but "meta".

*                       /       rw,alldirs,maproot=0

 

# Allow "meta".

*                       .       rw

#详解

根据文件的显示,可以看出,该文件每一个条目分为三个部分

第一部分:客户端的IP地址

第二部分:被挂载的目录

第三部分:客户端拥有的权限

 

客户端的IP地址部分

*:代表所有的IP地址

192.168.100.71:代表单个IP地址

192.168.100.0/24:代表整个网段

192.168.100.71-192.168.100.100:代表指定网段

 

被挂载的目录部分

/:标识MFS根

.:标识MFSMETA文件系统

 

客户端拥有的权限部分

ro:代表只读模式

rw:代表读写方式共享

alldirs:允许挂载任何指定的子目录

admin:管理员权限

maproot:映射为root,还是指定的用户

Password:指定客户端的密码

 

7、授权、优化路径

chown  -R mfs.mfs /usr/local/mfs

ln -s /usr/local/mfs/sbin/* /usr/local/bin/

 

8、启动服务

mfsmaster start

 

netstat -anpt | grep mfs

 

9、编辑启动脚本

方法一:

vi   /lib/systemd/system/mfs.service

 

[Unit]

Description=mfs

After=network.target

 

[Service]

Type=forking

ExecStart=/usr/local/mfs/sbin/mfsmaster start   #启动服务

ExecStop=/usr/local/mfs/sbin/mfsmaster stop    #关闭服务

PrivateTmp=true

 

[Install]

WantedBy=multi-user.target

 

systemctl enable mfs.service #服务开机自启动

systemctl stop mfs.service #关闭服务

systemctl start mfs.service #启动服务

 

方法二:

echo "/usr/local/mfs/sbin/mfsmaster start" >> /etc/rc.d/rc.local

chmod +x /etc/rc.d/rc.local

 



搭建MetaLogger Server(元数据日志服务器)

1、安装相关编译器、工具包

yum  install gcc gcc-c++ make   zlib-devel  fuse-devel -y

 

2、创建进程用户

useradd -s /sbin/nologin  -M mfs

 

 

3、安装mfs软件包

unzip   moosefs-master.zip    -d /opt

 

cd  /opt/moosefs-master

   

./configure \

--prefix=/usr/local/mfs \

--with-default-user=mfs \

--with-default-group=mfs \

 

 

make && make install

 

4、修改主配置文件

cd /usr/local/mfs/etc/mfs/

 

cp mfsmaster.cfg.sample mfsmaster.cfg

cp mfsexports.cfg.sample mfsexports.cfg

cp mfsmetalogger.cfg.sample mfsmetalogger.cfg

 

cd /usr/local/mfs/var/mfs

cp metadata.mfs.empty metadata.mfs

 

 

cd /usr/local/mfs/etc/mfs/

vi mfsmetalogger.cfg

 

修改以下内容:

MASTER_HOST   =   192.168.80.181         执行master服务器的ip地址,去掉注释符号

META_DOWNLOAD_FREQ = 24 #备份频率时间

 

5、授权、优化路径

chown  -R mfs.mfs  /usr/local/mfs

ln -s /usr/local/mfs/sbin/* /usr/local/bin/

 

6、启动服务

mfsmetalogger start

 

netstat -anpt | grep  mfsmetalogger

 

 echo "/usr/local/mfs/sbin/mfsmetalogger start" >> /etc/rc.d/rc.local

chmod +x /etc/rc.d/rc.local



 

三、搭建Chunk Server(三台Chunk Server主机搭建步骤相同)

 

安装数据服务器(chunkservers),这些机器的磁盘上要有适当的剩余空间,而且操作系统要遵循POSIX标准(验证了的有这些:Linux、FreeBSD、Mac OS X and OpenSolaris)。

 

chunkserver存储数据时,是在一个普通的文件系统如ext4上存储数据块或碎片(chunks/fragments)作为文件。你在chunkserver上看不到完整的文件。

 

1、安装相关编译器、工具包

 

yum  install gcc gcc-c++ make   zlib-devel  fuse-devel -y

 

2、创建程序用户

 

useradd -s /sbin/nologin  -M mfs

 

3、安装mfs软件包

unzip   moosefs-master.zip    -d /opt

 

cd  /opt/moosefs-master

 

./configure \

--prefix=/usr/local/mfs \

--with-default-user=mfs \

--with-default-group=mfs \

 

make && make install

 

4、修改相应配置文件

cd /usr/local/mfs/etc/mfs/

 

cp mfschunkserver.cfg.sample mfschunkserver.cfg

cp mfshdd.cfg.sample mfshdd.cfg

 

vi mfschunkserver.cfg
修改以下内容:

MASTER_HOST  =  192.168.80.181       指向master服务器的ip地址,去掉注释符号

MASTER_PORT  = 9420

 

vi   mfshdd.cfg

添加一行:

/opt        这是一个给MFS的分区,生产环境中最好使用独立的分区,或者磁盘挂载到此目录下

 


 

chown -R mfs:mfs /opt

 

6、授权、优化路径

chown -R mfs.mfs /usr/local/mfs

ln -s /usr/local/mfs/sbin/* /usr/local/bin/

 

7、启动服务

mfschunkserver start

 

netstat -anpt | grep 'mfschunkserver'     看9422 端口是否在工作

 

echo "/usr/local/mfs/sbin/mfschunkserver start" >> /etc/rc.d/rc.local

chmod +x /etc/rc.d/rc.local

 

 



四、配置客户端

 

1、安装相关编译器、工具包

 

yum  install gcc gcc-c++ make   zlib-devel  fuse-devel -y

 

4、创建进程用户

useradd -M -s /sbin/nologin   mfs

 

 

5、安装mfs软件包

 

unzip   moosefs-master.zip    -d /opt

 

cd  /opt/moosefs-master

 

./configure \

--prefix=/usr/local/mfs \

--with-default-user=mfs \

--with-default-group=mfs \

--enable-mfsmount

 

make && make install

 

ln -s  /usr/local/mfs/bin/* /usr/local/bin

 

6、挂载MFS文件系统

 

mkdir /mnt/mfs #创建挂载点

 

modprobe fuse #加载fuse模块到内核

 

mfsmount /opt/mfs/ -H 192.168.80.181 #挂载MFS

 

df -h #查看挂载情况

unzip   moosefs-master.zip    -d /opt

 

cd  /opt/moosefs-master

 

echo "modprobe fuse" >> /etc/rc.d/rc.local

echo "/usr/local/mfs/bin/mfsmount  /opt/mfs -H 192.168.80.181" >> /etc/rc.d/rc.local

 

在chunkserver上查看:

tree  /opt

 

7、在master上开启web监控服务

mfscgiserv start

 

 

8、访问MFS监控工具

http://192.168.80.181:9425/ #client端访问web

 

 


9、配置密码认证挂载

在master上

cd /usr/local/mfs/etc/mfs/

vi mfsexports.cfg

192.168.80.0/24         /      rw,alldirs,maproot=0,password=123456

 

mfsmaster  restart


在客户端上:


 

 

在客户端查看数据备份情况:

mfsgetgoal   /opt/mfs

 

查看备份的数据:

vi /opt/mfs/host  (随便写点内容用来测试)

mfsfileinfo   /opt/mfs/host

 

查看备份时间:

mfsgettrashtime    /opt/mfs