首页 > 技术文章 > MooseFS高可用部署

Ghost-bird 2019-06-12 13:50 原文

一、什么是MFS文件系统
    1、MooseFS是一个具有容错性的网络分布式文件系统。它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。
    2、MooseFS文件系统结构包括四种角色
        (1)管理服务器 managing server(master):负责各个存储服务器的管理,文件读写调度,文件空间回收以及恢复,多节点拷贝。
        (2)元数据日志服务器 metalogger server(metalogger):负责备份master 服务器的变化日志文件,文件类型为changelog_ml.*.mfs ,以便于在master server 出问题的时候接替其进行工作。
        (3)数据存储服务器 data servers(chunkservers):负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输。
        (4)客户机挂载使用 client computers 通过fuse内核接口挂接远程管理服务器上所管理的数据存储服务器,看起来共享的文件系统和本地unix 文件系统使用一样的效果。
二、关闭防火墙
    1、sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/sysconfig/selinux
    2、setenforce 0
    3、chkconfig iptables off
    4、service iptables stop
三、修改yum源
    1、wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    2、yum clean all
    3、yum makecache
四、安装依赖包
    1、yum install gcc make libpcap-devel zlib-devel fuse-devel pkgconfig -y
    2、yum install fuse -y
五、安装主控服务器 Master server
    1、添加mfs用户
        (1)useradd -M -s /sbin/nologin mfs
    2、创建安装目录
        (1)mkdir /usr/local/mfs
    3、下载安装包
        (1)cd /tmp && wget http://ppa.moosefs.com/src/moosefs-3.0.105-1.tar.gz
    4、解压文件
        (1)tar -xf moosefs-3.0.105-1.tar.gz
    5、编译并安装
        (1)cd moosefs-3.0.105
        (2)./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
        (3)make && make install
    6、做主节点解析
        (1)vim /etc/hosts
                172.16.43.10 mfsmaster
                172.16.43.11 mfsmetalogger
                172.16.43.12 mfschunkserver1
                172.16.43.13 mfschunkserver2
                172.16.43.14 moosefs
    7、复制样例文件
        (1)cd /usr/local/mfs/etc/mfs
        (2)cp mfsmaster.cfg.sample mfsmaster.cfg
        (3)cp mfsexports.cfg.sample mfsexports.cfg
        (4)cp mfstopology.cfg.sample mfstopology.cfg
        (5)cd /usr/local/mfs/var/mfs/ && cp metadata.mfs.empty metadata.mfs
    8、修改文件权限
        (1)chown -R mfs:mfs /usr/local/mfs
    9、启动主控服务器 Master server
        (1)/usr/local/mfs/sbin/mfsmaster start
    10、启动图形处理工具
        (1)/usr/local/mfs/sbin/mfscgiserv start
        (2)通过ip+9425即可查看运行情况
六、安装元数据日志服务器 Metalogger server
    1、前五步骤同上
    6、做主节点解析
        (1)vim /etc/hosts
                172.16.43.10 mfsmaster
    7、复制样例文件
        (1)cd /usr/local/mfs/etc/mfs
        (2)cp mfsmetalogger.cfg.sample mfsmetalogger.cfg
        (3)修改mfsmetalogger.cfg中MASTER_HOST = master的ip
    8、修改文件权限
        (1)chown -R mfs:mfs /usr/local/mfs
    9、启动元数据日志服务器Metalogger server
        (1)/usr/local/mfs/sbin/mfsmetalogger start
七、安装数据存储服务器 Data servers
    1、前四步骤同上
    5、编译并安装
        (1)cd moosefs-3.0.105
        (2)./configure --prefix=/usr/local/mfs  --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster
        (3)make && make install
    6、做主节点解析
        (1)vim /etc/hosts
                172.16.43.10 mfsmaster
    7、复制样例文件
        (1)cd /usr/local/mfs/etc/mfs
        (2)cp mfschunkserver.cfg.sample mfschunkserver.cfg
        (3)cp mfshdd.cfg.sample mfshdd.cfg
        (4)修改配置文件vim mfschunkserver.cfg中MASTER_HOST = master的ip,MASTER_PORT = 9420
        (5)配置文件mfshdd.cfg中添加要挂载的目录/data/mfschunks
    8、修改文件权限
        (1)chown -R mfs:mfs /usr/local/mfs
    9、启动数据存储服务器 chunkserver
        (1)/usr/local/mfs/sbin/mfschunkserver start
八、客户端安装
    1、前四步骤同上
    5、编译并安装
        (1)cd moosefs-3.0.105
        (2)./configure --prefix=/usr/local/mfs  --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver
        (3)make && make install
    6、做主节点解析
        (1)vim /etc/hosts
                172.16.43.10 mfsmaster
    7、创建挂载目录
        (1)mkdir -p /data/moosefs
        (2)chown -R mfs:mfs /data/moosefs
    7、复制样例文件
        (1)cd /usr/local/mfs/etc/mfs
        (2)cp mfsmount.cfg.sample mfsmount.cfg
        (3)修改配置文件vim mfsmount.cfg中mfsmaster= master的ip,添加/data/moosefs挂载目录
    8、修改文件权限
        (1)chown -R mfs:mfs /usr/local/mfs
    9、启动数据存储服务器 chunkserver
        (1)/usr/local/mfs/bin/mfsmount
九、启动和关闭服务顺序
    1、启动顺序 mfsmaster>mfscgiserv>mfschunkserver>mfsmetalogger>mfsmount
    2、关闭顺序 mfsmount>mfschunkserver>mfsmetalogger>mfscgiserv>mfsmaster
十、故障处理
    1、mfsmaster启动异常
        (1)vim /etc/init.d/moosefs-master
                $prog start >/dev/null 2>&1 || $prog -a >/dev/null 2>&1 && success
        (2)将/usr/local/mfs/var/mfs目录下metadata.mfs文件重命名为以.back结尾的文件,即可启动服务。
        (3)一旦mfsmaster 崩溃(例如因为主机或电源失败),需要最后一个元数据日志changelog 并入主要的metadata 中。这个操作时通过mfsmetarestore 工具做的,
最简单的方法是:/usr/local/mfs/bin/mfsmetarestore -a
        (4)找回metadata.mfs.back 文件,可以从备份中找,也可以中metalogger 主机中找(如果启动了metalogger 服务),然后把metadata.mfs.back 放入data 目录,一般为{prefix}/var/mfs
            从在master 宕掉之前的任何运行metalogger 服务的服务器上拷贝最后metadata 文件,然后放入mfsmaster 的数据目录。
            利用mfsmetarestore 命令合并元数据changelogs,可以用自动恢复模式mfsmetarestore –a,也可以利用非自动化恢复模式
            mfsmetarestore -m metadata.mfs.back -o metadata.mfs changelog_ml.*.mfs
            或:强制使用metadata.mfs.back创建metadata.mfs,可以启动master,但丢失的数据暂无法确定。
十一、其他
    1、mfssetgoal:可以设置文件保存的份数(默认为两份)
        用法:mfssetgoal  3  /mnt/share/test1                (对文件)
                  mfssetgoal  -r  3  /mnt/share/test_dir/      (对目录递归)
        mfsgetgoal:可以查看文件保存的份数
        mfssettrashtime:可以设置文件被删除后保存的时间(垃圾箱设置)
        用法:mfssettrashtime  0  /mnt/mfs-test/test1
        (0代表时间,单位秒,可按要求自行配置,也可对目录进行-r的递归操作)
        mfsgettrashtime:可以查看文件被删除后的隔离时间 
    2、mfsmaster的权限管理(类似于nfs的exports文件)
        vi /etc/mfs/mfsexports.cfg
        #客户端IP 允许挂载的目录 客户端拥有的权限
        192.168.1.5 / rw,alldirs,maproot=0 # /标识MFS的根(读写的方式共享,允许挂载任何指定的子目录)
        192.168.0.0/24 . rw # .标识MFSMETA 文件系统
        #客户端 #目录部分需要注意两点 #权限部分
        #*  所有客户机 / 标识MooseFS 根 ro 只读模式共享
        #f.f.f.f 单个主机 . 表示MFSMETA 文件系统 rw 读写的方式共享
        #f.f.f.f/p 某个子网段 alldirs 允许挂载任何指定的子目录#f.f.f.f-d.d.d.d 某两个ip段区间
         maproot 映射为root,还是指定的用户
         password 指定客户端密码
十二、MFS+Keepalived双机高可用热备方案
    1、方案
        (1)将master-server作为Keepalived_MASTER(启动mfsmaster、mfscgiserv)
        (2)将matelogger作为Keepalived_BACKUP(启动mfsmaster、mfscgiserv)
        (3)将ChunkServer服务器里配置的MASTER_HOST参数值改为VIP地址
        (4)clinet挂载的master的ip地址改为VIP地址
        (5)按照这样调整后,需要将Keepalived_MASTER和Keepalived_BACKUP里面的hosts绑定信息也修改下。
    2、原理
        (1)mfsmaster的故障恢复在1.6.5版本后可以由mfsmetalogger产生的日志文件changelog_ml.*.mfs和metadata.mfs.back文件通过命令mfsmetarestore恢复
        (2)定时从mfsmaster获取metadata.mfs.back 文件用于master恢复
        (3)Keepalived MASTER检测到mfsmaster进程宕停时会执行监控脚本,即自动启动mfsmaster进程,如果启动失败,则会强制kill掉keepalived和mfscgiserv进程,由此转移VIP到BACKUP上面
        (4)若是Keepalived MASTER故障恢复,则会将VIP资源从BACKUP一方强制抢夺回来,继而由它提供服务
        (5)整个切换在2~5秒内完成 根据检测时间间隔。
    3、Keepalived_MASTER(mfs master)机器上的操作
        (1)yum install -y openssl-devel popt-devel
        (1)cd /tmp && wget https://www.keepalived.org/software/keepalived-1.3.5.tar.gz
        (2)tar -xf keepalived-1.3.5.tar.gz
        (3)cd keepalived-1.3.5
        (4)./configure --prefix=/usr/local/keepalived --with-init=SYSV
        (5)make && make install
        (6)cp keepalived/etc/init.d/keepalived /etc/init.d/
        (7)chmod +x /etc/init.d/keepalived
        (8)cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
        (9)mkdir -p /etc/keepalived/
        (10)cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
        (10)cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
        (10)echo "/etc/init.d/keepalived start" >> /etc/rc.local
        (11)chkconfig keepalived on
        (12)service keepalived start
        (13)cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.back
        (14)vim /etc/keepalived/keepalived.conf
            ! Configuration File for keepalived
            global_defs {
              notification_email {
                root@localhost
                }
            
            notification_email_from keepalived@localhost
            smtp_server 127.0.0.1
            smtp_connect_timeout 30
            router_id MFS_HA_MASTER
            }
            
            vrrp_script chk_mfs {                          
              script "/usr/local/mfs/keepalived_check_mfsmaster.sh"
              interval 2
              weight 2
            }
            
            vrrp_instance VI_1 {
              state MASTER
              interface eth0
              virtual_router_id 21
              priority 100
              advert_int 1
              authentication {
                auth_type PASS
                auth_pass 1111
                }
              track_script {
                chk_mfs
            }
            virtual_ipaddress {
                172.16.43.200 #虚拟ip
            }
            notify_master "/etc/keepalived/clean_arp.sh 172.16.43.200"
            }
        (15)vim /usr/local/mfs/keepalived_check_mfsmaster.sh #(监控脚本)
            #!/bin/bash
            A=`ps -C mfsmaster --no-header | wc -l`
            if [ $A -eq 0 ];then
            /usr/local/mfs/sbin/mfsmaster start
            sleep 3
               if [ `ps -C mfsmaster --no-header | wc -l ` -eq 0 ];then
                  /usr/bin/killall -9 mfscgiserv
                  /usr/bin/killall -9 keepalived
               fi
            fi
        (16)chmod 755  /usr/local/mfs/keepalived_check_mfsmaster.sh
        (18)vim /etc/keepalived/clean_arp.sh #(设置更新虚拟服务器(VIP)地址的arp记录到网关脚本)
                #!/bin/sh
                VIP=$1
                GATEWAY=172.16.43.254 #网关地址
                /sbin/arping -I eth0 -c 5 -s $VIP $GATEWAY &>/dev/null
        (19)chmod 755 /etc/keepalived/clean_arp.sh
        (20)service keepalived restart
        (21)ip addr
    4、Keepalived_BACKUP(mfsmetalogger)机器上的操作
        (1)前十三步同上
        (14)vim /etc/keepalived/keepalived.conf
            ! Configuration File for keepalived
            global_defs {
              notification_email {
                root@localhost
                }
            
            notification_email_from keepalived@localhost
            smtp_server 127.0.0.1
            smtp_connect_timeout 30
            router_id MFS_HA_BACKUP
            }
            
            vrrp_script chk_mfs {                          
              script "/usr/local/mfs/keepalived_notify.sh"
              interval 2
              weight 2
            }
            
            vrrp_instance VI_1 {
              state BACKUP
              interface eth0
              virtual_router_id 21
              priority 50
              advert_int 1
              authentication {
                auth_type PASS
                auth_pass 1111
            }
              track_script {
                chk_mfs
            }
            virtual_ipaddress {
                172.16.43.200 虚拟ip
            }
            notify_master "/etc/keepalived/clean_arp.sh 172.16.43.200"
            }
        (15)vim /usr/local/mfs/keepalived_notify.sh #(监控脚本)
            #!/bin/bash
            A=`ps -C mfsmaster --no-header | wc -l`
            if [ $A -eq 0 ];then
            /usr/local/mfs/sbin/mfsmaster start
            sleep 3
               if [ `ps -C mfsmaster --no-header | wc -l ` -eq 0 ];then
                  /usr/bin/killall -9 mfscgiserv
                  /usr/bin/killall -9 keepalived
               fi
            fi
        (16)chmod 755  /usr/local/mfs/keepalived_notify.sh
        (18)vim /etc/keepalived/clean_arp.sh #(设置更新虚拟服务器(VIP)地址的arp记录到网关脚本)
                #!/bin/sh
                VIP=$1
                GATEWAY=172.16.43.254 #网关地址
                /sbin/arping -I eth0 -c 5 -s $VIP $GATEWAY &>/dev/null
        (29)chmod 755 /etc/keepalived/clean_arp.sh
        (20)service keepalived restart
        (21)要保证Keepalived_BACKUP机器的mfs master服务和keepalived服务都要启动!
    5、chunkServer的配置
        (1)只需要将mfschunkserver.cfg文件中的MASTER_HOST参数配置成172.16.43.200,即VIP地址。其他的配置都不需要修改,然后重启mfschunkserver服务。
    6、clinet客户端的配置
        (1)只需要将mfsmount.cfg文件中的mfsmaster参数配置成172.16.43.200,即VIP地址。其他的配置都不需要修改,然后重启mfschunkserver服务。
    7、故障切换后的数据同步脚本
        (1)上面的配置可以实现Keepalived_MASTER机器出现故障(keepalived服务关闭),VIP资源转移到Keepalived_BACKUP上;
                当Keepalived_MASTER机器故障恢复(即keepalived服务开启),那么它就会将VIP资源再次抢夺回来!
                但是只是实现了VIP资源的转移,但是MFS文件系统的数据该如何进行同步呢?
                下面在两机器上分别写了数据同步脚本(Keepalived_MASTER和Keepalived_BACKUP要提前做好双方的ssh无密码登陆的信任关系)
        (2)Keepalived_MASTER机器上
                vim /usr/local/mfs/MFS_DATA_Sync.sh
                #!/bin/bash
                A=`ip addr|grep 172.16.43.200|awk -F" " '{print $2}'|cut -d"/" -f1`
                if [ $A == 172.16.43.200 ];then
                   /usr/local/mfs/sbin/mfsmaster stop
                   /bin/rm -f /usr/local/mfs/var/mfs/*
                   /usr/bin/rsync -e "ssh -p22" -avpgolr 172.16.43.105:/usr/local/mfs/var/mfs/* /usr/local/mfs/var/mfs/
                   /usr/local/mfs/sbin/mfsmetarestore -m
                   /usr/local/mfs/sbin/mfsmaster -a
                   sleep 3
                   echo "this server has become the master of MFS"
                   if [ $A != 172.16.43.200 ];then
                   echo "this server is still MFS's slave"
                   fi
                fi
        (3)Keepalived_BACKUP机器上
                #!/bin/bash
                A=`ip addr|grep 172.16.43.200|awk -F" " '{print $2}'|cut -d"/" -f1`
                if [ $A == 172.16.43.200 ];then
                   /usr/local/mfs/sbin/mfsmaster stop
                   /bin/rm -f /usr/local/mfs/var/mfs/*
                   /usr/bin/rsync -e "ssh -p22" -avpgolr 172.16.43.204:/usr/local/mfs/var/mfs/* /usr/local/mfs/var/mfs/
                   /usr/local/mfs/sbin/mfsmetarestore -m
                   /usr/local/mfs/sbin/mfsmaster -a
                   sleep 3
                   echo "this server has become the master of MFS"
                   if [ $A != 172.16.43.200 ];then
                   echo "this server is still MFS's slave"
                   fi
                fi
        (4)即当VIP资源转移到自己这一方时,执行这个同步脚本,就会将对方的数据同步过来了。
    8、故障切换测试
        (1)关闭Keepalived_MASTER的mfsmaster服务
                由于keepalived.conf文件中的监控脚本定义,当发现mfsmaster进程不存在时,就会主动启动mfsmaster。只要当mfsmaster启动失败,才会强制
killall掉keepalived和mfscgiserv进程
        (2)/usr/local/mfs/sbin/mfsmaster stop
        (3)发现mfsmaster关闭后,会自动重启
        (4)默认情况下,VIP资源是在Keepalived_MASTER上的
        (5)在client端挂载后(通过VIP地址挂载),查看数据
        (6)当keepalived关闭(这个时候mfsmaster关闭后就不会自动重启了,因为keepalived关闭了,监控脚本就不会执行了)
        (7)service keepalived stop
        (8)发现,Keepalived_MASTER的keepalived关闭后,VIP资源就不在它上面了。查看系统日志,发现VIP已经转移
        (9)然后到Keepalived_BACKUP上面发现,VIP已经过来了。查看日志,也能看到VIP转移过来了
        (10)再次在clinet客户端挂载后,查看数据,发现没有数据,这就需要执行同步数据脚本
        (11)sh /usr/local/mfs/MFS_DATA_Sync.sh
        (12)再次在clinet客户端挂载后,查看数据,发现数据已经同步过来,然后再更新数据,创建几个测试文件
        (13)恢复Keepalived_MASTER的keepalived进程
        (14)service keepalived start
        (15)发现Keepalived_MASTER的keepalived进程启动后,VIP资源又抢夺回来。查看/var/log/messages日志能看出VIP资源转移回来
        (16)再次用ip addr命令查看Keepalived_BACKUP,发现VIP不在了
        (17)在client端挂载后(通过VIP地址挂载),查看数据,发现数据还是旧的,需要在Keepalived_MASTER上执行同步
        (18)sh /usr/local/mfs/MFS_DATA_Sync.sh
        (19)再次在clinet客户端挂载后,查看数据,发现已经同步
 
 
 
 
 
 

推荐阅读