文章前面想说的话:这篇博客写出来真是有点累到了,原本昨天就基本就写好了,放在草稿里面,今天打开就没有了!!唉,就尼玛离我而去了,只有重写,而后中间虚拟机还“爆炸”重启又搞了一会,不容易呀!!但愿各位博友看到有理解错误的地方仍是能帮我指出来。node
1、MFS简介
vim
一、MFS是啥,能作啥?安全
MooseFS是一种分布式文件系统,它把数据分散存放在多个物理服务器上,前面只放置一台负责“调度”元数据服务器,最终呈现给用户的则是一个统一的资源。相对于集中式文件系统来讲,分布式系统拥有更好的扩展性、稳定性、数据的安全性。bash
二、架构及实现原理服务器
⑴、MooseFS文件系统架构包括如下四种角色:
架构
a.管理服务器 managing server (Master):负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复.多节点拷贝。tcp
b.元数据日志服务器 Metalogger server(Metalogger):负责备份Master服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在master server出问题的时候接替其进行工做。分布式
c.数据存储服务器 (chunkservers):负责链接管理服务器,遵从管理服务器调度,提供存储空间,并为客户提供数据传输ide
d.客户机挂载使用client computers:经过fuse内核接口挂接远程管理服务器上所管理的数据存储服务器,看起来共享的文件系统和本地 unix 文件系统使用同样的效果。测试
⑵、实现原理
①MFS WIRTE 过程大概:
一、客户端向元数据服务器发送写入请求。
二、元数据服务器与Chunk Server进行交互(只有当所需的分块Chunks不存在的时候才进行这个交互):
a、元数据服务器只是在某些服务器建立新的分块chunks。
b、Chunk Servers告知元数据服务器,步骤a已经操做成功。
三、元数据服务器告知客户端,你能够在哪一个Chunk Server的哪些Chunks写入数据。
四、客户端向指定的Chunk Server写入数据
五、Chunk Server与其余Chunk Server进行数据同步。
六、Chunk Server之间同步成功。
七、Chunk Server告知客户端数据写入成功。
八、客户端告知元数据服务器本次写入完毕。
以下图:
②MFS READ 过程大概:
一、客户端向元数据服务器发出读请求。
二、元数据服务器把所需数据存放的位置(Chunk Server的IP地址和chunk编号)告知客户端。
三、客户端向已知的Chunk Server请求发送数据。
四、Chunk Server向客户端发送数据
以下图:
2、MFS实战部署
一、环境
系统及虚拟化软件:CENTOS 7.三、VMworkstation
四台虚拟机:Master(10.0.0.5)、LOG SERVER(10.0.0.6)、CHUNK SERVER1(10.0.0.31)
、CHUNK SERVER2(10.0.0.32)、CLIENT直接装在CHUNK SERVER2上
所需软件包和依赖包:moosefs-3.0.96.tar.gz、zlib-devel、make、gcc、fuse、fuse-devel
二、Mster服务器安装、部署
##node3(10.0.0.5)上安装MFS [root@node3 src]#useradd mfs -s /sbin/nologin -M -g 1002 ##确保每一台上的MFS用户GID、UID相同 [root@node3 src]#tar -xf moosefs-3.0.96.tar.gz [root@node3 src]#cd moosefs-3.0.96 [root@node3 moosefs-3.0.96]#./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount ... [root@node3 moosefs-3.0.96]#make && make install ...
##配置Mster服务器文件 [root@node3 moosefs-3.0.96]#/usr/local/mfs/etc/mfs [root@node3 mfs]#cp mfsexports.cfg.sample mfsexports.cfg [root@node3 mfs]# cp mfsmaster.cfg.sample mfsmaster.cfg [root@node3 mfs]#vim mfsexports.cfg ##只需修改此文件,通常mfsmaster.cfg使用默认便可 * / rw,alldirs,mapall=mfs:mfs,password=redhat ##最后一行添加。文件中,每个条目就是一个配置规则,而每个条目又分为三个部分, ##其中第一部分是mfs客户端的ip地址或地址范围,第二部分是被挂载的目录,第三个部分用来设置mfs客户端能够拥有的访问权限 [root@node3 mfs]#cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs ##手工开启元数据文件默认是empty文件
##MFS启动以及检测 [root@node3 mfs]# /usr/local/mfs/sbin/mfsmaster start open files limit has been set to: 16384 working directory: /usr/local/mfs/var/mfs lockfile created and locked initializing mfsmaster modules ... exports file has been loaded mfstopology configuration file (/usr/local/mfs/etc/mfstopology.cfg) not found - using defaults loading metadata ... 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 [root@node3 src]# ps -ef | grep mfs #检测服务是否开启 mfs 1799 1 0 Oct29 ? 00:06:16 /usr/local/mfs/sbin/mfsmaster -a root 23864 1462 0 16:46 pts/0 00:00:00 grep --color=auto mfs [root@node3 mfs]#netstat -ntlp ##检测端口是否开启,原本服务器成功部署 tcp 0 0 0.0.0.0:9419 0.0.0.0:* LISTEN 1799/mfsmaster tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN 1799/mfsmaster tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN 1799/mfsmaster
三、LOG SERVER安装、部署
##node4(10.0.0.6) 安装MFS [root@node3 src]#useradd mfs -s /sbin/nologin -M -g 1002 [root@node3 src]#tar -xf moosefs-3.0.96.tar.gz [root@node3 src]#cd moosefs-3.0.96 [root@node3 moosefs-3.0.96]#./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount ... [root@node3 moosefs-3.0.96]#make && make install ...
##配置 LOG SERVER [root@node4 moosefs-3.0.96]# cd /usr/local/mfs/etc/mfs/ [root@node4 mfs]# cp mfsmetalogger.cfg.sample mfsmetalogger.cfg [root@node4 mfs]# vim mfsmetalogger.cfg MASTER_HOST = 10.0.0.5 ##此行值修改成MSTER SERVER IP,链接日志服务器链接到主服务器上备份元数据
##MFS启动以及检测 [root@node4 ~]# /usr/local/mfs/sbin/mfsmetalogger start ... [root@node4 ~]# ps -ef | grep meta ##程序正常工做 mfs 1768 1 0 Oct29 ? 00:02:35 /usr/local/mfs/sbin/mfsmetalogger start [root@node4 ~]# netstat -lantp|grep metalogger ##与MASTER 端口创建链接 tcp 0 0 10.0.0.6:60518 10.0.0.5:9419 ESTABLISHED 1768/mfsmetalogger
四、CHUNK SERVER1安装、部署
##node1(10.0.0.31)安装MFS [root@node3 src]#useradd mfs -s /sbin/nologin -M -g 1002 ##确保每一台上的MFS用户GID、UID相同 [root@node3 src]#tar -xf moosefs-3.0.96.tar.gz [root@node3 src]#cd moosefs-3.0.96 [root@node3 moosefs-3.0.96]#./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount ##配置发生改变 ... [root@node3 moosefs-3.0.96]#make && make install ...
##配置CHUNK SERVER1 [root@node1 moosefs-3.0.96]# cd /usr/local/mfs/etc/mfs/ [root@node1 mfs]#cp mfschunkserver.cfg.sample mfschunkserver.cfg [root@node1 mfs]# vim mfschunkserver.cfg MASTER_HOST = 10.0.0.5 ##修改此行值为MASTER IP [root@node1 mfs]#cp mfshdd.cfg.sample mfshdd.cfg [root@node1 mfs]#mkdir /data ##建立用来储存数据目录 [root@node1 mfs]#chown -R mfs:mfs /data/ [root@node1 mfs]#vim mfshdd.cfg ##该文件用来设置你将 Chunk Server 的哪一个目录共享出去给 Master Server进行管理。固然,虽然这里填写的是共享的目录,可是这个目录后面最好是一个单独的分区。 /data ###最后一行加入储存数据的目录
###启动MFS、状态检查 [root@node1 mfs]# /usr/local/mfs/sbin/mfschunkserver start open files limit has been set to: 16384 working directory: /usr/local/mfs/var/mfs lockfile created and locked setting glibc malloc arena max to 4 setting glibc malloc arena test to 4 initializing mfschunkserver modules ... hdd space manager: path to scan: /data hdd space manager: start background hdd scanning (searching for available chunks) main server module: listen on *:9422 no charts data file - initializing empty charts mfschunkserver daemon initialized properly ###服务是否启动 [root@node1 ~]# ps -ef | grep chunk mfs 1818 1 0 Oct29 ? 00:08:05 /usr/local/mfs/sbin/mfschunkserver root 9827 1623 0 17:11 pts/0 00:00:00 grep --color=auto chunk ##链接是否创建 [root@node1 ~]# netstat -lantp|grep 9420 tcp 0 0 10.0.0.31:43148 10.0.0.5:9420 ESTABLISHED 1818/mfschunkserver
五、CHUNK SERVER2和CLIENT安装、部署
##node2(10.0.0.32)安装MFS [root@node3 src]#useradd mfs -s /sbin/nologin -M -g 1002 ##确保每一台上的MFS用户GID、UID相同 [root@node3 src]#tar -xf moosefs-3.0.96.tar.gz [root@node3 src]#cd moosefs-3.0.96 [root@node3 moosefs-3.0.96]#./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --enable-mfsmount ##因为我硬件限制,我将CLINET和CHUNK SERVER2安装在一块儿,配置要--enable-mfsmount ... [root@node3 moosefs-3.0.96]#make && make install ...
[root@node2 moosefs-3.0.96]# cd /usr/local/mfs/etc/mfs/ [root@node2 mfs]#cp mfschunkserver.cfg.sample mfschunkserver.cfg [root@node2 mfs]# vim mfschunkserver.cfg MASTER_HOST = 10.0.0.5 ##修改此行值为MASTER IP [root@node2 mfs]#cp mfshdd.cfg.sample mfshdd.cfg [root@node2 mfs]#mkdir /data ##建立用来储存数据目录 [root@node2 mfs]#chown -R mfs:mfs /data/ [root@node2 mfs]#vim mfshdd.cfg ##该文件用来设置你将 Chunk Server 的哪一个目录共享出去给 Master Server进行管理。固然,虽然这里填写的是共享的目录,可是这个目录后面最好是一个单独的分区。 /data
##服务启动状态检测应与CHUNK SERVER1几乎相同
##CLINET部分,先检查fuse模块是否加载 [root@node2 bin]# lsmod | grep fuse fuse 87741 1 ##若是没有,modeprobe fuse 加载此模块若是在失败应该是内核版本太低,升级内核、 ##建立CLIENT 挂载目录 [root@node2 bin]#mkdire /mfsdata [root@node2 bin]#chown -R mfs:mfs /mfsdata/ ##挂载目录 [root@node2 bin]#/usr/local/mfs/bin/mfsmount /mfsdata -H 10.0.0.5
3、MFS功能测试
[root@node2 /]# cd /mfsdata/ [root@node2 mfsdata]# vim 111.txt wo shi 11111 ##切换到MASTER SERVER [root@node3 mfs]# vim /usr/local/mfs/var/mfs/changelog.0.mfs 89: 1509355991|SESADD(#10705800883749376268,1,16,0000,1001,1001,1001,1001,1,9,0,4294967295,167772192,/mfsdata):2 90: 1509356218|ACQUIRE(2,5) 91: 1509356218|ATTR(5,420,1001,1001,1509356218,1509356218,0,0) 92: 1509356229|ACCESS(1) 93: 1509356231|CREATE(1,.111.txt.swp,1,384,18,1001,1001,0):12 94: 1509356231|ACQUIRE(2,12) ##切换到LOG SERVER [root@node4 mfs]# vim changelog_ml.0.mfs 89: 1509355991|SESADD(#10705800883749376268,1,16,0000,1001,1001,1001,1001,1,9,0,4294967295,167772192,/mfsdata):2 90: 1509356218|ACQUIRE(2,5) 91: 1509356218|ATTR(5,420,1001,1001,1509356218,1509356218,0,0) 92: 1509356229|ACCESS(1) 93: 1509356231|CREATE(1,.111.txt.swp,1,384,18,1001,1001,0):12 94: 1509356231|ACQUIRE(2,12) 95: 1509356231|CREATE(1,.111.txt.swx,1,384,18,1001,1001,0):13 96: 1509356231|ACQUIRE(2,13) ##能够看到LOG SERVER已经把MASTER SERVER 记录备份到日志服务器上 ##在CLIENT上,还能够具体查看数据的副本数量,更多功能有兴趣本身能够查一下 [root@node2 mfsdata]# /usr/local/mfs/bin/mfsfileinfo /mfsdata/111.txt /mfsdata/111.txt: chunk 0: 0000000000000007_00000001 / (id:7 ver:1) copy 1: 10.0.0.31:9422 (status:VALID) copy 2: 10.0.0.32:9422 (status:VALID)
4、总结
从原理架构到实际搭建部署,不知道你们有没有发现一点,在MSTAER SERVER这个点不是有点像是单点,在实际生产环境中是尽可能容许单点的存在,特别是想在“调度器”这类角色的服务器上,他们的状态影响着整个服务器集群的状态和对外提供服务的好坏。虽然放置了一台日志服务器,能够从日志服务器拿备份的元数据作恢复,可是恢复的这段时间服务就要停掉吗??因此后面咱们要把MFS跟DRBD高可用结合起来,实现故障的自动切换。咳咳!!有点累!