admin

MooseFS分布式文件系统的注意事项和排错经验

admin 运维技术 2022-11-21 487浏览 0

MooseFS(简称MFS)是一款分布式文件系统,其运行机制和原理可以参考其官方网站,上对MooseFS的基本概念和部署安装也介绍过,对MooseFS不太了解的朋友们可以先自行研究一下。

本文是我自己在研究和使用MooseFS的过程中整理的一些注意事项和排错经验,写出来分享给大家,一同探讨。

一、有关“副本”

MFS语言是通过“副本”机制来保证文件的高可用,我们可以通过MFS的管理命令setglobal来设置文件的“副本”,这个值表示某个目录级别或文件级别的副本个数。

将“副本”设置为大于1的某个数字可以用多个数据服务器来进行冗余备份。当一个数据文件被保存为多个副本时,整个系统可以在有单台数据服务器故障时仍然提供正常服务。

对于一些比较重要的文件来讲,我们通常将“副本”设置为大于2的某个值,这将这些文件能够抵御多台数据服务器的崩溃。一般可用的副本数的设置应该是超过预期的无法访问的服务器的数量,在生产环节中一般设置为3(实际上同一单位时间内2台服务机宕机的机率为零),这时我建议大家可以根据实际情况,将chunkserserver数据数据服务器设置成一个大于或等于4的值。

在下面的MFS文件分布应用场景中,我们的chunkserver机器的数量等于4,当一台chunkserver数据服务器出现故障,不能被其他服务器访问时,其上的数据仍然会有另外的两份备份,仍然可以对提供数据的读写服务,此时并不会影响用户的访问。但是此时该数据的“副本”值大于当前的副本数目,于是数据服务器会将该数据同步到其他服务器中以满足要求的文件副本数量。这里有个特别需要注意的地方,就是可用的chunkserver数据服务器数量小于某个特定文件的“副本”值,此时需要的副本数量将无法被满足。类似,当可用的数据服务器数量等于文件的“副本”值时,如果数据服务器的容量已经达到100%,这时将不会再接受对大于“副本”值文件的同步需求。

当遇到以上这些情况时,我们就需要尽快的增加数据服务器来保存需求的文件副本。当我们增加一个新的数据服务器时,它可以在任意时间加入到系统中。新的空间容量将立即生效,并被用来保存新的数据,或者接收来自其他数据服务器的同步需求。我们可以通过MFS提供的管理工具mfsfileinfo来查询系统中某个文件的状态,从前判断其当前的副本数量与设置的“副本”值是否有差别,当然,我们也可以通过管理工具来修改“副本”值。

另外,在数据服务器中的数据是有版本信息的,当一个具有旧版本数据的数据服务器(比如下线了一段时间)重新连接到管理服务器时,它会使自己同步新版本的数据,并且将旧版本的数据删除来释放空间,从而避免数据的不一致情况发生。

有兴趣的朋友可以读一下MFS的源码,多了解下MFS的数据分布算法,这个由于不在本文的专业范畴之类,这个请大家自行研究。

二、DRBD+Heartbeat+mfsmaster实现高可用性

大家通过官网的MFS运行机制就应该能理解MFS元数据服务器的重要性,这时候我们可以用DRBD+Heartbeat双机来确保MFS的元数据服务器的高可用性。

DRBD的底层设备可以是单独的磁盘也可以是分区,这里建议大家用Raid1+0的分区来运行。

DRBD+Heartbeat+mfsmaster元服务器安装中的注意事项:

1、我们在配置DRBD时可能会遇到报错:

drbdadm create-md ha: exited with coolcode 40

这是由于DRBD认为底层设备已被占用,所以我们用dd命令破坏即可解决此问题。

2、Primary机器上可以先把DRBD启动起来,先挂载/drbd至目录下,然后

./configure --prefix=/drbd/mfs --with-default-user=mfs --with-default-group=mfs

注意:安装时候一定要记得带prefix=/drbd/mfs,把安装目录全部置于DRBD的挂载目录,这样方便以后不用去指定路径去挂载,Secondary机器上不需要执行这步,因为只有Primary机器出问题时Secondary机器才会真正生效,此时它也会凭Heartbeat定义脚本mfsmaster来自动挂载。

3、双机中的resource脚本内容为:

centos1.cn7788.com IPaddr::192.168.11.30/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/drbd::ext3  mfsmaster

mfsmaster脚本内容为:

#!/bin/bash
 
  case "$1" in
   'start')
           drbdadm primary r0
           mount /dev/drbd0 /drbd
           /drbd/mfs/sbin/mfsmaster start
        ;;
   'stop')
           /drbd/mfs/sbin/mfsmaster -s 
           umount /drbd
           drbdadm  secondary r0      
           ;;
   'restart')
        ;;
   *)
        echo "Usage: $0 { start |  stop | restart }"
        ;;
esac
exit 0

注意:Heartbeat默认采用的是LSB(Linux Standard Base)风格,所以要保证mfsmaster脚本能接收start、stop、status三个参数,大家可以仔细看看,mfsstart启动和关闭的过程正好相反,而start过程正好是手动启动MFS分布式文件系统的过程。

三、有关fuse和uid、gid设置

MFS中的mastermfs元数据服务器是不需要fuse的,所以在这二台机器上我们都不需要安装fuse。我看网上许多文章都在mfsmaster机器上安装fuse,其实这步是多余的,不需要操作。

为了避免在mfs用户及用户组上出问题,二台机器的mfs的uid和gid建议配置成一样,建少出问题机率,命令如下所示:

groupadd -g 65534 mfs
useradd -u 65534 -g mfs -s /bin/false mfs

四、网络相关

MFS跟NFS一样,对网络的依赖非常大,建议在内网环境中做好监控和上线前的测试工作,在正式上线时我们要合理分配带宽资源,优化网络环境,保证MFS分布式文件系统的网络稳定。

五、MFS分布式文件系统在启动和运中的排错

1. 非正常关闭管理服务器进程导致启动失败,启动过程中生成如下报错日志:

错误日志一:

working directory: /drbd/mfs
lockfile created and locked
initializing mfsmaster modules ...
loading sessions ... ok
sessions file has been loaded
exports file has been loaded
loading metadata ...
can't open metadata file
if this is new instalation then rename metadata.mfs.empty as metadata.mfs
init: file system manager failed !!!
error occured during initialization - exiting

以上错误提示将metadata.mfs.empty 文件重命名为metadata.mfs,解决方法如下所示:

cd /drbd/mfs/var/mfs
mv metadata.mfs.empty metadata.mfs

错误日志二:

当执行完上述命令再次启动进程后,会有如下错误日志生成

backup file is newer than current file - please check it manually - propably  you should run metarestore
init: file system manager failed !!!
error occured during initialization - exiting

可以执行下列命令自动修复元数据文件,命令如下所示:

/drbd/mfs/sbin/mfsmetarestore -a

作者简介:余洪春(博客,微博),网名抚琴煮酒,从事系统管理和系统集成多年。《构建高可用Linux服务器》一书作者。

责任编辑:yangsai

继续浏览有关 分布式 的文章
发表评论