mfs分佈式文件系統
前言:爲什麼要使用mfs
1.1nfs已經滿足不了業務頻繁的請求,之前是三臺nginx公用一臺nfs服務器,這樣讀寫頻繁直接導致了io瓶頸,但是已經是線上業務,不能通過更換設備來解決當前io問題,所以選擇一套新的文件系統就提上了日程,構建高可用MFS分佈式文件存儲架構成了當務之急
角色角色作用
管理服務器
managingserver (master)
負責各個數據存儲服務器的管理,文件讀寫調
度,文件空間回收以及恢復.多節點拷貝
元數據日誌服務器
Metaloggerserver(Metalogger)
負責備份master 服務器的變化日誌文件,文
件類型爲changelog_ml.*.mfs ,以便於在
master server 出問題的時候接替其進行工作
數據存儲服務器
dataservers (chunkservers)
負責連接管理服務器,聽從管理服務器調度,
提供存儲空間,併爲客戶提供數據傳輸.
客戶機掛載使用
client computers
通過fuse 內核接口掛接遠程管理服務器上所
管理的數據存儲服務器,.看起來共享的文件
系統和本地unix 文件系統使用一樣的效果.
1.4mfs之所以優於nfs
1.4 MooseFS優點
i. Free(GPL)
ii.通用文件系統,不需要修改上層應用就可以使用(那些需要專門api的dfs好麻煩哦!)。
iii. 可以在線擴容,體系架構可伸縮性極強。(官方的case可以擴到70臺了!)
iv. 部署簡單。(sa們特別高興,領導們特別happy!)
v. 體系架構高可用,所有組件無單點故障。 (您還等什麼?)
vi.文件對象高可用,可設置任意的文件冗餘程度(提供比raid1+0更高的冗餘級別),而絕對不會影響讀或者寫
的性能,只會加速哦!)
vii. 提供Windows回收站的功能.(不怕誤操作了,提供類似oralce 的閃回等高級dbms的即時回滾特性,
oralce這些特性可是收費的哦!)
viii. 提供類似Java語言的 GC(垃圾回收)。
ix.提供netapp,emc,ibm等商業存儲的snapshot特性。
x. google filesystem的一個c實現。(google在前面開路哦!)
xi.提供web gui監控接口。
xii. 提高隨機讀或寫的效率
xiii. 提高海量小文件的讀寫效率
2部署mfs分佈式文件系統
2.1部署mfs-master 管理服務器
2.1.1mfs-master安裝
wgethttp://ncu.dl.sourceforge.net/project/moosefs/moosefs/1.6.11/mfs-1.6.11.tar.gz (下載安裝包)
tar zxvf mfs-1.6.11.tar.gz (解壓安裝包)
cd mfs-1.6.11
useradd mfs -s /sbin/nologin (新建mfs用戶,用於編譯安裝)
./configure --prefix=/usr/local/mfs--with-default-user=mfs --with-default-group=mfs (編譯安裝)
make
make install
cd /usr/local/mfs/etc/ (進入mfs配置文件目錄)
cp mfsmaster.cfg.distmfsmaster.cfg (複製主配置文件)
cpmfsexports.cfg.dist mfsexports.cfg
vim mfsmaster.cfg
vim mfsexports.cfg
cd ..
cd var/
mfs/
cp metadata.mfs.emptymetadata.mfs
cat metadata.mfs
ln –s /usr/local/mfs/sbin/mfsmaster/etc/init.d/ mfsmaster
/usr/local/mfs/sbin/mfsmaster start
ps axu | grep mfsmaster
lsof -i
tail -f /var/log/messages
2.1.2啓動Master服務
/usr/local/mfs/sbin/mfsmaster start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules ...
loading sessions ... ok
sessions file has been loaded
exports file has been loaded
loading metadata ...
create new empty filesystemmetadata filehas been loaded
no charts data file - initializing emptycharts
master <-> metaloggers module: listenon *:9419
master <-> chunkservers module:listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly
2.1.3停止Master服務
/usr/local/mfs/sbin/mfsmaster -s
2.1.4啓動和停止Web GUI
啓動:/usr/local/mfs/sbin/mfscgiserv
停止: kill/usr/local/mfs/sbin/mfscgiserv
2.1.5訪問Web GUI方式
mfs-master IP:9425
http://192.168.17.139:9425
2.1.6相關配置文件
vim mfsexports.cfg
192.168.200.0/24 . rw (允許192.168.200.0訪問所有)
192.168.17.0/24 / rw (允許192.168.17.0訪問/目錄)
2.1.7添加/usr/local/mfs/sbin/mfsmaster 軟鏈接
ln -s /usr/local/mfs/sbin/mfsmaster/etc/init.d/mfsmaster
/etc/init.d/mfsmaster restart (啓動mfs-master )
/etc/init.d/mfsmaster stop (關閉mfs-master)
2.2部署mfs-chunk 存儲服務器
2.2.1從塊設備創建本地文件系統
fdisk -l
mkfs.ext3 /dev/sdb
mkdir /data
chown mfs:mfs /data
mount -t ext3 /dev/sdb /data
df -ah
/dev/sdb 133G 188M 126G 1% /data
2.2.2創建1個10G的LoopDevice文件
/dev/sdb1掛載到/data1 在data1目錄下生成文件10G mfs.img
fdisk /dev/sdb (磁盤分區)
mkdir /mfs
mount /dev/sdb1 /mfs (掛載/dev/sdb1分區給/mfs)
cd /mfs
dd if=/dev/zero of=mfs.img bs=1M count=10000 (創建mfs.img鏡像)
mkfs.ext3 mfs.img (格式化鏡像mfs.img文件)
losetup /dev/loop2 mfs.img (把mfs.img鏡像分配給/dev/loop2虛擬分區)
mkfs.ext3 /dev/loop2 (格式化虛擬分區)
mkdir –p /opt/mfs (創建分區掛載目錄)
chown mfs:mfs /opt/mfs (目錄權限修改)
mount –o loop /dev/loop2 /opt/mfs (把虛擬分區分配給/opt/mfs)
2.2.3安裝Chunk Server
wgethttp://ncu.dl.sourceforge.net/project/moosefs/moosefs/1.6.11/mfs-1.6.11.tar.gz
tar zxvf mfs-1.6.11.tar.gz
cd mfs-1.6.11
useradd mfs -s /sbin/nologin
./configure --prefix=/usr/local/mfs--with-default-user=mfs --with-default-group=mfs
make
make install
cd /usr/local/mfs/etc/
cp mfschunkserver.cfg.distmfschunkserver.cfg
cp mfshdd.cfg.dist mfshdd.cfg
修改配置文件
cd /usr/local/mfs/etc/
2.2.4修改配置文件
vi mfsadd.cfg (添加分區掛載目錄)
vi mfschunkserver.cfg (修改chunk主配置文件指向服務器IP和端口)
2.2.5啓動Chunk Server
啓動方法一 #/usr/local/mfs/sbin/mfschunkserverstart
#ln –s /usr/local/mfs/sbin/mfschunkserve/etc/init.d/mfschunkserver
啓動方法二#/etc/init.d/mfschunkserverrestart
ps axu |grep mfs
tail -f /var/log/messages
登錄Web GUI http://192.168.17.138:9425發現disk+設備
2.2.6停止Chunk Server
/usr/local/mfs/sbin/mfschunkserver stop
2.2.7添加/usr/local/mfs/sbin/mfschunkserver軟鏈接
ln -s /usr/local/mfs/sbin/mfschunkserver/etc/init.d/mfschunkserver
/etc/init.d/mfschunkserverrestart
2.3部署Metaloggerserver 元日誌服務器
安裝和配置元數據日誌服務器(metalogger)
2.3.1安裝元數據日誌服務
mfsmetalogger.cfg的配置
該服務只有一個配置文件,那就是mfsmetalogger.cfg。
[root@nas etc]# ps -ef|grep mfs
mfs 12327 1 0 08:38 ? 00:00:00/usr/local/mfs/sbin/mfsmaster start
創建用戶
useradd mfs –s /sbin/nolog in
安裝
wget http://ncu.dl.sourceforge.net/project/moosefs/moosefs/1.6.11/mfs-1.6.11.tar.gz
tar zxvf mfs-1.6.11.tar.gz
./configure –prefix=/usr/local/mfs –with-default-user=mfs –with-default-group=mfs
make ; make install
文中的大多數變量不難理解,類似於mfsmaster.cfg 中的變量,其中:
這個文件中需要修改的是MASTER_HOST 變量,這個變量的值是master server 的IP 地址。
2.3.2啓動metalogger服務
這說明metalogger 服務正常啓動了。利用命令檢查:
通過進程:
通過檢查端口:
[root@mail etc]# vi mfsmetalogger.cfg (修改配置文件MASTER_HOST)
# WORKING_USER =mfs
# WORKING_GROUP = mfs
# SYSLOG_IDENT =mfsmetalogger
# LOCK_MEMORY = 0
# NICE_LEVEL = -19
# DATA_PATH= /usr/local/mfs/var/mfs
# BACK_LOGS = 50
# META_DOWNLOAD_FREQ = 24 元數據備份文件下載請求頻率。默認爲24小時,即每隔一天從元數據服務器
(MASTER)下載一個metadata.mfs.back 文件。當元數據服務器關閉或者出故障時,matedata.mfs.back 文件將消失,那麼
要恢復整個mfs,則需從metalogger 服務器取得該文件。請特別注意這個文件,它與日誌文件一起,才能夠恢復整個被
損壞的分佈式文件系統。
# MASTER_RECONNECTION_DELAY = 5
MASTER_HOST = 192.168.17.139
# MASTER_PORT = 9419
# MASTER_TIMEOUT = 60
# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfsmetalogger.lock
[root@mail sbin]# ./mfsmetalogger start ( 啓動mstalogger元日誌服務器)
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly
[root@mail sbin]# ps -ef |grepmfs
mfs 12254 1 0 15:25 ? 00:00:00 ./mfschunkserver start
[root@mail sbin]# lsof -i:9419
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
mfsmetalo 12292 mfs 7u IPv4 1395372 TCPmail.tt.com:52456->192.168.3.34:9419 (ESTABLISHED)
查看日誌服務器的工作目錄
這是運行18 小時後:
2.3.3停止metalogger服務
如果沒有啓動metalogger 服務,在master server 則會有如下提示信息產生:
[root@mail mfs]# pwd
/usr/local/mfs/var/mfs
[root@mail mfs]# ll
total 8
-rw-r----- 1 mfs mfs 249 Jan 13 15:39 changelog_ml.1.mfs
-rw-r----- 1 mfs mfs 519 Jan 13 15:40 sessions_ml.mfs
[root@mail mfs]# ll
total 1808
-rw-r----- 1 mfs mfs 0 Jan 14 08:40 changelog_ml.0.mfs
-rw-r----- 1 mfs mfs 4692 Jan 13 23:39 changelog_ml.10.mfs
-rw-r----- 1 mfs mfs 4692 Jan 13 22:39 changelog_ml.11.mfs
-rw-r----- 1 mfs mfs 4692 Jan 13 21:39 changelog_ml.12.mfs
-rw-r----- 1 mfs mfs 4692 Jan 13 20:39 changelog_ml.13.mfs
-rw-r----- 1 mfs mfs 4692 Jan 13 19:39 changelog_ml.14.mfs
-rw-r----- 1 mfs mfs 4692 Jan 13 18:39 changelog_ml.15.mfs
-rw-r----- 1 mfs mfs 4692 Jan 13 17:39 changelog_ml.16.mfs
-rw-r----- 1 mfs mfs 4722 Jan 13 16:39 changelog_ml.17.mfs
-rw-r----- 1 mfs mfs 249 Jan 13 15:39 changelog_ml.18.mfs
-rw-r----- 1 mfs mfs 4692 Jan 14 08:39 changelog_ml.1.mfs
-rw-r----- 1 mfs mfs 4692 Jan 14 07:39 changelog_ml.2.mfs
-rw-r----- 1 mfs mfs 4692 Jan 14 06:39 changelog_ml.3.mfs
-rw-r----- 1 mfs mfs 4692 Jan 14 05:39 changelog_ml.4.mfs
-rw-r----- 1 mfs mfs 4692 Jan 14 04:39 changelog_ml.5.mfs
-rw-r----- 1 mfs mfs 4692 Jan 14 03:39 changelog_ml.6.mfs
-rw-r----- 1 mfs mfs 4692 Jan 14 02:39 changelog_ml.7.mfs
-rw-r----- 1 mfs mfs 4692 Jan 14 01:39 changelog_ml.8.mfs
-rw-r----- 1 mfs mfs 4692 Jan 14 00:39 changelog_ml.9.mfs
-rw-r----- 1 mfs mfs 915016 Jan 14 09:00 csstats.mfs
-rw-r----- 1 mfs mfs 777640 Jan 14 08:10 metadata_ml.mfs.back
-rw-r----- 1 mfs mfs 519 Jan 14 09:16 sessions_ml.mfs
[root@mail sbin]# ./mfsmetalogger –s (停止mstalogger元日誌服務器)
working directory: /usr/local/mfs/var/mfs
sending SIGTERM to lock owner (pid:12284)
waiting for termination ... terminated
安裝配置數據存儲服務器(chunkserver)
安裝數據存儲服務
配置文件位於安裝目錄/usr/local/mfs/etc ,需要的配置文件有兩個: mfschunkserver.cfg 和
mfshdd.cfg,mfschunkserver.cf 是主配置文件,mfshdd.cfg 是服務器用來分配給MFS 使用的空間,最
好是一個單獨的硬盤或者一個raid 卷,最低要求是一個分區。
mfschunkserver.cfg的配置
文中的大多數變量不難理解,類似於mfsmaster.cfg 中的變量
tail -f /var/log/messages
Dec 30 16:53:00 nas mfsmaster[14291]: no meta loggers connected !!!
2.4mfs- Client的安裝
2.4.1安裝fuse
yuminstall kernel.x86_64 kernel-devel.x86_64 kernel-headers.x86_64
###rebootserver####
yuminstall fuse.x86_64 fuse-devel.x86_64 fuse-libs.x86_64
modprobefuse
2.3.2安裝MooseFS Client
wgethttp://ncu.dl.sourceforge.net/project/moosefs/moosefs/1.6.11/mfs-1.6.11.tar.gz
tarzxvf mfs-1.6.11.tar.gz
cdmfs-1.6.11
useraddmfs -s /sbin/nologin
./configure--prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
--enable-mfsmount
make
makeinstall
2.4.2掛載文件系統
cd/mnt/
mkdirmfs
/usr/local/mfs/bin/mfsmount/mnt/mfs/ -H 192.168.17.138
mkdirmfsmeta
/usr/local/mfs/bin/mfsmount-m /mnt/mfsmeta/ -H 192.168.17.138
df-ah