分佈式存儲之MogileFS

<font color=red><B>一、MogileFS的概念:</B></font>
       MogileFS是一個開源的分佈式文件存儲系統,是由LiveJournal旗下的Danga Interactive公司開發。目前使用MogileFS的公司非常多,如日本排名先前的幾個互聯公司以及國內的Yupoo(又拍)、digg、豆瓣、大衆點評、搜狗等,分別爲所在的組織或公司管理着海量的圖片。以大衆點評爲例,用戶全部圖片均有MogileFS存儲,數據量已經達到500TB以上。
<font color=red><B>二、MogileFS的特性:</B></font>
       1、支持多節點冗餘
       2、可實現自動的文件複製
       3、使用名稱空間(命名空間),每個文件通過key來確定
       4、不需要RAID,應用層可以直接實現R         ID,不共享任何東西,通過“集羣”接口提供服務
       5、工作在應用層,沒有特殊的組件要求
       6、不共享任何數據,mogilefs不需要依靠昂貴的SAN來共享磁盤,每個機器只用維護好自己的磁盤
<font color=red><B>三、MogileFS的構成:</B></font>
<b>1、tracker節點:</b>
        tracker是調度器,是mogilefs的核心部分,MogileFSd 進程就是trackers進程程序,trackers 做了很多工作:Replication,Deletion,Query,Reaper,Monitor 等等,這個是基於事件的( event-based ) 父進程/消息總線來管理所有來之於客戶端應用的交互(requesting operations to be performed),包括將請求負載平衡到多個“query workers”中,然後讓 MogileFSd 的子進程去處理。
<b>2、database節點:</b>
       database存放mogilefs的元數據 (命名空間, 和文件在哪裏),是Trackers來操作和管理它,可以用mogdbsetup程序來初始化數據庫,因爲數據庫保存了MogileFS的所有元數據,建議做成HA架構。
<b>3、storage節點:</b>
       storage是mogilefs的存儲文件儲存的地方,也是 mogstored 節點,也叫 Storage Server,一臺存儲要啓動一個mogstored服務,擴容就是增加這些機器,擴大文件存放的地方。
<font color=red><B>四、MogileFS的安裝:</B></font>
       常用的有兩種安裝方式:yum安裝和perl程序安裝。
<b>yum安裝:</b>在線安裝,好處是安裝方式簡單,不易出錯;常用的安裝yum源爲epel。
       yum install perl-Net-Netmask perl-IO-String perl-Sys-Syslog perl-IO-AIO
本地安裝的rpm包:
       MogileFS-Server-2.46-2.el6.noarch.rpm #核心服務
       perl-Danga-Socket-1.61-1.el6.rf.noarch.rpm #socket
       MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm # tracker節點
       perl-MogileFS-Client-1.14-1.el6.noarch.rpm #客戶端
       MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm #Storage存儲節點
       MogileFS-Utils-2.19-1.el6.noarch.rpm #主要是MogileFS的一些管理工具,例如mogadm等。
<b>perl程序源碼包安裝:</b>
       1.yum -y install make gcc unzip perl-DBD-MySQL perl perl-CPAN perl-YAML perl-Time-HiRes
       2.下載Sys-Syscall-0.23.tar.gz程序安裝包:
          http://search.cpan.org/CPAN/authors/id/B/BR/BRADFITZ/Sys-Syscall-0.23.tar.gz
       3.rz Sys-Syscall-0.23.tar.gz
       4.tar -xvf Sys-Syscall-0.23.tar.gz
       5.cd Sys-Syscall-0.23/
       6.perl Makefile.PL
       7.make && make install
<font color=red><B>五、MogileFS程序路徑:</B></font>
       主程序:/usr/bin/mogilefsd
       命令行管理工具程序:/usr/bin/mogadm
       主配置文件(Tracker):/etc/mogilefs/mogilefsd.conf
       主配置文件(Storage Nodes):/etc/mogilefs/mogstored.conf
<font color=red><B>六、MogileFS的主配置文件解析:</B></font>
<b>tracker配置文件:/etc/mogilefs/mogilefsd.conf</b>
【1】 daemonize = 1 #設置爲1表示啓動爲守護進程
【2】 db_dsn = DBI:mysql:mogilefs:host=127.0.0.1
           db_user = username
           db_pass = password #配置數據庫連接相關信息
【3】listen = 127.0.0.1:7001 #mogilefs監聽地址,監聽在127.0.0.1表示只允許從本機登錄進行管理
【4】query_jobs = 10 #啓動多少個查詢工作線程
【5】delete_jobs = 1 #啓動多少個刪除工作線程
【6】replicate_jobs = 5 #啓動多少個複製工作線程
【7】reaper_jobs = 1 #啓動多少個用於回收資源的線程
<b>storage配置文件:/etc/mogilefs/mogstored.conf</b>
【1】maxconns = 10000 #存儲系統的最大連接數
【2】httplisten = 0.0.0.0:7500 #可通過http訪問的服務端口
【3】mgmtlisten = 0.0.0.0:7501 #mogilefs的管理端口
【4】docroot = /var/mogdata #該項決定了數據在storage上存儲的實際位置,建議使用的是一個單獨掛載使用的磁盤
<font color=red><B>七、Mogilefs服務初始化:</B></font>
<b>1、數據庫授權:</b>
       GRANT ALL PRIVILEGES ON . TO 'mogile' @'127.0.0.1' IDENTIFIED BY 'mogile' WITH GRANT OPTION;
【注:WITH GRANT OPTION 表示前面授權的mogile用戶也可以對其他用戶授權】
<b>2、設定數據庫:</b>
       mogdbsetup --help 查看幫助
       mogdbsetup --dbhost=172.17.251.222 --dbpass=123456
       用戶名默認爲:mogile
<b>3、添加運行用戶:</b>
       useradd -r mogilefs
       mkdir /var/run/mogilefsd/
       chown -R mogilefs.mogilefs /var/run/mogilefsd #yum安裝的話已經完成
<b>4、修改主配置文件:</b>
       Tracker配置文件:/etc/mogilefs/mogilefsd.conf
       Storage配置文件:/etc/mogilefs/mogstored.conf
<b>5、啓動服務:</b>
       Tracker啓動:/etc/init.d/mogilefsd start
       Storage啓動:/etc/init.d/mogstored start
<font color=red><B>八、Mogilefs的管理:</B></font>
       mogstored 程序的啓動將使主機本身成爲一個存儲的節點,mogstored啓動後,還需要使用mogadm來讓當前的這個主機加入到MogileFS的系統中,這就是一個存儲節點,注意存儲節點中還需要添加設備,每個設備有一個uniq的ID號,同樣也要使用mogadm 來加入到 MogileFS 的系統中。
<b>MogileFS 中的存儲主機(節點)管理:</b>
<b>1.添加“存儲節點”到 trackers 中:</b>
【mogadm host add <storage_node_name> --ip=127.0.0.1 --port=7500 --status=alive/down】 #添加主機,將主機信息註冊到數據庫中
<b>2.修改添加到trackers中的“存儲節點”:</b>
【mogadm --tracker=172.17.17.222:7001 host modify node1 --ip=172.17.17.221 --port=7500 --status=alive/down】
<b>3.檢查這個主機是否加入到 MogileFS 的系統中:</b>
【mogadm --tracker=172.17.17.222:7001 host list】或【mogadm --tracker=172.17.17.222:7001 check】
<b>MogileFS 中的存儲設備管理:</b>
       建一個目錄(並且需要mount一個硬盤給這個目錄)給這個"設備" 使用, 我們這的例子是使用dev1在主機中建一個目錄,建目錄使用 dev + ID 這種格式,記的所有系統中ID不能重複。也必須和配置文件中的路徑一樣。
1.【mkdir -p /data/mogdata/dev1】 *一定要注意, 給相對應用的塊設備mount到這個點, 軟鏈也行。不然寫文件都會寫到系統硬上,其它的硬盤都是空的
2.【mogadm device add <storage_node_name> ID】 #把"設備"加入”存儲的節點“當中,相當於把每個設備加入MogileFS的存儲系統
3.【mogadm device list】 #查看添加的設備
4.【mogadm device mark <storage_node_name> <storage_node_name> ID dead】 #標記失效的設備,當硬盤壞了,設備有問題時,這時會自動在一個域內複製到最小設置的保存份數,恢復上面一樣在一次add設備就好了
<b>MogileFS 中域,類的管理:</b>
       當上面的準備好了,MogileFS 是運行中時,接下來我們要建一個我們自己的'名字空間'和加入文件到存儲當中。我們使用 mogadm 的工具來能創建一個"域"和"類",也可以使用這個來增加文件到"類"中。
<b>1.建"域"</b>
【mogadm domain add <domain_name>】
<b>2.檢查"域",顯示存在的域</b>
【mogadm domain list】
<b>3.在"域"中建"類",並加入最小保存份數</b>
【mogadm class add <domain_name> <class_name> --mindevcount=3】
<b>MogileFS 中文件管理:</b>
       若沒有在/etc/mogilefs/mogilefs.conf 中指定 trackers , 那麼需要在下面的命令都加上--trackers來指定。
<b>1.上傳文件:</b>
【mogupload --domain=magedu --key=<key_name> --file=<file_path>】
<b>2.查詢文件:</b>
【mogfileinfo --trackers=host --domain=<domain_name> --key=<key_name>】
<b>3.刪除指定文件:</b>
【mogdelete --domain=<domain_name> --key=<key_name>】
<b>4.列出指定domain下面的所有的key,也可以指定的一個前綴, 來找特定前綴的所有文件的key。</b>
【moglistkeys --domain=<domain_name> --key_prefix=<key_name>】
<b>5.列出指定 fid 的文件:</b>
     這個 fromfid 是指 mogileFS 內部的文件 id , 這個是自增的, 你可以指定一個開始的位置, 指定顯示多少文件, 這個用於查詢指定時間段內上傳的文件時很有用. 比如我們在 8 點上傳了一個文件, 是 100 的 id, 我們可以查詢到從這個之後的所有的 id 的文件。
【moglistfids --fromfid=<file_id> --count=<數量>】
<b>暫時停止服務器:</b>
     如果你需要維護一個服務器,比如更新內存,升級操作系統之類的需要關機的操作,推薦你在操作之前先設置這些爲 "down"。MogileFS 對這種偶然的故障可以很彈性的處理。
       $ mogadm host mark mystorage down
       $ mogadm host mark mystorage alive
<b>添加新的硬盤設備編號:</b>
     添加新的硬盤設備需要給一個唯一的,增量的設備 ID(devid)。如果你用一個新的硬盤來更換壞掉的硬盤,總是需要給一個新的 devid。不能重用老的devid。之所以這樣做的原因是可以讓你從舊設備中給所有文件列表中的文件,重新複製到其它的Mogilefs 的硬盤中.不然容易引起文件不會複製到這個中和錯誤的更新,也不會重新複製的舊文件。
添加設備的命令如下:
【mogadm --tracker=172.17.xxx.xxx:7001 device add node 5 --status=alive】
【mogadm --tracker=172.17.xxx.xxx:7001 device add node 5 --status=down】
<b>只讀模式和耗盡(Drain) 模式:</b>
     如果你想要凍結設備上所有的文件,你要使用只讀模式就行了。這將停掉 MogileFS 存放新文件到這個設備上,但它也將阻止刪除文件。代替的刪除的操作是會給這些內容放到隊列中等待爲您標記爲'alive'着或'drain'。
【mogadm device mark mystorage 5 readonly】
【mogadm device mark mystorage 5 drain】
     耗盡(Drain) 模式,在2.40和更高版本以上,告訴MogileFS不會有新的文件應寫入設備。但是在耗盡(Drain) 模式,文件可能被刪除。所以如果你不希望寫文件到這個設備上,可以設置爲drain的模式。
注:耗盡(Drain) 模式在MogileFS的早期版本,將會從設備刪除 FIDS。現在它已經被重新均衡的功能取代。
<b>重新複製文件: </b>
     如果有一個硬盤壞了MogileFS可以自動的讓請求不在訪問這個設備,但是不會自動的重新複製這個硬盤的文件,你必須通過 mogadm來手工來標誌成 'dead'。只要你這樣做,MogileFS將開始刪除設備上的文件,並試圖在集羣間重新複製它們到其它的設備上。

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