實驗原理:
MogileFS是一個開源的分布式文件系統,用於組建分布式文件集群,由LiveJournal旗下DangaInteractive公司開發,Danga團隊開發了包括 Memcached、MogileFS、Perlbal等不錯的開源項目:(注:Perlbal是一個強大的Perl寫的反向代理服務器)。 MogileFS是一個開源的分布式文件系統。主要特性包括:應用層的組件、無單點故障、自動文件復制、具有比RAID更好的可靠性、無需RAID支持等……核心角色如下:
Tracker節點:借助數據庫保存各節點文件的元數據信息保存每個域中所有鍵的存儲位置分布,方便檢索定位數據位置的同時監控各節點,告訴客戶端存儲區位置並指揮storage節點復制數據副本,進程名為mogilefsd(7001)。
Database節點:為tracker節點提供數據存取服務。
Storage節點:將指定域中的鍵轉換為其特有的文件名存儲在指定的設備文件中,轉換後的文件名為值,storage節點自動維護鍵值的對應關系,storage節點由於使用http進行數據傳輸,因此依賴於perlbal,storage節點前端可以使用nginx進行反向代理,但需要安裝nginx-mogilefs-module-master模塊進行名稱轉換,進程名mogstored(7501),perbal(7500)。
Domain:一個域中的鍵值是惟一的,一個MogileFS可以有多個域,域可以用來存儲不同應用類型的數據的容器。
Host:每一個存儲節點稱為一個主機,一個主機上可以有多個存儲設備(單獨的硬盤),每個設備都有ID號,Domain+Fid用來定位文件。
Class:復制最小單位,文件屬性管理,定義文件存儲在不同設備上份數。
實驗系統:CentOS 6.6_x86_64
實驗前提:提前准備好編譯環境,防火牆和selinux都關閉
實驗說明:本實驗共有3台主機,IP及角色分配如拓撲
下載地址:試驗中用到mariadb軟件的下載地址,http://pan.baidu.com/s/1bnnYiMr
實驗拓撲:

一、在19.66上安裝MySQL及MogileFS
1.安裝mysql:
tar xf mariadb-10.0.20-linux-x86_64.tar.gz -C /usr/local/
cd /usr/local/
ln -sv mariadb-10.0.20-linux-x86_64 mysql
useradd -r mysql
mkdir -pv /mydata/data
chown -R mysql.mysql /mydata/data/
cd mysql/
chown -R root.mysql .
scripts/mysql_install_db --user=mysql --datadir=/mydata/data/
cp support-files/my-large.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
2.安裝YAML:
wget http://search.cpan.org/CPAN/authors/id/I/IN/INGY/YAML-1.15.tar.gz
tar xf YAML-1.15.tar.gz
cd YAML-1.15
perl Makefile.PL
make && make install
3.使用cpan在線安裝MogileFS和相關模塊:
cpan
----------------------------------->
install MogileFS::Server //後面有讓輸入yes的地方則輸入yes並回車即可

4.創建授權用戶:
/usr/local/mysql/bin/mysql
------------------------------------------>
USE mysql;
UPDATE user SET Password=PASSWORD(123456) WHERE User='root';
GRANT ALL ON mogilefs.* TO 'moguser'@'192.168.19.%' IDENTIFIED BY '123456';
GRANT ALL ON *.* TO 'root'@'192.168.19.%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
5.初始化數據庫:
mogdbsetup --dbhost=192.168.19.66 --dbrootuser=root --dbrootpass=123456 --dbuser=moguser --dbpass=123456 --yes
如果出現如下報錯,則重新運行一次該命令,一般數據就可正常導入了:

6.創建Tracker配置文件:
mkdir /etc/mogilefs
vim /etc/mogilefs/mogilefsd.conf
--------------------------------------------------------->
db_dsn = DBI:mysql:mogilefs:host=192.168.19.66
db_user = moguser
db_pass = 123456
conf_port = 7001
listener_jobs = 5
node_timeout = 5
rebalance_ignore_missing = 1
7.創建mogile用戶並啟動測試,查看端口,看到7001已經開始監聽了。另外可以使用“pkill mogilefsd”來停止mogilefsd服務。
useradd mogile
su mogile -c "mogilefsd -c /etc/mogilefs/mogilefsd.conf --deamon"
二、在19.74和19.76上安裝MogileFS
1.安裝YAML:
wget http://search.cpan.org/CPAN/authors/id/I/IN/INGY/YAML-1.15.tar.gz
tar xf YAML-1.15.tar.gz
cd YAML-1.15
perl Makefile.PL
make && make install
2.使用cpan在線安裝MogileFS:
cpan
-------------------------------->
install MogileFS::Server
3.創建Storage配置文件:
mkdir /data/mogdata -pv
useradd mogile
chown -R mogile.mogile /data/mogdata
mkdir /etc/mogilefs
vim /etc/mogilefs/mogstored.conf
----------------------------------------------------->
httplisten=192.168.19.74:7500 //在19.76上把地址改了即可
mgmtlisten=192.168.19.74:7501
docroot=/data/mogdata
4.啟動MogileFS Storage節點,查看端口,看到7500和7501開始監聽了。另外可以使用“pkill mogstored”來停止mogstored服務。
mogstored --daemon

三、管理配置MogileFS
1.三台主機安裝MogileFS-Utils:
cpan
-------------------------------->
install MogileFS::Utils
2.在Tracker上添加Storeage節點:
mogadm --trackers=192.168.19.66:7001 host add test --ip=192.168.19.74 --port=7500 --status=alive
mogadm --trackers=192.168.19.66:7001 host add tsst --ip=192.168.19.76 --port=7500 --status=alive
3.創建存儲目錄:
在19.74上:
mkdir /data/mogdata/dev1
在19.76上:
mkdir /data/mogdata/dev2
4.在Tracker上添加存儲設備:
mogadm --trackers=192.168.19.66:7001 device add test 1
mogadm --trackers=192.168.19.66:7001 device add tsst 2
mogadm --trackers=192.168.19.66:7001 device list
mogadm --trackers=192.168.19.66:7001 check
mogadm domain add jason

5.上傳文件測試:
mogupload --trackers=192.168.19.66:7001 --domain=jason --key='/fstab.html' --file='/etc/fstab'
mogfileinfo --trackers=192.168.19.66:7001 --domain=jason --key='/fstab.html'

用浏覽器打開紅框內的連接,即可看到文件:

咱們上傳個圖片試試:
mogupload --trackers=192.168.19.66:7001 --domain=jason --key='/centos.png' --file='/usr/share/backgrounds/default.png'
mogfileinfo --trackers=192.168.19.66:7001 --domain=jason --key='/centos.png'

四、擴展實驗
上面實驗可以看到,上傳的文件僅在一個主機上存放,實際上應該是兩個節點都存放才對。我從網上查到出錯的原因可能是由於Sys::Syscall這個模塊造成的。我們看到現在此模塊的版本為0.25。我上網搜索其解決辦法,發現如果將此軟件降為0.23版本可能會修復此問題,咱們試試看:

wget http://search.cpan.org/CPAN/authors/id/B/BR/BRADFITZ/Sys-Syscall-0.23.tar.gz
tar xf Sys-Syscall-0.23.tar.gz
cd Sys-Syscall-0.23
perl Makefile.PL
make && make install

重啟mogilefsd進程,然後再上傳一個文件試試:
vim /root/haha //隨便創建一個文件
---------------------------->
123
<----------------------------
mogupload --trackers=192.168.19.66:7001 --domain=jason --key='/haha.html' --file='/root/haha'
mogfileinfo --trackers=192.168.19.66:7001 --domain=jason --key='/haha.html'