1. 程式人生 > >新手必讀:Linux分布式存儲之——Mogilefs

新手必讀:Linux分布式存儲之——Mogilefs

大數據 分布式存儲 mogilefs


一:分布式存儲產生背景

①時代背景

Web 2.0 時代的到來,使得單個計算機節點遠遠無法滿足用戶對海量數據和應用程序運行空間的需求。個人和企業都有安全而持久的存儲信息的需求,備份成為最通俗的手段。個人用戶通過保存多個拷貝的形式實現信息存儲的安全,小概率事件不易發生,但如中獎發生了,多個拷貝都失去後,崩潰恐怕不是簡單的心理表達,而將成為不可改變的事實,無法復原。存儲需要保持實時讀寫,提供復雜的查詢功能,缺乏容災和備份能力,大量無結構的數據的存儲和處理,對傳統的存儲方式提出挑戰。

②技術背景

互聯網技術的日新月異,迅速發展,風起“雲” 湧,“雲存儲”(Cloud Storage)系統提供在線的存儲服務。而分布式存儲正是通過利用這些存儲服務,將數據分散存儲在多臺服務器上,從而使得數據存儲實現部署簡單化,操作智能化,穩定、可靠、易擴展。

二:MogileFS軟件介紹

1、MogileFS軟件特點

①支持多節點冗余

② 可實現自動的文件復制

③ 使用名稱空間(命名空間),每個文件通過key來確定

如:文件123.jpg的key為 :/000/000/00/01/md5hash.fid

④ 不需要RAID,應用層可以直接實現RAID,不共享任何東西,通過“集群”接口提供服務

⑤工作於應用層,沒有特殊的組件要求;

⑥不共享任何數據,MogileFS不需要依靠昂貴的SAN來共享磁盤,每個機器只用維護 好自己的磁盤。


2、MogileFS架構詳解

技術分享圖片

基於MogileFS分布式存儲系統三大組件:

①Tracker(Mogilefsd 進程):調度器,為MogileFS 的核心部分,主要用來幫助客戶端定位真實數據存儲位置。

MogileFSd 進程就是trackers進程程序,trackers做了很多工作:Replication ,Deletion,Query,Reaper,Monitor 等等,這個是基於事件的( event-based ) 父進程/消息總線來管理所有來之於客戶端應用的交互(requesting operations to be performed), 包括將請求負載平衡到多個"query workers"中,然後讓 MogileFSd 的子進程去處理;

②MySQL用來存放MogileFS 的元數據 (命名空間&&文件存儲位置),由Trackers來操作和管理。

可以用mogdbsetup程序來初始化數據庫,因為數據庫保存了MogileFS的所有元數據,建議將其做成HA(主從)架構;

③Storage Nodes存儲節點服務器,也叫 Storage Server,用來存儲真實數據。每臺存儲節點要啟動一個 mogstored服務。通過增加存儲節點服務器來實現擴容。

3、MogileFS系統管理相關概念

①Domain:域。一個MogileFS可以有多個Domain,用來存放不同文件(大小,類型) ,同一個Domain內key必須唯一,不同Domain內,key可以相同;

②每一個存儲節點稱為一個主機host,一個主機上可以有多個存儲設備dev(單獨的硬盤 ),每個設備都有ID號,Domain+Fid用來定位文件;

③Class:文件屬性管理,定位文件存儲在不同設備上的份數;

三:MogileFS軟件詳解

1、MogileFS軟件安裝流程

①安裝perl相關程序包

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節點(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等。

2、程序文件&&配置文件

主程序:/usr/bin/mogilefsd
命令行管理工具程序:/usr/bin/mogadm
主配置文件(Tracker):/etc/mogilefs/mogilefsd.conf
主配置文件(Storage Nodes):/etc/mogilefs/mogstored.conf

四:MogileFS基礎操作詳解

1、Tracker初始化

1.數據庫授權
GRANT ALL PRIVILEGES ON mogilefs.* TO 'mogile' @'127.0.0.1' IDENTIFIED BY 'mogile' WITH GRANT OPTION;

2.設定數據庫
mogdbsetup --dbhost=127.0.0.1 --dbpass=mogile

3.添加運行用戶mogilefs(yum安裝無需此步驟)
useradd -r mogilefs 
mkdir /var/run/mogilefsd/ 
chown -R mogilefs.mogilefs /var/run/mogilefsd

4.修改tracker配置文件
vim /etc/mogilefs/mogilefsd.conf
    # Database connection information     設置數據庫用戶和密碼
    db_dsn = DBI:mysql:mogilefs:host=127.0.0.1
    db_user = mogile  
    db_pass = mogile
    # IP:PORT to listen on for mogilefs client requests  mogilefs客戶端IP
    listen = 172.17.250.121:7001
5.啟動mogilefsd
/etc/init.d/mogilefsd start

6.創建tracker子配置文件,指定tracker_IP,創建完成後tracker主機使用mogilefs相關命令無需再指定tracker
vim /etc/mogilefs/mogilefs.conf   #註意,不是主配置文件!!
    trackers=172.17.250.121:7001

2、Storage Nodes初始化

1.修改配置文件,自定義數據存儲目錄
vim /etc/mogilefs/mogstored.conf
    docroot = /data/mogdata/    #指定數據存儲位置,一般掛載在單獨磁盤上

2.創建此文件夾,並修改存儲目錄的屬主和屬組為mogilefs
chown -R  mogilefs.mogilefs /data/mogdata/

3.啟動mogstored服務
/etc/init.d/mogstored start

註意:mogstored啟動完成後後,將會讓本機成為一個存儲節點,接下來要配合mogadm來讓當前的這個主機加入到 MogileFS 的系統中

3、添加節點到MogileFS

1.添加storage到指定tracker
mogadm --tracker=172.17.250.121:7001 host add node1 --ip=172.17.214.74 --port=7500 --status=alive
mogadm --tracker=172.17.250.121:7001 host add node2 --ip=172.17.214.75 --port=7500 --status=alive
註意:此命令在tracker和storage上都能執行,因為已經指定特定tracker。

2.檢查主機是否添加成功
mogadm --tracker=172.17.214.73:7001 check
mogadm --tracker=172.17.214.73:7001 host list  

3.修改節點信息
mogadm host modify node1 --ip=123.xxx.xxx.70 --status=alive

4、添加存儲設備到MogileFS

註意:生產環境中,會將devID/目錄掛載到指定硬盤上,然後在將其添加為節點設備,不會使用系統盤。

1.創建目錄/dev/mogdata/devID
目錄名:dev+ID,且ID唯一,不可重復
mkdir /data/mogdata/dev1
mkdir /data/mogdata/dev2

2.修改目錄權限為mogilefs
chown -R  mogilefs.mogilefs dev1/
chown -R  mogilefs.mogilefs dev2/

3.添加設備
格式:mogadm device add --tracker=<IP:PORT>  <storage_node_name>  ID
mogadm --tracker=172.17.214.73:7001 device add node1 1
mogadm --tracker=172.17.214.73:7001 device add node2 2

4.查看設備列表
mogadm --tracker=172.17.214.73:7001 device list

題外話:
標記設備為:dead (謹慎操作!!!)
當硬盤損壞,設備出現問題時,可將設備標記為dead,這時,MogileFS 將開始刪除設備上的文件,並試圖在集群間重新復制它們到其它的設備上.
mogadm --tracker=172.17.214.73:7001 device mark node1 1 dead

5、Domain&&Class 管理

1.添加域名
mogadm --tracker=172.17.250.121:7001 domain add zdd

2.檢查”域“,顯示存在的域
[root@centos7 ~]# mogadm --tracker=172.17.250.121:7001 domain list
domain                   class                 mindevcount       replpolicy       hashtype
-------------------- -------------------- -------------     ------------         -------
zdd                       default                       2                    MultipleHosts()         NONE
註:  mindevcount  副本數

3.在域zdd中建"類"zd,並加入最小保存份數(副本數)為3
mogadm --tracker=172.17.250.121:7001 class add zdd zd --mindevcount=3

6、MogileFS文件管理

1.上傳文件:mogupload
mogupload --domain=zdd --key=test1 --file=Chrysanthemum.jpg

2.查詢文件:mogfileinfo
mogfileinfo --domain=zdd --key=test1

3.刪除文件:mogdelete
mogdelete --domain=zdd  --key=test1      

4.列出所有文件key:moglistkeys
這個可以列出指定 domain 下面的所有的key , 也可以指定的一個前綴, 來找特定前綴的所有文件的key.
moglistkeys --domain=zdd
moglistkeys --domain=<domain_name>  --key_prefix=<string>

5.列出指定 fid 的文件:moglistfids

fid:MogileFS文件系統中文件的編號,是自增的,mysql數據表mogilefs.file存放了相關信息

用途:查詢指定fid後 所有/指定數量 的文件
moglistfids     --fromfid=    顯示指定fid後的所有文件
moglistfids     --fromfid=     --count=<num>  顯示指定fid後的num個文件

7、Storage服務器狀態管理&&硬盤管理

1.暫時停止服務器
使用場景:如果你需要維護一個服務器,比如更新內存,升級操作系統之類的需要關機的操作,推薦你在操作 之前先設置這些為 "down". MogileFS 對這種偶
然的故障可以很彈性的處理.
mogadm host mark node_name down   ##標記存儲節點下線   註意:此節點可讀,不可寫
...............做相關操作.................................
...............操作完成,啟動服務器...............
mogadm host  mark  node_name  alive     ##存儲節點機器重新上線

2.添加硬盤設備
使用場景:有時候需要用舊硬盤來替換新硬盤,就需要一個新的deviceID。這樣做的原因是可以將舊設備中所有文件列表中的文件復制到新硬盤上,從而保
持數據的完整性。
mogadm device add node_name  node_ID --status=alive
mogadm device add node_name  node_ID --status=down

8、Storage模式管理

1、只讀模式:radonly,只能讀,禁止寫和刪除
mogadm device mark node_name node_id readonly

2、耗盡模式:drain,只能讀和刪除,禁止寫
mogadm device mark node_name node_id drain      

註:耗盡(Drain) 模式在 MogileFS 的早期版本,將會從設備刪除FIDS。現在它已經被重新均衡的功能取代。

3、重新復制文件
如果有一個硬盤壞了,MogileFS 可以自動的讓請求不在訪問這個設備,但是不會自動的重新復制這個硬盤的文件,你必須通過 mogadm 來
手工來標誌成 'dead'. 只要你這樣做, MogileFS將開始刪除設備上的文件,並試圖在集群間重新復制它們到其它的設備上.
mogadm  device mark  node_name  node_id  dead

9、MogileFS軟件bug修復:無法創建副本

細心的朋友發現,設置完MogileFS的mindevcount後無法生效,因此,可通過下列步驟解決

一:tracker和storage進行如下操作
1.安裝perl語言編譯環境
yum -y install make gcc unzip perl-DBD-MySQL perl perl-CPAN perl- YAML perl-Time-HiRes

2.下載相關模塊
包地址:http://www.cpan.org/authors/id/B/BR/BRADFITZ/Sys-Syscall-0.23.tar.gz

3.解包並編譯
tar zxvf Sys-Syscall-0.23.tar.gz
cd Sys-Syscall-0.23/  
perl Makefile.PL
make&&make install

二:重啟服務
1.重啟tracker的mogilefsd服務
2.重啟storage的mogstored服務

10、rebalance 重平衡策略

Rebalance策略官方文檔:https://github.com/hrchu/mogilefs/blob/wiki/Rebalance.md

①策略描述

將剩余空間較小盤上的數據寫入另一個剩余空間較大的盤上,從而平衡空間使用率

②策略工作圖解

技術分享圖片

策略圖示解讀:如上圖,當新增硬盤和集群已有硬盤磁盤大小及使用率不一致時,繼續進行寫操作將會使其他四塊硬盤先用光,從而引起副本創建失敗,從而造成安全隱患。

③策略相關執行命令

命令選項:
mogadm rebalance settings:
rebal_policy = from_percent_used=95 to_percent_free=50 limit_type=device limit_by=size limit=5g fid_age=old

1、將使用率為50%的dev2的數據搬到使用率為40%的磁盤上,以平衡存儲
mogadm rebalance policy --options="from_hosts=2 to_percent_free=40"

2、查看已存在的平衡策略
mogadm rebalance test

3、策略的 開始|暫停|重設|隊列
$ mogadm rebalance start
$ mogadm rebalance stop
$ mogadm rebalance reset
$ mogadm --stats="general-queues"     ##stop後仍在運行的rebalance策略,為這些策略將會以隊列(queues)的方式繼續執行
註意:stop不會影響正在進行的rebalance策略

4、查看rebalance狀態
$ mogadm rebalance status


新手必讀:Linux分布式存儲之——Mogilefs