文章目錄
實驗環境
- rhel7.3 且 selinux and iptables disabled
主機名(IP) | 服務 |
---|---|
server1(172.25.11.1) | master server |
server2(172.25.11.2) | chuck server |
server3(172.25.11.3) | chunk server |
真機(172.25.11.250) | 測試 |
server1(master server的部署)
- 下載並安裝master server需要的軟件(包括web UI界面)。
[root@server1 ~]# ls
moosefs-cgi-3.0.103-1.rhsystemd.x86_64.rpm
moosefs-cgiserv-3.0.103-1.rhsystemd.x86_64.rpm
moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm
moosefs-cli-3.0.103-1.rhsystemd.x86_64.rpm
moosefs-client-3.0.103-1.rhsystemd.x86_64.rpm
moosefs-master-3.0.103-1.rhsystemd.x86_64.rpm
moosefs-metalogger-3.0.103-1.rhsystemd.x86_64.rpm
[root@server1 ~]# yum install moosefs-master-3.0.103-1.rhsystemd.x86_64.rpm moosefs-cli-3.0.103-1.rhsystemd.x86_64.rpm moosefs-cgiserv-3.0.103-1.rhsystemd.x86_64.rpm moosefs-cgi-3.0.103-1.rhsystemd.x86_64.rpm -y
安裝完成之後會產生/etc/mfs
目錄裏面是mfs文件系統的相關配置文件
注:在該目錄下的mfsmaster.cfg
的文件中記錄瞭如果進行部署及其使用都需要在各個節點寫入mfsmaster的解析。
- 給主機server1添加解析。
[root@server1 ~]# vim /etc/hosts
172.25.11.1 server1 mfsmaster
- 開啓master服務,查看端口
注意:
9419:metalogger監聽的端口地址,和原數據日誌相結合,定期和master端同步數據
9420:用於和chunkserver連接的端口地址,通信節點
9421:用於客戶端對外連接的點口地址
[root@server1 mfs]# systemctl start moosefs-master
[root@server1 mfs]# netstat -antlp
- 打開cgi圖形工具,並查看端口,爲9425。
[root@server1 mfs]# systemctl start moosefs-cgiserv
[root@server1 mfs]# netstat -antlp
- 瀏覽器中訪問查看:
http://172.25.11.1:9425/mfs.cgi
server2&3(chunk server)的部署
- server2與server3的部署過程相同,這裏以server2爲例。
- 安裝chunkserver,安裝完成系統會生成用戶mfs。
[root@server1 ~]# scp moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm server2:
[root@server2 ~]# rpm -ivh moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm
[root@server2 ~]# id mfs
uid=997(mfs) gid=995(mfs) groups=995(mfs)
- 添加mfsmaster的解析。
[root@server2 ~]# vim /etc/hosts
172.25.11.1 server1 mfsmaster
- 因爲chunk server是真正存放數據的服務器,所以我們需要給他們的內存大一些,我們給server3添加一塊20G的硬盤用於mfs對數據節點的操作,添加完成後查看。
操作
server2的操作
- 創建目錄,修改目錄所有人所有組都爲mfs,並將此目錄寫到配置文件中。
[root@server2 ~]# mkdir /mnt/chunk1
[root@server2 ~]# cd /mnt/chunk1/
[root@server2 chunk1]# chown mfs.mfs ..
[root@server2 chunk1]# cd /etc/mfs/
[root@server2 mfs]# vim mfshdd.cfg
/mnt/chunk1 #寫到最後一行
- 開啓服務。
[root@server2 mfs]# systemctl start moosefs-chunkserver
- 此時在我們剛纔寫入配置文件的目錄
/mnt/chunk
下出現了256個數據目錄。
[root@server2 mfs]# cd /mnt/chunk1/
[root@server2 chunk1]# ls | wc -l
256
- 此時再在瀏覽器中訪問,發現出現了server2的詳細信息。
同樣的,在server3上做上述同樣的操作,再次刷新,並在瀏覽器中查看,可以看到server3的信息也出現了。
- 在server1查看9420端口的使用情況。
[root@server1 ~]# yum install lsof -y
[root@server1 ~]# lsof -i :9420
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mfsmaster 1029 mfs 8u IPv4 61791 0t0 TCP server1:9420->server2:36344 (ESTABLISHED)
mfsmaster 1029 mfs 10u IPv4 19091 0t0 TCP *:9420 (LISTEN)
mfsmaster 1029 mfs 13u IPv4 62542 0t0 TCP server1:9420->server3:47036 (ESTABLISHED)
真機(moosefs-client的搭建)
- 安裝客戶端的軟件。
[root@server1 ~]# scp moosefs-client-3.0.103-1.rhsystemd.x86_64.rpm [email protected]:
[root@foundation11 ~]# yum install moosefs-client-3.0.103-1.rhsystemd.x86_64.rpm
[root@foundation11 ~]# mfs #安裝完成命令可以自動補齊
- 修改配置文件,添加掛載目錄,按照配置文件寫的建立出掛載的目錄。
[root@foundation11 ~]# mkdir /mnt/mfs
[root@foundation11 ~]# vim /etc/mfs/mfsmount.cfg
/mnt/mfs #最後以行取消註釋
- 做好解析。
[root@foundation11 mfs]# vim /etc/hosts
172.25.11.1 mfsmaster
- 在客戶端掛載。
[root@foundation11 mfs]# mfsmount
[root@foundation11 mfs]# df
- 在掛載的目錄下新建兩個目錄。
[root@foundation11 mfs]# cd /mnt/mfs/
[root@foundation11 mfs]# mkdir dir1
[root@foundation11 mfs]# mkdir dir2
[root@foundation11 mfs]# mfsgetgoal dir1
[root@foundation11 mfs]# mfsgetgoal dir2
客戶端數據備份副本數測試
- 指定掛載在dir1目錄下的文件備份數爲1。
[root@foundation11 mfs]# mfssetgoal -r 1 dir1
[root@foundation11 mfs]# mfsgetgoal dir1/
[root@foundation11 mfs]# cd dir1/
[root@foundation11 dir1]# cp /etc/passwd .
[root@foundation11 dir1]# mfsfileinfo passwd
可以看到我們設置dir1目錄下的副本數爲1,所以此文件只有在server3上備份了1份。
- 指定掛載在dir2目錄下的文件備份數爲1。
[root@foundation11 mfs]# mfssetgoal -r 2 dir2
[root@foundation11 mfs]# cd dir2/
[root@foundation11 dir2]# cp /etc/fstab .
[root@foundation11 dir2]# mfsfileinfo fstab
可以看到我們設置dir2目錄下的副本數爲2,所以此文件在server2和sevrver3上各備份了1份。
- 我們關閉server3的chunk服務,再次查看兩個目錄下文件的可用性情況。
[root@server3 ~]# systemctl stop moosefs-chunkserver
dir2目錄下的文件因爲有2份備份,所以在server2上的數據依然在,文件依然可以查看。
dir1目錄下的文件已經不可見。
注意:當server3的chunk服務再次打開時,兩個目錄下的文件都會恢復,所以dir1目錄下的文件會再次可讀。
客戶端離散存儲的測試
默認chunkserver對數據的備份是按塊來備份的,每一塊備份64KB。
- 在dir1目錄下:
[root@foundation11 dir1]# dd if=/dev/zero of=file1 bs=1M count=100
[root@foundation11 dir1]# mfsfileinfo file1
可以看到file1被分爲成2份,在server2和server3之間交叉存儲(每個chunk服務器存儲一半數據)。
- 在dir2目錄下:
[root@foundation11 dir2]# dd if=/dev/zero of=file2 bs=1M count=100
[root@foundation11 dir2]# mfsfileinfo file2
可以看到同樣是交叉存儲,不過file2的兩部分在兩個chunk server上各存了一份。
- 關閉server3的chunk server服務。
[root@server3 ~]# systemctl stop moosefs-chunkserver
- 分別在兩個目錄下查看。
[root@foundation11 dir2]# mfsfileinfo file2
[root@foundation11 dir2]# cd ../dir1
[root@foundation11 dir1]# mfsfileinfo file1
關閉服務後可以看到,dir1目錄下只備份一份,所以會有部分數據丟失,而在dir2目錄下沒有數據丟失。
注意:當server3的chunk服務再次打開時,兩個目錄下的文件都會恢復,所以dir1目錄下的文件存在server3的部分會再次可讀。
數據恢復
- 刪除dir1目錄下的文件。
[root@foundation11 dir1]# ls
file1 passwd
[root@foundation11 dir1]# rm -f passwd
- 創建恢復數據的目錄,並掛載。
[root@foundation11 mnt]# mkdir /mnt/mfsmeta
[root@foundation11 mnt]# mfsmount -m /mnt/mfsmeta/
[root@foundation11 mnt]# mount (df看不到,mount可以看到)
- 掛載後會生成trash目錄,在此目錄下查看已經刪除的文件。
- 進入trash目錄,查找文件所在的位置,並進行恢復。
[root@foundation11 mnt]# cd /mnt/mfsmeta/
[root@foundation11 mfsmeta]# cd trash/
[root@foundation11 trash]# find -name *passwd*
[root@foundation11 trash]# cd 004/
[root@foundation11 004]# mv 00000004\|dir1\|passwd undel/
- 查看,數據恢復成功!
[root@foundation11 004]# cd /mnt/mfs/dir1
[root@foundation11 dir1]# cat passwd
補充:查看已刪除文件在垃圾桶裏默認停留的時間(可以設置)。
[root@foundation11 mfsmeta]# cd /mnt/mfs/dir1
[root@foundation11 dir1]# mfsgettrashtime .
.: 86400
mosefs-master的服務開啓及關閉
- 正常的開啓與關閉,在/var/lib/mfs目錄下的記錄mfs信息的文件及master的信息記錄的文件 metadata.mfs.back 會變爲metadata.mfs
- kill強制關閉服務後 metadata.mfs.back文件不會發生改變,並且使用systemctl命令是無法再次啓動服務的。
- 解決如下:查看服務狀態會顯示使用mfsmaster start -a 成功開啓。
- 恢復systemctl 啓動服務需要進行如下操作:
[root@server1 mfs]# vim /usr/lib/systemd/system/moosefs-master.service
編輯第8行:
8 ExecStart=/usr/sbin/mfsmaster -a
殺掉mfsmaster的進程在重新加載並開啓服務
[root@server1 mfs]# kill -9 16426
[root@server1 mfs]# systemctl daemon-reload
[root@server1 mfs]# systemctl start moosefs-master