MFS 分布式存储的运行方式
MFS工作原理
MooseFS是一款具有冗余容错功能的分布式文件系统。它把数据分散在多台服务器上,确保一份数据多个备份副本,对外提供统一的结构。
功能特性
对于标准的文件操作,MooseFS表现与其他类Unix文件系统一致。支持的通过文件系统特性:
· 层次结构(目录树)
· 兼容POSIX文件属性
· 支持特殊文件
· 符号链接和硬链接
· 基于IP地址和密码的访问控制
独有特性
· 高可靠性(数据的多个副本存储在不同服务器)
· 容量动态扩展(添加新硬盘或者服务器)
· 可以回收在制定时间内删除的文件,类似回收站功能
· 可以对整个文件甚至是正在被写入的文件创建文件快照
MFS整体架构的四种角色
· Master(元数据服务器)负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复,多节点拷贝。存储着每个文件的元数据(文件的大小、属性、位置信息,包括所有非常规文件的所有信息,例如目录、套接字、管道以及设备文件)
· Metalogger(元数据日志服务器)负责备份Master服务器的changelog。文件类型为 changelog.*.mfs ,以便在Master出问题时接替其工作
· Chunk(数据存储服务器)负责连接Master,听从Master调度,提供存储空间,并为客户端提供数据传输
· Client(客户端挂载)通过FUSE内核接口挂载远程管理服务器(master)上所管理的数据存储服务器,使用起来和本地文件系统一样
·
## MFS读处理过程:
1、客户端向元数据服务器发出读请求。
2、元数据服务器把所需数据存放的位置(Chunk Server的IP地址和chunk编号)告知客户端。
3、客户端向已知的Chunk Server请求发送数据。
4、Chunk Server向客户端发送数据。
## MFS写处理过程:
1、客户端向元数据服务器发送写入请求。
2、元数据服务器与Chunk Server进行交互(只有当所需的分块Chunks存在的时候才进行这个交互):
a、元数据服务器只是在某些服务器创建新的分块chunks。
b、Chunk Servers告知元数据服务器,步骤a已经操作成功。
3、元数据服务器告知客户端,你可以在哪个Chunk Server的哪些Chunks写入数据。
4、客户端向指定的Chunk Server写入数据
5、Chunk Server与其他Chunk Server进行数据同步。
6、Chunk Server之间同步成功。
7、Chunk Server告知客户端数据写入成功。
8、客户端告知元数据服务器本次写入完毕。
实验拓扑
一、搭建master server
1.安装依赖包
[root@centos1 ~]# yum -y install zlib-devel
2.创建用户
[root@centos1 ~]# useradd mfs -s /sbin/nologin
3.安装源码包
[root@centos1 ~]# tar xf /mnt/mfs-1.6.27-5.tar.gz -C /usr/src
[root@centos1 mfs-1.6.27]# cd /usr/src/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-mfsmount
[root@centos1 mfs-1.6.27]# make&&make install
4.复制文件
[root@centos1 mfs-1.6.27]# cd /usr/local/mfs/etc/mfs
[root@centos1 mfs]# cp mfsmaster.cfg.dist mfsmaster.cfg
[root@centos1 mfs]# cp mfsexports.cfg.dist mfsexports.cfg
[root@centos1 mfs]# cp mfstopology.cfg mfstopology.cfg
[root@centos1 mfs]# cd /usr/local/mfs/var/mfs/
[root@centos1 mfs]# cp metadata.mfs.empty metadata.mfs
5.配置文件(只需了解,不用改动)
①// mfsmaster.cfg(主配置文件)/usr/local/mfs/etc/mfs目录下
# 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 被挂接目录及其权限控制文件的存放位置
# TOPOLOGY_FILENAME = /usr/local/mfs/etc/mfs/mfstopology.cfg
# DATA_PATH = /usr/local/mfs/var/mfs 数据存放路径,此目录下大致有三类文件,changelog,sessions和 stats;
# BACK_LOGS = 50 metadata 的改变 log 文件数目(默认是 50);
# BACK_META_KEEP_PREVIOUS = 1
# REPLICATIONS_DELAY_INIT = 300 延迟复制的时间(默认是 300s);
# REPLICATIONS_DELAY_DISCONNECT = 3600 chunkserver 断开的复制延迟(默认是 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 连接的端口地址(默认是 9420);
# MATOCU_LISTEN_HOST = * 用于客户端挂接连接的 IP 地址(默认是*,代表任何 IP);
# MATOCU_LISTEN_PORT = 9421 用于客户端挂接连接的端口地址(默认是 9421);
# CHUNKS_LOOP_MAX_CPS = 100000
# CHUNKS_LOOP_MIN_TIME = 300 chunks 的回环频率(默认是:300 秒);
②mfsexportes.cfg 为共享mfs文件系统的控制文件,NFS要共享一个目录时,我们会使用vim /etc/exports命令,编写共享给谁,所要共享的目录,共享出去的属性这些内容,而mfsexports.cfg的作用与其类似其书写格式如下: 对客户端的配置
Allow everything but “meta”
* / rw,alldirs,maproot=0
Client(客户端)支持格式:ip、ip/netmask、ip/位数掩码、ip-ip、*
该文件每一个条目分为三部分:
第一部分:客户端的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 许挂载任何指定的子目录
6.启动服务/usr/local/mfs/sbin/mfsmaster start
[root@centos1 mfs]# netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:9419 0.0.0.0:* LISTEN 7599/mfsmaster
tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN 7599/mfsmaster
tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN 7599/mfsmaster
tcp 0 0 192.168.1.1:9419 192.168.1.2:37816 ESTABLISHED 7599/mfsmaster
tcp 0 0 192.168.1.1:9420 192.168.1.3:48107 ESTABLISHED 7599/mfsmaster
tcp 0 0 ::1:25 :::* LISTEN 1732/master
7.查看进程
[root@centos1 mfs]# ps -ef|grep mfs
8.停止mfsmaster
[root@centos1 mfs]# /usr/local/mfs/sbin/mfsmaster -s 或stop
二、搭建metalogger server
1.安装依赖包
[root@centos1 ~]# yum -y install zlib-devel
2.创建用户
[root@centos1 ~]# useradd mfs -s /sbin/nologin
3.安装源码包
[root@centos1 ~]# tar xf /mnt/mfs-1.6.27-5.tar.gz -C /usr/src
[root@centos1 mfs-1.6.27]# cd /usr/src/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-mfsmount
[root@centos1 mfs-1.6.27]# make && make install
4.复制文件
[root@centos1 mfs-1.6.27]# cd /usr/local/mfs/etc
[root@centos2 mfs]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
[root@centos2 mfs]# vim mfsmetalogger.cfg
MASTER_HOST=192.168.1.1 //手工添加MASTER SERVER的ip地址
5.启动服务
[root@centos2 mfs]# /usr/local/mfs/sbin/mfsmetalogger start
三、搭建chunk server
1.安装依赖包
[root@centos1 ~]# yum -y install zlib-devel
2.创建用户
[root@centos1 ~]# useradd mfs -s /sbin/nologin
3.安装
[root@centos1 ~]# tar xf /mnt/mfs-1.6.27-5.tar.gz -C /usr/src
[root@centos1 mfs-1.6.27]# cd /usr/src/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@centos3 mfs-1.6.27]# make &&make install
4.复制配置文件
[root@centos3 mfs]# cd /usr/local/mfs/etc/mfs/
#cp mfschunkserver.cfg.dist mfschunkserver.cfg
[root@centos3 mfs]# cp mfshdd.cfg mfshdd.cfg
5.修改配置文件
[root@centos3 mfs]# vim mfschunkserver.cfg
MASTER_HOST = 192.168.1.1 //master服务器的ip地址
[root@centos3 mfs]# vim mfshdd.cfg
/data //设置chunkserver存放数据的目录
4.设置目录权限,启动mfschunkserver
[root@centos3 mfs]# mkdir /data //创建/data
[root@centos3 mfs]# chown -R mfs:mfs /data //设置权限
[root@centos3 mfs]# /usr/local/mfs/sbin/mfschunkserver start //启动服务
四、搭建第二个chunkserver
1.[root@centos3 ~]# useradd mfs -s /sbin/nologin
2.安装
[root@centos4 mfs-1.6.27]# tar xf /mnt/mfs-1.6.27-5.tar.gz -C /usr/src
[root@centos4 mfs-1.6.27]# cd /usr/src/mfs-1.6.27/
[root@centos4 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount
[root@centos4 mfs-1.6.27]# make && make install
3.复制配置文件
[root@centos3 mfs-1.6.27]# cd /usr/local/mfs/etc/mfs
[root@centos4 mfs]# cp mfschunkserver.cfg.dist mfschunkserver.cfg
[root@centos4 mfs]# cp mfshdd.cfg.dist mfshdd.cfg
4.修改配置文件
[root@centos3 mfs]# vim mfschunkserver.cfg
MASTER_HOST = 192.168.1.1 //master服务器的ip地址
[root@centos3 mfs]# vim mfshdd.cfg
/data //存放数据的目录
5.设置目录权限,启动mfschunkserver
#mkdir /data
[root@centos3 mfs]# chown -R mfs:mfs /data
[root@centos3 mfs]# /usr/local/mfs/sbin/mfschunkserver start
五、客户端配置
1.安装fuse
fuse的功能简单概括一下,fuse提供一个文件操作的接口,然后fuse在这个接口上监听文件操作,并把这些对文件的操作传给我们自己的相关代码进行处理。 也就是说,fuse提供一个挂载点,然后他会在这个挂在点上进行监听,一旦有操作(新建、读取、修改)发生,他会把控制权交给我们的代码,这些操作的具体代码都在mfsmount模块中实现。
[root@centos1 fuse-2.9.2]# tar xf /mnt/fuse-2.9.2.tar.gz -C /usr/src
[root@centos1 fuse-2.9.2]# cd /usr/src/fuse-2.9.2/
[root@centos1 fuse-2.9.2]# ./configure
[root@centos1 fuse-2.9.2]# make &&make install
2.设置环境变量
[root@centos1 fuse-2.9.2]# vim /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH //环境变量PKG_CONFIG_PATH是用来设置.pc文件的搜索路径的
[root@centos1 fuse-2.9.2]# source /etc/profile //刷新环境变量
3.安装mfs客户端
[root@centos3 ~]# useradd -s /sbin/nologin mfs
[root@centos1 mfs-1.6.27]# tar xf /mnt/mfs-1.6.27-5.tar.gz -C /usr/src
[root@centos1 mfs-1.6.27]# cd /usr/src/mfs-1.6.27/
[root@centos1 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver --enable-mfsmount
[root@centos1 mfs-1.6.27]# make&&make install
4.挂载mfs文件系统
#mkdir /test //创建挂载点
[root@centos1 test]# modprobe fuse//加载fuse模块到内核
[root@centos1 test]# /usr/local/mfs/bin/mfsmount /test -H 192.168.1.1//挂载mfs
查看挂载情况:
5.mfs常用操作
1.设置环境变量
[root@centos1 test]# vim /etc/profile
export PATH=/usr/local/mfs/bin:$PATH
[root@centos1 test]# source /etc/profile
2.查看与设置文件复制的份数
[root@centos1 test]# mfsgetgoal -r /test
3.测试
[root@centos1 test]# dd if=/dev/zero of=/test/111.data bs=200M count=1
查看写入结果:
[root@centos1 test]# mfssetgoal -r 2 /test 进行冗余测试
[root@centos1 test]# dd if=/dev/zero of=/test/222.data bs=200M count=1
查看写入结果是否冗余:
六、mfs监控
1. [root@centos1 mfs]# /usr/local/mfs/sbin/mfscgiserv //master服务器写入
2. 通过网站进行监控测试:
七、MFS集群维护
1.启动MFS集群
安全的启动MooseFS 集群(避免任何读或写的错误数据或类似的问题)的方式是按照以下命令步骤:
1. 启动mfsmaster 进程
2. 启动所有的mfschunkserver 进程
3. 启动mfsmetalogger 进程(如果配置了mfsmetalogger)
4. 当所有的chunkservers 连接到MooseFS master 后,任何数目的客户端可以利用mfsmount 去挂接被export 的文件系统。(可以通过检查master 的日志或是CGI 监视器来查看是否所有的chunkserver被连接)。
2.停止MFS集群
安全的停止MooseFS 集群:
1. 在所有的客户端卸载MooseFS 文件系统(用umount 命令或者是其它等效的命令)
2. 用mfschunkserver stop 命令停止chunkserver 进程
3. 用mfsmetalogger stop 命令停止metalogger 进程
4. 用mfsmaster stop 命令停止master 进程
3.MFS元数据备份
通常元数据有两部分的数据:
· 主要元数据文件metadata.mfs,当mfsmaster 运行的时候会被命名为metadata.mfs.back
· 元数据改变日志changelog.*.mfs,存储了过去的N 小时的文件改变(N 的数值是由BACK_LOGS参数设置的,参数的设置在mfschunkserver.cfg 配置文件中)。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。