如何搭建MFS分佈式文件系統?理論+實操!

前言

一:MFS理論部分

1.1:分佈式簡介

  • 分佈式文件系統(Distributed File System) 是指文件系統管理的物理存儲資源不一定直接連接在本地節點上,而是通過計算機網絡與節點相連。
  • 簡單來說就是把一些分散的(分佈在局域網內各個計算機上) 共享文件夾, 集合到一個文件夾內(虛擬共享文件夾)。 對於用戶來說, 要訪問這些共享文件夾時, 只要打開這個虛擬共享文件夾, 就可以看到所有鏈接到虛擬共享文件夾內的共享文件夾, 用戶感覺不到這些共享文件是分散於各個計算機上的。
  • 分佈式文件系統的好處是集中訪問、 簡化操作、 數據容災、 提高文件存取性能

1.2:MFS原理

  • MooseFS是一個具有容錯性的網絡分佈式文件系統。它把數據分散存放在多個物理服務器上,而呈現給用戶的則是一個統一的資源。
1.2.1:MFS文件系統的組成
  • 元數據服務器(Master server)

    • 一臺管理整個文件系統的獨立主機,存儲着每個文件的元數據(文件的大小、屬性、位置信息,包括所有非常規文件的所有信息,例如目錄、套接字、管道以及設備文件)

    • 在整個體系中負責管理文件系統, 維護元數據

  • 元數據日誌/備份服務器(MetaLogger server)

    • 任意數量的服務器,用來存儲元數據變化日誌並週期性下載主要元數據文件,以便用於管理服務器意外停止時好接替其位置。

    • 備份 Master 服務器的變化日誌文件, 文件類型爲 changelog_ml.*.mfs。 當 Master 服務器數據丟失或者損壞,可以從日誌服務器中取得文件恢復

  • 數據存儲服務器(Chunk Server)

    • 任意數量的服務器,用來存儲元數據變化日誌並週期性下載主要元數據文件,以便用於管理服務器意外停止時好接替其位置。

    • 真正存儲數據的服務器。 存儲文件時, 會把文件分塊保存, 並在數據服務器之間複製, 數據服務器越多, 能使用的“容量” 就越大, 可靠性就越高, 性能越好。

  • 客戶端(Client)

    • 任意數量的主機,可以通過mfsmount進程與管理服務器(接收和更改元數據)和數據服務器(改變實際文件數據)進行交流。

    • 可以像掛載 NFS 一樣掛載 MFS 文件系統, 其操作是相同的。

  • mark

1.2.3:MFS 讀取數據的處理過程
  • 【1】客戶端向元數據服務器發出讀請求。
  • 【2】元數據服務器把所需數據存放的位置(Chunk Server 的 IP 地址和 Chunk 編號) 告知客戶端。
  • 【3】客戶端向已知的 Chunk Server 請求發送數據。
  • 【4】Chunk Server 向客戶端發送數據。
  • mark
1.2.4:MFS 寫入數據的處理過程
  • 【1】客戶端向元數據服務器發送寫入請求。
  • 【2】元數據服務器與 Chunk Server 進行交互(只有當所需的分塊 Chunks 存在的時候才進行這個交互),但元數據服務器只在某些服務器創建新的分塊Chunks,創建成功後由Servers 告知元數據服務器操作成功
  • 【3】元數據服務器告知客戶端, 可以在哪個 Chunk Server 的哪些 Chunks 寫入數據。
  • 【4】客戶端向指定的 Chunk Server 寫入數據
  • 【5】該 Chunk Server 與其他 Chunk Server 進行數據同步
  • 【6】 數據同步成功
  • 【7】同步成功後 Chunk Server 告知客戶端數據寫入成功。
  • 【8】客戶端告知元數據服務器本次寫入完畢。
  • mark

二:MFS部署實驗

2.1:環境介紹

  • VMware軟件

  • 主機 操作系統 IP地址 主要軟件
    Master Server CentOS 7.6 x86_64 192.168.233.131 moosefs-3.0.100-1.tar.gz
    MetaLogger Server CentOS 7.6 x86_64 192.168.233.132 moosefs-3.0.100-1.tar.gz
    Chunk Server1 CentOS 7.6 x86_64 192.168.233.133 moosefs-3.0.100-1.tar.gz
    Chunk Server2 CentOS 7.6 x86_64 192.168.233.128 moosefs-3.0.100-1.tar.gz
    Chunk Server3 CentOS 7.6 x86_64 192.168.233.129 moosefs-3.0.100-1.tar.gz
    Client CentOS 7.6 x86_64 192.168.233.130 moosefs-3.0.100-1.tar.gz
    fuse-2.9.2.tar.gz

2.2:實驗目的

  • 多臺Web服務器通過NFS共享一個存儲,會有如下問題:
    • 1、業務功能上滿足需求
    • 2、在性能與容量上無法勝任更高的要求
    • 3、NFS服務器不堪重負,出現超時問題
    • 4、NFS存在着單點故障問題
  • 採用MFS解決以上問題
    • 1、採用分佈式文件系統
    • 2、服務器之間的數據訪問不再是一對多的關係,而是多對多的關係
    • 3、可以使性能得到大幅提升

2.3:拓撲圖

  • mark

2.4:實驗過程

  • 六臺服務器上關閉防火牆、關閉核心防護、配置主機名、配置hosts

  • 此處僅展示client的操作

    [root@localhost ~]# hostnamectl set-hostname client	'//修改主機名'
    [root@localhost ~]# su
    [root@client ~]# systemctl stop firewalld	'//關閉防火牆'
    [root@client ~]# systemctl disable firewalld	'//取消開機自啓動'
    Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
    Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
    [root@client ~]# setenforce 0	'//關閉核心防護'
    [root@client ~]# vi /etc/sysconfig/selinux 
    SELINUX=disabled	'//取消開啓自啓動'
    [root@client ~]# vi /etc/hosts	'//修改本地主機映射文件'
    192.168.233.131	master
    192.168.233.132	metalogger
    192.168.233.133	chunk01
    192.168.233.128	chunk02
    192.168.233.129	chunk03
    192.168.233.130 client
    [root@client ~]# yum -y install gcc gcc-c++ zlib-devel	'//安裝編譯器'
    
    
2.4.1:搭建 MFSmaster
  • 創建用戶並編譯安裝源碼包

    [root@master ~]# useradd -s /sbin/nologin -M mfs	'//創建用戶'
    [root@master ~]# mount.cifs //192.168.11.1/ccc /mnt	'//掛載宿主機目錄'
    Password for root@//192.168.11.1/ccc:  
    [root@master ~]# cd /mnt/mfs
    [root@master mfs]# tar zxvf moosefs-3.0.100-1.tar.gz -C /opt	'//解壓源碼包到/opt目錄下'
    [root@master mfs]# cd /opt/moosefs-3.0.100/
    [root@master moosefs-3.0.100]# ./configure \	'//進行配置'
    > --prefix=/usr/local/mfs \	'//指定安裝目錄'
    > --with-default-user=mfs \	'//指定運行用戶'
    > --with-default-group=mfs \	'//指定運行組'
    > --disable-mfschunkserver \	'//禁用chunk功能'
    > --disable-mfsmount	'//禁用mfsmount功能'
    [root@master moosefs-3.0.100]# make && make install	'//編譯安裝'
    
    
  • 複製 master 配置文件

    [root@master opt]# cd /usr/local/mfs/etc/mfs/	'//進入mfs目錄'
    [root@master mfs]# ls
    mfsexports.cfg.sample  mfsmaster.cfg.sample  mfsmetalogger.cfg.sample  mfstopology.cfg.sample
        '//將幾個配置文件的模板複製一下'
    [root@master mfs]# cp mfsmaster.cfg.sample mfsmaster.cfg
    [root@master mfs]# cp mfsexports.cfg.sample mfsexports.cfg
    [root@master mfs]# cp mfstopology.cfg.sample mfstopology.cfg
    [root@master mfs]# cd /usr/local/mfs/var/mfs/
    [root@master mfs]# cp metadata.mfs.empty metadata.mfs
    [root@master mfs]# chown mfs:mfs /usr/local/mfs/var/mfs	'//設置目錄的屬主屬組'
    [root@master mfs]# /usr/local/mfs/sbin/mfsmaster start	'//開啓master server'
    [root@master mfs]# netstat -anpt | grep mfs	'//檢測mfs是否開啓'
    tcp        0      0 0.0.0.0:9419            0.0.0.0:*               LISTEN      41396/mfsmaster     
    tcp        0      0 0.0.0.0:9420            0.0.0.0:*               LISTEN      41396/mfsmaster     
    tcp        0      0 0.0.0.0:9421            0.0.0.0:*               LISTEN      41396/mfsmaster   
        '//停止 Master Server 的命令是/usr/local/mfs/sbin/mfsmaster stop'
    
2.4.2:搭建 MFS 日誌服務器
  • 相同方法編譯安裝源碼包,並創建用戶,此處不在贅述

  • 複製 metalogger 主配置文件並編輯

    [root@metalogger moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs
    [root@metalogger mfs]# ls
    mfsexports.cfg.sample  mfsmaster.cfg.sample  mfsmetalogger.cfg.sample  mfstopology.cfg.sample
    [root@metalogger mfs]# cp mfsmetalogger.cfg.sample mfsmetalogger.cfg
    [root@metalogger mfs]# vim mfsmetalogger.cfg	'//編輯日誌配置文件'
     MASTER_HOST = 192.168.233.131	'//取消註釋,指定master服務器地址'
    
    
  • 啓動mfs服務

    [root@metalogger mfs]# /usr/local/mfs/sbin/mfsmetalogger start
    open files limit has been set to: 4096
    working directory: /usr/local/mfs/var/mfs
    lockfile created and locked
    initializing mfsmetalogger modules ...
    mfsmetalogger daemon initialized properly
    [root@metalogger mfs]# netstat -anpt | grep mfs
    tcp        0      0 192.168.233.132:37252   192.168.233.131:9419    ESTABLISHED 51991/mfsmetalogger 
    
    
2.4.3:搭建 chunk 存儲端
  • 相同方法編譯安裝源碼包,並創建用戶,此處不在贅述

  • 三臺節點的操作都是相同的,此處僅展示一個節點的操作

  • 複製 mfschunk 主配置文件並編輯

    [root@chunk01 moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs/
    [root@chunk01 mfs]# ls
    mfschunkserver.cfg.sample  mfshdd.cfg.sample  mfsmetalogger.cfg.sample
    [root@chunk01 mfs]# cp mfschunkserver.cfg.sample mfschunkserver.cfg
    [root@chunk01 mfs]# cp mfshdd.cfg.sample mfshdd.cfg
    [root@chunk01 mfs]# vi mfschunkserver.cfg	'//編輯存儲節點配置文件'
    MASTER_HOST = 192.168.100.40	'//指向master服務器地址'
    [root@chunk01 mfs]# vim mfshdd.cfg
    /data	'//添加一個掛載點目錄'
    [root@chunk01 mfs]# mkdir /data	'//創建掛載點'
    [root@chunk01 mfs]# chown -R mfs:mfs /data	'//給掛載點屬主屬組'
    
    
  • 啓動mfs服務

    [root@chunk01 mfs]# /usr/local/mfs/sbin/mfschunkserver start
    [root@chunk01 mfs]# netstat -anpt | grep mfs
    tcp        0      0 0.0.0.0:9422            0.0.0.0:*               LISTEN      103672/mfschunkserv 
    tcp        0      0 192.168.233.133:49394   192.168.233.131:9420    ESTABLISHED 103672/mfschunkserv 
    
2.4.4:使用 MFS 掛在到客戶端
  • 安裝 FUSE

    [root@master ~]# useradd -s /sbin/nologin -M mfs
    [root@master ~]# mount.cifs //192.168.11.1/ccc /mnt
    Password for root@//192.168.11.1/ccc:  
    [root@master ~]# cd /mnt/mfs
    [root@master mfs]# tar zxvf moosefs-3.0.100-1.tar.gz -C /opt
    [root@master mfs]# tar xzvf fuse-2.9.2.tar.gz -C /opt
    [root@master mfs]# cd /opt/fuse-2.9.2
    [root@client fuse-2.9.2]# ./configure
    [root@client fuse-2.9.2]# make && make install
        '//設置環境變量'
    [root@client fuse-2.9.2]# echo "export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH" >> /etc/profile
    [root@client fuse-2.9.2]# source /etc/profile	'//使之不重啓即可生效'
    
    
  • 安裝 MFS 客戶端

    [root@client fuse-2.9.2]# cd ../moosefs-3.0.100/
    [root@client moosefs-3.0.100]# ./configure \
    > --prefix=/usr/local/mfs \
    > --with-default-user=mfs \
    > --with-default-group=mfs \
    > --disable-mfsmaster \
    > --disable-mfschunkserver \
    > --enable-mfsmount
    [root@client moosefs-3.0.100]# make && make install
    
  • 掛載 MFS 文件系統

    [root@client moosefs-3.0.100]# cd
    [root@client ~]# mkdir /opt/mfs	'//創建掛載點'
    [root@client ~]# modprobe fuse	'//加載fuse模塊到內核'
    [root@client ~]# /usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.233.131	'//指向master服務器地址'
    mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root
    [root@client ~]# df -hT
    文件系統                類型      容量  已用  可用 已用% 掛載點
    。。。省略內容
    192.168.233.131:9421    fuse.mfs   60G   13G   48G   21% /opt/mfs	'//掛載成功'
    
    
  • MFS優化操作

    '//MFS 在客戶端安裝完畢後, 會生成/usr/local/mfs/bin/目錄, 在這個目錄下有很多命令是用戶所需要的。 爲了方便使用這些命令,將/usr/local/mfs/bin 加入到環境變量中'
    [root@client ~]# echo "export PATH=/usr/local/mfs/bin:$PATH" >> /etc/profile
    [root@client ~]# source /etc/profile
    '//mfsgetgoal 命令用來查詢文件被複制的份數, 利用-r 命令可以對整個目錄進行遞歸,goal 是指文件被複制的份數'
    [root@client ~]# mfsgetgoal -r /opt/mfs
    /opt/mfs:
     directories with goal          2 :          1
    
    '//命令 mfsgetgoal 用來設置文件被複制的份數, 生產環境 Chunk Server 節點數量應至少大於 2, 文件副本數小於等於 Chunk Server 服務器的數量'
    [root@client ~]# mfssetgoal -r 3 /opt/mfs/
    /opt/mfs/:
     inodes with goal changed:                       1
     inodes with goal not changed:                   0
     inodes with permission denied:                  0
    
    '//創建文件測試一下'
    [root@client ~]# cd /opt/mfs
    [root@client mfs]# touch aaa.txt
    [root@client mfs]# mfsgetgoal aaa.txt
    aaa.txt: 3
    
    
2.4.5:創建 MFS 監控
  • master服務器啓動監控程序

    [root@master ~]# /usr/local/mfs/sbin/mfscgiserv
    
  • mfscgiserv是用python編寫的一個web服務器,其監聽端口是9425,可以在masster server 上通過 /usr/local/mfs/sbin/mfscgiserv來啓動,用戶利用瀏覽器就可以完全監控所有客戶掛接、Chunk server、Master server等。

2.4.6:訪問測試
  • 宿主機瀏覽器打開http://192.168.233.131:9425
  • mark
  • 宿主機瀏覽器打開http://192.168.233.131:9425/mfs.cgi?masterhost=master ,注意主機名
  • mark
  • 其中各部分的含義如下:
    • Info 部分: 顯示了 MFS 的基本信息。
    • Servers 部分: 列出現有 Chunk Server。
    • Disks 部分: 列出現有 Chunk Server 硬盤信息。
    • Exports 部分: 列出可被掛載的目錄。
    • Mounts 部分: 列出被掛載的目錄。
    • Operations 部分: 顯示正在執行的操作。
    • Resources 部分: 列出當前存儲信息。
    • Quitas 部分: 列出當前配額信息。
    • Master charts 部分: 顯示 Master Server 的操作情況, 讀、 寫、 刪除等操作。
    • Server charts 部分: 顯示 Chunk Server 的操作情況、 數據傳輸率及系統狀態。

三:學習 MFS 維護及災難恢復

3.1:MFS 集羣的啓動與停止

  • MFS 集羣啓動的順序如下
    • (1) 啓動 mfsmaster 進程。
    • (2) 啓動所有的 mfschunkserver 進程。
    • (3) 啓動 mfsmetalogger 進程(如果配置了 mfsmetalogger)。
    • (4) 在所有的客戶端掛載 MFS 文件系統。
  • MFS 集羣停止的順序如下。
    • (1) 在所有的客戶端卸載 MFS 文件系統。
    • (2) 用 mfschunkserver stop 命令停止 chunkserver 進程。
    • (3) 用 mfsmetalogger stop 命令停止 metalogger 進程。
    • (4) 用 mfsmaster stop 命令停止 master 進程

3.2:MFS 災難恢復

  • 整個 MFS 體系中, 直接斷電只有 Master 有可能無法啓動, 可以在 master 上使用命令 /usr/local/mfs/sbin/mfsmaster -a修復

  • MFS 元數據通常有兩部分的數據, 分別如下:

    • 1、主要元數據文件 metadata.mfs, 當 mfsmaster 運行時會被命名爲 metadata.mfs.back。

    • 2、元數據改變日誌 changelog.*.mfs, 存儲了過去的 N 小時的文件改變(N 的數值是由
      BACK_LOGS 參數設置的, 參數的設置在 mfschunkserver.cfg 配置文件中)。

    • 3、在 Master 發生故障時, 可以從 MetaLogger 中恢復 Master, 步驟如下。

    • 4、安裝一臺 mfsmaster, 利用同樣的配置來配置這臺 mfsmaster。

    • 5、將 metalogger 上 /usr/local/mfs/var/mfs/目錄下的文件複製到 master 相應的目錄中
      [root@master ~]#scp [email protected]:/usr/local/mfs/var/mfs/* /usr/local/mfs/var/mfs/

  • 利用 mfsmetarestore 命令合併元數據changelogs

    • [root@master ~]#/usr/local/mfs/sbin/mfsmaster -a
    • 如果是全新安裝的 Master, 恢復數據後, 要更改 metalogger 和 chunkserver 配置MASTER_HOST 的 IP, 客戶端也需要重新掛載

3.3:災難測試,恢復測試及其他測試參考資料

  • 1.client 機器無論怎樣操作都不會影響master

    • - 客戶端強制kill -9殺掉mfsmount進程,需要先umount,然後再mount。否則會提示:
      - fuse: bad mount point `/usr/mfstest/': Transport endpoint is not connected
      - see: /usr/local/mfs/bin/mfsmount -h for help
      
  • 2。matser、metalogger、chunker、client端,服務器關機(init0)和重啓(init6)時,程序都是正常關閉,無需修復。

  • 3。master啓動後,metalogger、chunker、client三個元素都能自動與master建立連接。

    •    - 正常啓動順序:matser---chunker---metalogger---client
               關閉順序:client---chunker---metalogger---master
         - 但實際中無論如何順序啓動或關閉,未見任何異常。
      
  • 4、整個mfs體系中,直接斷電只有master有可能無法啓動。

    • -使用mfsmetarestore -a修復才能啓動,如果無法修復,使用metalogger上的備份日誌進行恢復。(幾次測試發現:如果mfsmetarestore -a無法修復,則使用metalogger也無法修復)。
      
      -強制使用metadata.mfs.back創建metadata.mfs,可以啓動master,但應該會丟失1小時的數據。
      
      -mfs開發小組針對此問題回信:明確表示會丟失故障點到上一個整點之間的數據。和之前我猜測的一致。因爲對mfs的操作日誌都記錄到changelog.0.mfs裏面。changelog.0.mfs每小時合併一次到metadata.mfs中,如果突然斷電,則changelog.0.mfs裏面的信息就沒有合併到metadata中,強制使用metadata.mfs.back創建metadata.mfs,就會導致丟失changelog.0.mfs裏的數據。
      
      -直接斷電測試過程,使用mfsmetarestore –a無法修復,使用metalogger也無法修復的情況較少發生。5次只有一次無法修復。
       
      
  • 5、chunker的維持:chunker的塊(chunks)能夠自動複製或刪除

    • -對一個目錄設定“goal”,此目錄下的新創建文件和子目錄均會繼承此目錄的設定,但不會改變已經存在的文件及目錄的copy份數。但使用-r選項可以更改已經存在的copy份數。
       
      -goal設置爲2,只要兩個chunker有一個能夠正常運行,數據就能保證完整性。
      假如每個文件的goal(保存份數)都不小於2,並且沒有under-goal文件(可以用mfsgetgoal –r和mfsdirinfo命令來檢查),那麼一個單一的chunkserver在任何時刻都可能做停止或者是重新啓動。以後每當需要做停止或者是重新啓動另一個chunkserver的時候,要確定之前的chunkserver被連接,而且要沒有under-goal chunks。
       
      -實際測試時,傳輸一個大文件,設置存儲2份。傳輸過程中,關掉chunker1,這樣絕對會出現有部分塊只存在chunker2上;啓動chunker1,關閉chuner2,這樣絕對會有部分塊只存在chuner1上。
      把chunker2啓動起來。整個過程中,客戶端一直能夠正常傳輸。
      
      -在客戶端查看,一段時間內,無法查看;稍後一段時間後,就可以訪問了。文件正常,使用mfsfileinfo 查看此文件,發現有的塊分佈在chunker1上,有的塊分佈在chuner2上。
      使用mfssetgoal 2和mfssetgoal -r 2均不能改變此文件的目前塊的現狀。
      但使用mfssetgoal -r 1後,所有塊都修改成1塊了,再mfssetgoal -r 2,所有塊都修改成2份了。
       
       
      -測試chunker端,直接斷電情況下,chunker會不會出問題:
      a、數據傳輸過程中,關掉chunker1,等待數據傳輸完畢後,開機啓動chunker1.
      chunker1啓動後,會自動從chunker2複製數據塊。整個過程中文件訪問不受影響。
      b、數據傳輸過程中,關掉chunker1,不等待數據傳輸完畢,開機啓動chunker1.
      chunker1啓動後,client端會向chunker1傳輸數據,同時chunker1也從chunker2複製缺失的塊。
       
      -如果有三臺chunker,設置goal=2,則隨機挑選2個chunker存儲。
      -如果有一個chunker不能提供服務,則剩餘的2個chunker上肯定有部分chunks保存的是一份。則在參數(REPLICATIONS_DELAY_DISCONNECT = 3600)後,只有一份的chunks會自動複製一份,即保存兩份。
      保存兩份後,如果此時壞掉的chunker能夠提供服務後,此時肯定有部分chunks存儲了三份,mfs會自動刪除一份。
       
      -當我增加第三個服務器做爲額外的chunkserver時,雖然goal設置爲2,但看起來第三個chunkserver從另外兩個chunkserver上覆制數據。
      -硬盤空間平衡器是獨立地使用chunks的,因此一個文件的chunks會被重新分配到所有的chunkserver上。
      
      
  • 6、chunks修復 :mfsfilerepair

    • -mfsfilerepair用來處理壞文件(如讀操作引起的I/O錯誤),使文件能夠部分可讀。在丟失塊的情況下使用0對丟失部分進行填充;在塊的版本號(version)不匹配時設置塊的版本號爲master上已知的能在chunkerservers找到的最高版本號;注意:因爲在第二種情況下,可能存在塊的版本號一樣,但內容不匹配,因此建議在文件修復後,對文件進行拷貝(不是快照!),並刪除原始文件。
       
      Client端大文件傳輸過程中,強制拔下master主機電源,造成master非法關閉,使用mfsmetarestore -a修復後,master日誌報告有壞塊:
      Jan 19 17:22:17 ngmaster mfsmaster[3250]: chunkserver has nonexistent chunk (000000000002139F_00000001), so create it for future deletion
      Jan 19 17:22:18 ngmaster mfsmaster[3250]: (192.168.5.232:9422) chunk: 000000000002139F creation status: 20
      Jan 19 17:25:18 ngmaster mfsmaster[3250]: chunk 000000000002139F has only invalid copies (1) - please repair it manually 
      Jan 19 17:25:18 ngmaster mfsmaster[3250]: chunk 000000000002139F_00000001 - invalid copy on (192.168.5.232 - ver:00000000)
      Jan 19 17:26:43 ngmaster mfsmaster[3250]: currently unavailable chunk 000000000002139F (inode: 135845 ; index: 23)
      Jan 19 17:26:43 ngmaster mfsmaster[3250]: * currently unavailable file 135845: blog.xxx.cn-access_log200904.tar.gz
      Client端使用mfsfilerepair修復
      [root@localhost mfstest]# /usr/local/mfs/bin/mfsfilerepair blog.xxx.cn-access_log200904.tar.gz 
      blog.xxt.cn-access_log200904.tar.gz:
      chunks not changed: 23
      chunks erased: 1
      chunks repaired: 0
      查看master日誌,發現:
      Jan 19 17:30:17 ngmaster mfsmaster[3250]: chunk hasn't been deleted since previous loop - retry
      Jan 19 17:30:17 ngmaster mfsmaster[3250]: (192.168.5.232:9422) chunk: 000000000002139F deletion status: 13
      Jan 19 17:35:16 ngmaster mfsmaster[3250]: chunk hasn't been deleted since previous loop - retry
      Jan 19 17:35:16 ngmaster mfsmaster[3250]: (192.168.5.232:9422) chunk: 000000000002139F deletion status: 13
      Client端執行以下操作後,master不再報告相關信息:
      mv blog.xxt.cn-access_log200904.tar.gz blog.xxt.cn-access_log200905.tar.gz
      
  • 7、chunker的空間

    • -每一個chunkserver的磁盤都要爲增長中的chunks保留些磁盤空間,從而達到創建新的chunk。只有磁盤都超過256M並且chunkservers報告自由空間超過1GB總量纔可以被新的數據訪問。最小的配置,應該從幾個G 字節的存儲。
      
      -每個chunkerserver每次以256M的磁盤空間進行申請,客戶端查看得到的磁盤總使用情況的是每個chunkerserver使用量的總和。例如:如果你有3個chunkerserver,7個分區磁盤,每次你的硬盤使用會增加3*7*256MB (大約5GB)。假如你有150T的硬盤空間,磁盤空間就不用過多考慮了。
      
      -另外,如果你的chunkservers使用專用的磁盤,df將顯示正確的磁盤使用情況。但是如果你有其他的數據在你的MooseFS磁盤上,df將會計算你所有的文件。
      
      -如果你想看你的MooseFS文件的使用情況,請使用'mfsdirinfo'命令。
       
      
  • 8、快照snapshot

    • -可以快照任何一個文件或目錄,語法:mfsmakesnapshot src dst
      -但是src和dst必須都屬於mfs體系,即不能mfs體系中的文件快照到其他文件系統。
      Mfsappendchunks:追加chunks到一個文件
       
      snapshot測試:
      a、對一個文件做snapshot後,查看兩個文件的塊,是同一個塊。把原文件刪除,原文件刪除後(回收站中最初可以看到,但一段時間後,回收站中就徹底刪除了),snapshot文件仍然存在,並且可以訪問。使用mfsfileinfo查看,發現仍然是原來的塊。
      b、對一個文件做snapshot後,查看兩個文件的塊,是同一個塊。把原文件修改後,發現原文件使用的塊名變了,即使用的是一個新塊。而snapshot文件仍然使用原來的塊。
       
      
  • 9、回收站 trash bin

    • -設置文件或目錄的刪除時間。一個刪除的文件能夠存放在“ 垃圾箱”中的時間稱爲隔離時間, 這個時間可以用mfsgettrashtime 命令來查看,用mfssettrashtime 命令來設置。單位爲秒。
      -單獨安裝或掛載MFSMETA 文件系統(mfsmount -m mountpoint),它包含目錄/ trash (包含仍然可以被還原的刪除文件的信息)和/ trash/undel (用於獲取文件)。
      -把刪除的文件,移到/ trash/undel下,就可以恢復此文件。
      -在MFSMETA 的目錄裏,除了trash 和trash/undel 兩個目錄,還有第三個目錄reserved,該目錄內有已經刪除的文件,但卻被其他用戶一直打開着。在用戶關閉了這些被打開的文件後,reserved 目錄中的文件將被刪除,文件的數據也將被立即刪除。此目錄不能進行操作。
      
      
  • 10、文件描述符

    • -1.5.12版本,進行大量小文件寫時,出現了一個嚴重錯誤,有可能和操作系統文件描述符有關。操作系統默認文件描述符爲1024.
      -1.6.11版本默認爲100000
      -建議上線時,master和chunker修改文件描述符,即修改/etc/security/limits.conf添加
      * - nofile 65535
      
  • 11、mfscgiserv

    • -Mfscgiserv 是一個python 腳本, 它的監聽端口是9425 ,使用/usr/local/mfs/sbin/mfscgiserv 來直接啓動,使用瀏覽器就可全面監控所有客戶掛接, chunkserver 及master server,客戶端的各種操作等。
      
      
發佈了127 篇原創文章 · 獲贊 63 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章