MooseFS在今年推出了v2.0版本,分為社區版本和專業版本,不過和v1版本相比較,增強了一些功能特性( quotas, extended attributes, ACL support, MFS CLI tool, better memory management.)目前可以通過v1版本進行原始碼的研究分析,最新的是v1.6.27-5。國內百度有基於MooseFS的深度二次開發,叫Shadow-MFS(https://github.com/ops-baidu/shadow-mfs)。
而我近日發現了一個國外的一個基於MooseFS的分支版本,叫做LizardFS(http://lizardfs.com/),代碼也有放在Github上。在實際安裝使用後,感覺還是不錯的。MooseFS v2.0的CE版本中加入的一些特性,其實在LizardFS裡也有得到了支援。這裡主要介紹下自己從MooseFS升級到LizardFS的一些實際操作經曆,供大家參考。
一、LizardFS介紹
LizardFS是MooseFS的一個分支版本
官網:http://lizardfs.com
Github源鏡像:https://github.com/lizardfs/lizardfs
主要增加了以下這些功能:
High availability //提供shadow master功能 Quotas //磁碟配額管理 POSIX Access Control Lists POSIX Extended Attributes I/O bandwidth limiting //限制頻寬 Command line monitoring tool //命令列的監控查詢方式 High performance CRC checksum implementation Reduced overhead of hourly metadata backups 最主要的HA方面是通過提供shadow master功能,可以線上手動切換成master,與MooseFS的結構相比,大致就是多了Shadow master的這個新的角色示。
Shadow master可以定期自動從master那擷取changelog,metadata和sessions等資料。
二、LizardFS升級安裝
我是直接從原先的MooseFS v1.6.27-5升級到LizardFS v2.5.1,系統內容是Redhat EL 6.5 x86_64。
1. 下載安裝包
LizardFS v2.5.0源碼包:https://github.com/lizardfs/lizardfs/archive/v2.5.0.tar.gz
Git源:https://github.com/lizardfs/lizardfs.git
2. 準備工作
升級gcc到v4.8.1(需要支援c++11):
tar xvf gcc-4.8.1.tar.bz2
cd gcc-4.8.1
./contrib/download_prerequisites
cd ..
mkdir build_gcc-4.8.1
cd build_gcc-4.8.1
../gcc-4.8.1/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
make -j16
make install
cd ..
rm -rf build_gcc-4.8.1 gcc-4.8.1 gcc-4.8.1.tar.gz
mv /usr/bin/c++ /usr/bin/c++-4.4.7
update-alternatives --install /usr/bin/c++ c++ /usr/local/bin/c++ 40
mv /usr/bin/g++ /usr/bin/g++-4.4.7
update-alternatives --install /usr/bin/g++ g++ /usr/local/bin/g++ 40
mv /usr/bin/gcc /usr/bin/gcc-4.4.7
update-alternatives --install /usr/bin/gcc gcc /usr/local/bin/gcc 40
卸載Boost v1.41舊版本
yum remove boost-devel-1.41.0-18.el6.x86_64
以下操作可選:用於安裝新版本boost
yum install p7zip
7za x boost_1_56_0.7z
cd boost_1_56_0
./bootstrap.sh
./bjam
./bjam install
ln -s /usr/local/include/boost /usr/include/boost
3. 安裝LizardFS
我使用最新的開發版代碼,穩定版本可以使用v2.5
git clone https://github.com/lizardfs/lizardfs.git
cd lizardfs
./configure
注意:
如果只使用正常的fuse功能掛載,就可以忽略這裡缺少Polonaise和Thrift等的提示。可以直接下一步make看能否通過。
make
make install
為了能夠運行lizardfs,需要使用到libstdc++.so.6的高版本,所以做了連結:
cp /usr/local/lib64/libstdc++.so.6.0.18 /usr/lib64/
rm /usr/lib64/libstdc++.so.6
ln -s /usr/lib64/libstdc++.so.6.0.18 /usr/lib64/libstdc++.so.6
echo "/usr/local/lib" >> /etc/ld.so.conf
ldconfig
至此,已經順利從MooseFS升級到了LizardFS,完全可以按照以前的MooseFS的使用方式操作。
三、LizardFS新功能使用
1. Shadow master
先對/etc/mfs/mfsmaster.cfg進行配置
設定PERSONALITY = shadow //指定master屬性為shadow master
從master伺服器那獲得現有mfsexports.cfg
然後啟動mfsmaster
備忘:
可以有多個shadow master伺服器運行,同時可以與metalogger server,chunk server都部署在同一台物理伺服器上。在監控頁面上可以看到shadow master與metalogger server都是列在Metadata Backup列表上。
Master出故障掉線後的處理:
a) 將shadow master上的IP改為master的IP
b) 修改mfsmaster.cfg中的PERSONALITY為master
c) mfsmaster reload重載配置
d) 修複master的工作:
修改mfsmaster.cfg中的PERSONALITY為shadow
mfsmetarestore -a 用於清除metadata.mfs.lock
啟動mfsmaster作為shadow
2. 磁碟配額管理
提供工具:mfssetquota, mfsrepquota
3. 頻寬節流設定
增加了master上的設定檔(/etc/mfs/)用於限制全域和本地節點的流量頻寬,似乎是通過cgroups來實現的。
功能啟用,需要在mfsmaster.cfg中加入GLOBALIOLIMITS_*方面的設定,例如:
GLOBALIOLIMITS_FILENAME = /etc/mfs/globaliolimits.cfg
GLOBALIOLIMITS_RENEGOTIATION_PERIOD_SECONDS = 0.1
GLOBALIOLIMITS_ACCUMULATE_MS = 250
然後分別設定設定全域和本地的設定檔globaliolimits和iolimits.cfg
4 監控工具lizardfs-probe
通過在終端下運行命令列,從master擷取資訊,包括整個系統的統計資訊,chunk server的資訊,等等。比較簡單,直接看協助即可。