Linux運維學習之分佈式存儲mogilefs實現

今天來坐下關於分佈式存儲應用的mogilefs的實現。
首先咱們先準備四臺機器,其中兩臺配置數據的主從複製,每臺都配置tracker,三臺配置store。
ip1:172.17.254.111   mysql-master+tracker
ip2:172.17.254.112   mysql-slave+tracker+store
ip3:172.17.254.113   tracker+store
ip4:172.17.245.114   tracker+store
而後咱們在上面進行配置,在全部的機器上進行安裝mogilefs的相關包。
yum install perl-Net-Netmask perl-IO-String perl-Sys-Syslog perl-IO-AIO -y
#安裝相關的perl的包,mogilefs是由perl編寫的
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。
 #本地安裝rpm包,能夠在https://pkgs.org/download/mogilefs 下載
主程序:/usr/bin/mogilefsd
命令行管理工具程序:/usr/bin/mogadm
主配置文件(Tracker):/etc/mogilefs/mogilefsd.conf
主配置文件(Storage Nodes):/etc/mogilefs/mogstored.conf
而後在 全部哦的機器上上進行配置/etc/mogilefs/mogilefsd.conf
db_dsn = DBI:mysql:mogilefs:host=172.17.254.111   #配置數據庫的所在ip
db_user = mogile  
db_pass = mogile  
#配置數據庫鏈接相關信息
listen = 127.0.0.1:7001
而後咱們再去配置除了ip1以外的其餘三臺的mogstored.conf,大部分都不用改動,只需改動此項:
docroot = /data/mogilefs/      #此目錄爲咱們存儲數據的實際位置,最好是單塊硬盤
以後,咱們對數據庫所在的機器(ip1)進行服務初始化
首先對數據庫進行受權:
grant all on mogilefs.* to 'mogile'@'172.17.254.111' identified by 'mogile';    
#此處帳戶密碼,應與上面配置文件相同
而後設置數據庫:
mogdbsetup --dbhost=127.0.0.1 --dbpass=mogpass
#能夠進入數據庫查看,表庫都已經自動設置完成
/etc/init.d/mogilefsd start 
啓動失敗,咱們能夠經過/var/log/messages看到這樣的報錯:
couldn't create pidfile '/var/run/mogilefsd/mogilefsd.pid': Permission denied
而後咱們更改此目錄所屬人、所屬組(ip2,3,4都須要更改此項,否則tracker啓動不起來)
chown -R mogilefs.mogilefs /var/run/mogilefsd,再次啓動成功運行!
咱們的調度器作好了,各個storage node也配置好了(只改了一個docroot),而後就是把彼此連接:
mogadm host add node1 --ip=172.17.254.112 --port=7500 --status=alive
#把ip2添加到存儲節點中,以此類推
mogadm host add node2 --ip=172.17.254.113 --port=7500 --status=alive
mogadm host add node3 --ip=172.17.254.114 --port=7500 --status=alive
而後能夠經過mogadm host list查看,出來下面三項成功。
node1 [1]: alive
    IP:       172.17.254.112:7500
node2 [2]: alive
    IP:       172.17.254.113:7500
node3 [3]: alive
    IP:       172.17.254.114:7500
存儲節點創建了,咱們經過mogadm check查看一直都顯示Checking devices..,很明顯咱們要添加devices了,那麼怎麼
添加呢?上面的docroot已經指明路徑,因此咱們新建一個目錄把硬盤掛載上就ok了,建目錄使用 dev + ID 這種格式,記的所
有系統中 ID 不能重複.也必須和配置文件中的路徑同樣.
以下:ip2:mkdir -p /data/mogdata/dev1
而後咱們還在ip1上執行添加硬盤命令:
mogadm device add node1 1
mogadm device add node2 2
mogadm device add node3 3
使用mogadm device list命令能夠查看每塊硬盤的狀態、大小。
當上面的準備好了,MogileFS 是運行中時,接下來咱們要建一個咱們本身的'名字空間'和加入文件到存儲當中;咱們使用 
mogadm 的工具來能建立一個"域"和"類".也可使用這個來增長文件到"類"中。
mogadm domain add test(隨便取的域名)
mogadm class add test testclass --mindevcount=3
# --mindevcount=3 指明該class能夠有三份副本,也就是備份到三臺機器上
咱們可使用上傳來測試一下是否能夠實現該功能:
mogupload --domain=test --key=test1 --file=1.jpg
mogfileinfo --domain=test --key=test1
而後發現有問題devcount:1 只有一份副本,這是由於該版本的mogilefs有BUG,咱們經過官方文檔發現須要降級來配置使用
yum -y install make gcc unzip perl-DBD-MySQL perl perl-CPAN perl-YAML perl-Time-Hi-
Res
#安裝perl編譯安裝環境
wget http://www.cpan.org/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 && make install 
/etc/init.d/mogilefsd  restart #重啓服務
咱們再次使用上傳命令:mogupload --domain=test --key=test2 --file=1.jpg
發現仍是不行,最多隻能備份兩份,找了半天才發現須要制定class,具體以下:
mogupload --domain=test --class=testclass --key=test3 --file=1.jpg
不加入class走了默認的class,參數爲2,不得不說mogilefs的語法說明真的有點坑人。
好了,今天的分享就到此結束,分佈式的存儲在實際中應用很普遍,可是mogilefs的實現
並非十分理想,那麼咱們是否有更好的代替方法呢?
相關文章
相關標籤/搜索