mogilefs-企業級分布式存儲應用與實戰
項目場景:
公司已經有了大量沈澱用戶,為了讓這些沈澱用戶長期使用公司平臺,公司決定增加用戶粘性,逐步發展基於社交屬性的多樣化業務模式,決定開展用戶討論區、賣家秀、買家秀、用戶試穿短視頻等業務,因此,公司新的業務的業務特征將需要海量數據存儲,要求基於開源技術,實現對公司海量存儲業務的技術研究和實現。
項目分析:
Web 2.0 時代的到來,使得單個計算機節點遠遠無法滿足用戶對海量數據和應用程序運行空間的需求。個人和企業都有安全而持久的存儲信息的需求,備份成為最通俗的手段。個人用戶通過保存多個拷貝的形式實現信息存儲的安全,但如果多個拷貝都失去,那麽就崩潰了。存儲需要保持實時讀寫,提供復雜的查詢功能,缺乏容災和備份能力,大量無結構的數據的存儲和處理,對傳統的存儲方式提出挑戰。
分布式存儲,就是將數據信息分散存儲,在網絡發達的現代,這種存儲利用多臺存儲服務器,部署簡單化,操作智能化,穩定、可靠、易擴展。然而雖然緩解了問題,但依然存在的難點與挑戰。例如:節點間通信、數據存儲、數據空間平衡、容錯、文件系統支持等一系列問題仍處在不斷摸索和完善中。
MogileFS是一個開源的分布式文件存儲系統, 目前使用MogileFS 的公司非常多。Mogilefs具有以下特性:
1、支持多節點冗余
2、可實現自動的文件復制
3、使用名稱空間(命名空間),每個文件通過key來確定
比如:123.jpg /000/000/00/01/md5hash.fid 前者是key,後者是真實的存儲文件名
4、不需要RAID,
5、工作於應用層,沒有特殊的組件要求
6、不共享任何數據,通過“集群”接口提供服務。MogileFS不需要依靠昂貴的SAN來共享磁盤,每個機器只用維護好自己的磁盤。
Mogilefs架構:
mogileFS主要由三部分構成:tracker節點,database節點,storage節點。
每次文件的上傳和讀取,都經過前端TrackerServer服務器,trackerServer服務器收到client端的請求,查詢數據庫,返回一個上傳或者是讀取的可用的後端StorageServer的地址,然後由client端直接操作後端StorageServer服務器。
項目環境:
mysql+tracker服務器:ip 172.17.13.136
storage node1主機: ip 172.17.13.134
storage node2主機: ip 172.17.13.135
項目實現:
一、所有節點都安裝perl相關包:
yum install perl-Net-Netmask perl-IO-String perl-Sys-Syslog perl-IO-AIO
mkdir ~/mogilefs 創建一個目錄用來存放下面需要安裝的rpm包
cd ~/mogilefs
lftp 172.17.0.1 連接服務器下載rpm包
>cd /pub/Sources/7.x86_64/mogilefs/
>mget *
>exit
yum localinstall ./* 安裝
本地安裝的rpm包有:ls ~/mogilefs
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等。
perl-Perlbal-1.78-1.el6.noarch.rpm
二、在mysql+tracker服務器操作:
1、安裝數據庫並啟動服務
yum install mariadb-server
systemctl start mariadb
2、創建數據庫並授權用戶
【mysql -uroot -p 也可以不用授權,下面的命令會自動創建數據庫和授權用戶
>GRANT ALL PRIVILEGES ON modilefs.* TO 'mogile' @'127.0.0.1' IDENTIFIED BY 'mogile' WITH GRANT OPTION;
>flush priveleges;】此步驟可省略
mogdbsetup --dbpass=123456 設置mogile用戶密碼,此命令會創建數據庫mogilefs和授權用戶mogile
3、修改mogilefs配置文件並啟動服務
①vim /etc/mogilefs/mogilefsd.conf
改用戶名密碼:
db_user = mogile
db_pass = 123456
監聽端口為本機網卡的ip
listen = 172.17.13.136:7001
②vim /etc/mogilefs/mogilefs.conf
trackers = 172.17.13.136:7001 避免每次在命令行執行命令都需要指定--tracker,即以下命令中的--tracker可以省略
③啟動服務
/etc/init.d/mogilefsd start [如果是perl安裝,那麽啟動時需切換到普通用戶mogilfs]
4、檢查
mogadm --tracker=172.17.13.136:7001 check
三、在storage1和storage2主機上操作:
1、創建工作目錄並修改權限
mkdir -p /data/mogdata
chown -R mogilefs.mogilefs /data/mogdata
2、修改配置文件並啟動服務
vim /etc/mogilefs/mogstored.conf
工作目錄:docroot = /data/mogdata
/etc/init.d/mogstored start 啟動服務
四、在mysql+tracker服務器操作:
1、將上面準備的兩個節點加入:
mogadm --tracker=172.17.13.136:7001 host add nod1 --ip=172.17.13.134 --port=7500 --status=alive
mogadm --tracker=172.17.13.136:7001 host add nod2 --ip=172.17.13.135 --port=7500 --status=alive
如果不小心寫錯ip或者狀態了,可以使用下面的命令進行修改:
mogadm --tracker=172.17.13.136:7001 host modify nod1 --ip=xxx.xxx.xxx.xxx --status=xxx
2、檢查
mogadm --tracker=172.17.13.136:7001 check 或者
mogadm --tracker=172.17.13.136:7001 host list
五、在storeage1及storeage2主機操作:
創建塊設備目錄並且修改權限
storeage1:
mkdir /data/mogdata/dev1;chown mogilefs.mogilefs -R /data/mogdata/dev1
storeage2:
mkdir /data/mogdata/dev2;chown mogilefs.mogilefs -R /data/mogdata/dev2
六、在mysql+tracker服務器操作:
1、將上面的兩個塊設備加入:
mogadm --tracker=172.17.13.136:7001 device add nod1 1
mogadm --tracker=172.17.13.136:7001 device add nod2 2
2、查看加入的設備信息
mogadm device list
也可以在數據庫中查看信息:
mysql mysql -uroot -p
>use mogilfs;
>select * from device;
>select * from host;
3、添加域:mogadm domain add img 這裏添加的是img域
列出域:mogadm domain list
4、在"域"中建"類",並設置最小保存份數,即副本數
mogadm class add img c29 --mindevcount=3 表示在img域中創建c29類,最小副本數為3
七、所有機器上操作:
1、安裝perl相關包
yum -y install make gcc unzip perl-DBD-MySQL perl perl-CPAN perl-YAML perl-Time-HiRes
2、下載Sys-Syscall-0.23.tar.gz包,並且實現自動復制
①cd /tmp;wget http://search.cpan.org/CPAN/authors/id/B/BR/BRADFITZ/Sys-Syscall-0.23.tar.gz
②解包:tar xvf Sys-Syscall-0.23.tar.gz
③編譯安裝:cd Sys-Syscall-0.23/;perl Makefile.PL&&make install
④重啟mogilefs服務(stop、start報錯無所謂,查看端口已經開啟即可):
tracker+mysql服務器操作:
/etc/init.d/mogilefsd stop
/etc/init.d/mogilefsd start
所有機器操作:
/etc/init.d/mogstored stop
/etc/init.d/mogstored start
項目最終實現效果:
在Tracker+mysql服務器操作:上傳文件,不指定類就上傳至default類
mogupload --domain=img --key=photo [--class=c29] --file=2345_image_file_copy_2.jpg
mogfileinfo --domain=img --key=photo 查詢文件
訪問以下url都可顯示出圖片:
http://172.17.13.135:7500/dev2/0/000/000/0000000005.fid
http://172.17.13.134:7500/dev1/0/000/000/0000000005.fid
mogilefs-企業級分布式存儲應用與實戰