1. 程式人生 > >mogilefs-企業級分布式存儲應用與實戰

mogilefs-企業級分布式存儲應用與實戰

linux mogilefs 分布式存儲

mogilefs-企業級分布式存儲應用與實戰

項目場景:

公司已經有了大量沈澱用戶,為了讓這些沈澱用戶長期使用公司平臺,公司決定增加用戶粘性,逐步發展基於社交屬性的多樣化業務模式,決定開展用戶討論區、賣家秀、買家秀、用戶試穿短視頻等業務,因此,公司新的業務的業務特征將需要海量數據存儲,要求基於開源技術,實現對公司海量存儲業務的技術研究和實現。

項目分析:

Web 2.0 時代的到來,使得單個計算機節點遠遠無法滿足用戶對海量數據和應用程序運行空間的需求。個人和企業都有安全而持久的存儲信息的需求,備份成為最通俗的手段。個人用戶通過保存多個拷貝的形式實現信息存儲的安全,但如果多個拷貝都失去,那麽就崩潰了。存儲需要保持實時讀寫,提供復雜的查詢功能,缺乏容災和備份能力,大量無結構的數據的存儲和處理,對傳統的存儲方式提出挑戰。

分布式存儲,就是將數據信息分散存儲,在網絡發達的現代,這種存儲利用多臺存儲服務器,部署簡單化,操作智能化,穩定、可靠、易擴展。然而雖然緩解了問題,但依然存在的難點與挑戰。例如:節點間通信、數據存儲、數據空間平衡、容錯、文件系統支持等一系列問題仍處在不斷摸索和完善中。

MogileFS是一個開源的分布式文件存儲系統, 目前使用MogileFS 的公司非常多。Mogilefs具有以下特性:

1、支持多節點冗余

2、可實現自動的文件復制

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

比如:123.jpg /000/000/00/01/md5hash.fid 前者是key,後者是真實的存儲文件名

4、不需要RAID,

應用層可以直接實現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

技術分享圖片

三、storage1storage2主機上操作:

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-企業級分布式存儲應用與實戰