MooseFS 分布式存储
一、MooseFS介绍
MooseFS主要由管理服务器(master)、元日志服务器(Metalogger)、数据存储服务器(chunkserver)构成。
管理服务器:主要作用是管理数据存储服务器,文件读写控制、空间管理及节点间的数据拷贝等。
元日志服务器:备份管理服务器的变化日志,以便管理服务器出问题时能恢复工作。
数据存储服务器:听从管理服务器调度,提供存储空间,接收或传输客户数据等。
MooseFS的读过程如图所示:


总结:MooseFS结构简单,适合初学者理解分布式文件系统的工作过程,但MooseFS具有单点故障隐患,一旦master无法工作,整个分布式文件系统
都将停止工作,因此需要实现master服务器的高可用(比如heartbeat+drbd实现)
二、集群部署:

主机环境:RHEL6.5 selinux and iptables disabled
Master:172.25.10.2 (HA) 172.25.10.3 (HA)
VIP 172.25.10.100
##Metalogger: 192.168.0.77
Chunkserver: 172.25.10.6 172.25.10.7 172.25.10.8
Client: 172.25.10.4
172.25.10.5 (iSCSI)
生成 rpm,便于部署:
# yum install gcc make rpm-build fuse-devel zlib-devel -y
# rpmbuild -tb mfs-1.6.27.tar.gz
# ls ~/rpmbuild/RPMS/x86_64
mfs-cgi-1.6.27-4.x86_64.rpm
mfs-master-1.6.27-4.x86_64.rpm
mfs-chunkserver-1.6.27-4.x86_64.rpm
元数据服务器 Master server 安装
yum install -y mfs-cgi-1.6.27-4.x86_64.rpm mfs-cgiserv-1.6.27-4.x86_64.rpm mfs-master-1.6.27-4.x86_64.rpm
# cd /etc/mfs/
# cp mfsmaster.cfg.dist mfsmaster.cfg
# cp mfsexports.cfg.dist mfsexports.cfg
# vi mfsexports.cfg
172.25.10.0/24 / rw,alldirs,maproot=0
该文件每一个条目分为三部分:
第一部分:客户端的ip地址
第二部分:被挂接的目录
第三部分:客户端拥有的权限
# cd /var/lib/mfs
# cp metadata.mfs.empty metadata.mfs
# chown -R nobody /var/lib/mfs
修改/etc/hosts文件,增加下面的行:
172.25.10.2 mfsmaster
# mfsmaster start 启动 master server
# mfscgiserv #启动 CGI 监控服务
lockfile created and locked
starting simple cgi server (host: any , port: 9425 , rootpath: /usr/share/mfscgi)
# cd /usr/share/mfscgi/
# chmod +x chart.cgi mfs.cgi
在浏览器地址栏输入 http://172.25.10.2:9425 即可查看 master的运行情况
存储服务器 Chunk servers 安装
# yum localinstall -y mfs-chunkserver-1.6.27-4.x86_64.rpm
# cd /etc/mfs
# cp mfschunkserver.cfg.dist mfschunkserver.cfg
# cp mfshdd.cfg.dist mfshdd.cfg
# vi mfshdd.cfg 定义 mfs 共享点
/mnt/mfschunks1
# chown -R nobody:nobody /mnt/mfschunks1
修改/etc/hosts 文件,增加下面的行:
172.25.10.2 mfsmaster
mkdir /var/lib/mfs
chown nobody /var/lib/mfs
现在再通过浏览器访问 http://172.25.10.2:9425/ 应该可以看见这个 MFS系统的全部信息,包括元数据管理master和存储服务chunkserver。
客户端 client安装
# yum localinstall -y mfs-client-1.6.27-4.x86_64.rpm
# cd /etc/mfs
# cp mfsmount.cfg.dist mfsmount.cfg
# vi mfsmount.cfg 定义客户端默认挂载
mfsmaster=mfsmaster
/mnt/mfs
# mfsmount
# df -h
...
mfsmaster:9421 2729728 0 2729728 0% /mnt/mfs
MFS 测试
在 MFS 挂载点下创建两个目录,并设置其文件存储份数:
# cd /mnt/mfs
# mkdir dir1 dir2
# mfssetgoal -r 2 dir2/ 设置在 dir2 中文件存储份数为两个,默认是一个
dir2/:
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0
对一个目录设定“goal”,此目录下的新创建文件和子目录均会继承此目录的设定,但不会改变已经存在的文件及目录的copy份数。但使用-r选项可以更改已经存在的copy份数。
拷贝同一个文件到两个目录
# cp /etc/passwd dir1 # cp /etc/passwd dir2
查看文件信息
# mfsfileinfo dir1/passwd
dir1/passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
copy 1: 172.25.10.6:9422
# mfsfileinfo dir2/passwd
dir2/passwd:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.10.6:9422
copy 2: 172.25.10.7:9422
关闭 mfschunkserver2 后再查看文件信息
# mfsfileinfo dir1/passwd
dir1/passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
no valid copies !!!
# mfsfileinfo dir2/passwd
dir2/passwd:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.10.7:9422
启动 mfschunkserver2 后,文件回复正常。
恢复误删文件
# rm -f dir1/passwd
# mfsgettrashtime dir1/
dir1/: 86400
文件删除后存放在“ 垃圾箱”中的时间称为隔离时间,这个时间可以用mfsgettrashtime命令来查看,用mfssettrashtime命令来设置,单位为秒,默认为86400秒。
# mkdir /mnt/mfsmeta
# mfsmount -m /mnt/mfsmeta/ -H mfsmaster
挂载 MFSMETA 文件系统,它包含目录trash (包含仍然可以被还原的删除文件的信息)和
trash/undel (用于获取文件)。把删除的文件,移到/ trash/undel 下,就可以恢复此文件。
# cd /mnt/mfsmeta/trash
# mv 00000004\|dir1\|passwd undel/
到 dir1 目录中可以看到passwd文件恢复
在 MFSMETA 的目录里,除了trash和trash/undel两个目录,还有第三个目录reserved,该目录内有已经删除的文件,但却被其他用户一直打开着。在用户关闭了这些被打开的文件后,reserved目录中的文件将被删除,文件的数据也将被立即删除。此目录不能进行操作。
MFS高可用部署
iSCSI 配置
增加一块虚拟磁盘,无需格式化(vdb)
yum install scsi-target-utils.x86_64 -y
vim /etc/tgt/targets.conf
#<target iqn.2016-03.com.example:server.target9>
# backing-store /dev/vdb1
# initiator-address 172.25.10.2
# initiator-address 172.25.10.3
#</target>
/etc/init.d/tgtd start && chkconfig tgtd on
在master(172.25.10.2 172.25.10.3)端下载安装 iscsi-initiator-utils.x86_64
iscsiadm -m discovery -t st -p 172.25.10.5
iscsiadm -m node -l
将磁盘格式化为ext4格式
fdisk -cu /dev/sda
mkfs.ext4 /dev/sda1
将/var/lib/mfs/* 所有数据移到网络磁盘/dev/sda1中去,然后将其挂载到/var/lib/mfs
mount /dev/sda1 /mnt/
cp -p /var/lib/mfs/* /mnt/
mfsmaster start
Pacemaker安装(172.25.10.2;3)
配yum源
默认yum源只有基础包Server,yum源包里有
ResilientStorage/
HighAvailability/
LoadBalancer/
Packages/
images/
Packages/
...
所需安装包pacemaker在HighAvailability包里
yum install pacemaker -y
使用pacemaker配置时需要安装pacemaker的接口,程序接口为crmshell,早期装上pacemaker自带有crmshell接口,新版本已被独立出来,不再是pacemaker组成部分。而crmshell又依赖于pssh相关包,因此得安装这两个组件。
# yum install crmsh-1.2.6-0.rc2.2.1.x86_64.rpm pssh-2.3.1-2.1.x86_64.rpm
使用yum install安装pacemaker时会安装其大量相关性依赖包,包括corosync,所以corosync不再安装,直接修改其配置文件/etc/corosync/corosync.conf。
cd /etc/corosync/
#cp corosync.conf.example corosync.conf
vim corosync.conf
#bindnetaddr: 172.25.10.0
#mcastaddr: 226.94.1.1
#
#service {
# name: pacemaker
# ver: 0
#}
/etc/init.d/corosync start && chkconfig corosync on
fence安装(1229)
本次部署采用外部fence ,fence是C/S架构,在fence服务端节点需要安装如下三个软件包。
fence-virtd.x86_64
fence-virtd-libvirt.x86_64
fence-virtd-multicast.x86_64
安装好之后使用命令fence_virtd -c进入交互式界面配置fence文件,在配置时需要注意的是选择接口(interface)时选主机之间通信的网卡。
mkdir /etc/cluster #默认不存在cluster;
服务端和客户端之间通过key文件进行通信,key文件默认不存在,需要手动生成并拷贝到所有客户端节点。节点默认没有/etc/cluster目录,需自己建立
# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key
# for i in {2,3} ;do scp /etc/cluster/fence_xvm.key master$i.example.com:/etc/cluster ; done
systemctl start fence_virtd.service
systemctl enable fence_virtd.service
在客户端(172.25.10.2,3)需安装fence-virt工具
# yum install fence-virt.x86_64 -y
元数据高可用性高可用实现
之前安装好的crmshell接口提供一个命令行交互接口对pacemaker集群进行管理,具有非常强大且易用的管理功能,所做的配置会同步到各个集群节点上。下面将元数据服务器上各个服务交由集群管理。
a. 首先将fence服务交由集群。由于外部fence只能识别domain,所以需要将domain与hostname绑定,并每隔60s监控一次。
# crm(live)configure# primitive vmfence stonith:fence_xvm parms pcmk_host_map="master1.example.com:vm2;master2.example.com:vm3" op monitor interval=60s
b. 在将MFS系统服务交由集群接管之前,需建立一个虚拟IP(VIP),VIP对外为master节点,当集群里某个master节点资源宕机,则服务通过VIP将资源迁移到另一个master节点,对client来说,丝毫没有感觉。
# crm(live)configure# primitive vip ocf:hearbeat:IPaddr2 params ip="172.25.10.100" cidr_netmask="24" op monitor interval="30s"
c. 将MFS系统服务交由集群管理器管理。
# crm(live)configure# property no-quorum-policy="ignore" # 默认结点数若只有一个,表示集群不存在,忽视
# crm(live)configure# primitive mfsdata ocf:heartbeat:Filesystem params device="/dev/sda1" directory="/var/lib/mfs" fstype="ext4" op monitor interval="60s"
# crm(live)configure# primitive mfs lsb:mfs op monitor interval="60s"
# crm(live)configure# group mfsgroup vip mfs mfsdata
# crm(live)configure# order mfs-after-mfstdata inf: mfsdata mfs
在chunk 和client端加入hosts解析
172.25.10.100 mfsmaster
————————————————
原文链接:https://blog.csdn.net/gew25/article/details/51924952
MooseFS 分布式存储的更多相关文章
- 分布式存储MooseFS
MooseFS 简介 http://moosefs.org/ MFS特性 安装和配置简单方便 可靠性高(数据的多个拷贝被存储在多个不同的服务器上) 通过添加新的服务器或硬盘就可以实现容量的动态 ...
- Centos下MooseFS(MFS)分布式存储共享环境部署记录
分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连,分布式文件系统的实际基于客户机/服务器模式.目前 ...
- GlusterFS分布式存储学习笔记
分布式文件系统 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源并不直接与本地节点相连,而是分布于计算网络中的一个或者多个节点的计算机上.目前意义上的分布 ...
- FastDFS分布式存储
分布式存储分类 通用分布式存储:mogilefs, fastdfs, ...(无文件系统接口, 通过API访问) 专用分布式存储:即分布式文件系统, moosefs, ...(有文件系统接口) GFS ...
- mfs分布式文件系统,分布式存储,高可用(pacemaker+corosync+pcs),磁盘共享(iscsi),fence解决脑裂问题
一.MFS概述 MooseFS是一个分布式存储的框架,其具有如下特性:(1)通用文件系统,不需要修改上层应用就可以使用(那些需要专门api的dfs很麻烦!).(2)可以在线扩容,体系架构可伸缩性极强. ...
- 全能成熟稳定开源分布式存储Ceph破冰之旅-上
@ 目录 概述 定义 传统存储方式及问题 优势 生产遇到问题 架构 总体架构 组成部分 CRUSH算法 数据读写过程 CLUSTER MAP 部署 部署建议 部署版本 部署方式 Cephadm部署 前 ...
- 分布式存储 FastDFS-5.0.5线上搭建
前言: 由于公司项目需要,最近开始学习一下分布式存储相关知识,确定使用FastDFS这个开源工具.学习之初,自己利用VMware虚拟机搭建了一个5台机器的集群,摸清了安装过程中可能出现的问 ...
- 分布式存储 CentOS6.5虚拟机环境搭建FastDFS-5.0.5集群
前言: 由于公司项目需要,最近开始学习一下分布式存储相关知识,确定使用FastDFS这个开源工具.利用周末的时间在虚拟机上搭建了分布式存储系统,在搭建过程中,发现网上的资料说的并不是很全, ...
- hadoop分布式存储(1)-hadoop基础概念(毕业设计)
hadoop是一种用于海量数据存储.管理.分析的分布式系统.需要hadoop需要储备一定的基础知识:1.掌握一定的linux操作命令 2.会java编程.因此hadoop必须安装在有jdk的linux ...
随机推荐
- Hazel,自动整理文件,让你的 Mac 井井有条
原文地址 https://sspai.com/post/35225 让我们从实际需求出发,看看问题出在哪里,并在此基础上认识和学习使用 Hazel. 电脑随着使用时间的增长,其中的文件也在疯狂的增长, ...
- 全栈项目|小书架|服务器开发-JWT 详解
JWT 官方简介:Introduction to JSON Web Tokens 文章基本是官网内容的翻译,英文不错的同学可点击上面的链接直接看英文文档. 什么是 JWT JWT全称是JSON Web ...
- 【原创】使用批处理脚本自动生成并上传NuGet包
Hello 大家好,我是TANZAME,我们又见面了. NuGet 是什么这里就不再重复啰嗦,园子里一搜一大把.今天要跟大家分享的是,在日常开发过程中如何统一管理我们的包,如何通过批处理脚本生成包并自 ...
- springboot配置springMVC
/** * @ClassName MvcConfigure * @Description SpringMVC配置 * @Author JAGNG * @Date 2019/10/28 10:23 ** ...
- vue 封装方法
个我这个是局部引入方法,下次有需要全局在补上(全局:在main.js文件引入封装的方法js文件,然后用Vue.prototype) 一.新建一个js文件loading.js 二.编辑loading.j ...
- rabittmq详解
交换机(exchange): 声明交换机: Name Durability (消息代理重启后,交换机是否还存在) Auto-delete (当所有与之绑定的消息队列都完成了对此交换机的使用后,删掉它) ...
- PostGIS 存储过程调试
说明: 在使用Postgis做路径分析时需要用到数据库的存储过程,但是存储过程逻辑很复杂,很想看一下每步的执行结果. 百度了一下,发现postgresql有插件可以支持调试存储过程. 解决方案: 1. ...
- day 14 内置函数
复习了解: \t 输出一个制表符,协助在输出文本时,垂直方向保持对齐 \n 换行符 print(r"\n ") # 在字符串前面加r 不会改变字符串的内容 a ...
- 【JavaEE】之MyBatis开发DAO
在SSM框架中的DAO层就是MyBatis中的Mapper,Mapper分为两部分:Mapper接口(JAVA文件)和Mapper映射文件(XML文件).DAO开发(Mapper开发)有两种方式:原始 ...
- shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量
7月11日任务 20.1 shell脚本介绍20.2 shell脚本结构和执行20.3 date命令用法20.4 shell脚本中的变量 20.1 shell脚本介绍 1.shell脚本语言是linu ...