分布式文件系统之MooseFS----部署

转自http://nolinux.blog.51cto.com/4824967/1601385

1、架构规划

       由于在整个MooseFS的架构中,默认是一台 Master,一台 Metalogger ,三台 Chunk Servers。因此,在本次实施规划当中,我们就使用6台虚拟机来进行整个架构的实施部署。

       其中 IP地址 的规划情况如下:

元数据服务器    MooseFS-master                192.168.3.71
备份服务器     MooseFS-log                  192.168.3.72
数据存储服务器   MooseFS-chunk1                192.168.3.73
数据存储服务器   MooseFS-chunk2                192.168.3.74
数据存储服务器   MooseFS-chunk3                192.168.3.75
客户端           mfs-client                  192.168.3.45

由于这次测试空闲服务器不够,因此采用了虚拟机进行测试(好蛋疼)。但是在实际生产环境中,针对每个组件的服务器选型问题,还是必须要注意的。这里提供如下几条建议:

1、Master Server

       由于 Master Server 控制着整个 MooseFS 中的各个组件,并且负责对外提供服务,因此我们一定需要保证 Master Server 处于非常稳定的状态。比如,针对 Master Server采用双电源双路配置,多块磁盘使用RAID1或RAID10,进行冗余。

       前面也提到,Master Server 将所有访问的元数据信息都放在内存当中,提供用户访问。因此,当文件数量增加的时候,内存使用量也会增加。根据官方的数据,100万个文件chunk信息,大概需要300M的内存空间来进行。对于磁盘来讲,Master Server 对磁盘的使用量不是很大,这个取决于所用的文件和chunk块的数目(记录在主元数据文件)以及对文件作出操作的数量(记录在元数据更改日志),一般情况下 20G 可以用来存储信息 2500 万个文件变更记录长达50小时。由此看来,作为Master Server 内存量够大才是重中之重。

2、Metalogger Server

       在 MooseFS 的设计中,虽然 Metalogger Server 只是用来收集 MooseFS 主服务器的元数据(文件更改的信息的变化)的备份,对硬件的要求不应该高于主服务器的备份。但是需要注意的是,如果在Master Server没有做高可用的情况下,主服务器宕机之后,我们是需要启用Metalogger Server 来顶替主服务器的。因此,从这方面考虑,Metalogger Server 至少也是和 Master Server 的配置相同的,这点切记!

3、Chunk Server

       针对 Chunk Server,它是真正存储数据的载体。因此,我们对它的要求就简单粗暴了很多,只要保障硬盘的性能即可。如果是普通的业务,可以选择多块盘做RAID5即可,当然RAID0或RAID10都是可以的。

       需要注意的是,由于 MooseFS 的默认负载均衡算法的问题,我建议所有 Chunk Server 的磁盘大小保持一致。这样子,我们才能保证 MooseFS 在使用过程中,各个 Chunk 节点的数据使用量是大致一致的。否则,磁盘容量大的 Chunk Server 使用量会加大,而磁盘容量小的 Chunk Server 的使用量会变小。切记,切记!

       当然,如果公司员工有能力的话,也可以对 MooseFS 的负载均衡算法中每次对carry 变量的增加算法这一部分进行改进,来避免默认算法的缺点,使存储数据能够均衡分布在各个 Chunk Server 上。

2、部署 Master Server

1、编译参数介绍

       我们已经知道 MooseFS是由 4 个组件组成的,但是 MooseFS 提供的安装包却只有一个,因此针对每个组件的不同设置,都需要我们在编译之前的配置阶段进行配置,比如安装 Master Server 的时候,我们需要使用 --disable-mfschunkserver和--disable-mfsmount参数;安装 Chunk Server 的时候,我们需要使用 --disable-mfsmaster 参数;安装 Client 时,我们需要使用--disable-mfsmaster和--disable-mfschunkserver参数;如果是安装 Metalogger Server ,我们使用和安装 Master Server时的参数一样即可。

       下面,在部署 Master Server 之前,在详细介绍下 MooseFS 安装包的几个关键的配置参数:

--disable-mfsmaster                  # 不创建成管理服务器(用于纯节点的安装)
--disable-mfschunkserver             # 不创建成数据存储chunkserver服务器 
--disable-mfsmount                   # 不创建mfsmount和mfstools(如果用开发包安装,他们会被默认创建的)   
--enable-mfsmount                    # 确定安装mfsmount和mfstools(如果     
--prefix=DIRECTORY                   # 锁定安装目录(默认是/usr/local)  
--sysconfdir=DIRECTORY               # 选择配置文件目录(默认是${prefix}/etc))   
--localstatedir=DIRECTORY            # 选择变量数据目录(默认是${prefix}/var,MFS元数据被存储在mfs的子目录下,默认是${prefix}/var/mfs )     
--with-default-user                  # 运行守护进程的用户,如果配置文件中没有设定用户,默认为nobody用户   
--with-default-group                 # 运行守护进程的用户组,如果配置文件中没有设定用户组,默认为nogroup用户组

2、安装 Master Server

       当我们安装主服务器mfs master时,由于我们的目的是安装主服务器,因此在配置过程中(./configure),可以选择加参数取消安装 Chunk server(使用--disable-mfschunkserver)以及 MooseFS 客户端(使用--disable-mfsmount)。

       下面,我列出安装 MooseFS 主控服务器 Master Server 的详细步骤:

[root@MooseFS-master ~]# yum install zlib-devel -y
[root@MooseFS-master ~]# groupadd -g 1000 mfs
[root@MooseFS-master ~]# useradd -u 1000 -g mfs -s /sbin/nologin mfs
[root@MooseFS-master ~]# wget http://moosefs.org/tl_files/mfscode/mfs-1.6.27-5.tar.gz
[root@MooseFS-master ~]# tar xf mfs-1.6.27-5.tar.gz 
[root@MooseFS-master ~]# cd mfs-1.6.27
[root@MooseFS-master mfs-1.6.27]# ./configure --prefix=/usr/local/mfs-1.6.27 --with-default-user=mfs --with-default-group=mfs  --disable-mfschunkserver --disable-mfsmount
[root@MooseFS-master mfs-1.6.27]# make && make install
[root@MooseFS-master mfs-1.6.27]# ln -s /usr/local/mfs-1.6.27/ /usr/local/mfs
[root@MooseFS-master mfs-1.6.27]# ll -d /usr/local/mfs
lrwxrwxrwx 1 root root 22 Jul  9 15:41 /usr/local/mfs -> /usr/local/mfs-1.6.27/

以上就是 MooseFS 的 Master Server 的安装过程。Master Server 安装成功以后,会在安装目录 /usr/local/mfs-1.6.27 下生成几个目录文件。其中etc目录为mfs配置文件目录,里面有很多默认配置文件样例(结尾后缀为*.dist),后续我们将借用这些样例作为 MFS 服务器的目标配置文件。

       这里来看下每个目录的用途:

[root@MooseFS-master ~]# ll /usr/local/mfs/
total 16
drwxr-xr-x 3 root root 4096 Jul  9 15:41 etc    #MFS 的配置文件目录,里面放了很多模板文件
drwxr-xr-x 2 root root 4096 Jul  9 15:41 sbin   #MFS 命令路径
drwxr-xr-x 4 root root 4096 Jul  9 15:41 share  #MFS 帮助文件目录
drwxr-xr-x 3 root root 4096 Jul  9 15:41 var    #MFS 数据及日志目录,例如:metadata 数据

提示:etc和var需要备份。

注意:

       etc和var目录里面存放的是配置文件和MFS的数据结构信息,因此请及时做好备份,防止灾难损毁。后面做了 Master Server双机之后,就可以解决这个问题。

3、配置 Master Server

       上面简单看了 MooseFS 的目录结构,其中 Master Server 的配置文件是位于/MooseFS根目录/etc 目录下。在该目录下有很多模板配置文件,包括 Master,Metalogger、ChunkServer等,有关 Master 的配置文件主要有两个,一个是 mfsmaster.cfg,另一个是 mfsexports.cfg。其中,mfsmaster.cfg 是主配置文件,mfsexports.cfg 用来指定那些客户端主机可以远程挂载 MooseFS 文件系统以及赋予挂载客户端什么样的访问权限。

       现在,我们去掉 Master 相关的两个配置文件的注释。

       需要注意的是,这里一定要使用 cp,而不是 mv。这样,在操作之前保留原文件,一方面方便更改后对比变化,另一方面也修改出错后的回滚。

       下面列出配置步骤以及每个配置文件的详解!

[root@MooseFS-master ~]# cd /usr/local/mfs/etc/mfs/
[root@MooseFS-master mfs]# ls
mfsexports.cfg.dist  mfsmaster.cfg.dist  mfsmetalogger.cfg.dist  mfstopology.cfg.dist
[root@MooseFS-master mfs]# cp mfsexports.cfg.dist mfsexports.cfg
[root@MooseFS-master mfs]# cp mfsmaster.cfg.dist mfsmaster.cfg

#这里我们先来看下主配置文件mfsmaster.cfg
[root@MooseFS-master ~]# cat /usr/local/mfs/etc/mfs/mfsmaster.cfg
# 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-1.6.27/etc/mfs/mfsexports.cfg   # 被挂载目录及其权限控制文件的存放路径
# TOPOLOGY_FILENAME = /usr/local/mfs-1.6.27/etc/mfs/mfstopology.cfg # mfstopology.cfg文件的存放路径
# DATA_PATH = /usr/local/mfs-1.6.27/var/mfs # 数据存放路径,此目录下大致有三类文件,changelog,sessions和stats;
# BACK_LOGS = 50             # metadata的改变log文件数目(默认是 50)
# BACK_META_KEEP_PREVIOUS = 1     # metadata的默认保存份数(默认为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)
# MATOCL_LISTEN_HOST = *          # 用于客户端挂接连接的IP地址(默认是*,代表任何IP)
# MATOCL_LISTEN_PORT = 9421       # 用于客户端挂接连接的端口地址(默认是9421)
# CHUNKS_LOOP_MAX_CPS = 100000    # chunks的最大回环频率(默认是:100000秒)
# CHUNKS_LOOP_MIN_TIME = 300      # chunks的最小回环频率(默认是:300秒)
# CHUNKS_SOFT_DEL_LIMIT = 10      # 一个chunkserver中soft最大的可删除数量为10个
# CHUNKS_HARD_DEL_LIMIT = 25      # 一个chuankserver中hard最大的可删除数量为25个
# CHUNKS_WRITE_REP_LIMIT = 2      # 在一个循环里复制到一个chunkserver的最大chunk数目(默认是1)
# CHUNKS_READ_REP_LIMIT = 10      # 在一个循环里从一个chunkserver复制的最大chunk数目(默认是5)
# ACCEPTABLE_DIFFERENCE = 0.1     # 每个chunkserver上空间使用率的最大区别(默认为0.01即1%)
# SESSION_SUSTAIN_TIME = 86400    # 客户端会话超时时间为86400秒,即1天
# REJECT_OLD_CLIENTS = 0          # 弹出低于1.6.0的客户端挂接(0或1,默认是0)
 
# deprecated: 
# CHUNKS_DEL_LIMIT - use CHUNKS_SOFT_DEL_LIMIT instead 
# LOCK_FILE - lock system has been changed, and this option is used only to search for old lockfile

下面附上官方地址:http://moosefs.com/Content/Downloads/moosefs-users-manual.pdf

该配置文件默认全部都为注释。mfs官方默认这样规定的,每一个注释的配置都是mfs此项配置的默认值。其实,我们linux中很多配置文件的设计风格都是这样子的,比如sshd_config.如果打算更改这些配置文件中某些项的参数,只需要取消注释,并且更改对应的参数即可。

       针对master来讲,mfsmaster.cfg的默认配置无需更改即可投入使用。

       下面,就是权限控制配置文件mfsexports.cfg。

       该配置文件制定了哪些客户端可以远程挂接MFS文件系统,以及授予挂载客户端什么样的访问权限。例如,我们制定只有172.16.0.0/24网段的主机可以读写模式访问MFS的整个共享结构资源(/)。在配置文件mfsexports.cfg中写入如下信息即可。

[root@MooseFS-master ~]# cat /usr/local/mfs/etc/mfs/mfsexports.cfg
*                       /       rw,alldirs,mapall=mfs:mfs,password=centos
*            .          rw          # 如果需要使用 moosefs的回收站功能,请开启此行。如果不使用,关闭即可

这里,我列出该文件的配置规范:

       mfsexports.cfg 文件中,每一个条目就是一个配置规则,而每一个条目又分为三个部分,其中第一部分是mfs客户端的ip地址或地址范围,第二部分是被挂载的目录,第三个部分用来设置mfs客户端可以拥有的访问权限。

第一部分:mfs客户端的ip地址或地址范围

地址可以指定的几种表现形式:

    *                  所有的 I P 地址
    n.n.n.n            单个 I P 地址
    n.n.n.n/b          I P 网络地址/位数掩码
    n.n.n.n/m.m.m.m    I P 网络地址/子网掩码
    f.f.f.f-t.t.t.t    I P 段

第二部分:被挂载的目录

目录部分需要注意两点:

    /       标识MooseFS根
    .       表示MFSMETA文件系统

第三部分:设置mfs客户端可以拥有的访问权限

权限部分:

    ro        只读模式共享
    rw        读写模式共享
    alldirs   允许挂载任何指定的子目录
    maproot   映射为root,还是指定的用户
    password  指定客户端密码

OK,以上两个配置文件配置完毕之后,我们还需要注意一个文件。在 Master Server 首次安装之后,会在 /usr/local/mfs/var/mfs/ 目录下生成一个名为 metadata.mfs.empty 的元数据metadata文件,该文件默认是为空的。(当你整个MooseFS配置好之后,它就有数据了)

       Master Server 的运行必须有metadata.mfs,而这个文件就是从metadata.mfs.empty更名而来的。当然,这个更名操作需要我们自己手动来完成。操作如下:

[root@MooseFS-master ~]# cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs

4、启动 Master Server

       在 MooseFS 的架构中,Master Server 是不依附于其它几个组件的,它可以单独启动。但是需要注意,其它组件必须要等 Master Server 起来之后才能启动!切记!!!

       在通过上面的简单配置之后,我们就可以启动 Master Server 了!

      下面列出启动和检查过程。

[root@MooseFS-master ~]# /usr/local/mfs/sbin/mfsmaster start
working directory: /usr/local/mfs-1.6.27/var/mfs
lockfile created and locked
initializing mfsmaster modules ...
loading sessions ... file not found
if it is not fresh installation then you have to restart all active mounts !!!
exports file has been loaded
mfstopology configuration file (/usr/local/mfs-1.6.27/etc/mfstopology.cfg) not found - using defaults
loading metadata ...
create new empty filesystemmetadata file has been loaded
no charts data file - initializing empty charts
master <-> metaloggers module: listen on *:9419        #监听在9419,9420,9421
master <-> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly

下面进行检查,针对 Master Server 的启动检查主要有3个方面,第一看进程,第二看端口,第三看日志

[root@MooseFS-master ~]# ps aux |grep mfs |grep -v grep
mfs       6607  0.2  9.3 108632 94544 ?        S<   15:55   0:00 /usr/local/mfs/sbin/mfsmaster start
[root@MooseFS-master ~]# netstat -tunlp |grep mfs
tcp        0      0 0.0.0.0:9419                0.0.0.0:*                   LISTEN      6607/mfsmaster      
tcp        0      0 0.0.0.0:9420                0.0.0.0:*                   LISTEN      6607/mfsmaster      
tcp        0      0 0.0.0.0:9421                0.0.0.0:*                   LISTEN      6607/mfsmaster

查看master 的日志情况

[root@MooseFS-master ~]# tail /var/log/messages 
Jul  9 15:55:11 MooseFS-master mfsmaster[6607]: set uid to 1000
Jul  9 15:55:11 MooseFS-master mfsmaster[6607]: exports file has been loaded
Jul  9 15:55:11 MooseFS-master mfsmaster[6607]: mfstopology configuration file (/usr/local/mfs-1.6.27/etc/mfstopology.cfg) not found - network topology not defined
Jul  9 15:55:11 MooseFS-master mfsmaster[6607]: create new empty filesystem
Jul  9 15:55:11 MooseFS-master mfsmaster[6607]: no charts data file - initializing empty charts
Jul  9 15:55:11 MooseFS-master mfsmaster[6607]: master <-> metaloggers module: listen on *:9419
Jul  9 15:55:11 MooseFS-master mfsmaster[6607]: master <-> chunkservers module: listen on *:9420
Jul  9 15:55:11 MooseFS-master mfsmaster[6607]: main master server module: listen on *:9421
Jul  9 15:55:11 MooseFS-master mfsmaster[6607]: open files limit: 5000

5、停止 Master Server

         Master Server 服务和其它普通服务不一样,它千万不能使用 kill -9 去强制杀掉进程。每次非正常关闭服务,都需要使用 MooseFS 自带的恢复工具进行数据恢复,非常悲剧。因此,安全的关闭 Master Server 是非常重要。

[root@MooseFS-master ~]# /usr/local/mfs/sbin/mfsmaster stop
sending SIGTERM to lock owner (pid:6607)
waiting for termination ... terminated
[root@MooseFS-master ~]# tail /var/log/messages 
Jul  9 15:59:03 MooseFS-master mfsmaster[6621]: set gid to 1000
Jul  9 15:59:03 MooseFS-master mfsmaster[6621]: set uid to 1000
Jul  9 15:59:03 MooseFS-master mfsmaster[6607]: terminate signal received
Jul  9 15:59:03 MooseFS-master mfsmaster[6607]: main master server module: closing *:9421
Jul  9 15:59:03 MooseFS-master mfsmaster[6607]: master <-> chunkservers module: closing *:9420
Jul  9 15:59:03 MooseFS-master mfsmaster[6607]: master <-> metaloggers module: closing *:9419

6、扫尾操作

a、配置环境变量

        为了方便操作 MooseFS,我们需要把他的sbin目录加入到系统的PATH变量中去。

[root@MooseFS-master ~]# echo '# add moosefs to the path variable' >> /etc/profile 
[root@MooseFS-master ~]# echo 'PATH=/usr/local/mfs/sbin/:$PATH' >> /etc/profile
[root@MooseFS-master ~]# tail -2 /etc/profile
# add moosefs to the path variable
PATH=/usr/local/mfs/sbin/:$PATH
[root@MooseFS-master ~]# source /etc/profile

b、配置开机自启动

        开机自启动的目的,这里就不多解释了。

[root@MooseFS-master ~]# echo '# Configure the mfsmaster service startup' >> /etc/rc.local
[root@MooseFS-master ~]# echo '/usr/local/mfs/sbin/mfsmaster start' >> /etc/rc.local
[root@MooseFS-master ~]# tail -2 /etc/rc.local 
# Configure the mfsmaster service startup
/usr/local/mfs/sbin/mfsmaster start

以上,就是 Master Server 部署的全部操作。

3、部署 Metalogger Server

1、安装 Metalogger Server

       前面已经介绍了,Metalogger Server 是 Master Server 的备份服务器。因此,Metalogger Server 的安装步骤和 Master Server 的安装步骤相同。并且,最好使用和 Master Server 配置一样的服务器来做 Metalogger Server。这样,一旦主服务器master宕机失效,我们只要导入备份信息changelogs到元数据文件,备份服务器可直接接替故障的master继续提供服务。

       这里仅列出安装步骤:

[root@MooseFS-log ~]# yum install zlib-devel -y
[root@MooseFS-log ~]# groupadd -g 1000 mfs
[root@MooseFS-log ~]# useradd -u 1000 -g mfs mfs -s /sbin/nologin
[root@MooseFS-log ~]# tar xf mfs-1.6.27-5.tar.gz 
[root@MooseFS-log ~]# cd mfs-1.6.27
[root@MooseFS-log mfs-1.6.27]# ./configure --prefix=/usr/local/mfs-1.6.27 --with-default-user=mfs --with-default-group=mfs  --disable-mfschunkserver --disable-mfsmount
[root@MooseFS-log mfs-1.6.27]# make && make install
[root@MooseFS-log ~]# ln -s /usr/local/mfs-1.6.27 /usr/local/mfs 
[root@MooseFS-log ~]# ll -d /usr/local/mfs 
lrwxrwxrwx 1 root root 21 Jul  9 16:06 /usr/local/mfs -> /usr/local/mfs-1.6.27

2、配置 Metalogger Server

       虽然,Metalogger Server 的安装步骤和 Master Server 一样,但是配置文件肯定是有所差别的。这里将介绍,如何配置Metalogger Server。

[root@MooseFS-log ~]# cd /usr/local/mfs/etc/mfs/
[root@MooseFS-log mfs]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
[root@MooseFS-log mfs]# cat mfsmetalogger.cfg
# WORKING_USER = mfs
# WORKING_GROUP = mfs
# SYSLOG_IDENT = mfsmetalogger
# LOCK_MEMORY = 0
# NICE_LEVEL = -19

# DATA_PATH = /usr/local/mfs-1.6.27/var/mfs

# BACK_LOGS = 50
# BACK_META_KEEP_PREVIOUS = 3
# META_DOWNLOAD_FREQ = 24    # 元数据备份文件下载请求频率,默认为24小时,即每隔一天从元数据服务器下载一个metadata.mfs.back文件。当元数据服务器关闭或者出故障时,metadata.mfs.back文件将小时,那么要恢复整个mfs,则需要从metalogger服务器取得该文件。请注意该文件,它与日志文件在一起,才能够恢复整个被损坏的分布式文件系统。

# MASTER_RECONNECTION_DELAY = 5

MASTER_HOST = 192.168.3.71    # 这里是需要连接的 mfs master server 的地址
# MASTER_PORT = 9419          # 这里是需要连接的 mfs master server 的端口

# MASTER_TIMEOUT = 60

# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfsmetalogger.lock

这个文件中需要修改的是MASTER_HOST变量,这个变量的值是 Master Server 的 IP 地址。如果对 Master Server 做了 host 解析也可以不改任何内容。

       这里需要将它修改为如下参数:

MASTER_HOST = 192.168.3.71       # 这里是需要连接的 mfs master server 的地址

3、启动 Metalogger Server

启动 Metalogger Server 之前,一定要确保 Master server 的服务是正常启动的。

[root@MooseFS-log mfs]# nc -w 2 192.168.3.71 -z 9419         从输出可以看到,MooseFS-master已经正常启动
Connection to 192.168.3.71 9419 port [tcp/*] succeeded!
[root@MooseFS-log mfs]# /usr/local/mfs/sbin/mfsmetalogger start    # 启动 Metalogger Server
working directory: /usr/local/mfs-1.6.27/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly
[root@MooseFS-log mfs]# netstat -lanpt |grep meta        #查看链接情况
tcp        0      0 192.168.3.72:40398          192.168.3.71:9419           ESTABLISHED 6323/mfsmetalogger  

#查看日志
[root@MooseFS-log mfs]# tail /var/log/messages 
Jul  9 16:13:26 MooseFS-log mfsmetalogger[6323]: set uid to 1000
Jul  9 16:13:26 MooseFS-log mfsmetalogger[6323]: connecting ...
Jul  9 16:13:26 MooseFS-log mfsmetalogger[6323]: open files limit: 5000
Jul  9 16:13:26 MooseFS-log mfsmetalogger[6323]: connected to Master
Jul  9 16:13:26 MooseFS-log mfsmetalogger[6323]: metadata downloaded 95B/0.001731s (0.055 MB/s)
Jul  9 16:13:26 MooseFS-log mfsmetalogger[6323]: changelog_0 downloaded 0B/0.000001s (0.000 MB/s)
Jul  9 16:13:26 MooseFS-log mfsmetalogger[6323]: changelog_1 downloaded 0B/0.000001s (0.000 MB/s)
Jul  9 16:13:26 MooseFS-log mfsmetalogger[6323]: sessions downloaded 10B/0.000305s (0.033 MB/s)
Jul  9 16:14:00 MooseFS-log mfsmetalogger[6323]: sessions downloaded 10B/0.000583s (0.017 MB/s)
Jul  9 16:15:00 MooseFS-log mfsmetalogger[6323]: sessions downloaded 10B/0.000595s (0.017 MB/s)

#在MooseFS-master上检查
[root@MooseFS-master ~]# netstat -anlpt |grep 9419
tcp        0      0 192.168.3.71:9419           192.168.3.72:40398          ESTABLISHED 6662/mfsmaster

我们可以看到Metalogger Server已经和Master Server的9419端口建立了长连接

       另外,在上面的日志中,我们可以看到他在下载一些文件,这些文件就是之前介绍过的Master Server上的文件,我们可以在以下目录看到这些文件。

[root@MooseFS-log ~]# ll /usr/local/mfs/var/mfs/
total 12
-rw-r----- 1 mfs  mfs   0 Jul  9 16:13 changelog_ml_back.0.mfs
-rw-r----- 1 mfs  mfs   0 Jul  9 16:13 changelog_ml_back.1.mfs
-rw-r--r-- 1 root root  8 Jul  9 16:06 metadata.mfs.empty
-rw-r----- 1 mfs  mfs  95 Jul  9 16:13 metadata_ml.mfs.back
-rw-r----- 1 mfs  mfs  10 Jul  9 16:17 sessions_ml.mfs

最后,在贴出 Metalogger Server 运行时的日志输出情况:

[root@MooseFS-log ~]# tail /var/log/messages 
Jul  9 16:13:26 MooseFS-log mfsmetalogger[6323]: connected to Master
Jul  9 16:13:26 MooseFS-log mfsmetalogger[6323]: metadata downloaded 95B/0.001731s (0.055 MB/s)
Jul  9 16:13:26 MooseFS-log mfsmetalogger[6323]: changelog_0 downloaded 0B/0.000001s (0.000 MB/s)
Jul  9 16:13:26 MooseFS-log mfsmetalogger[6323]: changelog_1 downloaded 0B/0.000001s (0.000 MB/s)
Jul  9 16:13:26 MooseFS-log mfsmetalogger[6323]: sessions downloaded 10B/0.000305s (0.033 MB/s)
Jul  9 16:14:00 MooseFS-log mfsmetalogger[6323]: sessions downloaded 10B/0.000583s (0.017 MB/s)
Jul  9 16:15:00 MooseFS-log mfsmetalogger[6323]: sessions downloaded 10B/0.000595s (0.017 MB/s)
Jul  9 16:16:00 MooseFS-log mfsmetalogger[6323]: sessions downloaded 10B/0.000458s (0.022 MB/s)
Jul  9 16:17:00 MooseFS-log mfsmetalogger[6323]: sessions downloaded 10B/0.000392s (0.026 MB/s)
Jul  9 16:18:00 MooseFS-log mfsmetalogger[6323]: sessions downloaded 10B/0.000627s (0.016 MB/s)

4、关闭 Metalogger Server

[root@MooseFS-log ~]# /usr/local/mfs/sbin/mfsmetalogger stop
sending SIGTERM to lock owner (pid:6323)
waiting for termination ... terminated

5、扫尾操作

a、配置全局变量

[root@MooseFS-log ~]# echo '# add moosefs to the path variable' >> /etc/profile 
[root@MooseFS-log ~]# echo 'PATH=/usr/local/mfs/sbin/:$PATH' >> /etc/profile
[root@MooseFS-log ~]# tail -2 /etc/profile
# add moosefs to the path variable
PATH=/usr/local/mfs/sbin/:$PATH
[root@MooseFS-log ~]# source /etc/profile

b、配置开机自启动

[root@MooseFS-log ~]# echo '# Configure the metalogger service startup' >> /etc/rc.local 
[root@MooseFS-log ~]# echo '/usr/local/mfs/sbin/mfsmetalogger start' >> /etc/rc.local
[root@MooseFS-log ~]# tail -2 /etc/rc.local
# Configure the metalogger service startup
/usr/local/mfs/sbin/mfsmetalogger start

4、部署 Chunk Servers

1、安装 Chunk Servers

       数据存储服务器也被称为 Chunk Server。在 MooseFS 文件系统中,每个 Chunk Server 的配置是完全相同的。因此,这里我们仅以一台 Chunk Server 的安装为例进行演示,其它两台的安装步骤这里不再复述。

[root@MooseFS-chunk1 ~]# yum install zlib-devel gcc gcc-* make -y
[root@MooseFS-chunk1 ~]# groupadd -g 1000 mfs
[root@MooseFS-chunk1 ~]# useradd -u 1000 -g mfs mfs -s /sbin/nologin
[root@MooseFS-chunk1 ~]# tar xf mfs-1.6.27-5.tar.gz 
[root@MooseFS-chunk1 ~]# cd mfs-1.6.27
[root@MooseFS-chunk1 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs-1.6.27 --with-default-user=mfs --with-default-group=mfs  --disable-mfsmaster --disable-mfsmount
[root@MooseFS-chunk1 mfs-1.6.27]# make && make install
[root@MooseFS-chunk1 mfs-1.6.27]# ln -s /usr/local/mfs-1.6.27 /usr/local/mfs 
[root@MooseFS-chunk1 mfs-1.6.27]# ll -d /usr/local/mfs 
lrwxrwxrwx 1 root root 21 Jul  9 16:34 /usr/local/mfs -> /usr/local/mfs-1.6.27

2、配置 Chunk Servers

       配置 Chunk Server 需要两个配置文件,分别是 mfschunkserver.cfg 和 mfshdd.cfg 。其中,mfschunkserver.cfg 是主配置文件,而 mfshdd.cfg 是服务器用来分配给 MFS 使用的空间的配置文件,最好是一个单独的磁盘或者一个raid卷,最低要求是一个分区。

       在每个mfs chunk server 上的配置及操作如下:

[root@MooseFS-chunk1 ~]# cd /usr/local/mfs/etc/mfs/
[root@MooseFS-chunk1 mfs]# cp mfschunkserver.cfg.dist mfschunkserver.cfg
[root@MooseFS-chunk1 mfs]# cp mfshdd.cfg.dist mfshdd.cfg
[root@MooseFS-chunk1 mfs]# grep -v '^#$' mfschunkserver.cfg
# WORKING_USER = mfs
# WORKING_GROUP = mfs
# SYSLOG_IDENT = mfschunkserver
# LOCK_MEMORY = 0
# NICE_LEVEL = -19

# DATA_PATH = /usr/local/mfs-1.6.27/var/mfs

# MASTER_RECONNECTION_DELAY = 5

# BIND_HOST = *
MASTER_HOST = 192.168.3.71        # 该地址为 Master Server 的IP地址或者主机名
# MASTER_PORT = 9420

# MASTER_TIMEOUT = 60

# CSSERV_LISTEN_HOST = *
# CSSERV_LISTEN_PORT = 9422      # 该端口用于与其它chunk server之间的通信,主要是数据复制

# HDD_CONF_FILENAME = /usr/local/mfs-1.6.27/etc/mfs/mfshdd.cfg
# HDD_TEST_FREQ = 10

# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfschunkserver.lock
# BACK_LOGS = 50
# CSSERV_TIMEOUT = 5

在常规的使用过程中,我们只需要修改一个 MASTER_HOST参数,将该参数设置为我们 Master Server 的IP地址或者主机名即可。

配置mfshdd.cfg主配置文件

       mfshdd.cfg该文件用来设置你将 Chunk Server 的哪个目录共享出去给 Master Server进行管理。当然,虽然这里填写的是共享的目录,但是这个目录后面最好是一个单独的分区。分区的相关操作,这里就不占篇幅了。

[root@MooseFS-chunk1 ~]# mkdir /mfsdata
[root@MooseFS-chunk1 ~]# chown -R mfs:mfs /mfsdata/            #该目录mfs用户需要有写权限
[root@MooseFS-chunk1 ~]# vim /usr/local/mfs/etc/mfs/mfshdd.cfg
/mfsdata            #交给MooseFS-master管理的分区

3、启动 Chunk Server

       和 Metalogger Server 一样,在启动 chunk servers之前,必须要先确保 Master Server 的服务是正常启动的,否则启动会报错。

[root@MooseFS-chunk1 ~]# nc -w 2 192.168.3.71 -z 9420
Connection to 192.168.3.71 9420 port [tcp/*] succeeded!
[root@MooseFS-chunk1 ~]# /usr/local/mfs/sbin/mfschunkserver start
working directory: /usr/local/mfs-1.6.27/var/mfs
lockfile created and locked
initializing mfschunkserver modules ...
hdd space manager: path to scan: /mfsdata/
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@MooseFS-chunk1 ~]# netstat -lanpt |grep 9420
tcp        0      0 192.168.3.73:54316          192.168.3.71:9420           ESTABLISHED 26923/mfschunkserve
[root@MooseFS-chunk1 ~]# tail /var/log/messages 
Jul  9 16:48:21 MooseFS-client1 mfschunkserver[26892]: closing *:9422
Jul  9 16:48:34 MooseFS-client1 mfschunkserver[26923]: set gid to 1000
Jul  9 16:48:34 MooseFS-client1 mfschunkserver[26923]: set uid to 1000
Jul  9 16:48:34 MooseFS-client1 mfschunkserver[26923]: hdd space manager: folder /mfsdata/ will be scanned
Jul  9 16:48:34 MooseFS-client1 mfschunkserver[26923]: main server module: listen on *:9422
Jul  9 16:48:34 MooseFS-client1 mfschunkserver[26923]: connecting ...
Jul  9 16:48:34 MooseFS-client1 mfschunkserver[26923]: stats file has been loaded
Jul  9 16:48:34 MooseFS-client1 mfschunkserver[26923]: open files limit: 10000
Jul  9 16:48:34 MooseFS-client1 mfschunkserver[26923]: connected to Master
Jul  9 16:48:34 MooseFS-client1 mfschunkserver[26923]: scanning folder /mfsdata/: complete (0s)

查看 Master Server 上的变化:

[root@MooseFS-master ~]# tail /var/log/messages 
Jul  9 16:43:22 MooseFS-master mfsmaster[6662]: connection with CS(192.168.3.73) has been closed by peer
Jul  9 16:43:22 MooseFS-master mfsmaster[6662]: chunkserver disconnected - ip: 192.168.3.73, port: 0, usedspace: 0 (0.00 GiB), totalspace: 0 (0.00 GiB)
Jul  9 16:46:41 MooseFS-master kernel: ip_tables: (C) 2000-2006 Netfilter Core Team
Jul  9 16:48:34 MooseFS-master mfsmaster[6662]: chunkserver register begin (packet version: 5) - ip: 192.168.3.73, port: 9422
Jul  9 16:48:34 MooseFS-master mfsmaster[6662]: chunkserver register end (packet version: 5) - ip: 192.168.3.73, port: 9422, usedspace: 0 (0.00 GiB), totalspace: 0 (0.00 GiB)

4、关闭 Chunk Server

[root@MooseFS-chunk1 ~]# /usr/local/mfs/sbin/mfschunkserver stop
sending SIGTERM to lock owner (pid:26923)
waiting for termination ... terminated
[root@MooseFS-chunk1 ~]# tail /var/log/messages 
Jul  9 16:51:26 MooseFS-client1 mfschunkserver[26955]: set gid to 1000
Jul  9 16:51:26 MooseFS-client1 mfschunkserver[26955]: set uid to 1000
Jul  9 16:51:26 MooseFS-client1 mfschunkserver[26923]: terminate signal received
Jul  9 16:51:26 MooseFS-client1 mfschunkserver[26923]: closing *:9422

5、扫尾操作

a、配置全局变量

[root@MooseFS-chunk1 ~]# echo '# add moosefs to the path variable' >> /etc/profile 
[root@MooseFS-chunk1 ~]# echo 'PATH=/usr/local/mfs/sbin/:$PATH' >> /etc/profile 
[root@MooseFS-chunk1 ~]# tail -2 /etc/profile
# add moosefs to the path variable
PATH=/usr/local/mfs/sbin/:$PATH
[root@MooseFS-chunk1 ~]# source /etc/profile

b、配置开机自启动

[root@MooseFS-chunk1 ~]# echo '# Configure the metalogger service startup' >> /etc/rc.local
[root@MooseFS-chunk1 ~]# echo '/usr/local/mfs/sbin/mfsmetalogger start' >> /etc/rc.local
[root@MooseFS-chunk1 ~]# tail -2 /etc/rc.local
# Configure the metalogger service startup
/usr/local/mfs/sbin/mfsmetalogger start

5、部署 Client

1、安装 FUSE

       由于 MFS 文件系统客户端的挂载依赖于 FUSE 工具,因此需要先安装 FUSE 工具。

官方注解:

mfsmount requires FUSE to work; FUSE is available on several operating systems: Linux, FreeBSD, OpenSolaris and MacOS X, with the following notes:

  • In case of Linux a kernel module with API 7.8 or later is required (it can be checked with dmesgcommand - after loading kernel module there should be a line fuse init (API version 7.8)). It is available in fuse package 2.6.0 (or later) or in Linux kernel 2.6.20 (or later). Due to some minor bugs, the newer module is recommended (fuse 2.7.2 or Linux 2.6.24, although fuse 2.7.x standalone doesn't contain getattr/write race condition fix).

  • In case of FreeBSD we recommed using fuse-freebsd (https://github.com/glk/fuse-freebsd) which is a successor to fuse4bsd.

  • For MacOSX we recommend using OSXFUSE (http://osxfuse.github.com/), which is a successor to MacFUSE and has been tested on MacOSX 10.6 and 10.7.

因此,安装之前,我们需要先查看内核支持情况。如果已经支持了,并且版本也达到要求之后,就无须安装FUSE了。

[root@mfs-client ~]# lsmod |grep fuse
#从结果能看出我们需要安装fuse

a、安装fuse

[root@mfs-client ~]# wget http://jaist.dl.sourceforge.net/project/fuse/fuse-2.X/2.9.3/fuse-2.9.3.tar.gz
[root@mfs-client ~]# tar xf fuse-2.9.3.tar.gz 
[root@mfs-client ~]# cd fuse-2.9.3
[root@mfs-client fuse-2.9.3]# ./configure
[root@mfs-client fuse-2.9.3]# make && make install

b、调整环境变量

[root@mfs-client ~]# echo 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' > /etc/profile
[root@mfs-client ~]# tail -1 /etc/profile 
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

c、加载fuse模块到内核并配置开机自启

#1.添加fuse模块到内核
[root@mfs-client ~]# lsmod |grep fuse
[root@mfs-client ~]# modprobe fuse
[root@mfs-client ~]# lsmod |grep fuse
fuse                   69253  0 
[root@mfs-client ~]# echo 'modeprobe fuse' >> /etc/sysconfig/modules/fuse.modules
[root@mfs-client ~]# cat /etc/sysconfig/modules/fuse.modules 
modeprobe fuse
[root@mfs-client ~]# chmod 755 /etc/sysconfig/modules/fuse.modules 

#2、安装 mfsmount
[root@mfs-client ~]# yum install zlib-devel fuse-devel -y
[root@mfs-client ~]# groupadd -g 1000 mfs
[root@mfs-client ~]# useradd -u 1000 -g mfs mfs -s /sbin/nologin
[root@mfs-client ~]# tar xf mfs-1.6.27-5.tar.gz 
[root@mfs-client ~]# cd mfs-1.6.27
[root@mfs-client mfs-1.6.27]# ./configure --prefix=/usr/local/mfs-1.6.27 --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver --enable-mfsmount
[root@mfs-client mfs-1.6.27]# make && make install
[root@mfs-client mfs-1.6.27]# ln -s /usr/local/mfs-1.6.27 /usr/local/mfs 
[root@mfs-client mfs-1.6.27]# ll -d /usr/local/mfs
lrwxrwxrwx 1 root root 21 Jul  9 17:19 /usr/local/mfs -> /usr/local/mfs-1.6.27
[root@mfs-client mfs-1.6.27]# ll /usr/local/mfs/
total 16
drwxr-xr-x 2 root root 4096 Jul  9 17:18 bin
drwxr-xr-x 3 root root 4096 Jul  9 17:18 etc
drwxr-xr-x 2 root root 4096 Jul  9 17:18 sbin
drwxr-xr-x 4 root root 4096 Jul  9 17:18 share

3、从客户端上挂载mfs文件系统

a、创建数据目录挂载点

[root@mfs-client ~]# mkdir /mfsdata
[root@mfs-client ~]# chown -R mfs.mfs /mfsdata
[root@mfs-client ~]# ll -d /mfsdata
drwxr-xr-x 2 mfs mfs 4096 Jul  9 17:19 /mfsdata

b、挂载mfs文件系统

在前面的配置文件中我们没有设置验证,如果有设置验证请使用-p选项输入密码

[root@mfs-client ~]# /usr/local/mfs/bin/mfsmount /mfsdata/ -H 192.168.3.71
mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to root:root
[root@mfs-client ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             195G  2.7G  183G   2% /
tmpfs                 242M     0  242M   0% /dev/shm
/dev/sda1             194M   32M  153M  18% /boot
192.168.3.71:9421     269G     0  269G   0% /mfsdata

4、挂载后本地写入文件测试

写入测试前,我们查看下主和备服务器的元数据文件及变化日志文件。

[root@mfs-client ~]# cd /mfsdata/
[root@mfs-client mfsdata]# touch 1
[root@mfs-client mfsdata]# touch a
[root@mfs-client mfsdata]# echo centos >a
[root@mfs-client mfsdata]# cat a
centos
[root@mfs-client mfsdata]# rm -rf a
[root@mfs-client mfsdata]# ls
1

在客户端写入完成之后,我们可以来观察一下 Master Server 端的变化

[root@MooseFS-master ~]# cat  /usr/local/mfs/var/mfs/changelog.0.mfs 
0: 1436433509|SESSION():1
1: 1436433589|CREATE(1,1,f,420,0,0,0):2
2: 1436433589|ACQUIRE(2,1)
3: 1436433589|ATTR(2,420,0,0,1436433794,1436433794)
4: 1436433591|CREATE(1,a,f,420,0,0,0):3
5: 1436433591|ACQUIRE(3,1)
6: 1436433591|ATTR(3,420,0,0,1436433797,1436433797)
7: 1436433599|LENGTH(3,0)
8: 1436433599|WRITE(3,0,1):1
9: 1436433599|LENGTH(3,7)
10: 1436433599|UNLOCK(1)
11: 1436433602|ACCESS(3)
12: 1436433607|UNLINK(1,a):3
13: 1436433609|ACCESS(1)
14: 1436433630|RELEASE(2,1)
15: 1436433630|RELEASE(3,1)

我们再来查看一下,Metalogger Server 端的变化:

[root@MooseFS-log ~]# cat /usr/local/mfs/var/mfs/changelog_ml.0.mfs 
0: 1436433509|SESSION():1
1: 1436433589|CREATE(1,1,f,420,0,0,0):2
2: 1436433589|ACQUIRE(2,1)
3: 1436433589|ATTR(2,420,0,0,1436433794,1436433794)
4: 1436433591|CREATE(1,a,f,420,0,0,0):3
5: 1436433591|ACQUIRE(3,1)
6: 1436433591|ATTR(3,420,0,0,1436433797,1436433797)
7: 1436433599|LENGTH(3,0)
8: 1436433599|WRITE(3,0,1):1
9: 1436433599|LENGTH(3,7)
10: 1436433599|UNLOCK(1)
11: 1436433602|ACCESS(3)
12: 1436433607|UNLINK(1,a):3
13: 1436433609|ACCESS(1)
14: 1436433630|RELEASE(2,1)
15: 1436433630|RELEASE(3,1)

5、扫尾操作

a、配置环境变量

[root@mfs-client ~]# echo '# add moosefs to the path variable' >> /etc/profile 
[root@mfs-client ~]# echo 'PATH=/usr/local/mfs/bin/:$PATH' >> /etc/profile 
[root@mfs-client ~]# tail -2 /etc/profile
# add moosefs to the path variable
PATH=/usr/local/mfs/bin/:$PATH
[root@mfs-client ~]# source /etc/profile

b、配置客户端开机自动挂载

       如果需要Client能够在开机的时候自动挂载,我们就需要自动把密码传递进去。mfsmount自带了-o参数,我们可以把密码配置在其后来实现开机自动挂载。(这里我们将MooseFS-master的配置文件设置成要验证,密码是centos)

[root@mfs-client ~]# umount /mfsdata/
[root@mfs-client ~]# /usr/local/mfs/bin/mfsmount  /mfsdata/ -H 192.168.3.71 -o mfspassword=centos
mfsmaster accepted connection with parameters: read-write,restricted_ip,map_all ; root mapped to hadoop:hadoop ; users mapped to root:root
[root@mfs-client ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             195G  2.7G  183G   2% /
tmpfs                 242M     0  242M   0% /dev/shm
/dev/sda1             194M   32M  153M  18% /boot
192.168.3.71:9421     269G     0  269G   0% /mfsdata
[root@mfs-client ~]# echo 'Moosefs boot automatically mount' >> /etc/rc.local
[root@mfs-client ~]# echo '/usr/local/mfs/bin/mfsmount  /mfsdata/ -H 192.168.3.71 -o mfspassword=centos' >> /etc/rc.local
[root@mfs-client ~]# tail -2 /etc/rc.local 
Moosefs boot automatically mount
/usr/local/mfs/bin/mfsmount  /mfsdata/ -H 192.168.3.71 -o mfspassword=centos




你可能感兴趣的:(分布式文件系统之MooseFS----部署)