1、實現企業級分佈式存儲之mogilefs的應用。
(1)關於mogilefs
Web 2.0 時代的到來,使得單個計算機節點遠遠沒法知足用戶對海量數據和應用程序運行空間的需求。我的和企業都有安全而持久的存儲信息的需求,備份成爲最通俗的手段。我的用戶經過保存多個拷貝的形式實現信息存儲的安全,小几率事件不易發生,但如中獎發生了,多個拷貝都失去後,崩潰恐怕不是簡單的心理表達,而將成爲不可改變的事實,沒法復原。存儲須要保持實時讀寫,提供複雜的查詢功能,缺少容災和備份能力,大量無結構的數據的存儲和處理,對傳統的存儲方式提出挑戰。
這個時候,分佈式存儲,應運而生,就是將數據信息分散存儲,在網絡發達的現代,這種存儲利用多臺存儲服務器,部署簡單化,操做智能化,穩定、可靠、易擴展。數據的存儲服務成爲一個新興的服務項目,加上互聯網技術的突飛猛進,迅速發展,風起「雲」涌,「雲存儲」(Cloud Storage)系統提供在線的存儲服務,獲得衆多行業巨鱷的追捧,國外有 Amazon、IBM、Google 等不斷推動技術創新,國內有阿里、百度、金山等快速跟進推廣應用。
分佈式面臨的挑戰:
雖然分佈式出如今必定程度上有效的緩解了這一問題,之因此稱之爲緩解是由於分佈式存儲在面對海量數據存儲時也並不是十全十美毫無壓力,依然存在的難點與挑戰例如:節點間通訊、數據存儲、數據空間平衡、容錯、文件系統支持等一系列問題仍處在不斷摸索和完善中。
在理論計算機科學中,CAP定理(CAP theorem),又被稱做布魯爾定理(Brewer's theorem),它指出對於一個分佈式計算系統來講,不可能同時知足如下三點:
一致性(Consistency)---全部節點在同一時間具備相同的數據
可用性(Availability)---保證每一個請求無論成功或者失敗都有響應
分隔容忍(Partition tolerance)---系統中任意信息的丟失或失敗不會影響系統的繼續運做
對於大型站點,可用性(Availability)與分隔容錯性(Partition Tolerance)的優先級會高於一致性(Consistency),這裏並非指徹底捨棄一致性,而是經過其餘手段實現數據的弱一致性,例如:用戶微博的瀏覽數和評論能夠容忍相對長時間的不一致,幾乎不會影響用戶體驗,例如用戶訪問美食圖片時,不會由於一張圖片加載慢,致使整個訪問請求出錯。
強一致性
ACID
在單機環境中,強一致性能夠由數據庫的事務來保證
在多級環境中,強一致性很難作到
分佈式事務:性能太差,在化聯網的應用中不適合
弱一致性(包括最終一致性)
經過提交處理的半同步、半異步或全異步,取得最終一致性效果
最終一致性使得數據的提交具備延時性,而在必定範圍時的延時性範圍內(好比一秒),應用的可用性時正常的
(2)mogilefs的特色
①支持多節點冗餘
②可實現自動的文件複製
③使用名稱空間(命名空間),每一個文件經過key來肯定
④不須要RAID,應用層能夠直接實現RAID,不共享任何東西,經過「集羣」接口提供服務
⑤工做於應用層,沒有特殊的組件要求
⑥不共享任何數據,MogileFS不須要依靠昂貴的SAN來共享磁盤,每一個機器只用維護好本身的磁盤。
(3)mogilefs的構成
mogileFS主要由三部分構成:tracker節點,database節點,storage節點
①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:這個是 MogileFS 存儲文件存放在這些機器上,也是 mogstored 節點,也叫 Storage Server,一臺存儲主要都要啓動一個 mogstored 服務.擴容就是增長這些機器,實際文件存放的地方。
(4)mogilefs的實現
環境準備:
三臺centos7.3機器,一臺安裝mariadb和tracker,另外兩臺安裝storagenode
角色 | ip |
---|---|
mariadb+tracker | 172.17.5.2 |
storage1 | 172.17.5.3 |
storage2 | 172.17.5.4 |
網絡拓撲圖:
注:本圖只針對本實驗,也只是實驗mogilefs。
(5)具體實驗步驟:
《1》配置好epel源,解決依賴關係包。(三臺機器都要安裝)
命令:yum install perl-Net-Netmask perl-IO-String perl-Sys-Syslog perl-IO-AIO
《2》配置安裝包,並安裝全部安裝包。(三臺機器都要安裝)
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等。
建議:先建立個文件夾,把下載的安裝包都放到裏面而後再安裝,便於後期管理使用。
《3》配置遠程用戶(如下步驟tracker上配置,記得數據庫啓動)
遠程配置mysql用戶:with grant option 選項表示容許該用戶有權限受權其餘用戶。
命令:GRANT ALL PRIVILEGES ON . TO 'mogile' @'127.0.0.1' IDENTIFIED BY 'mogilefs' WITH GRANT OPTION;
《4》初始化配置以及設定數據庫。
命令:mogdbsetup --help
mogdbsetup --dbhost=127.0.0.1 --dbpass=mogilefs
用戶名默認爲:mogile
mysql
--
《5》修改配置文件:先備份一份,養成好習慣。
《6》啓動mogilefsd服務。
(6)配置兩個storage節點。
《1》打開配置文件,設置節點存放的目錄。
《2》建立和修改存放節點數據目錄的權限,並啓動服務。
storage1:mkdir -p /var/mogdata/dev1
storage2:mkdir -p /var/mogdata/dev2
chown mogilefs:mogilefs /var/mogdata -R
《3》把storage1和storage2添加到tracker中,也就至關於每一個主機加到mogilefs儲存系統。(在tracker中執行)
若是不當心操做錯誤:mogadm --tracker=127.0.0.1:7001 host modify node1 --ip=123.xxx.xxx.70 --status=alive #能夠修改主機IP、狀態等
《4》添加目錄(在tracker中執行)
《5》添加domain-----域用來存儲不一樣應用類型的數據的容器。(在tracker中執行)
《6》在域中添加類。(在tracker中執行)
在這說明一下類和域的概念:
域(domain)
在一個 MogileFS 中,能夠有多個域,用來存放不一樣的文件,好比,不一樣大小的文件,不一樣類型的文件.在上圖中全部 alive 的"設備"是一個大的總體,造成一個統一的存儲空間,裏面的數據能夠根據 "域" domain 和類 class 來分類管理,屬於同一個 domain,即便是屬於不一樣的class,文件的key也必須是惟一的.不一樣域的 key 才能重複.nginx
類(class)
在一個域中,能夠有多個類,主要是用來控制複製單元的,類是用來作屬性管理的,類是比域 domain 低一個級別,能夠定義一個文件存儲在不一樣 device 中的份數.一個文件必須經過 domain,class 和 key 才能找出來.咱們能夠給不一樣的重要程度的文件,不一樣熱度的文件,來分別用類來控制份數.
《7》測試。
用mogupload工具在這裏是爲了測試,實際環境中上傳是由程序員在代碼中使用mogilefs的API進行交互的。
在根下上傳一張爲111.jpg的圖片
命令:mogupload --trackers=127.0.0.1 --domain=image --key='test' --file='./111.jpg'
查看上傳的圖片:mogfileinfo --trackers=127.0.0.1:7001 --domain=image --key=test
《8》其它一些經常使用命令來管理mogilefs
mogdelete --domain=<domain_name> --key=<key_name> 刪除指定文件
moglistkeys --domain=<domain_name> --key_prefix=<key_name> 列出全部文件key
moglistfids --fromfid=<file_id> --count=<數量> 列出指定fid的文件
mogadm host mark mystorage down 指定某個節點服務器進行系統維護
mogadm --trackers=127.0.0.1 device add mystorage 5 --status=alive 添加設備
2、實現企業級分佈式存儲之fastdfs的應用
(1)FASTDFS是什麼?
FastDFS是由國人餘慶所開發,其項目地址:https://github.com/happyfish100 ,FastDFS是一個輕量級的開源分佈式文件系統,主要解決了大容量的文件存儲和高併發訪問的問題,文件存取時實現了負載均衡。
(2)FastDFS的特性
一、分組存儲,靈活簡潔、對等結構,不存在單點
文件ID由FastDFS生成,做爲文件訪問憑證。FastDFS不須要傳統的name server
和流行的web server無縫銜接,FastDFS已提供apache和nginx擴展模塊
大、中、小文件都可以很好支持,支持海量小文件存儲
支持多塊磁盤,支持單盤數據恢復
支持相同文件內容只保存一份,節省存儲空間
存儲服務器上能夠保存文件附加屬性
下載文件支持多線程方式,支持斷點續傳
(3)fastdfs優勢對比
(4) fastdfs架構圖
• 只有兩個角色,tracker server和storage server,不須要存儲文件索引信息
• 全部服務器都是對等的,不存在Master-Slave關係
• 存儲服務器採用分組方式,同組內存儲服務器上的文件徹底相同(RAID 1)
• 不一樣組的storage server之間不會相互通訊
• 由storage server主動向tracker server報告狀態信息,trackerserver之間一般不會相互通訊
(5)fastdfs請求過程。
git
角色 | ip |
---|---|
tracker | 172.17.5.2 |
storage1+nginx | 172.17.5.3 |
storage2+nginx | 172.17.5.4 |
《2》下載安裝包(這是我下載好的安裝包) fastdfs-5.0.11-1.el7.centos.x86_64.rpm libfdfsclient-5.0.11-1.el7.centos.x86_64.rpm nginx-mod-http-image-filter-1.10.2-1.el7.centos.x86_64.rpm
fastdfs-debuginfo-5.0.11-1.el7.centos.x86_64.rpm
libfdfsclient-devel-5.0.11-1.el7.centos.x86_64.rpm
nginx-mod-http-perl-1.10.2-1.el7.centos.x86_64.rpm
fastdfs-server-5.0.11-1.el7.centos.x86_64.rpm
nginx-1.10.2-1.el7.centos.x86_64.rpm
nginx-mod-http-xslt-filter-1.10.2-1.el7.centos.x86_64.rpm
fastdfs-tool-5.0.11-1.el7.centos.x86_64.rpm
nginx-all-modules-1.10.2-1.el7.centos.noarch.rpm
nginx-mod-mail-1.10.2-1.el7.centos.x86_64.rpm
libfastcommon-1.0.36-1.el7.centos.x86_64.rpm
nginx-filesystem-1.10.2-1.el7.centos.noarch.rpm
nginx-mod-stream-1.10.2-1.el7.centos.x86_64.rpm
libfastcommon-devel-1.0.36-1.el7.centos.x86_64.rpm
nginx-mod-http-geoip-1.10.2-1.el7.centos.x86_64.rpm
fastdfs安裝包地址:http://sourceforge.net/projects/fastdfs/files/?source=navbar
此版本須要安裝libfastcommon
下載地址:
https://github.com/happyfish100/libfastcommon.git
《3》配置tracker服務器
安裝安裝包(全部機器上安裝全部包)
建議全部包都放在一個文件夾裏,便於管理
mkdir fastdfs
cd fastdfs/
yum localinstall *
①修改(tracker)配置文件
②建立tracker的工做目錄,並修改client.conf配置文件。
mkdir -p /data/fastdfs/tracker
vim client.conf
只須要修改:
tracker_
tracker_server=172.17.5.2:22122
③啓動tracker服務器。
《4》配置storage服務器【兩個storage配置同樣】
①拷貝配置文件,並修改之。【只需修改這幾行】
disabled=false(默認爲false,表示是否無效)
port=23000(默認爲23000)
base_path=/data/fastdfs/storage
tracker_server=172.18.10.232:22122
store_path0=/data/fastdfs/storage
http.server_port=8888(默認爲8888,nginx中配置的監聽端口那之一致)
②建立storage服務器工做目錄
命令:mkdir -p /data/fastdfs/dtorage
③測試啓動storage server,啓動成功會自動在/data/fastdfs/tracker目錄新建data和logs目錄(啓動storage server的前提是tracker server必須事先已啓動)
《5》測試(tracker服務器上測試)
①查看儲存節點狀態。
fdfsmonitor /etc/fdfs/client.co
②上傳測試
fdfs_test <config_file> upload <local_filename> [FILE | BUFF | CALLBACK]
③文件上傳
fdfs_upload_file /etc/fdfs/client.conf /root/mha4mysql-manager-0.56-0.el6.noarch.rpm
④文件查看
fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/rBEFA1odXd-AA1UIAAFUT8QgCA0946.rpm
⑤文件下載
fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/rBH7vFoax3KANb_FAUlr7-L-yRM9.0.war
《6》storage配置nginx服務
①安裝nginx以及對應模塊
前面已經安裝過了nginx模塊了,此處只須要安裝nginx服務並啓動。
②修改nginx的location配置,映射路徑和啓動模塊
location /group1/M00 {
root /data/fdfs/store/data;
ngx_fastdfs_module;
}
③修改模塊的配置文件
vim /etc/fdfs/ mod_fastdfs.conf
修改兩行:
url_have_group_name = true
tracker_server=172.17.5.2:22122程序員