mfs分布式存储搭建应用
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配置文件中)。
名称栏目:mfs分布式存储搭建应用
当前URL:http://myzitong.com/article/pocsgi.html