天天看點

mfs 安裝實戰,解決單點故障和master瓶頸

4種角色作用: 

        管理伺服器:負責各個資料存儲伺服器的管理,檔案讀寫排程,檔案空間回收以及恢複.多節點拷貝 

        中繼資料日志伺服器: 負責備份master伺服器的變化日志檔案,檔案類型為changelog_ml.*.mfs,以便于在master server出問題的時候接替其進行工作

        資料存儲伺服器:負責連接配接管理伺服器,聽從管理伺服器排程,提供存儲空間,并為客戶提供資料傳輸. 

        用戶端: 通過fuse核心接口挂接遠端管理伺服器上所管理的資料存儲伺服器,.看起來共享的檔案系統和本地unix檔案系統使用一樣的效果.

一個具體的執行個體

(一)、安裝和配置中繼資料服務(master server)

1、下載下傳源代碼

<a href="http://ncu.dl.sourceforge.net/project/moosefs/moosefs/1.6.11/mfs-1.6.11.tar.gz" target="_blank">http://ncu.dl.sourceforge.net/pr ... 1/mfs-1.6.11.tar.gz</a>

2、tar zxvf mfs-1.6.11.tar.gz

3、建立使用者 useradd mfs –s /sbin/nologin 

4、./configure –prefix=/usr/local/mfs –with-default-user=mfs –with-default-group=mfs

5、make ; make install

6、配置

配置檔案位于安裝目錄/usr/local/mfs/etc,需要的配置檔案有兩個:mfsmaster.cfg和 mfsexports.cfg,

mfsmaster.cfg是主配置檔案,mfsexports.cfg是被挂接目錄及權限設定。

(1)、mfsmaster.cfg的配置

[root@nas etc]# cp mfsmaster.cfg.dist mfsmaster.cfg

[root@nas etc]# vi mfsmaster.cfg

# WORKING_USER = mfs

# WORKING_GROUP = mfs

# SYSLOG_IDENT = mfsmaster

# LOCK_MEMORY = 0

# NICE_LEVEL = -19

# EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg

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

# BACK_LOGS = 50

# REPLICATIONS_DELAY_INIT = 300

# REPLICATIONS_DELAY_DISCONNECT = 3600

# MATOML_LISTEN_HOST = *

# MATOML_LISTEN_PORT = 9419

# MATOCS_LISTEN_HOST = *

# MATOCS_LISTEN_PORT = 9420

# MATOCU_LISTEN_HOST = *

# MATOCU_LISTEN_PORT = 9421

# CHUNKS_LOOP_TIME = 300

# CHUNKS_DEL_LIMIT = 100

# CHUNKS_WRITE_REP_LIMIT = 1

# CHUNKS_READ_REP_LIMIT = 5

# REJECT_OLD_CLIENTS = 0

需要注意的是,凡是用#注釋掉的變量均使用其預設值,這裡我解釋一下這些變量:

#WORKING_USER和WORKING_GROUP:是運作master server的使用者群組;

#SYSLOG_IDENT:是master server在syslog中的辨別,也就是說明這是由master serve産生的;

#LOCK_MEMORY:是否執行mlockall()以避免mfsmaster 程序溢出(預設為0);

#NICE_LEVE:運作的優先級(如果可以預設是 -19; 注意: 程序必須是用root啟動);

#EXPORTS_FILENAME:被挂接目錄及其權限控制檔案的存放位置

#DATA_PATH:資料存放路徑,此目錄下大緻有三類檔案,changelog,sessions和stats;

#BACK_LOGS:metadata的改變log檔案數目(預設是 50);

#REPLICATIONS_DELAY_INIT:延遲複制的時間(預設是300s);

#REPLICATIONS_DELAY_DISCONNECT:chunkserver斷開的複制延遲(預設是3600);

# MATOML_LISTEN_HOST:metalogger監聽的IP位址(預設是*,代表任何IP);

# MATOML_LISTEN_PORT:metalogger監聽的端口位址(預設是9419);

# MATOCS_LISTEN_HOST:用于chunkserver連接配接的IP位址(預設是*,代表任何IP);

# MATOCS_LISTEN_PORT:用于chunkserver連接配接的端口位址(預設是9420);

# MATOCU_LISTEN_HOST:用于用戶端挂接連接配接的IP位址(預設是*,代表任何IP);

# MATOCU_LISTEN_PORT:用于用戶端挂接連接配接的端口位址(預設是9421);

# CHUNKS_LOOP_TIME :chunks的回環頻率(預設是:300秒);

   注:原文為Chunks loop frequency in seconds (default is 300)

# CHUNKS_DEL_LIMIT :在一個loop裝置中可以删除chunks的最大數 (預設:100)

#REPLICATIONS_DELAY_DISCONNECT chunkserver斷開後的複制延時(預設:3600秒)

# CHUNKS_WRITE_REP_LIMIT:在一個循環裡複制到一個chunkserver的最大chunk數目(預設是1)

# CHUNKS_READ_REP_LIMIT :在一個循環裡從一個chunkserver複制的最大chunk數目(預設是5)

# REJECT_OLD_CLIENTS:彈出低于1.6.0的用戶端挂接(0或1,預設是0)

注意mfsexports通路控制對于那些老客戶是沒用的

以上是對master server的mfsmaster.cfg配置檔案的解釋,對于這個檔案不需要做任何修改就可以工作。

(2)、mfsexports.cfg的配置

[root@nas etc]# vi mfsexports.cfg  

#*                      /       ro

#192.168.1.0/24         /       rw

#192.168.1.0/24         /       rw,alldirs,maproot=0,password=passcode

#10.0.0.0-10.0.0.5      /test   rw,maproot=nobody,password=test

*                       .       rw

#*                      /       rw,alldirs,maproot=0

192.168.3.98            /tt     rw,alldirs,maproot=0

192.168.3.139           /       rw,alldirs,maproot=0

192.168.3.138           /       rw,alldirs,maproot=0,password=111111

該檔案每一個條目分為三部分:

第一部分:用戶端的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  許挂載任何指定的子目錄

       maproot   映射為root,還是指定的使用者

        password  指定用戶端密碼

7、啟動master server

master server可以單獨啟動(所謂單獨啟動就是在沒有資料存儲伺服器(chunkserver)的時候也可以啟動,但是不能存儲,chunkserver啟動後會自動的加入)。安裝配置完MFS後,即可啟動它。

執行指令 /usr/local/mfs/sbin/mfsmaster start ,可通過檢查如下:

[root@nas etc]# ps -ef|grep mfs

mfs      12327     1  0 08:38 ?        00:00:00 /usr/local/mfs/sbin/mfsmaster start

8、停止master server

安全停止master server是非常必要的,最好不要用kill。利用mfsmaster –s來安全停止master serve,一旦是用了kill也是有解決方法的,後文有說明。

9、要經常性的檢視系統日志(tail -f /var/log/messages)

(二)、安裝和配置中繼資料日志伺服器(metalogger) 

1、下載下傳源碼

該服務隻有一個配置檔案,那就是mfsmetalogger.cfg。

[root@mail etc]# vi mfsmetalogger.cfg

# SYSLOG_IDENT = mfsmetalogger

# META_DOWNLOAD_FREQ = 24

# MASTER_RECONNECTION_DELAY = 5

MASTER_HOST = 192.168.3.34

# MASTER_PORT = 9419

# MASTER_TIMEOUT = 60

# deprecated, to be removed in MooseFS 1.7

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

文中的大多數變量不難了解,類似于mfsmaster.cfg中的變量,其中:

META_DOWNLOAD_FREQ需要說明一下:

中繼資料備份檔案下載下傳請求頻率。預設為24小時,即每隔一天從中繼資料伺服器(MASTER)下載下傳一個metadata.mfs.back檔案。當中繼資料伺服器關閉或者出故障時,matedata.mfs.back檔案将消失,那麼要恢複整個mfs,則需從metalogger伺服器取得該檔案。請特别注意這個檔案,它與日志檔案一起,才能夠恢複整個被損壞的分布式檔案系統。

這個檔案中需要修改的是MASTER_HOST變量,這個變量的值是master server的IP位址。

7、啟動metalogger服務

[root@mail sbin]# ./mfsmetalogger start

working directory: /usr/local/mfs/var/mfs

lockfile created and locked

initializing mfsmetalogger modules ...

mfsmetalogger daemon initialized properly

這說明metalogger服務正常啟動了。利用指令檢查:

通過程序:

[root@mail sbin]# ps -ef |grep mfs

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       TCP mail.tt.com:52456-&gt;192.168.3.34:9419 (ESTABLISHED)

檢視日志伺服器的工作目錄

[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

這是運作18小時後:

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

8、停止metalogger服務

[root@mail sbin]# ./mfsmetalogger -s

sending SIGTERM to lock owner (pid:12284)

waiting for termination ... terminated

9、如果沒有啟動metalogger服務

    在master server則會有如下提示資訊産生:

    tail -f /var/log/messages

    Dec 30 16:53:00 nas mfsmaster[14291]: no meta loggers connected !!!

(三)、安裝配置資料存儲伺服器(chunkserver)

配置檔案位于安裝目錄/usr/local/mfs/etc,需要的配置檔案有兩個:mfschunkserver.cfg和 mfshdd.cfg,

mfschunkserver.cf是主配置檔案,mfshdd.cfg是伺服器用來配置設定給 MFS使用的空間,最好是一個單獨的硬碟或者一個raid卷,最低要求是一個分區。

(1)、mfschunkserver.cfg的配置

[root@mail etc]# vi mfschunkserver.cfg 

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

# SYSLOG_IDENT = mfschunkserver

# MASTER_RECONNECTION_DELAY = 30

MASTER_PORT = 9420

# CSSERV_LISTEN_HOST = *

# CSSERV_LISTEN_PORT = 9422

# CSSERV_TIMEOUT = 60

# CSTOCS_TIMEOUT = 60

# HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg

文中的大多數變量不難了解,類似于mfsmaster.cfg中的變量,

其中:  

MASTER_HOST: 中繼資料伺服器的名稱或位址,可以是主機名,也可以是ip位址

        CSSERV_LISTEN_PORT :這個監聽端口用于與其它資料存儲伺服器間的連接配接,通常是資料複制。

HDD_CONF_FILENAME: 配置設定給MFS使用的磁盤空間配置檔案的位置。

(2)、mfshdd.cfg的配置

[root@mail etc]# more mfshdd.cfg

/data

在這裡/data是一個給mfs的分區,但在本機上是一個獨立的磁盤的挂載目錄,用 chown –R mfs:mfs /data 把屬主改變為mfs。

7、啟動mfschunkserver  

執行指令 /usr/local/mfs/sbin/mfschunkserver start ,如果沒有意外,mfschunkserver 就應該作為一個守護程序運作起來。是否啟動,檢查如下:

mfs      12327     1  0 08:38 ?        00:00:00 /usr/local/mfs/sbin/ mfschunkserver start

8、停止mfschunkserver 

停止mfschunkserver,利用mfschunkserver–s來安全停止mfschunkserver。

(四)、MFS用戶端的安裝及配置 

由于MFS用戶端依賴于fuse,是以要先安裝fuse。

1、        fuse的安裝

(1)、解包 tar zxvf fuse-2.8.1.tar.gz

(2)、./configure

(3)、make;make install

如果所在的系統已經安裝了fuse,則跳過這個步驟,高版本的Linux核心已經支援了。

2、        安裝MFS用戶端

(1)、下載下傳源代碼

(2)、tar zxvf mfs-1.6.11.tar.gz

(3)、建立使用者 useradd mfs –s /sbin/nologin 

(4)、./configure –prefix=/usr/local/mfs –with-default-user=mfs –with-default-group=mfs –enable-mfsmount

       說明:在這個過程中,當執行到–enable-mfsmount時可能出現”checking for FUSE… no  configure: error: mfsmount build was forced, but fuse development package is not installed”這樣的錯誤,

........

checking for FUSE... no

******************************** mfsmount disabled ********************************

* fuse library is too old or not installed - mfsmount needs version 2.6 or higher *

***********************************************************************************

......

而不能正确安裝MFS用戶端程式,這是因為環境變量沒有設定,先編輯/etc/profile在此檔案中加入如下條目:

export  PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

然後再利用source指令 /etc/profile使修改生效:source /etc/profile即可,也可直接在指令行中直接執行:

       export  PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

(5)、make ; make install

3、挂接MFS檔案系統

(1)、建立挂接點 mkdir /mnt/mfs

(2)、加載fuse子產品到核心:modprobe fuse

(3)、挂接MFS

/usr/local/mfs/bin/mfsmount  /mnt/mfs –H 192.168.3.34 –p

然後在輸入密碼就可以了

特别需要注意的是,所有的MFS都是挂接同一個中繼資料伺服器master的IP,而不是其他資料存儲伺服器chunkserver的IP。

4、挂接MFSMETA檔案系統

(1)、建立挂接點 mkdir /mnt/mfsmeta

(2)、挂接MFSMETA

/usr/local/mfs-old/bin/mfsmount -m /mnt/mfsmeta/  -H 192.168.3.34

(3)、檢視目錄内容

[root@www ~]# ls -R /mnt/mfsmeta

/mnt/mfsmeta:

reserved  trash

/mnt/mfsmeta/reserved:

/mnt/mfsmeta/trash:

0000015E|f181  undel

/mnt/mfsmeta/trash/undel:

5、檢視挂載情況

通過df指令檢視磁盤使用情況來檢查是否被挂接成功

root@bzd mfs]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/VolGroup00-LogVol00

                       73G   25G    45G      36%          /

/dev/sda1             99M   13M    82M      13%          /boot

none                  247M     0    247M     0%           /dev/shm

MFS                   45G   204M   45G      1%                   /mnt/mfs

MFSMETA              72K    72K     0        100%         /mnt/mfsmeta

利用mount指令檢視:

[root@www ~]# mount

mfsmeta#192.168.3.34:9421 on /mnt/mfsmeta type fuse (rw,nosuid,nodev,allow_other,default_permissions)

mfs#192.168.3.34:9421 on /mnt/mfs type fuse (rw,nosuid,nodev,allow_other,default_permissions

(5)、解除安裝已挂接的檔案系統

利用Linux系統的umount指令就可以了,例如:

[root@www ~]# umount /mnt/mfs

如果出現下列情況:

umount: /mnt/mfs: device is busy

則說明用戶端本機有正在使用此檔案系統,可以查明是什麼指令正在使用,然後推出就可以了,最好不要強制退出。

(五)、對mfscgiserv的使用

Mfscgiserv是用python編寫的一個web伺服器,它的監聽端口是9425,

可以利用:

       /usr/local/mfs/sbin/mfscgiserv來啟動,使用者利用浏覽器就可全面監控所有客戶挂接,chunkserver及master server,用戶端的各種操作等等,絕對是個好工具。

     在任何一台裝有浏覽器的機器上都可以檢視:

編譯和安裝

MooseFS部署的首選方法是從源代碼安裝

源代碼包安裝支援标準./configure &amp;&amp; make &amp;&amp; make install的步驟,重要的配置選項有:

--disable-mfsmaster –不建立成管理伺服器(用于純節點的安裝)

--disable-mfschunkserver –不建立成資料存儲chunkserver伺服器

--disable-mfsmount –不建立mfsmount和mfstools(如果用開發包安裝,他們會被預設建立的)

--enable-mfsmount –确定安裝mfsmount和mfstools(如果 

--prefix=DIRECTORY –鎖定安裝目錄(預設是/usr/local)

--sysconfdir=DIRECTORY –選擇配置檔案目錄(預設是${prefix}/etc))

--localstatedir=DIRECTORY –選擇變量資料目錄(預設是${prefix}/var,MFS中繼資料被存儲在mfs的子目錄下,預設是${prefix}/var/mfs )

--with-default-user  -運作守護程序的使用者,如果配置檔案中沒有設定使用者,預設為nobody使用者

--with-default-group=GROUP  運作守護程序的使用者組,如果配置檔案中沒有設定使用者組,預設為nogroup使用者組

例如用FHS(檔案系統層次标準)的相容路徑在Linux上的安裝:

   ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/lib 

編譯安裝遵守标準的DESTDIR= variable,允許安裝包在臨時目錄(例如以創造二進制包)。已經存在的配置或這是中繼資料檔案将會被覆寫掉。

一、管理伺服器(master)

作為管理伺服器(master)是MooseFS部署中重要的一個元素,在硬體方面,應該被安裝在一台能夠保證高可靠性和能勝任的整個系統存取的要求的機器上。一個明智的做法是用一個配有備援電源、ECC記憶體、磁盤陣列,如RAID1/RAID5/RAID10。在作業系統方面,管理伺服器的作業系統應該是具有POSIX相容的系統(到目前支援Linux, FreeBSD, Mac OS X and OpenSolaris)。

安裝管理伺服器(master server)的過程:

1、安裝mfs-master

2、如果是從源碼安裝的話,在configure時不要加--disable-mfsmaster選項。

3、建立運作master的使用者(如果這樣的使用者不存在的話)

4、确定存放中繼資料檔案的目錄存在,而且能夠被運作master的使用者可寫(通過configure的選項來設定運作master server的使用者和中繼資料存儲的路徑,make install指令的執行要用root使用者)

5、配置master server伺服器是通過配置檔案mfsmaster.cfg來做的,要特别注意的是TCP端口的使用

6、添加或建立(依賴于作業系統和釋出版本)一組啟動mfsmaster程序的腳本

安裝完管理伺服器後,便可以用mfsmaster指令來啟動master server,如果用root使用者執行mfsmaster指令,則在啟動後轉為mfsmaster.cfg中指定的使用者來運作,否則将以執行mfsmaster指令的使用者來運作master server。

二、中繼資料日志伺服器

中繼資料日志守護程序是在安裝master server時一同安裝的,最小的要求并不比master本身大,可以被運作在任何機器上(例如任一台chunkserver),但是最好是放置在MooseFS master的備份機上,備份master伺服器的變化日志檔案,檔案類型為changelog_ml.*.mfs。因為主要的master server一旦失效,可能就會将這台metalogger機器取代而作為master server。

安裝管理程序:

1、從源代碼安裝mfs-master,在執行configure時不要帶有--disable-mfsmaste選項

2、建立有運作mfsmetalogger服務權限運作的使用者(如果這樣的使用者不存在的話)

3、确定存放中繼資料檔案的目錄存在,而且能夠被運作mfsmetalogger服務的使用者可寫(通過configure的選項來設定運作mfsmetalogger服務的使用者和中繼資料存儲的路徑,make install指令的執行要用root使用者)

4、通過mfsmetalogger.cfg配置mfsmetalogger服務,要特别注意的是TCP端口,這裡要使用MASTER_PORT要必須和mfsmaster.cfg檔案中的MATOML_LISTEN_PORT一緻。

5、添加或建立(依賴于作業系統和釋出版本)一組啟動mfsmetalogger程序的腳本

安裝完管理伺服器後,便可以用mfsmetalogger指令來啟動mfsmetalogger server,如果用root使用者執行mfsmetalogger指令,則在啟動後轉為mfsmetalogger.cfg中指定的使用者來運作,否則将以執行mfsmetalogger指令的使用者來運作mfsmetalogger server。

三、資料伺服器

安裝完管理伺服器後,将安裝資料伺服器(chunkservers),這些機器的磁盤上要有适當的剩餘空間,而且作業系統要遵循POSIX标準(驗證了的有這些:Linux, FreeBSD, Mac OS X and OpenSolaris)。Chunkserver在一個普通的檔案系統上儲存資料塊/碎片(chunks/fragments)作為檔案。

Linux: 

creating: 

dd if=/dev/zero of=file bs=100m seek=400 count=0

mkfs -t ext3 file

mounting: 

mount -o loop file mount-point

FreeBSD: 

creating and mounting: 

dd if=/dev/zero of=file bs=100m count=400

mdconfig -a -t vnode -f file -u X

newfs -m0 -O2 /dev/mdX

mount /dev/mdX mount-point

mounting a previously created file system: 

Mac OS X: 

Start "Disk Utility" from "/Applications/Utilities"

Select from menu "Images-&gt;New-&gt;Blank Image ..."

注: 每一個chunkserver的磁盤都要為增長中的chunks保留些磁盤空間,進而達到建立新的chunk。隻有磁盤都超過256M并且chunkservers報告自由空間超過1GB總量才可以被新的資料通路。最小的配置,應該從幾個G位元組的存儲。

安裝資料伺服器 (chunkserver): 

1、 把預先隔離的磁盤空間作為一個單獨的檔案系統,挂接在一個本地的目錄下(如:/mnt/hd1, /mnt/hd2等等);

2、安裝mfs-chunkserver

在執行configure時要不帶--disable-mfschunkserver選項,

3、建立有運作chunkserver服務權限運作的使用者(如果這樣的使用者不存在的話)

4、并給予這個戶對整個MooseFS檔案系統寫的權限

5、利用mfschunkserver.cfg檔案配置mfschunkserver服務,特别要注意的是TCP端口(MASTER_PORT變量要和mfsmaster.cfg中MATOCS_LISTEN_PORT的值一樣)。

6、在mfshdd.conf檔案中列出要用于MooseFS的挂載點

7、添加或建立(依賴于作業系統和釋出版本)一組啟動mfschunkserver程序的腳本

注:

Mfschunkserver的本地ip很重要,Mfschunkserver用此ip和mfsmaster進行連接配接,mfsmaster通過此ip和MFS用戶端連接配接(mfsmount),而且其它chunkservers之間的通訊也是通過這個ip,是以這個ip必須是遠端可通路的。是以mfsmaster的本地ip位址(MASTER_HOST)設定必須和chunkserver一樣,以便于正确的連接配接,通常的做法是mfsmaster,chunkservers和MFS用戶端在同一網段。一般的回環位址(localhost, 127.0.0.1)不能用于MASTER_HOST,它将使chunkserver無法被其她主機通路(這樣的配置隻會是單機器的機器mfsmaster,mfschunkserver和mfsmount運作)。

安裝完mfschunkserver後,便可以用mfschunkserver指令來啟動mfschunkserver伺服器,如果用root使用者執行mfschunkserver指令,則在啟動後轉為mfschunkserver.cfg中指定的使用者來運作,否則将以執行mfschunkserver指令的使用者來運作mfschunkserver服務。

四、用戶端(mfsmount)

mfsmount需要FUSE才可以正常工作,FUSE支援多種作業系統:Linux, FreeBSD, OpenSolaris and MacOS X。

Linux一個核心子產品的API版本至少必需是7.8的,這個可以用dmesg指令來檢測,當載入核心子產品後,應該能看到有一行fuse init (API version 7.8)。一些可用的fuse版本是2.6.0以上,Linux kernel 2.6.20(Linux核心從2.6.20後加入了fuse)以上。由于一些小bug,是以比較新子產品被薦使用,如fuse 2.7.2 及 Linux 2.6.24(盡管fuse 2.7.x單獨沒有包含getattr/write race condition fix)。在FreeBSD系統上fusefs-kmod版本要0.3.9以上的才可以,在MacOS X Mac上 FUSE要10.5版本。

安裝MooseFS用戶端:

1、安裝mfs-client,從源代碼安裝,在進行configure時不要加--disable-mfsmount選項就可以了

2、建立被MooseFS挂接的目錄,例如/mnt/mfs。

3、MooseFS用一下的指令挂接:

mfsmount [-h master] [-p port] [-l path] [-w mount-point]

-H MASTER:是管理伺服器(master server)的ip位址

-P PORT: 是管理伺服器(master server)的端口号,要按照mfsmaster.cfg 配置檔案中的變量MATOCU_LISTEN_POR的之填寫。如果master serve使用的是預設端口号則不用指出。

-S PATH:指出被挂接mfs目錄的子目錄,預設是/目錄,就是挂載整個mfs目錄。

Mountpoint:是指先前建立的用來挂接mfs的目錄。

使用  MooseFS

一、挂載檔案系統

啟動管理伺服器(master server)和資料伺服器(chunkservers) (chunkservers一個是必需的,但至少兩個推薦) 後,客戶機便可以利用mfsmount挂接mfs檔案系統。 

MooseFS檔案系統利用下面的指令:

mfsmount mountpoint [-d] [-f] [-s] [-m] [-n] [-p] [-H MASTER] [-P PORT] [-S PATH] [-o OPT[,OPT...]]

在開始mfsmount程序時,用一個-m或-o mfsmeta的選項,這樣可以挂接一個輔助的檔案系統MFSMETA,這麼做的目的是對于意外的從MooseFS卷上删除檔案或者是為了釋放磁盤空間而移動的檔案而又此檔案又過去了垃圾檔案存放期的恢複,例如:

mfsmount -m /mnt/mfsmeta

需要注意的是,如果要決定挂載mfsmeta,那麼一定要在mfsmaster的mfsexports.cfg檔案中加入如下條目:

原檔案中有此條目,隻要将其前的#去掉就可以了。

基本操作

挂載檔案系統後就可以執行所有的标準的檔案操作了(如建立,拷貝,删除,重命名檔案,等等)。MooseFS是一個網絡檔案系統,是以操作進度可能比本地系統要慢。

MooseFS卷的剩餘空間檢查可以用和本地檔案系統同樣的方法,例如df指令:

$ df -h | grep mfs

mfsmaster:9421         85T   80T  4.9T  95% /mnt/mfs

mfsmaster:9321        394G  244G  151G  62% /mnt/mfs-test

重要的是每一個檔案可以被儲存多個副本,在這種情況下,每一個檔案所占用的空間要比其檔案本身大多了。此外,被删除且在有效期内(trashtime)的檔案都放在一個“垃圾箱”,是以他們也占用的空間,其大小也依賴檔案的份數。就像其他Unix的檔案系統一樣,以防删除一個被其它程序打開檔案,資料将被一直存儲,至少直到檔案被關閉。

二、MooseFS的特定的操作

1、設定的目标

目标(goal),是指檔案被拷貝的份數,設定了拷貝的份數後是可以通過可以mfsgetgoal指令來證明的,也可以通過mfssetgoal來改變設定。例如:

$ mfsgetgoal /mnt/mfs-test/test1

/mnt/mfs-test/test1: 2

$ mfssetgoal 3 /mnt/mfs-test/test1

/mnt/mfs-test/test1: 3

用mfsgetgoal –r和mfssetgoal –r同樣的操作可以對整個樹形目錄遞歸操作。

$ mfsgetgoal -r /mnt/mfs-test/test2

/mnt/mfs-test/test2:

files with goal        2 :                   36

directories with goal  2 :                    1

$ mfssetgoal -r 3 /mnt/mfs-test/test2

inodes with goal changed:                        37

inodes with goal not changed:                     0

inodes with permission denied:                    0

files with goal        3 :                   36

directories with goal  3 :                    1

實際的拷貝份數可以通過mfscheckfile 和 mfsfileinfo 指令來證明,例如:

$ mfscheckfile /mnt/mfs-test/test1

/mnt/mfs-test/test1:

3 copies: 1 chunks

$ mfsfileinfo /mnt/mfs-test/test1

        chunk 0: 00000000000520DF_00000001 / (id:336095 ver:1)

                copy 1: 192.168.0.12:9622

                copy 2: 192.168.0.52:9622

                copy 3: 192.168.0.54:9622

注意:一個不包含資料的零長度的檔案,盡管沒有設定為非零的目标(the non-zero "goal"),但用指令查詢将傳回一個空的結果,例如:

[root@www bin]# touch    /mnt/mfs/mmm 

[root@www bin]# ./mfsfileinfo  /mnt/mfs/mmm    

/mnt/mfs/mmm:

但是如果對此檔案進行編輯,如:

[root@www bin]# echo "1234"&gt; /mnt/mfs/mmm

然後看:

root@www bin]# ./mfsfileinfo  /mnt/mfs/mmm      

        chunk 0: 0000000000000040_00000001 / (id:64 ver:1)

                copy 1: 192.168.3.31:9422

                copy 2: 192.168.3.96:9422

                copy 3: 192.168.3.139:9422

此時在将檔案清空:

[root@www bin]# echo ""&gt; /mnt/mfs/mmm  

然後在看:

[root@www bin]# ./mfsfileinfo  /mnt/mfs/mmm          

        chunk 0: 0000000000000041_00000001 / (id:65 ver:1)

副本将任然存在。

假如改變一個已經存在的檔案的拷貝個數,那麼檔案的拷貝份數将會被擴大或者被删除,這個過程會有延時。可以通過上面的指令來證明。

對一個目錄設定“目标”,此目錄下的新建立檔案和子目錄均會繼承此目錄的設定,但不會改變已經存在的檔案及目錄的拷貝份數。例如:

[root@bzd f]# touch 1

[root@bzd f]# echo “11” &gt; 1

[root@bzd f]# /usr/local/mfs/bin/mfsfileinfo 1   

1:

        chunk 0: 0000000000000043_00000001 / (id:67 ver:1)

[root@bzd f]# cd ..

[root@bzd mfs]# /usr/local/mfs/bin/mfssetgoal 2 f

f: 2

[root@bzd mfs]# cd f/

[root@bzd f]# ls

1

[root@bzd f]# touch 2

[root@bzd f]# echo “222” &gt; 2

[root@bzd f]# /usr/local/mfs/bin/mfsfileinfo 1

[root@bzd f]# /usr/local/mfs/bin/mfsfileinfo 2

2:

        chunk 0: 0000000000000044_00000001 / (id:68 ver:1)

整個目錄樹的内容摘要可以用一個功能增強的等同于du –s的指令mfsdirinfo,mfsdirinfo為MooseFS列出具體的資訊。

例如:

$ mfsdirinfo /mnt/mfs-test/test/:

inodes:                         15

  directories:                    4

  files:                          8

chunks:                          6

length:                     270604

size:                       620544

realsize:                  1170432

上述内容摘要顯示了目錄、檔案及chunks的數目,還有整個目錄占用磁盤空間的情況。

length -檔案大小的總和

size –塊長度總和

realsize –磁盤空間的使用包括所有的拷貝

這是一個檔案被分成了6個chunk例子:

[root@bzd mfs]# /usr/local/mfs/bin/mfsfileinfo fdsf.iso

1.img:

        chunk 0: 000000000000053A_00000001 / (id:1338 ver:1)

        chunk 1: 000000000000053B_00000001 / (id:1339 ver:1)

        chunk 2: 000000000000053C_00000001 / (id:1340 ver:1)

        chunk 3: 000000000000053D_00000001 / (id:1341 ver:1)

        chunk 4: 000000000000053E_00000001 / (id:1342 ver:1)

        chunk 5: 000000000000053F_00000001 / (id:1343 ver:1)

三、垃圾箱(trash bin)設定隔離的時間(quarantine time)

一個删除檔案能夠存放在一個“垃圾箱”的時間就是一個隔離時間,這個時間可以用mfsgettrashtime指令來驗證,也可以用mfssettrashtime指令來設定,例如:

$ mfsgettrashtime /mnt/mfs-test/test1

/mnt/mfs-test/test1: 604800

$ mfssettrashtime 0 /mnt/mfs-test/test1

/mnt/mfs-test/test1: 0

這些工具也有個遞歸選項-r,可以對整個目錄樹操作,例如:

$ mfsgettrashtime -r /mnt/mfs-test/test2

files with trashtime                 0 :                   36

directories with trashtime      604800 :                    1

$ mfssettrashtime -r 1209600 /mnt/mfs-test/test2

inodes with trashtime changed:                       37

inodes with trashtime not changed:                    0

inodes with permission denied:                        0

files with trashtime           1209600 :                   36

directories with trashtime     1209600 :                    1

時間的機關是秒(有用的值有:1小時是3600秒,24 - 86400秒,1 - 604800秒)。就像檔案被存儲的份數一樣, 為一個目錄 設定存放時間是要被新建立的檔案和目錄所繼承的。數字0意味着一個檔案被删除後, 将立即被徹底删除,在想回收是不可能的

删除檔案可以通過一個單獨安裝MFSMETA檔案系統。特别是它包含目錄 / trash (包含任然可以被還原的被删除檔案的資訊)和 / trash/undel (用于擷取檔案)。隻有管理者有權限通路MFSMETA(使用者的uid 0,通常是root)。

$ mfssettrashtime 3600 /mnt/mfs-test/test1

/mnt/mfs-test/test1: 3600

$ rm /mnt/mfs-test/test1

$ ls  /mnt/mfs-test/test1

ls: /mnt/mfs-test/test1: No such file or directory

# ls -l /mnt/mfs-test-meta/trash/*test1

-rw-r--r-- 1 user      users     1 2007-08-09 15:23 /mnt/mfs-test-meta/trash/00013BC7|test1

被删檔案的檔案名在 “垃圾箱”目錄裡還可見,檔案名由一個八位十六進制的數i-node和被删檔案的檔案名組成,在檔案名和i-node之間不是用“/”,而是用了“|”替代。如果一個檔案名的長度超過作業系統的限制(通常是255個字元),那麼部分将被删除。通過從挂載點起全路徑的檔案名被删除的檔案任然可以被讀寫。需要注意的是被删除的檔案在用全路徑檔案名(注意檔案名是兩部分)時一定要用單引号引起來。例如:

# cat '/mnt/mfs-test-meta/trash/00013BC7|test1'

test1

# echo 'test/test2' &gt; '/mnt/mfs-test-meta/trash/00013BC7|test1'

test/test2

移動這個檔案到trash/undel子目錄下,将會使原始的檔案恢複到正确的MooseFS檔案系統上 路徑下(如果路徑沒有改變)。例如:

[root@www mfs]# ll dgg   

-rw-r--r--  1 root root 8 Jan 13 08:45 dgg

[root@www mfs]# rm -f dgg

ls: dgg: No such file or directory

[root@www trash]# ls

0000000B|dgg   00000047|f1    undel

[root@www trash]# mv '/mnt/mfsmeta/trash/0000000B|dgg' ./undel/

undel 00000047|f1

[root@www mfs]# ll dgg

注意:如果在同一路徑下有個新的同名檔案,那麼恢複不會成功

從“垃圾箱”中删除檔案結果是釋放之前被它站用的空間(删除有延遲,資料被異步删除)。在這種被從“垃圾箱”删除的情況下,該檔案是不可能恢複了。

可以通過mfssetgoal工具來改變檔案的拷貝數,也可以通過mfssettrashtime工具來改變存儲在“垃圾箱”中的時間。

在 MFSMETA的目錄裡,除了trash和trash/undel兩個目錄外,還有第三個目錄reserved,該目錄内有已經删除的檔案,但卻有一直打開着。在使用者關閉了這些被打開的檔案後,reserved目錄中的檔案将被删除,檔案的資料也将被立即删除。在reserved目錄中檔案的命名方法同trash目錄中的一樣,但是不能有其他功能的操作。

四、快照

MooseFS系統的另一個特征是利用mfsmakesnapshot工具給檔案或者是目錄樹做快照,例如:

$ mfsmakesnapshot source ... destination

Mfsmakesnapshot是在一次執行中整合了一個或是一組檔案的拷貝,而且任何修改這些檔案的源檔案都不會影響到源檔案的快照, 就是說任何對源檔案的操作,例如寫入源檔案,将不會修改副本(或反之亦然)。

檔案快照可以用mfsappendchunks,就像MooseFS1.5中的mfssnapshot一樣,,作為選擇,二者都可以用。例如:

$ mfsappendchunks destination-file source-file ...

當有多個源檔案時,它們的快照被加入到同一個目标檔案中(每個chunk的最大量是chunk)。

五、額外的屬性

檔案或目錄的額外的屬性(noowner, noattrcache, noentrycache),可以被mfsgeteattr,mfsseteattr,mfsdeleattr工具檢查,設定,删除,其行為類似mfsgetgoal/mfssetgoal or或者是mfsgettrashtime/mfssettrashtime,詳細可見指令手冊。

MooseFS  維護

一、啟動MooseFS叢集

最安全的啟動MooseFS叢集(避免任何讀或寫的錯誤資料或類似的問題)的方式是按照以下指令步驟:

1.啟動mfsmaster程序

2.啟動所有的mfschunkserver程序

3.啟動mfsmetalogger程序(如果配置了mfsmetalogger)

當所有的chunkservers連接配接到MooseFS master後,任何數目的用戶端可以利用mfsmount去挂接被export的檔案系統。(可以通過檢查master的日志或是CGI螢幕來檢視是否所有的chunkserver被連接配接)。

二、停止MooseFS叢集

安全的停止MooseFS叢集:

1.在所有的用戶端解除安裝MooseFS 檔案系統(用umount指令或者是其它等效的指令)

2.用mfschunkserver –s指令停止chunkserver程序

3.用mfsmetalogger –s指令停止metalogger程序

4.用mfsmaster –s指令停止master程序

三、MooseFS chunkservers的維護

假如每個檔案的goal(目标)都不小于2,并且沒有under-goal檔案(這些可以用mfsgetgoal –r和mfsdirinfo指令來檢查),那麼一個單一的chunkserver在任何時刻都可能做停止或者是重新啟動。以後每當需要做停止或者是重新啟動另一個chunkserver的時候,要确定之前的chunkserver被連接配接,而且要沒有under-goal chunks。

四、MooseFS中繼資料的備份

通常中繼資料有兩部分的資料

1.主要中繼資料檔案metadata.mfs,當mfsmaster運作的時候會被命名為metadata.mfs.back

2.中繼資料改變日志changelog.*.mfs,存儲了過去的N小時的檔案改變(N的數值是由BACK_LOGS參數設定的,參數的設定在mfschunkserver.cfg配置檔案中)。

主要的中繼資料檔案需要定期備份,備份的頻率取決于取決于多少小時changelogs儲存。中繼資料changelogs應該實時的自動複制。自從MooseFS 1.6.5,這兩項任務是由mfsmetalogger守護程序做的。

五、MooseFS master的恢複

一旦mfsmaster崩潰(例如因為主機或電源失敗),需要最後一個中繼資料日志changelog并入主要的metadata中。這個操作時通過mfsmetarestore工具做的,最簡單的方法是:

mfsmetarestore -a

如果master資料被存儲在MooseFS編譯指定地點外的路徑,則要利用-d參數指定使用,如:

mfsmetarestore -a -d /storage/mfsmaster

六、從備份恢複MooseFS master

為了從備份中恢複一個master,需要做:

1、安裝一個mfsmaster

2、利用同樣的配置來配置這台mfsmaster(利用備份來找回mfsmaster.cfg),可見配置檔案也是需要備份的。

3、找回metadata.mfs.back檔案,可以從備份中找,也可以中metalogger主機中找(如果啟動了metalogger服務),然後把metadata.mfs.back放入data目錄,一般為${prefix}/var/mfs。

4、從在master宕掉之前的任何運作metalogger服務的伺服器上拷貝最後metadata檔案,然後放入mfsmaster的資料目錄。

5、利用mfsmetarestore指令合并中繼資料changelogs,可以用自動恢複模式mfsmetarestore –a,也可以利用非自動化恢複模式,文法如下:

mfsmetarestore -m metadata.mfs.back -o metadata.mfs changelog_ml.*.mfs

     本文轉自yzy121403725 51CTO部落格,原文連結:http://blog.51cto.com/lookingdream/1880712,如需轉載請自行聯系原作者

繼續閱讀