MogileFS的基本概念和原理

MogileFS存儲的基本概念

存儲節點

也就是mogstored節點,通常就是一臺用來存儲文件的服務器。

設備(device)         

    也就是用來存放文件的目錄,一個存儲節點可以有多個設備。

    每個設備都要指定一個不重複的ID,需要在mogstored 的配置文件中的 docroot 配 置的目錄下面創建相應的設備的目錄,名爲 $docroot/dev$id。

    設備是不能刪除的,只能將其狀態設置爲dead,當一個設備dead之後,就真的從集 羣中去掉,裏面的數據也無法恢復了,且這個設備的id也不能再用。

域(domain)

    域是MogileFS對所有存儲空間進行的邏輯劃分,可以有多個域,用來存放不同的文件。

    存放到MogileFs的文件必須有一個key,這個key在一個域中是不可以重複的。

類(class)

    類是用來控制複製份數的,在一個域中可以有多個類。 n 域 + 文件的key 在MogileFS,必須通過域 + 文件的key的組合,才能找到一個具體的文件

MogileFS的使用

基本使用步驟如下

1:添加Storeage節點到Tracker

    mogadm --trackers=<tracker_ip>:7001 host add <storage_node_name> --ip=192.168.1.106 --port=7500 --status=alive

        使用下面的語句來檢查這個主機是否加入到 MogileFS 的系統中

                mogadm host list

        如果要修改MogileFS中主機的信息,一定要加上狀態--status=alive,不然不能修改

                mogadm host modify storage_node_name--ip=192.168.1.106 --status=alive

2:添加存儲設備到Storeage節點

        mogadm device add <storage_node_name> ID

        使用下面的語句來檢查“設備”信息

                mogadm device list

        如果要標記設備失效,可以用下面的語句

                mogadm device mark <storage_node_name> ID dead

        要恢復的話,再一次 add 設備就好了

注意:Device ID是唯一的,一旦創建將無法刪除,只能mark爲dead。所以,如果你某個磁盤壞了,你mark爲 dead, 後來又修好了,那麼你必須重新格式化並命名爲新的device id, 不支持將device從dead變爲 alive. MogileFS

3:創建域:mogadm domain add <domain_name>

        檢查“域”,顯示存在的域:mogadm domain list

4:在“域”中建“類”,並加入最小保存份數

        mogadm class add <domain_name> <class_name> --mindevcount=2

        檢查“類”:mogadm class list

       檢查整個系統:mogadm --trackers=192.168.1.106:7001  check

5:使用mogtool來操作文件

    加入文件:mogtool inject <file_name> <key_name> --trackers=192.168.1.106:7001 -domain=<domain_name> --class=<class_name>

    取出文件:mogtool extract <key_name> <file_name> --trackers=192.168.1.106:7001 --domain=<domain_name> --class=<class_name>

    如果文件超過64M,mogtool會自動按照64M分割塊

    加入:mogtool inject --bigfile<file_name> <key_name> -trackers=192.168.1.106:7001 --domain=<domain_name> --class=<class_name> 

   取出:mogtool extract --bigfile<key_name> <file_name> -trackers=192.168.1.106:7001 --domain=<domain_name> --class=<class_name>

6:mogfileinfo:查看文件信息 mogfileinfo --trackers=<trackerHost> --domain=<domain_name> --key=‘keyName'

7:moglistkeys:列出所有的key ./moglistkeys --trackers=192.168.1.106:7001 --domain=c1

8:mogfetch:下載文件 ./mogfetch --trackers=192.168.1.106:7001 --domain=c1 --key='9' --file='tttt'   

9:mogupload :上傳文件 ./mogupload --trackers=192.168.1.106:7001 --domain=c1 --key='tt' --file='tttt'

10:mogstats:察看分佈式存儲的狀態 ./mogstats --config=/usr/common/mogilefs/mogilefsd.conf --config=/ 後面跟此節點的mogilefs的配置文件 ./mogstats --config=/usr/common/mogilefs/mogilefsd.conf --stats="devices" 僅顯示某個devices的信息, --stats可選值: devices,files,all

理解MogileFS——高層流程

基本流程如下

1:應用程序請求寫入一個文件,tracker接收到這個請求,會調用“create_open”

2:tracker做一些負載均衡的處理,決定應該去訪問哪些機器,然後給應用程序一些可用的機器位置。

3:應用程序寫到其中的一個機器,如果寫失敗,會重新嘗試並寫到另一個機器

4:應用程序通過”create_close” 告訴tracker文件寫到哪裏去了

5:tracker將該名稱和域命的名空間關聯,是通過數據庫來做的

6:tracker在後臺開始複製文件,以滿足該文件類別設定的複製規則

7:應用程序通過“get_paths”請求domain+key(key默認爲“filename”) 文件, tracker基於每一位置的I/O繁忙情況,返回該文件可用的完整URLs地址列表

8:應用程序然後按順序嘗試這些URL地址,(tracker’持續監測主機和設備的狀態,因此不會返回死連接 , 默認情況下對返回列表中的第一個元素做雙重檢查)


理解MogileFS——存儲節點

存儲節點的作用

        首先是用來存儲文件,其次需要對存儲節點的信息做維護查詢,包括:

        1:檢查在該存儲節點上的文件狀態,需要遍歷存儲的目錄

        2:檢查存儲節點上的磁盤空間使用情況 (DiskUsage)

        3:檢查本地設備上的每一個存儲文件的大小(FIDSizes)

        4:檢查設備的繁忙程度(IOState)

        5:提供Http服務做命令控制,並提供前面幾種的查詢,基本命令如下:

            size uri:檢查一個uri地址的文件大小,返回文件size

            watch:檢查設備的繁忙程度(iostat)

           fid_sizesstart end raw_devs:檢查一系列設備上存儲的文件的大小, 返回信息多行

        device fid size:檢查某個設備上 fid 的文件大小

在存儲節點上用來保存文件的存儲目錄結構

        基本的結構如:$docroot/dev$devnum/path/$fid.fid

                $docroot:主機上用來存儲的根路徑

                dev$devnum:該主機上被登記的設備的映射路徑

                path:做目錄分割將文件分散到不同目錄中,其值是fid除1000得餘數後轉化爲字符串通過/分隔 開來得到,這樣保證 一個目錄下不會有太多目錄和太多文件

                $fid.fid:對應記錄$fid的物理文件

理解MogileFS——表說明

MogileFS大致的表說明如下:

        checksum:用來存放文件的校驗

        class:文件分類定義   

        device:主機上的可用設備定義,包括設備可用空間,使用的權重等信息

        domain:域定義信息

        file:記錄文件的基本信息,屬於什麼類別,key和文件大小等信息

        file_on:記錄什麼設備上有什麼文件,一個文件在不同設備上的存儲各有一條記錄

        file_on_corrupt:損壞的文件,哪一個文件在哪個設備上損壞了

        file_to_delete:記錄要做刪除的文件

        file_to_delete2:記錄做刪除失敗的信息,包括下次重試時間和失敗次數

        file_to_delete_later:要延遲刪除的文件

        file_to_queue:隊列中的文件,通常是操作失敗了,進入隊列等待下次操作

        file_to_replicate:要做複製的文件,記錄來源設備,失敗次數和下次重試的時間等信息

        fsck_log:文件檢查日誌 host:主機定義,主機的ip,存儲節點服務所開的端口等信息

        server_settings:服務器的一些配置信息,採用key=>value的記錄方式保存

        tmpfile:複製的臨時文件信息

        unreachable_fids:不可到達的文件列表






發佈了23 篇原創文章 · 獲贊 13 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章