mfs分佈式存儲搭建應用

                MFS 分佈式存儲的運行方式

MFS工作原理

MooseFS是一款具有冗餘容錯功能的分佈式文件系統。它把數據分散在多臺服務器上,確保一份數據多個備份副本,對外提供統一的結構。

功能特性

對於標準的文件操作,MooseFS表現與其他類Unix文件系統一致。支持的通過文件系統特性:

· 層次結構(目錄樹)

· 兼容POSIX文件屬性

· 支持特殊文件

· 符號鏈接和硬鏈接

· 基於IP地址和密碼的訪問控制

獨有特性

· 高可靠性(數據的多個副本存儲在不同服務器)

· 容量動態擴展(添加新硬盤或者服務器)

· 可以回收在制定時間內刪除的文件,類似回收站功能

· 可以對整個文件甚至是正在被寫入的文件創建文件快照

MFS整體架構的四種角色

· Master(元數據服務器)負責各個數據存儲服務器的管理,文件讀寫調度,文件空間回收以及恢復,多節點拷貝。存儲着每個文件的元數據(文件的大小、屬性、位置信息,包括所有非常規文件的所有信息,例如目錄、套接字、管道以及設備文件)

· Metalogger(元數據日誌服務器)負責備份Master服務器的changelog。文件類型爲 changelog.*.mfs ,以便在Master出問題時接替其工作

· Chunk(數據存儲服務器)負責連接Master,聽從Master調度,提供存儲空間,併爲客戶端提供數據傳輸

· Client(客戶端掛載)通過FUSE內核接口掛載遠程管理服務器(master)上所管理的數據存儲服務器,使用起來和本地文件系統一樣

· wKioL1kMduyQv6SGAAKKzi-CoWk313.png-wh_50

## MFS讀處理過程:
1、客戶端向元數據服務器發出讀請求。
2、元數據服務器把所需數據存放的位置(Chunk ServerIP地址和chunk編號)告知客戶端。
3、客戶端向已知的Chunk Server請求發送數據。
4Chunk Server向客戶端發送數據。

## MFS寫處理過程:
1、客戶端向元數據服務器發送寫入請求。
2、元數據服務器與Chunk Server進行交互(只有當所需的分塊Chunks存在的時候才進行這個交互):
a、元數據服務器只是在某些服務器創建新的分塊chunks
bChunk Servers告知元數據服務器,步驟a已經操作成功。
3、元數據服務器告知客戶端,你可以在哪個Chunk Server的哪些Chunks寫入數據。
4、客戶端向指定的Chunk Server寫入數據
5Chunk Server與其他Chunk Server進行數據同步。
6Chunk Server之間同步成功。
7Chunk Server告知客戶端數據寫入成功。
8、客戶端告知元數據服務器本次寫入完畢。

 

實驗拓撲

wKioL1kMdwSAR_jeAABSz4jItao292.png-wh_50 

一、搭建master  server

1.安裝依賴包

[root@centos1 ~]# yum -y install zlib-devel

wKioL1kMdyXBhSyqAAARb2n5vVY479.png-wh_50 

2.創建用戶

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

wKioL1kMdzjS4yz3AAAP6LKLqUA376.png-wh_50 

3.安裝源碼包

[root@centos1 ~]# tar xf /mnt/mfs-1.6.27-5.tar.gz -C /usr/src

[root@centos1 mfs-1.6.27]# cd /usr/src/mfs-1.6.27/

wKioL1kMd1LQaLuvAAAWSBR7XOg486.png-wh_50 

[root@centos1 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs  --with-default-group=mfs  --disable-mfschunkserver  --disable-mfsmount

wKiom1kMd2uw-DHuAAAuRJgXgbs910.png-wh_50 

[root@centos1 mfs-1.6.27]# make&&make install

wKioL1kMd36iHDZ2AAANV6BS8OM816.png-wh_50 

4.複製文件

[root@centos1 mfs-1.6.27]# cd /usr/local/mfs/etc/mfs

wKioL1kMd46AWSvqAAAPvwxNTWw623.png-wh_50 

[root@centos1 mfs]# cp mfsmaster.cfg.dist mfsmaster.cfg

[root@centos1 mfs]# cp mfsexports.cfg.dist mfsexports.cfg

[root@centos1 mfs]# cp mfstopology.cfg mfstopology.cfg

wKiom1kMd6LhVk16AAAgrgelKpw124.png-wh_50 

[root@centos1 mfs]# cd /usr/local/mfs/var/mfs/

[root@centos1 mfs]# cp  metadata.mfs.empty metadata.mfs

wKiom1kMd7TjUHjQAAAbgqBO7rs920.png-wh_50 

 

5.配置文件(只需瞭解,不用改動)

// mfsmaster.cfg(主配置文件)/usr/local/mfs/etc/mfs目錄下

# WORKING_USER = mfs 運行 master server 的用戶

# WORKING_GROUP = mfs 運行 master server 的組

# SYSLOG_IDENT = mfsmaster master server syslog中的標識,說明是由 master serve 產生的

# LOCK_MEMORY = 0 是否執行 mlockall()以避免 mfsmaster 進程溢出(默認爲 0

# NICE_LEVEL = -19 運行的優先級(如果可以默認是 -19; 注意: 進程必須是用 root啓動)

# EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg 被掛接目錄及其權限控制文件的存放位置

# TOPOLOGY_FILENAME = /usr/local/mfs/etc/mfs/mfstopology.cfg

# DATA_PATH = /usr/local/mfs/var/mfs 數據存放路徑,此目錄下大致有三類文件,changelogsessionsstats

# BACK_LOGS = 50 metadata 的改變 log 文件數目(默認是 50);

# BACK_META_KEEP_PREVIOUS = 1

# REPLICATIONS_DELAY_INIT = 300 延遲複製的時間(默認是 300s;

# REPLICATIONS_DELAY_DISCONNECT = 3600 chunkserver 斷開的複製延遲(默認是 3600);

# MATOML_LISTEN_HOST = * metalogger 監聽的 IP 地址(默認是*,代表任何 IP)

# MATOML_LISTEN_PORT = 9419 metalogger 監聽的端口地址(默認是 9419)

# MATOML_LOG_PRESERVE_SECONDS = 600

# MATOCS_LISTEN_HOST = * 用於 chunkserver 連接的 IP 地址(默認是*,代表任何 IP);

# MATOCS_LISTEN_PORT = 9420 用於 chunkserver 連接的端口地址(默認是 9420);

# MATOCU_LISTEN_HOST = * 用於客戶端掛接連接的 IP 地址(默認是*,代表任何 IP)

# MATOCU_LISTEN_PORT = 9421 用於客戶端掛接連接的端口地址(默認是 9421);

# CHUNKS_LOOP_MAX_CPS = 100000

# CHUNKS_LOOP_MIN_TIME = 300 chunks 的迴環頻率(默認是:300 秒);

mfsexportes.cfg 爲共享mfs文件系統的控制文件,NFS要共享一個目錄時,我們會使用vim /etc/exports命令,編寫共享給誰,所要共享的目錄,共享出去的屬性這些內容,而mfsexports.cfg的作用與其類似其書寫格式如下: 對客戶端的配置

Allow   everything    but  meta

*                /       rw,alldirs,maproot=0

wKiom1kMd8nAFd-ZAAAbVMhjas4939.png-wh_50 

Client(客戶端)支持格式:ipip/netmaskip/位數掩碼、ip-ip*

該文件每一個條目分爲三部分:

第一部分:客戶端的ip 地址

第二部分:被掛接的目錄

第三部分:客戶端擁有的權限

//地址可以指定的幾種表現形式:

* 所有的ip 地址

n.n.n.n 單個ip 地址

n.n.n.n/b IP 網絡地址/位數掩碼

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

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

 

//目錄部分需要注意兩點:

/ 標識MooseFS ;

. 表示MFSMETA 文件系統

//權限部分:

ro 只讀模式共享

rw 讀寫的方式共享

alldirs 許掛載任何指定的子目錄

6.啓動服務/usr/local/mfs/sbin/mfsmaster start

wKioL1kMd9_wvXo0AAAqCVk1glw250.png-wh_50 

[root@centos1 mfs]# netstat -anpt

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address    Foreign Address             State       PID/Program name   

tcp        0      0 0.0.0.0:9419                0.0.0.0:*                   LISTEN      7599/mfsmaster      

tcp        0      0 0.0.0.0:9420                0.0.0.0:*                   LISTEN      7599/mfsmaster      

tcp        0      0 0.0.0.0:9421                0.0.0.0:*                   LISTEN      7599/mfsmaster      

tcp        0      0 192.168.1.1:9419            192.168.1.2:37816           ESTABLISHED 7599/mfsmaster      

tcp        0      0 192.168.1.1:9420            192.168.1.3:48107           ESTABLISHED 7599/mfsmaster      

tcp        0      0 ::1:25                      :::*                        LISTEN      1732/master         

7.查看進程

[root@centos1 mfs]# ps -ef|grep mfs

wKiom1kMd_vzTz8wAAAuIqp2Xlo836.png-wh_50 

8.停止mfsmaster

[root@centos1 mfs]# /usr/local/mfs/sbin/mfsmaster -s stop

二、搭建metalogger  server

1.安裝依賴包

[root@centos1 ~]# yum -y install zlib-devel

wKiom1kMeBjAni3CAAARb2n5vVY840.png-wh_50 

2.創建用戶

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

 

wKioL1kMeCjjtVUlAAARhVw1glY993.png-wh_50 

3.安裝源碼包

[root@centos1 ~]# tar xf /mnt/mfs-1.6.27-5.tar.gz -C /usr/src

[root@centos1 mfs-1.6.27]# cd /usr/src/mfs-1.6.27/

wKioL1kMeDrhx-m-AAAXoRcJz1E852.png-wh_50 

[root@centos1 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs  --with-default-group=mfs  --disable-mfschunkserver  --disable-mfsmount

wKiom1kMeErTWg7fAAAuI0yLkdo613.png-wh_50 

[root@centos1 mfs-1.6.27]# make && make install

wKioL1kMeFqwismMAAANptOI1yk187.png-wh_50 

4.複製文件

[root@centos1 mfs-1.6.27]# cd /usr/local/mfs/etc

[root@centos2 mfs]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

wKioL1kMeGuTjFvfAAASfEOzJTk963.png-wh_50 

[root@centos2 mfs]# vim mfsmetalogger.cfg

MASTER_HOST=192.168.1.1  //手工添加MASTER SERVERip地址

wKioL1kMeH3R8xtmAAAiwuE2Hyw203.png-wh_50 

5.啓動服務

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

wKiom1kMeI6wFpOCAAApO9saLmg050.png-wh_50 

三、搭建chunk server

1.安裝依賴包

[root@centos1 ~]# yum -y install zlib-devel

wKiom1kMeKfQd-gJAAARb2n5vVY933.png-wh_50 

2.創建用戶

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

wKioL1kMeLuBXJOTAAARaYNLXLY314.png-wh_50 

3.安裝

[root@centos1 ~]# tar xf /mnt/mfs-1.6.27-5.tar.gz -C /usr/src

[root@centos1 mfs-1.6.27]# cd /usr/src/mfs-1.6.27/

wKiom1kMeNGB09KhAAAWtZa0AAY022.png-wh_50 

[root@centos3 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount

wKioL1kMeOPjtjW8AAAr56kHGfc498.png-wh_50 

[root@centos3 mfs-1.6.27]# make &&make install

wKioL1kMeP_w5T0nAAAOy8PE95o936.png-wh_50 

4.複製配置文件

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

#cp mfschunkserver.cfg.dist mfschunkserver.cfg

[root@centos3 mfs]# cp mfshdd.cfg mfshdd.cfg

wKiom1kMeROhOO8JAAAqw45MbtA535.png-wh_50 

5.修改配置文件

[root@centos3 mfs]# vim mfschunkserver.cfg

MASTER_HOST = 192.168.1.1  //master服務器的ip地址

wKioL1kMeSmAB6dfAAAfqvBWohA112.png-wh_50 

[root@centos3 mfs]# vim mfshdd.cfg

/data    //設置chunkserver存放數據的目錄

wKiom1kMeUKSa-3rAAAdlGdz0kg065.png-wh_50 

4.設置目錄權限,啓動mfschunkserver

[root@centos3 mfs]# mkdir /data              //創建/data

[root@centos3 mfs]# chown -R mfs:mfs /data          //設置權限

[root@centos3 mfs]# /usr/local/mfs/sbin/mfschunkserver start   //啓動服務

wKiom1kMeVbBmIyxAAAU7nxWjq8949.png-wh_50 

四、搭建第二個chunkserver

1.[root@centos3 ~]# useradd mfs  -s /sbin/nologin

wKioL1kMeWiwm0WKAAAQnLqp3oM834.png-wh_50 

2.安裝

[root@centos4 mfs-1.6.27]# tar xf /mnt/mfs-1.6.27-5.tar.gz -C /usr/src

[root@centos4 mfs-1.6.27]# cd /usr/src/mfs-1.6.27/

wKiom1kMeXyw057tAAAUR5rQK-4022.png-wh_50 

[root@centos4 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount

wKioL1kMeY6T0ejXAAAf8yi-OCs101.png-wh_50 

[root@centos4 mfs-1.6.27]# make  && make install

wKioL1kMeZ-gfIDnAAAOIT3DeE4428.png-wh_50 

3.複製配置文件

[root@centos3 mfs-1.6.27]# cd  /usr/local/mfs/etc/mfs

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

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

wKiom1kMebPjBcdtAAAWQiNXWlE396.png-wh_50 

4.修改配置文件

[root@centos3 mfs]# vim mfschunkserver.cfg

MASTER_HOST = 192.168.1.1  //master服務器的ip地址

wKiom1kMecWD9oryAAATV7ppUBI272.png-wh_50 

[root@centos3 mfs]# vim mfshdd.cfg

/data    //存放數據的目錄

wKiom1kMeeTAw3hVAAAb4ovz80o299.png-wh_50 

5.設置目錄權限,啓動mfschunkserver

#mkdir   /data

[root@centos3 mfs]# chown -R mfs:mfs /data

[root@centos3 mfs]# /usr/local/mfs/sbin/mfschunkserver start

wKioL1kMefuxBmsAAAAULsbdu68148.png-wh_50 

五、客戶端配置

1.安裝fuse

fuse的功能簡單概括一下,fuse提供一個文件操作的接口,然後fuse在這個接口上監聽文件操作,並把這些對文件的操作傳給我們自己的相關代碼進行處理。 也就是說,fuse提供一個掛載點,然後他會在這個掛在點上進行監聽,一旦有操作(新建、讀取、修改)發生,他會把控制權交給我們的代碼,這些操作的具體代碼都在mfsmount模塊中實現

[root@centos1 fuse-2.9.2]# tar xf /mnt/fuse-2.9.2.tar.gz -C /usr/src

[root@centos1 fuse-2.9.2]# cd /usr/src/fuse-2.9.2/

wKiom1kMeg-i14ReAAAV6uuNnPI715.png-wh_50 

[root@centos1 fuse-2.9.2]# ./configure

[root@centos1 fuse-2.9.2]# make &&make install

wKioL1kMeiDxva2nAAAPzTtsPtw868.png-wh_50 

2.設置環境變量

[root@centos1 fuse-2.9.2]# vim /etc/profile

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH //環境變量PKG_CONFIG_PATH是用來設置.pc文件的搜索路徑的

wKiom1kMejKA6NJYAAAaMwmFAXc220.png-wh_50 

[root@centos1 fuse-2.9.2]# source /etc/profile     //刷新環境變量

wKiom1kMekSApA9gAAAMfH1AiRQ521.png-wh_50 

3.安裝mfs客戶端

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

wKiom1kMelTAJySeAAAOpUDN8fc619.png-wh_50 

[root@centos1 mfs-1.6.27]# tar xf /mnt/mfs-1.6.27-5.tar.gz -C /usr/src

[root@centos1 mfs-1.6.27]# cd  /usr/src/mfs-1.6.27/

wKioL1kMemngInVaAAAUDeRmmZ0266.png-wh_50 

[root@centos1 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver --enable-mfsmount

wKiom1kMenvi7DcbAAAqsKIEMQE169.png-wh_50 

[root@centos1 mfs-1.6.27]# make&&make install

wKiom1kMeo3SbpT7AAANm5oAHhk361.png-wh_50 

4.掛載mfs文件系統

#mkdir /test     //創建掛載點

[root@centos1 test]# modprobe fuse//加載fuse模塊到內核

wKiom1kMeqXi7kxzAAARmGO2W8o368.png-wh_50 

[root@centos1 test]# /usr/local/mfs/bin/mfsmount /test -H 192.168.1.1//掛載mfs

wKiom1kMerjSPgEJAAAi82gpyac429.png-wh_50 

查看掛載情況:

wKioL1kMesmTVHeJAABQfrD_Yb0707.png-wh_50 

5.mfs常用操作

1.設置環境變量

[root@centos1 test]# vim /etc/profile

export PATH=/usr/local/mfs/bin:$PATH

wKiom1kMet_Q0AmYAAAQRXZn4qs093.png-wh_50 

[root@centos1 test]# source /etc/profile

wKiom1kMevGSOEv0AAAMLDCkgAg727.png-wh_50 

2.查看與設置文件複製的份數

[root@centos1 test]# mfsgetgoal -r /test

wKiom1kMewni8XvsAAASofXKrTM557.png-wh_50 

3.測試

[root@centos1 test]# dd if=/dev/zero of=/test/111.data  bs=200M count=1

wKiom1kMexuDONVyAAAQ3chrrtQ424.png-wh_50 

查看寫入結果:

wKioL1kMey3APXteAAAz3gg6O2A907.png-wh_50 

[root@centos1 test]# mfssetgoal -r 2 /test 進行冗餘測試

wKioL1kMez_x_cTeAAAMWjaFZNY722.png-wh_50 

[root@centos1 test]# dd if=/dev/zero of=/test/222.data  bs=200M count=1

wKiom1kMe0-BmU_WAAAQruBYpoY022.png-wh_50 

查看寫入結果是否冗餘:

wKioL1kMe2ih8OgyAAA2Ey2n2rg265.png-wh_50 

六、mfs監控

1. [root@centos1 mfs]# /usr/local/mfs/sbin/mfscgiserv  //master服務器寫入

wKiom1kMe3vwvLLQAAAN2-bdQCk669.png-wh_50 

2. 通過網站進行監控測試:

 

wKioL1kMe4vRceVRAAB2eTOu8OI295.png-wh_50 

七、MFS集羣維護

1.啓動MFS集羣

安全的啓動MooseFS 集羣(避免任何讀或寫的錯誤數據或類似的問題)的方式是按照以下命令步驟:

1. 啓動mfsmaster 進程

2. 啓動所有的mfschunkserver 進程

3. 啓動mfsmetalogger 進程(如果配置了mfsmetalogger

4. 當所有的chunkservers 連接到MooseFS master 後,任何數目的客戶端可以利用mfsmount 去掛接被export 的文件系統。(可以通過檢查master 的日誌或是CGI 監視器來查看是否所有的chunkserver被連接)。

2.停止MFS集羣

安全的停止MooseFS 集羣:

1. 在所有的客戶端卸載MooseFS 文件系統(用umount 命令或者是其它等效的命令)

2. mfschunkserver stop 命令停止chunkserver 進程

3. mfsmetalogger stop 命令停止metalogger 進程

4. mfsmaster stop 命令停止master 進程

3.MFS元數據備份

通常元數據有兩部分的數據:

· 主要元數據文件metadata.mfs,當mfsmaster 運行的時候會被命名爲metadata.mfs.back

· 元數據改變日誌changelog.*.mfs,存儲了過去的N 小時的文件改變(N 的數值是由BACK_LOGS參數設置的,參數的設置在mfschunkserver.cfg 配置文件中)。

 

 

 


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