1、什麼是MFS文件系統
一、MooseFS是一個具備容錯性的網絡分佈式文件系統。它把數據分散存放在多個物理服務器上,而呈現給用戶的則是一個統一的資源。
二、MooseFS文件系統結構包括四種角色
(1)管理服務器 managing server(master):負責各個存儲服務器的管理,文件讀寫調度,文件空間回收以及恢復,多節點拷貝。
(2)元數據日誌服務器 metalogger server(metalogger):負責備份master 服務器的變化日誌文件,文件類型爲changelog_ml.*.mfs ,以便於在master server 出問題的時候接替其進行工做。
(3)數據存儲服務器 data servers(chunkservers):負責鏈接管理服務器,遵從管理服務器調度,提供存儲空間,併爲客戶提供數據傳輸。
(4)客戶機掛載使用 client computers 經過fuse內核接口掛接遠程管理服務器上所管理的數據存儲服務器,看起來共享的文件系統和本地unix 文件系統使用同樣的效果。
2、關閉防火牆
一、sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/sysconfig/selinux
二、setenforce 0
三、chkconfig iptables off
四、service iptables stop
3、修改yum源
二、yum clean all
三、yum makecache
4、安裝依賴包
一、yum install gcc make libpcap-devel zlib-devel fuse-devel pkgconfig -y
二、yum install fuse -y
5、安裝主控服務器 Master server
一、添加mfs用戶
(1)useradd -M -s /sbin/nologin mfs
二、建立安裝目錄
(1)mkdir /usr/local/mfs
三、下載安裝包
四、解壓文件
(1)tar -xf moosefs-3.0.105-1.tar.gz
五、編譯並安裝
(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
六、作主節點解析
(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
七、複製樣例文件
(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
八、修改文件權限
(1)chown -R mfs:mfs /usr/local/mfs
九、啓動主控服務器 Master server
(1)/usr/local/mfs/sbin/mfsmaster start
十、啓動圖形處理工具
(1)/usr/local/mfs/sbin/mfscgiserv start
(2)經過ip+9425便可查看運行狀況
6、安裝元數據日誌服務器 Metalogger server
一、前五步驟同上
六、作主節點解析
(1)vim /etc/hosts
172.16.43.10 mfsmaster
七、複製樣例文件
(1)cd /usr/local/mfs/etc/mfs
(2)cp mfsmetalogger.cfg.sample mfsmetalogger.cfg
(3)修改mfsmetalogger.cfg中MASTER_HOST = master的ip
八、修改文件權限
(1)chown -R mfs:mfs /usr/local/mfs
九、啓動元數據日誌服務器Metalogger server
(1)/usr/local/mfs/sbin/mfsmetalogger start
7、安裝數據存儲服務器 Data servers
一、前四步驟同上
五、編譯並安裝
(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
六、作主節點解析
(1)vim /etc/hosts
172.16.43.10 mfsmaster
七、複製樣例文件
(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
八、修改文件權限
(1)chown -R mfs:mfs /usr/local/mfs
九、啓動數據存儲服務器 chunkserver
(1)/usr/local/mfs/sbin/mfschunkserver start
8、客戶端安裝
一、前四步驟同上
五、編譯並安裝
(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
六、作主節點解析
(1)vim /etc/hosts
172.16.43.10 mfsmaster
七、建立掛載目錄
(1)mkdir -p /data/moosefs
(2)chown -R mfs:mfs /data/moosefs
七、複製樣例文件
(1)cd /usr/local/mfs/etc/mfs
(2)cp mfsmount.cfg.sample mfsmount.cfg
(3)修改配置文件vim mfsmount.cfg中mfsmaster= master的ip,添加/data/moosefs掛載目錄
八、修改文件權限
(1)chown -R mfs:mfs /usr/local/mfs
九、啓動數據存儲服務器 chunkserver
(1)/usr/local/mfs/bin/mfsmount
9、啓動和關閉服務順序
一、啓動順序 mfsmaster>mfscgiserv>mfschunkserver>mfsmetalogger>mfsmount
二、關閉順序 mfsmount>mfschunkserver>mfsmetalogger>mfscgiserv>mfsmaster
10、故障處理
一、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,但丟失的數據暫沒法肯定。
11、其餘
一、mfssetgoal:能夠設置文件保存的份數(默認爲兩份)
用法:mfssetgoal 3 /mnt/share/test1 (對文件)
mfssetgoal -r 3 /mnt/share/test_dir/ (對目錄遞歸)
mfsgetgoal:能夠查看文件保存的份數
mfssettrashtime:能夠設置文件被刪除後保存的時間(垃圾箱設置)
用法:mfssettrashtime 0 /mnt/mfs-test/test1
(0表明時間,單位秒,可按要求自行配置,也可對目錄進行-r的遞歸操做)
mfsgettrashtime:能夠查看文件被刪除後的隔離時間
二、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 指定客戶端密碼
12、MFS+Keepalived雙機高可用熱備方案
一、方案
(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綁定信息也修改下。
二、原理
(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秒內完成 根據檢測時間間隔。
三、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
四、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服務都要啓動!
五、chunkServer的配置
(1)只須要將mfschunkserver.cfg文件中的MASTER_HOST參數配置成172.16.43.200,即VIP地址。其餘的配置都不須要修改,而後重啓mfschunkserver服務。
六、clinet客戶端的配置
(1)只須要將mfsmount.cfg文件中的mfsmaster參數配置成172.16.43.200,即VIP地址。其餘的配置都不須要修改,而後重啓mfschunkserver服務。
七、故障切換後的數據同步腳本
(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資源轉移到本身這一方時,執行這個同步腳本,就會將對方的數據同步過來了。
八、故障切換測試
(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客戶端掛載後,查看數據,發現已經同步