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的實現
並不是十分理想,那麼我們是否有更好的代替方法呢?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章