MFS 分佈式存儲的運行方式vim
MFS工做原理centos
MooseFS是一款具備冗餘容錯功能的分佈式文件系統。它把數據分散在多臺服務器上,確保一份數據多個備份副本,對外提供統一的結構。安全
功能特性服務器
對於標準的文件操做,MooseFS表現與其餘類Unix文件系統一致。支持的經過文件系統特性:網絡
· 層次結構(目錄樹)session
· 兼容POSIX文件屬性架構
· 支持特殊文件tcp
· 符號連接和硬連接分佈式
· 基於IP地址和密碼的訪問控制ide
獨有特性
· 高可靠性(數據的多個副本存儲在不一樣服務器)
· 容量動態擴展(添加新硬盤或者服務器)
· 能夠回收在制定時間內刪除的文件,相似回收站功能
· 能夠對整個文件甚至是正在被寫入的文件建立文件快照
MFS總體架構的四種角色
· Master(元數據服務器)負責各個數據存儲服務器的管理,文件讀寫調度,文件空間回收以及恢復,多節點拷貝。存儲着每一個文件的元數據(文件的大小、屬性、位置信息,包括全部很是規文件的全部信息,例如目錄、套接字、管道以及設備文件)
· Metalogger(元數據日誌服務器)負責備份Master服務器的changelog。文件類型爲 changelog.*.mfs ,以便在Master出問題時接替其工做
· Chunk(數據存儲服務器)負責鏈接Master,遵從Master調度,提供存儲空間,併爲客戶端提供數據傳輸
· Client(客戶端掛載)經過FUSE內核接口掛載遠程管理服務器(master)上所管理的數據存儲服務器,使用起來和本地文件系統同樣
## MFS讀處理過程:
1、客戶端向元數據服務器發出讀請求。
2、元數據服務器把所需數據存放的位置(Chunk Server的IP地址和chunk編號)告知客戶端。
3、客戶端向已知的Chunk Server請求發送數據。
4、Chunk Server向客戶端發送數據。
## MFS寫處理過程:
1、客戶端向元數據服務器發送寫入請求。
2、元數據服務器與Chunk Server進行交互(只有當所需的分塊Chunks存在的時候才進行這個交互):
a、元數據服務器只是在某些服務器建立新的分塊chunks。
b、Chunk Servers告知元數據服務器,步驟a已經操做成功。
3、元數據服務器告知客戶端,你能夠在哪一個Chunk Server的哪些Chunks寫入數據。
4、客戶端向指定的Chunk Server寫入數據
5、Chunk Server與其餘Chunk Server進行數據同步。
6、Chunk Server之間同步成功。
7、Chunk Server告知客戶端數據寫入成功。
8、客戶端告知元數據服務器本次寫入完畢。
實驗拓撲
1、搭建master server
1.安裝依賴包
[root@centos1 ~]# yum -y install zlib-devel
2.建立用戶
[root@centos1 ~]# useradd mfs -s /sbin/nologin
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/
[root@centos1 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
[root@centos1 mfs-1.6.27]# make&&make install
4.複製文件
[root@centos1 mfs-1.6.27]# cd /usr/local/mfs/etc/mfs
[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
[root@centos1 mfs]# cd /usr/local/mfs/var/mfs/
[root@centos1 mfs]# cp metadata.mfs.empty metadata.mfs
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 數據存放路徑,此目錄下大體有三類文件,changelog,sessions和 stats;
# 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
Client(客戶端)支持格式:ip、ip/netmask、ip/位數掩碼、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
[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
8.中止mfsmaster
[root@centos1 mfs]# /usr/local/mfs/sbin/mfsmaster -s 或stop
2、搭建metalogger server
1.安裝依賴包
[root@centos1 ~]# yum -y install zlib-devel
2.建立用戶
[root@centos1 ~]# useradd mfs -s /sbin/nologin
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/
[root@centos1 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
[root@centos1 mfs-1.6.27]# make && make install
4.複製文件
[root@centos1 mfs-1.6.27]# cd /usr/local/mfs/etc
[root@centos2 mfs]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
[root@centos2 mfs]# vim mfsmetalogger.cfg
MASTER_HOST=192.168.1.1 //手工添加MASTER SERVER的ip地址
5.啓動服務
[root@centos2 mfs]# /usr/local/mfs/sbin/mfsmetalogger start
3、搭建chunk server
1.安裝依賴包
[root@centos1 ~]# yum -y install zlib-devel
2.建立用戶
[root@centos1 ~]# useradd mfs -s /sbin/nologin
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/
[root@centos3 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount
[root@centos3 mfs-1.6.27]# make &&make install
4.複製配置文件
[root@centos3 mfs]# cd /usr/local/mfs/etc/mfs/
#cp mfschunkserver.cfg.dist mfschunkserver.cfg
[root@centos3 mfs]# cp mfshdd.cfg mfshdd.cfg
5.修改配置文件
[root@centos3 mfs]# vim mfschunkserver.cfg
MASTER_HOST = 192.168.1.1 //master服務器的ip地址
[root@centos3 mfs]# vim mfshdd.cfg
/data //設置chunkserver存放數據的目錄
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 //啓動服務
4、搭建第二個chunkserver
1.[root@centos3 ~]# useradd mfs -s /sbin/nologin
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/
[root@centos4 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount
[root@centos4 mfs-1.6.27]# make && make install
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
4.修改配置文件
[root@centos3 mfs]# vim mfschunkserver.cfg
MASTER_HOST = 192.168.1.1 //master服務器的ip地址
[root@centos3 mfs]# vim mfshdd.cfg
/data //存放數據的目錄
5.設置目錄權限,啓動mfschunkserver
#mkdir /data
[root@centos3 mfs]# chown -R mfs:mfs /data
[root@centos3 mfs]# /usr/local/mfs/sbin/mfschunkserver start
5、客戶端配置
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/
[root@centos1 fuse-2.9.2]# ./configure
[root@centos1 fuse-2.9.2]# make &&make install
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文件的搜索路徑的
[root@centos1 fuse-2.9.2]# source /etc/profile //刷新環境變量
3.安裝mfs客戶端
[root@centos3 ~]# useradd -s /sbin/nologin mfs
[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/
[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
[root@centos1 mfs-1.6.27]# make&&make install
4.掛載mfs文件系統
#mkdir /test //建立掛載點
[root@centos1 test]# modprobe fuse//加載fuse模塊到內核
[root@centos1 test]# /usr/local/mfs/bin/mfsmount /test -H 192.168.1.1//掛載mfs
查看掛載狀況:
5.mfs經常使用操做
1.設置環境變量
[root@centos1 test]# vim /etc/profile
export PATH=/usr/local/mfs/bin:$PATH
[root@centos1 test]# source /etc/profile
2.查看與設置文件複製的份數
[root@centos1 test]# mfsgetgoal -r /test
3.測試
[root@centos1 test]# dd if=/dev/zero of=/test/111.data bs=200M count=1
查看寫入結果:
[root@centos1 test]# mfssetgoal -r 2 /test 進行冗餘測試
[root@centos1 test]# dd if=/dev/zero of=/test/222.data bs=200M count=1
查看寫入結果是否冗餘:
6、mfs監控
1. [root@centos1 mfs]# /usr/local/mfs/sbin/mfscgiserv //master服務器寫入
2. 經過網站進行監控測試:
7、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 配置文件中)。