一、MFS 簡介....
MooseFS(Moose File System,mfs)是一種分散式檔案系統,它將資料分佈在網路中的
不同伺服器上,支援FUSE,客戶端可以作為一個 普通的Unix 檔案系統使用MooseFS。
MooseFS中共有四種角色:
1. 主控伺服器master server、 ( 主控伺服器負責各個儲存塊伺服器的管理、檔案讀寫排程、檔案空間回收以及恢復、多節點拷貝。)
2. 後設資料日誌伺服器metalogger server、( 後設資料日誌伺服器負責備份主控伺服器的後設資料、變化日誌檔案,檔案型別為changelog_ml.*.mfs,以便在主控伺服器出問題的時候可以恢復。)
3. 儲存塊伺服器chunkserver、( 儲存塊伺服器負責提供儲存空間,併為客戶提供資料傳輸。)
4. 客戶端client。( 客戶端則通過fuse掛接主控伺服器上所管理的儲存塊伺服器,可以像操作本地檔案一樣操作MooseFS中的檔案。)
二、環境架構 : CentOS 5.8 x64 * 3
CentOS 5.8 x64 10.3.0.101 --- 主控伺服器 master server
CentOS 5.8 x64 10.3.0.102 --- 後設資料日誌伺服器metalogger server --- 儲存塊伺服器chunkserver
--- 備份主控伺服器
CentOS 5.8 x64 10.3.0.103 --- 客戶端client。
Keepalived 10.3.0.110 --- 虛擬IP ( VIP )
三、安裝配置MooseFS
1、在http://www.moosefs.org/download.html下載軟體 Version: 1.6.26
wget http://pro.hit.gemius.pl/hitredir/id=p4CVHPOzkVa0JJIK.m0Ee6dyHZEgoQb1KaiPmVK29EX.M7/url=moosefs.org/tl_files/mfscode/mfs-1.6.26.tar.gz
2、安裝 MFS 所需的支援 fuse 開發包
yum -y install fuse*
或者下載原始碼包安裝
( http://sourceforge.net/projects/fuse/files/fuse-2.X/ )
3、在 主控、儲存塊伺服器、後設資料日誌伺服器安裝 MFS
建立使用者、組
groupadd mfs
useradd -g mfs mfs
tar xvf mfs-1.6.26.tar.gz
cd mfs-1.6.26
./configure --prefix=/opt/local/mfs --with-default-user=mfs --with-default-group=mfs
make && make install
4、客戶端MFS安裝
groupadd mfs
useradd -g mfs mfs
tar xvf mfs-1.6.26.tar.gz
cd mfs-1.6.26
./configure --prefix=/opt/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount
make && make install
------------------------------------------------------------------------
(出現 configure: error: zlib development library not found )
在 http://zlib.net/ 下載 zlib 編譯安裝
./configure
make && make install
-------------------------------------------------------------------------
5、 配置MFS
5.1、 配置 啟動 主控服務 ( 10.3.0.101 )
主控伺服器、儲存塊伺服器、後設資料日誌伺服器分別使用不同的配置檔案。配置檔案預設存放目錄是安裝目錄下的etc目錄
cd /opt/local/mfs/etc
主控伺服器使用的配置檔案是mfsmaster.cfg, 將mfsmaster.cfg.dist改名
註釋掉的資訊是當前的預設值,使用這些預設值就可以正常執行。
cp mfsmaster.cfg.dist mfsmaster.cfg
主控伺服器也用到了mfsexports.cfg檔案,指定了哪些客戶端機器可以遠端掛載MooseFS檔案系統、具有什麼許可權。
cp mfsexports.cfg.dist mfsexports.cfg
vi mfsexports.cfg
只需要在在檔案裡,新增這一行
10.3.0.0/24 / rw,alldirs,maproot=0,password=123456
表明 10.3.0.0 ~10.3.0.255 網段的機器都可以掛載MooseFS檔案系統,具有讀寫、
掛載任意指定的子目錄許可權、自動對映為root使用者。
IP地址有幾種表現形式:所有ip,單個ip,IP網路地址/位數掩碼,IP網路地址/子網掩碼,ip段範圍。
許可權部分中:
ro 只讀模式共享,rw 讀寫方式共享;
alldirs 許掛載任何指定的子目錄;
maproot 對映為root或者其他的使用者;
password 指定客戶端密碼。
在預設資料目錄/opt/local/mfs/var/mfs下,安裝時會產生一個空的後設資料檔案metadata.mfs.empty,根據這個檔案複製出初始的後設資料檔案metadata.mfs:
cp metadata.mfs.empty metadata.mfs
修改完以後,就可以啟動 主控服務 了.....
/opt/local/mfs/sbin/mfsmaster start
-----------------------------------------------------------------------
working directory: /opt/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules ...
loading sessions ... ok
sessions file has been loaded
exports file has been loaded
mfstopology configuration file (/opt/local/mfs/etc/mfstopology.cfg) not found - using defaults
loading metadata ...
loading objects (files,directories,etc.) ... ok
loading names ... ok
loading deletion timestamps ... ok
loading chunks data ... ok
checking filesystem consistency ... ok
connecting files and chunks ... ok
all inodes: 1
directory inodes: 1
file inodes: 0
chunks: 0
metadata file has been loaded
stats file has been loaded
master <-> metaloggers module: listen on *:9419
master <-> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly
-----------------------------------------------------------------------
主控master服務執行後,會在資料目錄/opt/local/mfs/var/mfs 下產生後設資料備份檔案metadata.mfs.back、日誌檔案changelog.*.mfs、sessions.mfs檔案等,預設保留前50小時的日誌,即mfsexports.cfg中BACK_LOGS的設定的值。
主控master服務每小時會把changelog.*.mfs檔案合併到後設資料檔案中。
5.2、 配置 啟動 後設資料日誌服務 (10.3.0.102) 備份master
----------------------------------------------------------------------
將檔案修改
cp mfsmaster.cfg.dist mfsmaster.cfg
cp mfsexports.cfg.dist mfsexports.cfg
vi mfsexports.cfg
只需要在在檔案裡,新增這一行
10.3.0.0/24 / rw,alldirs,maproot=0,password=123456
----------------------------------------------------------------------
修改以上檔案,作為備份master 使用...
後設資料日誌伺服器中使用的配置檔案是mfsmetalogger.cfg,可以將/opt/local/mfs /etc下的mfsmetalogger.cfg.dist改名,其中註釋掉的資訊是當前的預設值。要注意的是,其中的MASTER_HOST\MASTER_PORT指定了主控伺服器的位置、埠,需要修改為正確的。預設MASTER_HOST是mfsmaster。先修改/etc/hosts檔案,增加一行
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
10.3.0.110 mfsmaster
然後就可以啟動 metalogger服務 了..
/opt/local/mfs/sbin/mfsmetalogger start
------------------------------------------------------------------------
working directory: /opt/local/mfs/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly
------------------------------------------------------------------------
啟動後,可以看到預設資料目錄/opt/local/mfs/var/mfs下會複製主控伺服器的後設資料備份檔案metadata_ml.mfs.back、日誌檔案changelog_ml_back.*.mfs、sessions_ml.mfs檔案
另外,可以把mfsmetalogger.cfg檔案中的META_DOWNLOAD_FREQ設定成1,即每小時複製一次metadata.mfs.back檔案,減少恢復的延遲時間。
vi mfsmetalogger.cfg
# META_DOWNLOAD_FREQ = 24 修改為
META_DOWNLOAD_FREQ = 1
然後重新啟動 /opt/local/mfs/sbin/mfsmetalogger restart
-----------------------------------------------------------------
working directory: /opt/local/mfs/var/mfs
sending SIGTERM to lock owner (pid:10259)
waiting for termination ... terminated
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly
-------------------------------------------------------------------
5.3、配置 啟動 儲存塊服務 (10.3.0.102)
儲存塊伺服器中使用的配置檔案是mfschunkserver.cfg,將/opt/local/mfs/etc下的mfschunkserver.cfg.dist改名,其中註釋掉的資訊是當前的預設值。要注意的是,其中的MASTER_HOST\MASTER_PORT指定了主控伺服器的位置、埠,需要修改為正確的。預設MASTER_HOST是mfsmaster,先修改/etc/hosts檔案,增加一行
cp mfschunkserver.cfg.dist mfschunkserver.cfg
然後我們 建立一個用於存放資料的目錄,並授予許可權
mkdir -p /opt/data/mfschunk1
chown -R mfs:mfs /opt/data/mfs
另外,mfschunkserver.cfg中指定了共享硬碟使用的配置檔案mfshdd.cfg,修改/opt/local/mfs/etc下的mfshdd.cfg.dist名字。在裡面新增剛才配置的目錄
cp mfshdd.cfg.dist mfshdd.cfg
vi mfshdd.cfg
新增
/opt/data/mfschunk1
儲存塊伺服器中共享的硬碟應當只供mfs使用,以便mfs能正確的管理它的自由空間。
更改完成以後就可以啟動儲存塊伺服器了
/opt/local/mfs/sbin/mfschunkserver start
-----------------------------------------------------------------------
working directory: /opt/local/mfs/var/mfs
lockfile created and locked
initializing mfschunkserver modules ...
hdd space manager: path to scan: /opt/data/mfs/
hdd space manager: start background hdd scanning (searching for available chunks)
main server module: listen on *:9422
no charts data file - initializing empty charts
mfschunkserver daemon initialized properly
------------------------------------------------------------------------
5.4、配置 客戶端 ..(10.3.0.103)
修改/etc/hosts檔案,增加一行
vi /etc/hosts
10.3.0.110 mfsmaster
建立一個作為掛載點的目錄,使用mfsmount命令掛載,掛載到本地..
mkdir -p /opt/data/mfs
掛載
/opt/local/mfs/bin/mfsmount /opt/data/mfs -H mfsmaster
引數:
-H 為掛載整個mfs目錄
-P 指定實際使用的埠
-S 指定掛載的子目錄
5.5、安裝配置keepalived 主從災備切換( 10.3.0.110 ) 虛擬IP
使用keepalived,監控主控伺服器,當主控伺服器10.3.0.101上的mfsmaster服務掛掉,伺服器當機時,自動切換到後設資料日誌伺服器10.3.0.102 上繼續服務。
在主控伺服器 與 後設資料日誌伺服器 下載 keepalived
http://www.keepalived.org/download.html 下載最新版
wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
tar zxvf keepalived-1.2.7.tar.gz
cd keepalived-1.2.7
./configure --prefix=/
make && make install
配置為系統服務,並且開機自動啟動.
---------------------------------------------------------------------
chmod +x /etc/rc.d/init.d/keepalived
chkconfig --add keepalived
chkconfig --level 21 keepalived on
--------------------------------------------------------------------
配置檔案在/etc/keepalived/keepalived.conf
修改配置檔案 keeplived.conf
vi /etc/keepalived/keepalived.conf
主控伺服器10.3.0.101 上的配置檔案是,每兩秒鐘使用指令碼檢測mfsmaster執行情況,發現執行失敗,就停止keepaled服務。
-------------------------------------------------------------------------
! Configuration File for keepalived
global_defs {
router_id LVS_STTD
}
vrrp_script check_run {
script "/opt/local/mfs/keepalived_check_mfsmaster.sh"
interval 2
}
vrrp_sync_group VG1 {
group {
VI_1
}
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 88
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_run
}
virtual_ipaddress {
10.3.0.110
}
}
-------------------------------------------------------------------------
/opt/local/mfs/keepalived_check_mfsmaster.sh
#指令碼,如mfsmaster未執行,則停止keepalived服務
vi /opt/local/mfs/keepalived_check_mfsmaster.sh
-------------------------------------------------------------------------
#!/bin/sh
CHECK_TIME=2
mfspath=" /opt/local/mfs/sbin/mfsmaster"
function check_mfsmaster () {
ps -ef | grep mfsmaster | grep "/opt/local/mfs/sbin/mfsmaster" | grep -v "grep"
if [ $? = 0 ] ;then
MFS_OK=1
else
MFS_OK=0
fi
return $MFS_OK
}
while [ $CHECK_TIME -ne 0 ]
do
let "CHECK_TIME -= 1"
check_mfsmaster
if [ $MFS_OK = 1 ] ; then
CHECK_TIME=0
exit 0
fi
if [ $MFS_OK -eq 0 ] && [ $CHECK_TIME -eq 0 ] ;then
/etc/init.d/keepalived stop
exit 1
fi
done
------------------------------------------------------------------------
授權..
chmod +x /opt/local/mfs/keepalived_check_mfsmaster.sh
後設資料日誌伺服器 10.3.0.102 上keepalved配置
vi /etc/keepalived/keepalived.conf
-------------------------------------------------------------------------
! Configuration File for keepalived
global_defs {
router_id LVS_STTD
}
vrrp_sync_group VG1 {
group {
VI_1
}
notify_master "/opt/local/mfs/keepalived_notify.sh master"
notify_backup "/opt/local/mfs/keepalived_notify.sh backup"
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 88
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.3.0.110
}
}
-------------------------------------------------------------------------
建立指令碼檔案 /opt/local/mfs/keepalived_notify.sh
vi /opt/local/mfs/keepalived_notify.sh
------------------------------------------------------------------------
#!/bin/bash
MFS_HOME=/opt/local/mfs
MFSMARSTER=${MFS_HOME}/sbin/mfsmaster
MFSMETARESTORE=${MFS_HOME}/sbin/mfsmetarestore
MFS_DATA_PATH=${MFS_HOME}/var/mfs
function backup2master(){
$MFSMETARESTORE -m ${MFS_DATA_PATH}/metadata.mfs.back -o ${MFS_DATA_PATH}/metadata.mfs $MFS_DATA_PATH/changelog_ml*.mfs
$MFSMARSTER start
}
function master2backup(){
$MFSMARSTER stop
/opt/local/mfs/sbin/mfsmetalogger start
}
function ERROR(){
echo "USAGE: keepalived_notify.sh master|backup "
}
case $1 in
master)
backup2master
;;
backup)
master2backup
;;
*)
ERROR
;;
esac
------------------------------------------------------------------------
授權
chmod +x /opt/local/mfs/keepalived_notify.sh