一:分佈式存儲產生背景
node
①時代背景mysql
Web 2.0 時代的到來,使得單個計算機節點遠遠沒法知足用戶對海量數據和應用程序運行空間的需求。我的和企業都有安全而持久的存儲信息的需求,備份成爲最通俗的手段。我的用戶經過保存多個拷貝的形式實現信息存儲的安全,小几率事件不易發生,但如中獎發生了,多個拷貝都失去後,崩潰恐怕不是簡單的心理表達,而將成爲不可改變的事實,沒法復原。存儲須要保持實時讀寫,提供複雜的查詢功能,缺少容災和備份能力,大量無結構的數據的存儲和處理,對傳統的存儲方式提出挑戰。git
②技術背景github
互聯網技術的突飛猛進,迅速發展,風起「雲」 涌,「雲存儲」(Cloud Storage)系統提供在線的存儲服務。而分佈式存儲正是經過利用這些存儲服務,將數據分散存儲在多臺服務器上,從而使得數據存儲實現部署簡單化,操做智能化,穩定、可靠、易擴展。sql
二:MogileFS軟件介紹數據庫
一、MogileFS軟件特色
vim
①支持多節點冗餘centos
② 可實現自動的文件複製安全
③ 使用名稱空間(命名空間),每一個文件經過key來肯定服務器
如:文件123.jpg的key爲 :/000/000/00/01/md5hash.fid
④ 不須要RAID,應用層能夠直接實現RAID,不共享任何東西,經過「集羣」接口提供服務
⑤工做於應用層,沒有特殊的組件要求;
⑥不共享任何數據,MogileFS不須要依靠昂貴的SAN來共享磁盤,每一個機器只用維護 好本身的磁盤。
二、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服務。經過增長存儲節點服務器來實現擴容。
三、MogileFS系統管理相關概念
①Domain:域。一個MogileFS能夠有多個Domain,用來存放不一樣文件(大小,類型) ,同一個Domain內key必須惟一,不一樣Domain內,key能夠相同;
②每個存儲節點稱爲一個主機host,一個主機上能夠有多個存儲設備dev(單獨的硬盤 ),每一個設備都有ID號,Domain+Fid用來定位文件;
③Class:文件屬性管理,定位文件存儲在不一樣設備上的份數;
三:MogileFS軟件詳解
一、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等。
二、程序文件&&配置文件
主程序:/usr/bin/mogilefsd 命令行管理工具程序:/usr/bin/mogadm 主配置文件(Tracker):/etc/mogilefs/mogilefsd.conf 主配置文件(Storage Nodes):/etc/mogilefs/mogstored.conf
四:MogileFS基礎操做詳解
一、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
二、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 的系統中
三、添加節點到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
四、添加存儲設備到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
五、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
六、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個文件
七、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
八、Storage模式管理
一、只讀模式:radonly,只能讀,禁止寫和刪除 mogadm device mark node_name node_id readonly 二、耗盡模式:drain,只能讀和刪除,禁止寫 mogadm device mark node_name node_id drain 注:耗盡(Drain) 模式在 MogileFS 的早期版本,將會從設備刪除FIDS。如今它已經被從新均衡的功能取代。 三、從新複製文件 若是有一個硬盤壞了,MogileFS 能夠自動的讓請求不在訪問這個設備,可是不會自動的從新複製這個硬盤的文件,你必須經過 mogadm 來 手工來標誌成 'dead'. 只要你這樣作, MogileFS將開始刪除設備上的文件,並試圖在集羣間從新複製它們到其它的設備上. mogadm device mark node_name node_id dead
九、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服務
十、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 一、將使用率爲50%的dev2的數據搬到使用率爲40%的磁盤上,以平衡存儲 mogadm rebalance policy --options="from_hosts=2 to_percent_free=40" 二、查看已存在的平衡策略 mogadm rebalance test 三、策略的 開始|暫停|重設|隊列 $ mogadm rebalance start $ mogadm rebalance stop $ mogadm rebalance reset $ mogadm --stats="general-queues" ##stop後仍在運行的rebalance策略,爲這些策略將會以隊列(queues)的方式繼續執行 注意:stop不會影響正在進行的rebalance策略 四、查看rebalance狀態 $ mogadm rebalance status