####################################
##### 網絡架構 #####
####################################
css
(一) 網絡架構 M1: 192.168.1.138 主服務器,存儲塊服務器,客戶端 M2: 192.168.1.139 日誌服務器,備份主控服務器,存儲塊服務器
####################################
#### 具體安裝配置測試 ######
####################################
(一) 主服務器M1
html
1 建立默認用戶與用戶組。這裏咱們使用的是www用戶組的www用戶 建立過程略 2 解壓安裝mfs-1.6.24-1.tar.gz [root@M1 software]# tar -zxvf mfs-1.6.24-1.tar.gz [root@M1 software]# cd mfs-1.6.24 [root@M1 mfs-1.6.24]# ./configure --prefix=/data/apps/mfs --with-default-user=www --with-default-group=www --enable-mfsmount # 因爲等下M1還要用來作客戶端,因此這裏要加上--enable-mfsmount選項。若是出現 configure: error: mfsmount build was forced, but fuse library is too old or not installed的錯誤則 [root@M1 mfs-1.6.24]# yum -y install fuse* [root@M1 mfs-1.6.24]# make [root@M1 mfs-1.6.24]# make install
(二) 元數據日誌服務器、備份主控服務器安裝
和主服務器相同
。。。。。
略
。。。。。
(三) 客戶端安裝M1
web
1 安裝fuse yum -y install fuse* (或者yum install kernel.x86_64 kernel-devel.x86_64 kernel-headers.x86_64 ###reboot server#### yum install fuse.x86_64 fuse-devel.x86_64 fuse-libs.x86_64) 2 安裝mfs-1.6.24-1.tar.gz 因爲這裏是共用的服務器M1,因此在第一步時已經安裝好
(四) 配置各個服務器
瀏覽器
1 主控服務器M1配置 1.1 [root@M1 etc]# cp -a mfsmaster.cfg.dist mfsmaster.cfg # 主配置文件咱們使用默認的配置,把文件裏面的註釋打開便可 1.2 [root@M1 etc]# vi mfsexports.cfg # 配置客戶端掛載相關的權限文件 192.168.1.138 和 192.168.1.139 有讀寫的權限而且密碼爲123456 而且文件自動映射爲www用戶 192.168.1.138 / rw,alldirs,maproot=503,password=123456 192.168.1.139 / rw,alldirs,maproot=503,password=123456 1.3 [root@M1 etc]# cp /data/apps/mfs/var/mfs/metadata.mfs.empty /data/apps/mfs/var/mfs/metadata.mfs # 複製出初始的元數據文件 1.4 # 啓動master服務 [root@M1 etc]# /data/apps/mfs/sbin/mfsmaster start
2 元數據日誌服務器配置 2.1 更改日誌服務器 [root@M2 mfs]# cd /data/apps/mfs/etc/ [root@M2 etc]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg [root@M2 etc]# vi mfsmetalogger.cfg # 把主服務器的ip和端口地址寫上 MASTER_HOST = 192.168.1.138 MASTER_PORT = 9419 META_DOWNLOAD_FREQ = 1 # 即每小時複製一次metadata.mfs.back文件,減小恢復的延遲時間 2.2 啓動日誌服務器 [root@M2 etc]# /data/apps/mfs/sbin/mfsmetalogger start
3 存儲塊服務器配置 因爲個人M1與M2均爲存儲塊服務器,兩臺服務器配置相同這裏值列出M1上存儲塊服務器的配置。M2相似 3.1 配置mfschunkserver.cfg [root@M1 etc]# cp mfschunkserver.cfg.dist mfschunkserver.cfg [root@M1 etc]# vi mfschunkserver.cfg # 指定元數據服務器的ip地址和相應的端口 MASTER_HOST = 192.168.1.138 MASTER_PORT = 9420 3.2 服務器上建立存儲文件的目錄 [root@M1 etc]# mkdir /mfstest [root@M1 etc]# chown -R www:www /mfstest 3.3 配置 /data/apps/mfs/etc/mfshdd.cfg [root@M1 etc]# cp mfshdd.cfg.dist mfshdd.cfg [root@M1 etc]# vi mfshdd.cfg /mfstest 3.4 存儲塊服務器啓動 [root@M1 etc]# /data/apps/mfs/sbin/mfschunkserver start
4 客戶端配置,這裏我把M1配置成客戶端 [root@M1 etc]# /data/apps/mfs/bin/mfsmount /data/wwwroot/web/sharemfs -p -H 192.168.1.138 MFS Password: mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to root:root [root@M1 etc]# df -Th # 能夠看到下面一行說明掛載成功 192.168.1.138:9421 fuse.mfs 23G 0 23G 0% /home/data/wwwroot/web/sharemfs
5 客戶端測試 [root@M1 etc]# cd /data/wwwroot/web/sharemfs [root@M1 sharemfs]# echo "111111111111111111" > 1.txt [root@M1 sharemfs]# ls 1.txt 此時咱們要是把M2也作成客戶端掛載的話也能夠看到1.txt 這個文件
######################################
### mfs服務的管理 ####
######################################
(一) 啓動MooseFS集羣
安全
1 啓動mfsmaster進程 [root@M1 ~]# /data/apps/mfs/sbin/mfsmaster start # 若是元服務器啓動不了,則cp metadata.mfs.empty metadata.mfs 2 啓動全部的mfschunkserver進程 [root@M1 ~]# /data/apps/mfs/sbin/mfschunkserver start 3 啓動mfsmetalogger 進程 [root@M2 ~]# /data/apps/mfs/sbin/mfsmetalogger start 4 掛載 /data/apps/mfs/bin/mfsmount /data/wwwroot/web/sharemfs -p -H 192.168.1.138
(二) 中止MooseFS集羣
安全的中止MooseFS集羣
bash
1 在全部的客戶端卸載MooseFS 文件系統 (在M1和M2上都要卸載) [root@M1 sharemfs]# umount /home/data/wwwroot/web/sharemfs/ 2 用mfschunkserver -s 命令中止全部的chunkserver進程 [root@M1 ~]# /data/apps/mfs/sbin/mfschunkserver -s 3 用mfsmetalogger –s命令中止metalogger進程 [root@M2 ~]# /data/apps/mfs/sbin/mfsmetalogger -s 4 中止掉元服務器 [root@M1 ~]# /data/apps/mfs/sbin/mfsmaster -s
(三) 文件備份次數設置(副本份數),和查看
默認狀況下咱們在服務器上建立的文件或者是文件夾只是在一個chunk中有保存,若是組成整個mfs系統的某一個chunk塊宕機的話,會形成整個mfs系統的數據不完整。這樣就沒有達到高可用的要求。因此咱們要在客戶端設置文件在建立的時候同時保存在chunk1 和 chunk2 上各一份,這樣不管是chunk1宕機或chunk2宕機客戶端均可以獲得一份完整的數據
服務器
1 [root@M1 sharemfs]# /data/apps/mfs/bin/mfsfileinfo /data/wwwroot/web/sharemfs/3.txt # 這是默認狀況下在客戶端建立的3.txt文件,如今這個文件只在192.168.1.139有一份數據 /data/wwwroot/web/sharemfs/3.txt: chunk 0: 0000000000000003_00000001 / (id:3 ver:1) copy 1: 192.168.1.139:9422 2 改爲在兩臺服務器上都保存有數據(設置副本數爲2。注:具體數目看當前chunk服務器數量) [root@M1 sharemfs]# /data/apps/mfs/bin/mfssetgoal -r 2 /data/wwwroot/web/sharemfs/ 過一段時間後(這段時間主要是同步用) [root@M1 sharemfs]# /data/apps/mfs/bin/mfsfileinfo /data/wwwroot/web/sharemfs/3.txt # 發現文件已經在兩臺服務器上都有數據 /data/wwwroot/web/sharemfs/3.txt: chunk 0: 0000000000000003_00000001 / (id:3 ver:1) copy 1: 192.168.1.138:9422 copy 2: 192.168.1.139:9422 # 其實咱們在建立文件夾或者是指定掛載目錄的時候就指定文件的保存份數,這樣之後在建立文件的時候就會立刻有兩份。以下 [root@M1 sharemfs]# echo "bbbbbbbbbbbbbbbb" > html2/b.html [root@M1 sharemfs]# /data/apps/mfs/bin/mfsfileinfo /data/wwwroot/web/sharemfs/html2/b.html /data/wwwroot/web/sharemfs/html2/b.html: chunk 0: 0000000000000006_00000001 / (id:6 ver:1) copy 1: 192.168.1.138:9422 copy 2: 192.168.1.139:9422 注:對一個目錄設定「goal」,此目錄下的新建立文件和子目錄均會繼承此目錄的設定,但不會改變已經存在的文件及目錄的copy份數。但使用-r選項能夠更改已經存在的copy份數。
(四) 掛載點管理
好比咱們想建立多個掛載點來掛載文件,好比說咱們想把/data/wwwroot/web/sharemfs/mfsshare/share2/掛載到 /data/wwwroot/web/sharemfs2,把/data/wwwroot/web/sharemfs/mfsshare/share1/,掛載到/data/wwwroot/web/sharemfs1 上
網絡
1 [root@M1 ~]# vi /data/apps/mfs/etc/mfsexports.cfg # 更改掛載點的配置文件 192.168.1.138 / rw,alldirs,maproot=0,password=passcode 192.168.1.139 / rw,alldirs,maproot=0,password=passcode 192.168.1.138 /mfsshare/share1 rw,alldirs,maproot=0,password=passcode 192.168.1.139 /mfsshare/share1 rw,alldirs,maproot=0,password=passcode 192.168.1.138 /mfsshare/share2 rw,alldirs,maproot=0,password=passcode 192.168.1.139 /mfsshare/share2 rw,alldirs,maproot=0,password=passcode 2 重啓mfs服務器 注:#若是修改掛載點可是咱們的元服務器又在線上運行則可使用[root@M1 etc]# /data/apps/mfs/sbin/mfsmaster reload 從新加載配置文件 3 首先掛載 / 目錄 [root@M1 etc]# /data/apps/mfs/bin/mfsmount /data/wwwroot/web/sharemfs -p -H 192.168.1.138 4 掛載完以後再建立/data/wwwroot/web/sharemfs/mfsshare/share1/ 文件夾 [root@M1 sharemfs]# mkdir /data/wwwroot/web/sharemfs/mfsshare/share1/ [root@M1 sharemfs]# chown -R www:www /data/wwwroot/web/sharemfs/mfsshare/share1/ 5 建立掛載點 [root@M1 sharemfs]# mkdir /data/wwwroot/web/sharemfs1 [root@M1 sharemfs]# chown -R www:www /data/wwwroot/web/sharemfs1 6 掛載相應的目錄 [root@M1 sharemfs]# /data/apps/mfs/bin/mfsmount /data/wwwroot/web/sharemfs1 -p -H 192.168.1.138 -S /mfsshare/share1 (由於掛載點的根目錄是/data/wwwroot/web/sharemfs -S 後面接的參數是相對於根目錄因此是/mfsshare/share1。注意掛載其餘目錄以前必定要先掛載根目錄)
(五)圖形化界面管理
session
[root@M1 ~]# /data/apps/mfs/sbin/mfscgiserv 啓動圖形話相關的web gui 在瀏覽器上輸入http://192.168.1.138:9425/mfs.cgi便可訪問到相應的界面 [root@M1 ~]# /data/apps/mfs/sbin/mfscgiserv stop # 中止web gui 進程
(六)回收站
架構
[root@M1 ~]# mkdir /home/data/wwwroot/web/sharemfsrecover # 建立回收站掛載點 [root@M1 ~]# chown -R www:www /home/data/wwwroot/web/sharemfsrecover # 修改權限 [root@M1 ~]# vi /data/apps/mfs/etc/mfsexports.cfg # 若是不添加這一行會出現權限問題 * . rw # 添加這一行 [root@M1 ~]# /data/apps/mfs/sbin/mfsmaster reload # 從新加載配置文件 reload signal has beed sent [root@M1 ~]# /data/apps/mfs/bin/mfsmount -m /data/wwwroot/web/sharemfsrecover/ -p -H 192.168.1.138 # -m參數設置掛載點 MFS Password: mfsmaster accepted connection with parameters: read-write,restricted_ip [root@M1 ~]# /data/apps/mfs/bin/mfsgettrashtime /data/wwwroot/web/sharemfs/1.txt # 查看文件在回收站的保存時間 /data/wwwroot/web/sharemfs/1.txt: 86400 [root@M1 ~]# /data/apps/mfs/bin/mfssettrashtime 0 /data/wwwroot/web/sharemfs/2.txt # 設置在回收站中保存的時間 /data/wwwroot/web/sharemfs/2.txt: 0 [root@M1 ~]# /data/apps/mfs/bin/mfsgettrashtime /data/wwwroot/web/sharemfs/2.txt /data/wwwroot/web/sharemfs/2.txt: 0 # 文件刪除後恢復 [root@M1 ~]# rm -f /data/wwwroot/web/sharemfs/3.txt [root@M1 trash]# cd /data/wwwroot/web/sharemfsrecover/trash/ [root@M1 trash]# ls 00000005|3.txt 00000010|mfsxwj.txt 00000012|mfsdwj.txt undel 0000000E|mfsxwj.txt 00000011|mfsxwj2.txt 00000013|mfsdwj2.txt [root@M1 trash]# mv 00000005\|3.txt ./undel/ # 恢復文件 [root@M1 trash]# ls /data/wwwroot/web/sharemfs/3.txt # 發現文件已經恢復 /data/wwwroot/web/sharemfs/3.txt
(七) 元數據文件的備份
主要備份的數據有:
/data/apps/mfs/var/mfs/metadata.mfs.back # 主要元數據文件metadata.mfs,當mfsmaster 運行的時候會被命名爲metadata.mfs.back。這個文件是保存在元數據服務器上的相應目錄
[root@M2 ~]# ll /data/apps/mfs/var/mfs/ # 元數據改變日誌changelog.*.mfs,存儲了過去的N 小時的文件改變(N 的數值是由BACK_LOGS參數設置的,參數的設置在mfschunkserver.cfg 配置文件中) total 964 -rw-r----- 1 www www 31 Mar 15 07:21 changelog_ml.19.mfs -rw-r----- 1 www www 792 Mar 16 01:38 changelog_ml.1.mfs -rw-r----- 1 www www 159 Mar 15 03:41 changelog_ml.23.mfs -rw-r----- 1 www www 26 Mar 15 23:25 changelog_ml.3.mfs -rw-r----- 1 www www 33 Mar 14 07:20 changelog_ml.43.mfs -rw-r----- 1 www www 159 Mar 14 03:46 changelog_ml.47.mfs -rw-r----- 1 www www 19020 Mar 15 22:06 changelog_ml.4.mfs -rw-r----- 1 www www 1704 Mar 13 07:31 changelog_ml.50.mfs -rw-r----- 1 www www 2063 Mar 15 21:59 changelog_ml.5.mfs -rw-r----- 1 www www 0 Mar 16 02:10 changelog_ml_back.0.mfs -rw-r----- 1 www www 792 Mar 16 02:10 changelog_ml_back.1.mfs -rw-r----- 1 www www 915016 Mar 16 02:00 csstats.mfs -rw-r--r-- 1 root root 8 Mar 12 02:34 metadata.mfs.empty -rw-r----- 1 www www 2309 Mar 16 02:10 metadata_ml.mfs.back -rw-r----- 1 www www 978 Mar 16 02:12 sessions_ml.mfs 主要的元數據文件須要按期備份,備份的頻率取決於取決於多少小時changelogs 儲存。元數據changelogs 實時的自動複製。1.6版本中這個工做都由metalogger完成。
####################################################
#### 故障解決 ####
####################################################
(一) 其中某一臺chunk服務器宕機。注意:下面的狀況是發生在每一個文件的goal(目標)都不小於2 而且沒有under-goal 文件(這些能夠用mfsgetgoal –r和mfsdirinfo 命令來檢查
如今咱們模擬M2服務器宕機,此時咱們的數據只會顯示在M2上的那一份。可是徹底不影響咱們訪問
[root@M1 sharemfs]# /data/apps/mfs/bin/mfsfileinfo /data/wwwroot/web/sharemfs/3.txt /data/wwwroot/web/sharemfs/3.txt: chunk 0: 0000000000000003_00000001 / (id:3 ver:1) copy 1: 192.168.1.138:9422 [root@M1 sharemfs]# echo "66666666666666666666" > 6.txt # 如今咱們建立一個新的文件 [root@M1 sharemfs]# /data/apps/mfs/bin/mfsfileinfo /data/wwwroot/web/sharemfs/6.txt # 服務器上只保留了一份文件 /data/wwwroot/web/sharemfs/6.txt: chunk 0: 000000000000000C_00000001 / (id:12 ver:1) copy 1: 192.168.1.138:9422 # 如今咱們恢復M2服務器 [root@M1 sharemfs]# /data/apps/mfs/bin/mfsfileinfo /data/wwwroot/web/sharemfs/6.txt /data/wwwroot/web/sharemfs/6.txt: chunk 0: 000000000000000C_00000001 / (id:12 ver:1) copy 1: 192.168.1.138:9422 copy 2: 192.168.1.139:9422 發現新的文件直接就同步到M2上了
(二) 元服務器宕機與恢復
# 如今咱們來模擬元服務器宕機 [root@M1 sharemfs]# echo "mfs down test" > mfs_down_test.txt # 咱們先往掛載點寫入一個文件 [root@M1 sharemfs]# ps aux | grep mfs www 15237 0.0 14.3 96644 33988 ? S< Mar12 3:52 /data/apps/mfs/sbin/mfsmaster start 。。。。。。。 略 。。。。。。。 [root@M1 sharemfs]# cd 1) 直接強制殺死主進程來終止服務 [root@M1 ~]# kill -9 15237 # 直接強制殺死主進程來終止服務 [root@M1 mfs]# /data/apps/mfs/sbin/mfsmaster start # 此時啓動元服務器會失敗 [root@M1 mfs]# /data/apps/mfs/sbin/mfsmetarestore -a # 恢復元服務器 [root@M1 mfs]# /data/apps/mfs/sbin/mfsmaster start # 再次啓動,發現啓動成功 [root@M1 mfs]# cd /data/wwwroot/web/sharemfs [root@M1 sharemfs]# ls 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt html1 html2 mfs_down_test.txt mfsshare # 發現數據也都是存在的 # 注:有時候執行 [root@M1 mfs]# /data/apps/mfs/sbin/mfsmetarestore -a 會出現 error: 32 (Data mismatch) # 數據不匹配出現的結果 解決方法 [root@M1 mfs]# mv metadata.mfs.back metadata.mfs [root@M1 mfs]# /data/apps/mfs/sbin/mfsmaster start 不過會形成小部分數據丟失。這時候只要等待一小時後數據同步結束天然問題就解決了 2) 誤操做刪除了元服務器的數據致使沒法啓動--這時咱們能夠利用日誌服務器來恢復2 [root@M1 mfs]# kill -9 19886 # 直接強制殺死主進程來終止服務 [root@M1 mfs]# pwd /data/apps/mfs/var/mfs [root@M1 mfs]# mv ./* /root/backup/ # 移除掉mfs的元數據節點的元數據文件 [root@M1 mfs]# /data/apps/mfs/sbin/mfsmetarestore -a # 發現恢復不了 can't find backed up metadata file !!! # 從日誌服務器上copy內容來恢復 [root@M1 mfs]# scp -P 60920 192.168.1.139:/data/apps/mfs/var/mfs/* ./ [root@M1 mfs]# chown www:www ./* # 更改權限 [root@M1 mfs]# mv changelog_ml.0.mfs changelog.0.mfs # 重命名把文件名中的_ml去除 [root@M1 mfs]# mv changelog_ml.21.mfs changelog.21.mfs 。。。。。。。。。。。。。。。。 略 。。。。。。。。。。。。。。。。 [root@M1 mfs]# mv metadata_ml.mfs.back metadata.mfs.back [root@M1 mfs]# mv sessions_ml.mfs sessions.mfs [root@M1 mfs]# /data/apps/mfs/sbin/mfsmetarestore -a # 再次恢復,發現成功了 [root@M1 mfs]# /data/apps/mfs/sbin/mfsmaster start # 再次啓動,發現成功了 注:第一種恢復方法不會丟失數據;第二種恢復方法最多會丟失1h的數據(具體是在log服務器配置文件中的META_DOWNLOAD_FREQ項指定)。
(三) 誤刪文件恢復
參照回收站一節
####################################################
#### 性能測試及比較(在虛擬機上進行的) ####
#################################################### (一) 本機測試 1 小文件 [root@M1 ~]# dd if=/dev/zero of=xiaowenjian.txt bs=100K count=5000 5000+0 records in 5000+0 records out 512000000 bytes (512 MB) copied, 12.0778 s, 42.4 MB/s 2 大文件 [root@M1 ~]# dd if=/dev/zero of=dawenjian.txt bs=10M count=50 50+0 records in 50+0 records out 524288000 bytes (524 MB) copied, 13.6094 s, 38.5 MB/s (二) GFS測試 1 小文件 [root@M1 ~]# dd if=/dev/zero of=/home/data/wwwroot/web/share/gfsxwj.txt bs=100K count=5000 5000+0 records in 5000+0 records out 512000000 bytes (512 MB) copied, 43.115 s, 11.9 MB/s 2 大文件 [root@M1 ~]# dd if=/dev/zero of=/home/data/wwwroot/web/share/gfsdwj2.txt bs=10M count=50 50+0 records in 50+0 records out 524288000 bytes (524 MB) copied, 42.9625 s, 12.2 MB/s (三) MooseFs 1 小文件 [root@M1 ~]# dd if=/dev/zero of=/home/data/wwwroot/web/sharemfs/mfsxwj2.txt bs=100K count=5000 5000+0 records in 5000+0 records out 512000000 bytes (512 MB) copied, 32.6133 s, 15.7 MB/s [root@M1 ~]# dd if=/dev/zero of=/home/data/wwwroot/web/sharemfs/mfsdwj.txt bs=10M count=50 50+0 records in 50+0 records out 524288000 bytes (524 MB) copied, 37.6028 s, 13.9 MB/s