今天來坐下關於分佈式存儲應用的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的實現 並非十分理想,那麼咱們是否有更好的代替方法呢?