用兩臺服務器配置moosefs

####################################
#####  網絡架構                #####
####################################

(一) 網絡架構
M1: 192.168.1.138 主服務器,存儲塊服務器,客戶端
M2: 192.168.1.139  日誌服務器,備份主控服務器,存儲塊服務器

####################################
####   具體安裝配置測試       ######
####################################

(一) 主服務器M1

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

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集羣

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。注意掛載其他目錄之前一定要先掛載根目錄)

(五)圖形化界面管理

[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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章