MooseFS高可用部署


一、什么是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
        (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客戶端掛載后,查看數據,發現已經同步
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM