MFS 高可用存储分布式文件系统

简介:

MFS分布式文件系统

系统:redhat

机器:192.168.1.248(Master)

            192.168.1.249(Backup)

           192.168.1.250(Chunkserver 1)

           192.168.1.238(Chunkserver2)

          192.168.1.251 (client)

   Master安装MFS:

配置之前确保5台机器的selinux关闭,iptables关闭
# useradd mfs
# tar zvxf mfs-1.6.17.tar.gz
# cd mfs-1.6.17
# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
# make
# make install
# cd /usr/local/mfs/etc
# mv mfsexports.cfg.dist mfsexports.cfg
# mv mfsmaster.cfg.dist mfsmaster.cfg
# mv mfsmetalogger.cfg.dist mfsmetalogger.cfg
# cd /usr/local/mfs/var/mfs/
# mv metadata.mfs.empty metadata.mfs
# echo "192.168.1.248     mfsmaster" >> /etc/hosts
 
Mfsmaster.cfg 配置文件包含主控服务器master 相关的设置
mfsexports.cfg 指定那些客户端主机可以远程挂接 MooseFS 文件系统,以及授予
挂接客户端什么样的访问权。默认是所有主机共享 /
 
试着运行master 服务(服务将以安装配置configure 指定的用户运行mfs):
# /usr/local/mfs/sbin/mfsmaster start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules ...
loading sessions ... ok
sessions file has been loaded
exports file has been loaded
loading metadata ...
create new empty filesystemmetadata file has been loaded
no charts data file - initializing empty charts
master <-> metaloggers module: listen on *:9419
master <-> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly
 
为了监控MooseFS 当前运行状态,我们可以运行CGI 监控服务,这样就可以用浏览器查看整个MooseFS 的运行情况:
# /usr/local/mfs/sbin/mfscgiserv
starting simple cgi server (host: any , port: 9425 , rootpath: /usr/local/mfs/share/mfscgi)
现在,我们在浏览器地址栏输入 http://192.168.1.248:9425 即可查看master 的运行情况(这个时候,是不能看见chunk server 的数据)。
 
Backup服务器配置 (作用是故障了替代Master):
# useradd mfs
# tar zvxf mfs-1.6.17.tar.gz
# cd mfs-1.6.17
# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
# make
# make install
# cd /usr/local/mfs/etc
# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
# cp mfsexports.cfg.dist mfsexports.cfg
# cp mfsmaster.cfg.dist mfsmaster.cfg
# echo "192.168.1.248     mfsmaster" >> /etc/hosts
 
# /usr/local/mfs/sbin/mfsmetalogger start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly
 
Chunkserver 服务器配置(存储数据块,每台Chunkserver配置都一样):
# useradd mfs
# tar zvxf mfs-1.6.17.tar.gz
# cd mfs-1.6.17
# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster
# make
# make install
# cd /usr/local/mfs/etc
# cp mfschunkserver.cfg.dist mfschunkserver.cfg
# cp mfshdd.cfg.dist mfshdd.cfg
# echo "192.168.1.248     mfsmaster" >> /etc/hosts
 
 
建议在chunk server 上划分单独的空间给 MooseFS 使用,这样做的好处是便于管理剩余空间 ,这里使用的共享点是/mfs1和/mfs2
在配置文件mfshdd.cfg 中,我们给出了用于客户端挂接MooseFS 分布式文件系统根分区所使用的共享空间位置
# vi /usr/local/mfs/etc/mfshdd.cfg
#加入下面 2行
/mfs1
/mfs2
 
# chown -R mfs:mfs /mfs*
 
开始启动chunk server
# /usr/local/mfs/sbin/mfschunkserver start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfschunkserver modules ...
hdd space manager: scanning folder /mfs2/ ...
hdd space manager: scanning folder /mfs1/ ...
hdd space manager: /mfs1/: 0 chunks found
hdd space manager: /mfs2/: 0 chunks found
hdd space manager: scanning complete
main server module: listen on *:9422
no charts data file - initializing empty charts
mfschunkserver daemon initialized properly
 
现在再通过浏览器访问  http://192.168.1.248:9425 可以看见这个MooseFS 系统的全部信息,包括主控master 和存储服务chunkserver 。
 
 
client配置(客户端挂载mfs共享目录):
前提环境:
所有的client都需要安装fuse,内核版本为2.6.18-128.el5需要按照fuse-2.7.6.tar.gz,如果是2.6.18-194.11.3.el5内核则需要安装fuse-2.8.4否则报错)
在/etc/profile文件最后面加上:PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
再执行 source /etc/profile 使之生效
tar xzvf fuse-2.7.6.tar.gz
cd fuse-2.7.6
./configure --enable-kernel-module
make;make install
如果安装成功会找到/lib/modules/2.6.18-128.el5/kernel/fs/fuse/fuse.ko这个内核模块
再执行modprobe fuse
查看是否加载成功 :lsmod|grep "fuse"
 
# useradd mfs
# tar zvxf mfs-1.6.17.tar.gz
# cd mfs-1.6.17
#./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver
# make
# make install
# echo "192.168.1.248     mfsmaster" >> /etc/hosts
 
挂载操作
# mkdir -p /data/mfs
# /usr/local/mfs/bin/mfsmount /data/mfs -H mfsmaster
mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to root:root
 
进行副本建立,只要在1台client上进行操作就可以了
# cd /data/mfs/
副本数为1
# mkdir floder1
副本数为2
# mkdir floder2
副本数为3
# mkdir floder3
 
使用命令mfssetgoal – 设定目录里文件的副本数:
# /usr/local/mfs/bin/mfssetgoal -r 1 /data/mfs/floder1
/data/mfs/floder1:
 inodes with goal changed:                          0
 inodes with goal not changed:                      1
 inodes with permission denied:                     0
# /usr/local/mfs/bin/mfssetgoal -r 2 /data/mfs/floder2
/data/mfs/floder2:
 inodes with goal changed:                          1
 inodes with goal not changed:                      0
 inodes with permission denied:                     0
# /usr/local/mfs/bin/mfssetgoal -r 3 /data/mfs/floder3
/data/mfs/floder3:
 inodes with goal changed:                          1
 inodes with goal not changed:                      0
 inodes with permission denied:                     0
 
拷贝文件测试
# cp /root/mfs-1.6.17.tar.gz /data/mfs/floder1
# cp /root/mfs-1.6.17.tar.gz /data/mfs/floder2
# cp /root/mfs-1.6.17.tar.gz /data/mfs/floder3
 
命令mfschunkfile 用来检查给定的文件以多少副本数来存储
目录folder1 有一个副本存储在一个chunk 里:
# /usr/local/mfs/bin/mfscheckfile /data/mfs/floder1/mfs-1.6.17.tar.gz
/data/mfs/floder1/mfs-1.6.17.tar.gz:
1 copies: 1 chunks
在目录folder2 中,是以两个副本保存的
# /usr/local/mfs/bin/mfscheckfile /data/mfs/floder2/mfs-1.6.17.tar.gz 
/data/mfs/floder2/mfs-1.6.17.tar.gz:
2 copies: 1 chunks
在目录folder3 中,是以三个副本保存的
# /usr/local/mfs/bin/mfscheckfile /data/mfs/floder3/mfs-1.6.17.tar.gz 
/data/mfs/floder3/mfs-1.6.17.tar.gz:
3 copies: 1 chunks
 
停止  MooseFS
为了安全停止MooseFS 集群,建议执行如下的步骤:
·在所有客户端用Unmount 命令先卸载文件系统(本例将是: umount /data/mfs)
·停止chunk server 进程: /usr/local/mfs/sbin/mfschunkserver stop
·停止 metalogger 进程: /usr/local/mfs/sbin/mfsmetalogger stop
·停止主控 master server 进程: /usr/local/mfs/sbin/mfsmaster stop
 
 
 
注意说明:
1、定时备份/usr/local/mfs/var/mfs/metadata.mfs.back文件
 
失败恢复
拷贝备份文件到 备份服务器 Backup server (metalogger)
# scp metadata.mfs.back  root@192.168.1.249:/usr/local/mfs/var/mfs/
在备份服务器 Backup server (metalogger) 操作
# /usr/local/mfs/sbin/mfsmetarestore -a
loading objects (files,directories,etc.) ... ok
loading names ... ok
loading deletion timestamps ... ok
checking filesystem consistency ... ok
loading chunks data ... ok
connecting files and chunks ... ok
applying changes from file: /usr/local/mfs/var/mfs/changelog_ml.1.mfs
meta data version: 23574
version after applying changelog: 23574
applying changes from file: /usr/local/mfs/var/mfs/changelog_ml.0.mfs
meta data version: 23574
version after applying changelog: 23583
store metadata into file: /usr/local/mfs/var/mfs/metadata.mfs
 
修改hosts文件,变更mfsmaster的ip
192.168.1.249     mfsmaster
 
启动master
# /usr/local/mfs/sbin/mfsmaster start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules ...
loading sessions ... ok
sessions file has been loaded
exports file has been loaded
loading metadata ...
loading objects (files,directories,etc.) ... ok
loading names ... ok
loading deletion timestamps ... ok
checking filesystem consistency ... ok
loading chunks data ... ok
connecting files and chunks ... ok
all inodes: 2381
directory inodes: 104
file inodes: 2277
chunks: 2185
metadata file has been loaded
no charts data file - initializing empty charts
master <-> metaloggers module: listen on *:9419
master <-> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly
 
 
所有客户机执行
# umount /data/mfs
 
所有存储节点停止mfschunkserver服务
#/usr/local/mfs/sbin/mfschunkserver stop
 
所有客户机, chunkserver修改hosts文件,更改mfsmaster的ip
192.168.1.249     mfsmaster
 
所有存储节点启动服务
#/usr/local/mfs/sbin/mfschunkserver start
 
所有客户机进行挂载
# /usr/local/mfs/bin/mfsmount /data/mfs -H mfsmaster
 
mfs会把所有chunkserver的共享目录容量累积为一个总的容量存储空间,client看到的目录大小就是所有chunkserver共享的目录空间总和。
 
MFS Master和backup高可用这块,可以用DRBD来解决Master单点故障,后面我会发布这块的文档。
挂载权限这块可以在Master里设置运行挂载的ip段(mfsexport.cfg)  也可以通过iptables控制。

恢复误删除文件:

/usr/local/mfs/bin/mfsmount /data/reco -H mfsmaster -p -m   (/data/reco建立目录用于恢复删除的文件,如果弹出passwod就输入mfsmaster的机器密码),进入/data/reco/trash

mv 00* ./undel/

再去挂载的目录查看删除的文件都已经恢复完成。

本文转自 liang3391 51CTO博客,原文链接:http://blog.51cto.com/liang3391/482599


相关文章
|
4月前
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
131 2
基于Redis的高可用分布式锁——RedLock
|
5月前
|
负载均衡 Java 双11
使用Java构建高可用的分布式系统
使用Java构建高可用的分布式系统
|
3月前
|
存储
cephFS高可用分布式文件系统部署指南
关于如何部署高可用的cephFS分布式文件系统,包括集群的搭建、验证高可用性以及实现两主一从架构的详细指南。
110 9
|
4月前
|
存储 SQL 运维
“震撼发布!PolarDB-X:云原生分布式数据库巨擘,超高并发、海量存储、复杂查询,一网打尽!错过等哭!”
【8月更文挑战第7天】PolarDB-X 是面向超高并发、海量存储和复杂查询场景设计的云原生分布式数据库系统
116 1
|
5月前
|
存储 运维 监控
如何设计高可用的分布式系统
【7月更文挑战第29天】设计高可用的分布式系统是一个复杂而细致的过程,需要从架构设计、冗余策略、故障转移与恢复、监控与告警等多个方面综合考虑。通过采用微服务架构、无状态服务、负载均衡、数据冗余、服务冗余、跨地域部署等策略,可以显著提高系统的可用性和可靠性。同时,建立完善的监控和告警体系,确保对系统的任何变化都能及时感知和处理。最终,通过不断的优化和改进,实现系统的高可用性目标。
|
5月前
|
消息中间件 Java 开发者
Spring Cloud微服务框架:构建高可用、分布式系统的现代架构
Spring Cloud是一个开源的微服务框架,旨在帮助开发者快速构建在分布式系统环境中运行的服务。它提供了一系列工具,用于在分布式系统中配置、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等领域的支持。
197 5
|
5月前
|
存储 关系型数据库 分布式数据库
PolarDB,阿里云的云原生分布式数据库,以其存储计算分离架构为核心,解决传统数据库的扩展性问题
【7月更文挑战第3天】PolarDB,阿里云的云原生分布式数据库,以其存储计算分离架构为核心,解决传统数据库的扩展性问题。此架构让存储层专注数据可靠性,计算层专注处理SQL,提升性能并降低运维复杂度。通过RDMA加速通信,多副本确保高可用性。资源可独立扩展,便于成本控制。动态添加计算节点以应对流量高峰,展示了其灵活性。PolarDB的开源促进了数据库技术的持续创新和发展。
313 2
|
5月前
|
消息中间件 缓存 监控
如何设计一个秒杀系统,(高并发高可用分布式集群)
【7月更文挑战第4天】设计一个高并发、高可用的分布式秒杀系统是一个非常具有挑战性的任务,需要从架构、数据库、缓存、并发控制、降级限流等多个维度进行考虑。
154 1
|
4月前
|
存储 算法 NoSQL
(三)漫谈分布式之集群篇:探寻N个9高可用与PB级数据存储的实现原理!
本文来详细聊聊集群的各方面知识,为诸位量身打造出结构化的集群知识体系。
147 0
|
6月前
|
SQL 关系型数据库 MySQL
MySQL高可用架构设计:从主从复制到分布式集群
MySQL高可用性涉及主从复制、半同步复制和Group/InnoDB Cluster。主从复制通过二进制日志同步数据,保证故障时可切换。半同步复制确保事务在至少一个从服务器确认后才提交。Group Replication是多主复制,支持自动故障切换。InnoDB Cluster是8.0的集成解决方案,简化集群管理。使用这些技术能提升数据库的稳定性和可靠性。
538 2
下一篇
DataWorks