MFS分佈式存儲

對於更大量的存儲使用 MFS 分佈式存儲:

wKioL1XHIKeA_3iTAAG7G_6v4DU148.jpg

服務概述:

MFS : 網絡分佈式文件系統

Project web site: http://www.moosefs.com/



Installation and using MooseFS:

http://www.moosefs.org/reference-guide.html



mooseFS(moose 駝鹿)是一款網絡分佈式文件系統。它把數據分散在多臺服務器上,但對於用戶來講, 看到的只是一個源。MFS 也像其他類 unix 文件系統一樣,包含了層級結構(目錄樹),存儲着文件屬性

(權限,最後訪問和修改時間),可以創建特殊的文件(塊設備,字符設備,管道,套接字),符號鏈接, 硬鏈接。



MFS 分佈式文件系統部署方案:

MooseFS 文件系統 4 種角色介紹

MooseFS 是一種分佈式文件系統,MooseFS 文件系統結構包括以下四種角色:

1 管理服務器 managing server (master)

管理服務器:負責各個數據存儲服務器的管理,文件讀寫調度,文件空間回收以及恢復.多節點拷貝

2 元數據日誌服務器 Metalogger server(Metalogger)

元數據日誌服務器: 負責備份 master 服務器的變化日誌文件,文件類型爲 changelog_ml.*.mfs,以便 於在 master server 出問題的時候接替其進行工作

3 數據存儲服務器 data servers (chunk servers )

數據存儲服務器: 聽從管理服務器調度,提供存儲空間,併爲客戶提供數據傳輸.。 真正存儲用戶數據的服務器。存儲文件時,首先把文件分成塊,然後這些塊在數據服務器 chunkserver 之間復 制(複製份數可以手工挃定,建議設置副本數爲 3)。數據服務器可以是多個,並且數量越多,可 使用的“磁盤空間”越大,可靠性也越高。


4 客戶機掛載使用client computers

客戶端: 掛載遠程mfs服務器共享出的存儲並使用。  通過fuse內核接口掛載遠程管理服務器上所管理的數據存儲服務器共享出的硬盤。 共享的文件系統的用法和nfs相似。

使用MFS文件系統來存儲和訪問的主機稱爲MFS的客戶端,成功掛接MFS文件系統以後,就可以像以前使用NFS一樣共享這個虛擬性的存儲了。



內部運行機制:

wKiom1XHH4mBZcszAAHe6YFFi5M322.jpg

wKiom1XHH6DAhQYEAAHcB9S8KYU377.jpg

xuegod62

端口號:

9420 : MFS master MFS chunck

9421 : MFS master MFS Client

9419   : MFS master 和 MFS metalogger 端通信端口

9422   : MFS chunck   和 MFS Client 端通信端口

9425   : MFS master   web 界面監聽端口,查看整體運行狀態



實驗環境:

服務器 角色

xuegod63 管理服務器 managing server (master) 和元數據日誌服務器(Metalogger)

xuegod64 數據存儲服務器 data servers (chunk servers )

xuegod62 客戶機掛載使用 client computers




安裝環境準備:

所有服務器端和客戶端都要支持 fuse 內核模塊。

由於 mfs 的客戶端程序也就是加載 mfs 磁盤系統的命令是使用了 fuse,因此只要是想掛載 mfs 的服務器, 必要的前提條件就是先安裝 fuse,這樣編譯 mfs 的時候才能順利通過。



fuse 概述:

用戶空間文件系統(Filesystem in Userspace,簡稱 FUSE)是操作系統中的概念,挃完全在用戶態實 現的文件系統。目前 Linux 通過內核模塊對此進行支持。一些文件系統如 NTFS-3G(作用:讓 Linux 中 對 NTFS 文件系統提供支持) 使用 FUSE 實現。

注:2.6 以上內核,都自帶 fuse



配置:mfs 管理服務器 xuegod63

注:所有角色都是用的同一個安裝文件只是配置有所丌同

[root@xuegod63 ~]# yum install rpm-build gcc gcc-c fuse-devel zlib-devel -y [root@xuegod63 mfs]# useradd -s /sbin/nologin mfs   #建立用戶並禁示此用戶登陸 [root@xuegod63 ~]# tar zxvf mfs-1.6.27-5.tar.gz

[root@xuegod63 ~]# cd mfs-1.6.27

[root@xuegod63 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs

--with-default-group=mfs



[root@xuegod63 mfs-1.6.27]# make   -j 4

...

/mfs/var/mfs#" <cgiserv.py.in >mfscgiserv

make[2]: Leaving directory `/root/mfs-1.6.27/mfscgi' make[2]: Entering directory `/root/mfs-1.6.27' make[2]: Leaving directory `/root/mfs-1.6.27' make[1]: Leaving directory `/root/mfs-1.6.27' [root@xuegod63 mfs-1.6.27]#make install



查看安裝後目錄結構

[root@xuegod63 mfs-1.6.27]# ls /usr/local/mfs bin   etc   sbin   share   var

注:各個文件的作用:

bin – 客戶端工具

etc –服務器的配置文件都放在該目錄中

sbin  –  服 務 端 吭 勱 程 序 。 如 : 元 數 據 服 務 器 端 程 序  mfsmaster 、 數 據 存 儲 服 務 器 端 服 務 程 序

mfschunkserver share – 文檔

var – 元數據目錄(可在配置文件中自定義到其他目錄)




生成配置文件:

[root@xuegod63 ~]# cd /usr/local/mfs/etc/mfs/ [root@xuegod63 ~]# cp mfsmaster.cfg.dist mfsmaster.cfg [root@xuegod63 ~]# cp mfsexports.cfg.dist mfsexports.cfg [root@xuegod63 ~]#cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

[root@xuegod63 ~]#cp /usr/local/mfs/var/mfs/metadata.mfs.empty

/usr/local/mfs/var/mfs/metadata.mfs

#首次安裝 master 時,會自勱生成一個名爲 metadata.mfs.empty 的元數據文件 metadata,該文件是 空的。MooseFS master 運必須有文件 metadata.mfs




[root@xuegod63 mfs]# vim /usr/local/mfs/etc/mfs/mfsmaster.cfg #丌需要做修改

23 # MATOCS_LISTEN_HOST = * #監聽所有 IP,也直接寫一個 IP 地址,如 192.168.1.63

24 # MATOCS_LISTEN_PORT = 9420

11 # DATA_PATH = /usr/local/mfs/var/mfs

注:這個配置文件中所有注掉的設置都是默認的配置。

如果有需要還可以修改 DATA_PATH 的設置將元數據目錄存儲到其他的分區戒磁盤。其他的參數都很簡 單根據需要調整即可。

master 會打開 9420 端口等待 mfschunkserver 數據存儲服務器連接




2.1.2 修改目錄權限

[root@xuegod63 mfs]# chown -R mfs:mfs /usr/local/mfs

2.1.3 啓動服務端

[root@xuegod63 mfs]# /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

mfstopology: incomplete definition in line: 7 mfstopology: incomplete definition in line: 7 mfstopology: incomplete definition in line: 22 mfstopology: incomplete definition in line: 22 mfstopology: incomplete definition in line: 28

mfstopology: incomplete definition in line: 28

topology file has been loaded 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




[root@xuegod63 mfs]# netstat -antup | grep 942

tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN

11266/mfsmaster

tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN

11266/mfsmaster

注:沒有看到 9419 是因爲沒有客戶端來連接了



開機啓動:

[root@xuegod63 mfs]# echo '/usr/local/mfs/sbin/mfsmaster start' >> /etc/rc.local



關閉服務器

[root@xuegod63 mfs]# /usr/local/mfs/sbin/mfsmaster stop sending SIGTERM to lock owner (pid:25665)

waiting for termination ... terminated

[root@xuegod63 mfs]# /usr/local/mfs/sbin/mfsmaster  start



查看產生的日誌文件:

[root@xuegod63 mfs]# ls /usr/local/mfs/var/mfs/

metadata.mfs.back   metadata.mfs.back.1   metadata.mfs.empty   sessions.mfs   stats.mfs

[root@xuegod63 mfs]#




挃定要共享的文件:

[root@xuegod63 mfs]# vim /usr/local/mfs/etc/mfs/mfsexports.cfg #添加以下兩行

# Allow everything but "meta".

* / rw,alldirs,maproot=0


# Allow "meta".

* . rw

192.168.1.64/24 / rw,alldirs,maproot=0

192.168.1.0/24 / rw,alldirs,maproot=0


mfsexports.cfg 文件每一條由三部分組成,第一部分表示客戶端的 IP 地址,第二部分表示被掛接的目錄,

第三部分表示客戶端擁有的權限,下面對三給部分進行解釋:

a.客戶端 IP 地址

* 所有 IP 地址

x.x.x.x    單個 IP 地址 

x.x.x.x/m.m.m.m IP 網絡地址/子網掩碼

f.f.f.f-t.t.t.t IP 段



b.被掛載的目錄

/ 表示 MooseFS 的根

. 表示 MFSMETA 文件系統

c. 客戶端擁有的權限

ro 只讀

rw 讀寫

alldirs 允講掛載任何挃定的子目錄

maproot 映射爲 

root 用戶還是指定的用戶 

password    指定客戶端密碼




2、配置 xuegod64 爲元數據日誌服務器(mfsmetalogger)安裝主控備份服務器 元數據日誌守護進程是在安裝 master server 時一同安裝的,最小的要求並不比 master 本身大,可以被 運行在任何機器上(例如任一臺 chunkserver),但是最好是放置在 MooseFS master 的備份機上,備 份 master 服務器的變化日誌文件,文件類型爲 changelog_ml.*.mfs。因爲主要的 master server 一旦 失效,可能就會將這臺 metalogger 機器取代而作爲 master server。



[root@xuegod63 ~]# useradd mfs –s /sbin/nologin #建立用戶並禁示此用戶登陸

[root@xuegod63 ~]# tar zxvf mfs-1.6.11.tar.gz

[root@xuegod63 ~]# cd mfs-1.6.11

[root@xuegod63 mfs-1.6.27]# ./configure --prefix=/usr/local/mfsmeta

--with-default-user=mfs --with-default-group=mfs

[root@xuegod63 ~]# make   -j 4   && make install



生成配置文件:

[root@xuegod63 mfsmeta]# cd /usr/local/mfsmeta/etc/mfs/ [root@xuegod63 mfs]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

[root@xuegod63 mfs]# vim mfsmetalogger.cfg   #修改紅色標記內容

# 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.1.63

#MASTER_HOST,這個文件中需要修改的是 MASTER_HOST 變量,這個變量的值是 MASTER SERVER

的 IP 地址

# MASTER_PORT = 9419

# MASTER_TIMEOUT = 60

# deprecated, to be removed in MooseFS 1.7

# LOCK_FILE = /var/run/mfs/mfsmetalogger.lock



修改目錄權限

[root@xuegod63 mfs-1.6.27]# chown -R mfs:mfs /usr/local/mfsmeta/

啓動服務

[root@xuegod63 mfs]# /usr/local/mfsmeta/sbin/mfsmetalogger start working directory: /usr/local/mfsmeta/var/mfs

lockfile created and locked

initializing mfsmetalogger modules ... mfsmetalogger daemon initialized properly 

開機啓動

[root@xuegod63 mfs]# echo '/usr/local/mfsmeta/sbin/mfsmetalogger start ' >> /etc/rc.local



關閉服務

[root@xuegod63 mfs]# /usr/local/mfsmeta/sbin/mfsmetalogger stop sending SIGTERM to lock owner (pid:17622)

waiting for termination ... terminated

[root@xuegod63 mfs]# /usr/local/mfsmeta/sbin/mfsmetalogger start



查看 MFS 通訊端口是否打開 

[root@xuegod63 mfs]# lsof -i:9419

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

mfsmaster 26031   mfs 8u   IPv4   60942 0t0   TCP *:9419 (LISTEN)

mfsmaster 26031 mfs 13u IPv4 61415 0t0 TCP

xuegod63.cn:9419->xuegod63.cn:47622 (ESTABLISHED)

mfsmetalo 26111 mfs 8u IPv4 61414 0t0 TCP

xuegod63.cn:47622->xuegod63.cn:9419 (ESTABLISHED)




數據存儲服務器(chunkserver) 安裝數據服務器(chunkservers),這些機器的磁盤上要有適當的剩餘空間,而且操作系統要遵循 POSIX 標 準(驗證了的有這些: Linux, FreeBSD, Mac OS X and OpenSolaris)。

Chunkserver 存儲數據時,是在一個普通的文件系統如 ext4 上儲存數據塊戒碎片(chunks/fragments)

作爲文件。 你在 chunkserver 上看不到完整的文件。



安裝:

[root@xuegod64 mfs-1.6.27]# useradd mfs -s /sbin/nologin

#建立用戶並禁示此用戶登陸

[root@xuegod64 ~]# tar zxvf mfs-1.6.27-5.tar.gz

[root@xuegod64 ~]# cd mfs-1.6.27

[root@xuegod64 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs

--with-default-group=mfs

[root@xuegod64 mfs-1.6.27]# make   -j 4 && make install



生成配置文件:

[root@xuegod64 etc]# cd /usr/local/mfs/etc/mfs/

[root@xuegod64 mfs]# cp mfschunkserver.cfg.dist mfschunkserver.cfg

[root@xuegod64 mfs]# cp mfshdd.cfg.dist mfshdd.cfg



[root@xuegod64 mfs]# vim mfschunkserver.cfg #修改以下紅色內容

# WORKING_USER = mfs

# WORKING_GROUP = mfs

# DATA_PATH = /usr/local/mfs/var/mfs

# LOCK_FILE = /var/run/mfs/mfschunkserver.pid

# SYSLOG_IDENT = mfschunkserver

# BACK_LOGS = 50

# MASTER_RECONNECTION_DELAY = 30

MASTER_HOST = 192.168.1.63 元數據服務器的名稱戒地址,可以是主機名,也可以是 ip 地址

MASTER_PORT = 9420

# MASTER_TIMEOUT = 60

# CSSERV_LISTEN_HOST = *

# CSSERV_LISTEN_PORT = 9422 這個監聽端口用於不其它數據存儲服務器間的連接,通常是數據複製

# CSSERV_TIMEOUT = 60

# CSTOCS_TIMEOUT = 60

# HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg 分配給 MFS 使用的磁盤空間配置文件 的位置



指定數據存放位置:

[root@xuegod64 mfs]# vim /usr/local/mfs/etc/mfs/mfshdd.cfg

/tmp

#/mnt/hd2

在這裏/tmp /tmp 是一個給 mfs 的分區,但在本機上是一個獨立的磁盤的掛載目錄 修改權限

[root@xuegod64 mfs]# chown -R mfs:mfs /tmp

[root@xuegod64 mfs]# chown -R mfs:mfs /usr/local/mfs/



啓動服務

/usr/local/mfs/sbin/mfschunkserver start

[root@xuegod64 mfs]# echo '/usr/local/mfs/sbin/mfschunkserver start' >> /etc/rc.local



查看:

[root@xuegod64 mfs]# ls /tmp/

wKiom1XHI2fQG-paAAFJbSeLtEI069.jpg

注:關閉服務

[root@xuegod64 mfs]# /usr/local/mfs/sbin/mfschunkserver stop




配置 xuegod62 爲 MFS 客戶端

[root@xuegod62   ~]#   yum   install   rpm-build   gcc   gcc-c   fuse-devel   zlib-devel   -y

[root@xuegod62 ~]#   useradd mfs -s /sbin/nologin

#建立用戶並禁示此用戶登陸

[root@xuegod62 ~]# tar zxvf mfs-1.6.27-5.tar.gz

[root@xuegod62 ~]# cd mfs-1.6.27

[root@xuegod62 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs

--with-default-user=mfs --with-default-group=mfs --enable-mfsmount



[root@xuegod62 mfs-1.6.27]# make   -j 4 && make install




測試: 掛接 MFS 文件系統 創建掛載點:

[root@xuegod62 ~]# umount /mnt/

[root@xuegod62 ~]# mkdir /mnt/mfs #掛載 MFS 存儲 加載 fuse 模塊到內核


[root@xuegod62 ~]# lsmod | grep fuse

[root@xuegod62 ~]# modprobe fuse [root@xuegod62 ~]# lsmod | grep fuse fuse 66285   0






[root@xuegod62 ~]# ln -s /usr/local/mfs/bin/mfsmount /usr/sbin/mfsmount

#將 mfsmount 鏈接到 sbin 目錄中



將 mfs 共享出來的存儲空間掛載到 xuegod62 的/mnt/mfs 目錄下 root@xuegod62 ~]# mfsmount /mnt/mfs -H 192.168.1.63 -p MFS Password: #密碼爲空,因爲服務器端沒有設置密碼

mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to root:root

[root@xuegod62 ~]# df -h

Filesystem Size   Used Avail Use% Mounted on

/dev/sda2 9.7G   3.4G   5.8G   37% /

tmpfs 569M 0   569M 0% /dev/shm

/dev/sda1 194M 28M   157M   15% /boot

192.168.1.63:9421 5.2G 0   5.2G 0% /mnt/mfs




開機自勱運行

[root@xuegod62 ~]# echo 'modprobe fuse' >> /etc/rc.local

[root@xuegod62 ~]# /usr/local/mfs/bin/mfsmount   /opt -H 192.168.1.63 >> /etc/rc.local



測試:寫數據:



[root@xuegod64 mfs]# rpm -ivh /mnt/Packages/tree-1.5.3-2.el6.x86_64.rpm

[root@xuegod64 mfs]# tree   /tmp/ | more #查看存儲形勢

/tmp/

├── 00

├── 01

│   └── chunk_0000000000000001_00000001.mfs

├── 02

├── 03

├── 04

多複製一些文件:

[root@xuegod62 ~]# cp -r /boot/ /mnt/mfs

[root@xuegod64 mfs]# tree   /tmp/ | more

/tmp/

├── 00

├── 01


│   └── chunk_0000000000000001_00000001.mfs

├── 02

│   └── chunk_0000000000000002_00000001.mfs

├── 03

│   └── chunk_0000000000000003_00000001.mfs

├── 04

│   └── chunk_0000000000000004_00000001.mfs

├── 05

│   └── chunk_0000000000000005_00000001.mfs



[root@xuegod62 ~]# ls /mnt/mfs boot   hosts

在 MFS chunck server 上,MFS 客戶端寫入的文件,都是由一個個碎片



測試數據同步:支持多客戶端同時掛載讀寫

[root@xuegod62 ~]# mfsmount   /opt/ -H 192.168.1.63

mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to root:root

[root@xuegod62 ~]# cp /etc/passwd /opt/ [root@xuegod62 ~]# ls /opt/

boot   hosts   passwd   vmlinuz-2.6.32-220.el6.x86_64 [root@xuegod62 ~]# ls /mnt/mfs

boot   hosts   passwd   vmlinuz-2.6.32-220.el6.x86_64



實戰:配置 MFS web 監控服務端

用來監控 MFS 各節點狀態信息,可部署在任一節點服務器。



在 xuegod63 上配置 MFS web 監控服務端 [root@xuegod63 ~]# /usr/local/mfs/sbin/mfscgiserv lockfile created and locked

starting simple cgi server (host: any , port: 9425 , rootpath: /usr/local/mfs/share/mfscgi)



查看方式在瀏覽器中輸入 http://192.168.1.63:9425 (我這個部署在 MASTER 服務器上)

wKiom1XHI-miFaVqAAM7r2zsSo8093.jpg


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章