MooseFS分佈式文件系統+keepalived高可用+unison和intoify實時雙擊同步(一)

1  分佈式文件系統mfs(moose file system)

1.1mfs文件系統的組成

1元數據服務器。在整個體系中負責管理管理文件系統,目前MFS只支持一個元數據服務器master,這是一個單點故障,需要一個性能穩定的服務器來充當。希望今後MFS能支持多個master服務器,進一步提高系統的可靠性。

2元數據日誌服務器。備份master服務器的變化日誌文件,文件類型爲changelog_ml.*.mfs。當元數據服務器數據丟失或者損毀,可從日誌服務器取得文件進行恢復。

3數據存儲服務器chunkserver。真正存儲用戶數據的服務器。存儲文件時,首先把文件分成塊,然後這些塊在數據服務器chunkserver之間複製(複製份數可以手工指定,建議設置副本數爲3)。數據服務器可以是多個,並且數量越多,可使用的磁盤空間越大,可靠性也越高。

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

1.1.1元數據服務器安裝和配置(master

  正式環境爲oel5.8所有mfs子系統及客戶端均在192.168.1.0段內。

     Mfs主機:192.168.1.237

     Mfs備機:192.168.1.236

     Keepalived虛擬VIP 192.168.1.239

     Mfs存儲(chunkserver:   (前端NGINX-M192.168.1.134

                              (前端NGINX-S192.168.1.36

(文件服務器NEW-WEB192.168.1.238

Mfs客戶端:(後端TOMCAT1192.168.1.233

(後端TOMCAT2192.168.1.234

(前端NGINX-M192.168.1.134

(前端NGINX-S192.168.1.36

Moosefs版本爲moosefs-2.0.72-1.tar.gz

              Fuse版本爲fuse-2.8.4.tar.gz

              

安裝前先查看文件描述,ulimit –n,最好設置的大點,

          vim /etc/security/limits.conf

          * hard nofile 50000

* softnofile 50000

(一)安裝master方法一:編譯安裝

我們現在192.168.1.237192.168.1.236上分別安裝好mfsmaster

可以到http://www.moosefs.org/download.html下載mfs各版本,鑑於服務器python環境爲2.4.3,需要升級爲python2.7.5可以較好的支持mfscgiserv

1、下載moosefs安裝包

2、解包 tar -zxvf moosefs-2.0.72-1.tar.gz

3、切換目錄 cd moosefs-2.0.72

4、創建用戶 useradd mfs -s /sbin/nologin

5、配置 ./configure--prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs

  注意:在編譯過程中可能會出現*************"checkingfor FUSE... no  configure: error:mfsmount build was forced, but fuse development package is notinstalled"*******************可以不用管它,因爲只是客戶端掛接master

6、編譯安裝 make ; make install

(二)安裝mfsmaster方法二:yum安裝

  如果你的系統的yum源已經升級到最新的,我們可以使用yum來安裝moosefs2.0.72,

首先我們獲取moosefsrpm-gpg-key:

# curl "http://ppa.moosefs.com/RPM-GPG-KEY-MooseFS"> /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS

在系統中導入rpm-gpg-key:

# rpm  --import  /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS

然後我們獲取moosefs2.0.72yum源:

# curl"http://ppa.moosefs.com/MooseFS-stable-el5.repo" >/etc/yum.repos.d/MooseFS.repo

最後我們就可以以yum的方式來安裝:

   Mfsmaster:     # yum install moosefs-master moosefs-climoosefs-cgi moosefs-cgiserv

   Chunkservers:  # yum install moosefs-chunkserver

   Metaloggers:   # yum install moosefs-metalogger

   Clients:       # yum install moosefs-client

啓動mfsmastermfschunkserver:

      # servicemoosefs-master start

#service moosefs-chunkserver start

關於版本升級更新,在更新前應該做好metadata元數據的備份。

(三)配置元數據服務

元數據服務器的配置文件被放置於安裝目錄/usr/local/mfs/etc。與mfs-1.5.12版本不同的是:moosefs-2.0.72版安裝完成只有模版文件,較之舊版的mfs,配置選項增加了幾項可調控的選項,還增加了很多註釋說明,其後綴形如mfsmaster.cfg.dist。爲了使mfs master正常工作,需要兩個配置文件mfsmaster.cfgmfsexports.cfg,前者爲主配置文件,後者爲權限控制文件(mfs客戶端掛接時使用)。

1)主配置文件mfsmaster.cfg,可直接從模版文件拷貝而來,打開這個配置文件/usr/local/mfs/etc/mfsmaster.cfg,看看都有哪些內容:

# 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;

# FILE_UMASK = 027               創建文件的UMASK

EXPORTS_FILENAME= /usr/local/mfs/etc/mfsexports.cfg  被掛接目錄權限配置文件

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

#BACK_LOGS = 50     metadata 的改變log 文件數目(默認是50)  這裏雖然默認值是50,但是在使用unison同步後,會額外的產生一個changlog.0.mfs的日誌文件,unison部分會做說明。

#BACK_META_KEEP_PREVIOUS = 1,就是在/usr/local/mfs/var/mfs目錄中metadata文件保存的數量爲1。如果有多餘的metadata文件,它會自動在原來名稱後加後綴。

#CHANGELOG_PRESERVE_SECONDS = 1800  默認每隔1800秒變化的記錄保存在內存中

#MISSING_LOG_CAPACITY = 100000    默認有100000個丟失chunks將存儲在master

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

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

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

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

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

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

#CHUNKS_LOOP_MAX_CPS = 100000  塊循環不檢查塊每秒鐘超過給定的數字(100000)chunks

# CHUNKS_LOOP_TIME =300  chunks 的迴環頻率(默認是:300 秒);原文:在幾秒鐘內循環次數

#CHUNKS_SOFT_DEL_LIMIT = 10  chunk刪除一個chunkserver上的塊數量

#CHUNKS_HARD_DEL_LIMIT = 25 chunk刪除一個chunkserver上的塊數量

#CHUNKS_WRITE_REP_LIMIT = 2,1,1,4   最大數量的塊複製到一個chunkserver,第一個限制是比較危險的塊(塊只有一個副本);第二個限制是undergoal(塊的拷貝數量低於指定的目標);第三個限制是平衡與周圍空間使用服務器之間的算術平均數;第四個限制是其他服務器之間的平衡(極低或極高的空間使用情況);這裏mfs官方建議是第一個數字大於等於第二,第二大於或等於第三,第四大於或等於第三,即(第一個限制 > = 第二個限制 > = 第三個限制< = 第四個限制)

#CHUNKS_READ_REP_LIMIT = 10,5,2,5   最大數量的塊複製到一個chunkserver

這個限制組和上面的寫入的限制差不多,關係數量應該在寫一樣的限制,即(第一個限制 > = 第二個限制 > = 第三個限制< = 第四個限制)

這裏做下說明:上面這兩個選項,是可以控制fsmchunkserver複製速度的,可以定義在一個循環裏複製到一個chunkserver 的最大chunk數目

#CS_HEAVY_LOAD_THRESHOLD = 100 chunkserver負載值默認100

#CS_HEAVY_LOAD_RATIO_THRESHOLD = 5.0 , chunkserver負荷閾值率(默認值爲5.0,每當chunkserver負載比先前指定的閾值高並且這一比率高於平均負載,然後chunkserver切換到“grace(優雅)”模式)

#CS_HEAVY_LOAD_GRACE_PERIOD = 900   定義了多久chunkservers仍將以優雅模式工作(以秒爲單位).

#ACCEPTABLE_PERCENTAGE_DIFFERENCE = 1.0 chunkservers空間使用的百分比最大不同(默認是1.0;有效值:1.0 -10.0)

#PRIORITY_QUEUES_LENGTH = 1000000,優先隊列的長度(瀕危,undergoal等塊-應該首先處理塊,默認值是1000000)

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

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

# SESSION_SUSTAIN_TIME = 86400   多久來維持一個斷開連接的客戶機會話(以秒爲單位,默認是86400 = 1)

# QUOTA_TIME_LIMIT = 604800   #在多少秒內的軟配額(默認是604800 -7)                            

儘管每行都被註釋掉了,但它們卻是配置文件的默認值,要改變這些值,需要取消註釋,然後明確指定其取值。接下來說明一下其中一些項目的含義。

EXPORTS_FILENAME= /usr/local/mfs/etc/mfsexports.cfg 權限控制文件的存放位置。

DATA_PATH= /usr/local/mfs/var/mfs 數據存放路徑,只元數據的存放路徑。那麼這些數據都包括哪些呢?進目錄看看,大致分3種類型的文件:

 

                            spacer.gif

2)配置文件/usr/local/mfs/etc/mfsexports.cfg,也可直接從模版文件複製而來。這個文件的內容,十分類似NFS服務器的exports文件.實際配置時,可參照這個文件的默認行來修改以滿足自己的應用需求.我的mfsexports.cfg文件的內容爲:

192.168.1.0/24          .      rw      這個“.”表示mfsmeta,就是我們下面掛接的垃圾回收站。

192.168.1.0/24          /       rw,alldirs,maproot=0  掛接到mfs的根目錄。

這種格式需要說明一下:

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

第二部分:被掛接的目錄

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

 

              第二部分說明

              /      標識MooseFS

             

              第三部分詳細說明

              ro 只讀模式共享

rw 讀寫的方式共享

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

maproot映射爲root,還是指定的用戶(0表示ROOT

password 指定客戶端密碼

3)複製元數據文件

cp/usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs

這是一個8字節的文件,爲mfs-1.6.x以上新增項目。

(四)元數據服務器master啓動

元數據服務器可以單獨啓動,即使沒有任何數據存儲服務器(chunkserver)也是能正常工作的,因此當我們安裝配置完MFS後,即可啓動它。執行命令 /usr/local/mfs/sbin/mfsmasterstart(如果啓動過程報錯,先檢查配置文件,cp/usr/local/mfs/etc/mfsmaster.cfg.dist /usr/local/mfs/etc/mfsmaster.cfg,同理,mfsexport.cfg.dist也是一樣的。我們最好對/usr/local/mfs,整體重新chown -R mfs.mfs/usr/local/mfs一下)如果沒有意外,元數據庫服務器就應該作爲一個守護進程運行起來。現在我們可以通過3個方面來檢查一下MFS master的運行狀況:

先看啓動過程:

spacer.gif

spacer.gif

查看master系統日誌tail -f /var/log/messages

spacer.gif

 

MFS的日誌會直接寫入系統日誌。當我們增加數據存儲服務器(chunkserver)或數據存儲服務器(chunkserver)處故障時,都能在系統日誌找到這些記錄。注意,這個日誌跟元數據變化日誌不是一回事情。

啓動:/usr/local/mfs/sbin/mfscgiserv  此時就可以通過http://192.168.1.237:9425 web監控界面查看到mfs使用情況了。
停止:kill掉進程就可以了。

(五)、關閉元數據服務器

關閉元數據服務器,務必使用 /usr/local/mfs/sbin/mfsmaster  stop這種方式(之前使用1.6.x版本是支持-s停止的,新版不支持),如果直接使用kill殺死進程,將導致下次啓動時出現找不到相關文件,而不能正常啓動服務器。這個一定要謹慎。當然,如果發生了這個事情,還是可以通過 mfsmetastore 來恢復的。

1.1.2、元數據日誌服務器安裝和配置

元數據日誌服務爲mfs 1.6以後版本新增的服務,即可以把元數據日誌保留在元數據服務器,也可以單獨存儲。爲保證其可靠性,最好單獨放置。需要注意的是,源數據日誌守護進程跟元數據服務器(master)在同一個服務器上,備份元數據日誌的服務器作爲它的客戶端,從元數據服務器取得日誌文件進行備份。

()安裝元數據日誌服務器metalogger

說明:由於正式環境中,我們沒有metalogger日誌服務器,因爲考慮到metalogger延時太大,這裏只做簡潔介紹:

1、下載moosefs2.0.72

2、解包tar -zxvfmoosefs-2.0.72-1.tar.gz

3、切換目錄 cd moosefs-2.0.72

4、創建用戶 useradd mfs -s /sbin/nologin

5、配置 ./configure--prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs

6、編譯安裝 make ; make install

(二)元數據日誌服務(metalogger)配置

該服務僅需要一個配置文件,這裏我們只需要從模板文件複製一個,然後稍微加以修改即可,下面是我的某個metalogger 的配置文件:配置前面幾項是個master是一樣的。

# 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            metadata 的改變log 文件數目(默認是50)

#META_DOWNLOAD_FREQ = 24  元數據備份文件下載請求頻率。默認爲24小時,即每隔一天從元數據服務器(MASTER)下載一個metadata.mfs.back 文件。當元數據服務器關閉或者出故障時,matedata.mfs.back文件將消失,那麼要恢復整個mfs,則需從metalogger 服務器取得該文件。請特別注意這個文件,它與日誌文件一起,才能夠恢復整個被損壞的分佈式文件系統。

 

# MASTER_RECONNECTION_DELAY = 5   重新連接master延時時間

 

MASTER_HOST = 192.168.1.239  (這裏我們先填寫爲虛擬VIP地址)

MASTER_PORT = 9419

 

#MASTER_TIMEOUT = 60    可能是用於下載mfs.back文件重試時間

      這個配置文件,唯一需要修改的地方就是MASTER_HOST,它的值必須是元數據服務器的主機名或者ip地址。另外,爲方便大家進一步理解,我把配置文件裏其他幾個項目簡單的說明一下:

(1)  SYSLOG_IDENT= mfsmetalogger 元數據日誌服務運行時,在系統日誌輸出的標識,下面給出一段系統日誌:

spacer.gif

(2)DATA_PATH= /usr/local/mfs/var/mfs 從元數據服務器(master)抓回文件,然後進行存放的路徑。

(3)BACK_LOGS= 50 存放備份日誌的總個數爲50,超出50則輪轉。在做元數據恢復時,僅僅需要最近的那個日誌文件備份,因此默認的日誌個數就足夠了,這也保證了日誌備份不會寫滿整個分區。

(三)元數據日誌服務(metalogger)運行及關閉

1、啓動過程爲:

/usr/local/mfs/sbin/mfsmetalogger start

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

lockfile created and locked

initializing mfsmetalogger modules ...

mfsmetalogger daemon initialized properly

啓動過程如果不能跟元數據服務器進行通信的話,系統會給出錯誤信息。

2、關閉服務,執行命令/usr/local/mfs/sbin/mfsmetalogger stop

3、檢查服務的運行狀況。從兩個方面看,一個是元數據服務器,另一個是本身的數據生成情況。

  • 察看元數據服務器網絡連接,可以看見日誌服務器連接到元數據服務器的tcp 9419端口。

  • 查看日誌服務器的工作目錄,正常情況應該看見已經有文件生成了(從元數據服務器獲取過來的)。可以手動從元數據服務器複製一個日誌文件過來比較文件的內容。                                   

  • 、數據存儲chunkserver服務器的安裝配置

我們在這裏說一下chunkserver具體安裝環境:安裝chunkserver前需要在(前端NGINX-M192.168.1.134和(前端NGINX-S192.168.1.36上安裝fuse模塊,因爲這兩臺機器同時兼顧mfs客戶端。省的下面重複安裝。192.168.1.238上不需要安裝fuse,所以編譯選項中不需要加入--enable-mfsmount參數。

Mfsmount需要依賴FUSE,因此需要先安裝好fuse,這裏我選用 fuse-2.8.4.tar.gz

Fuse下載地址:http://heanet.dl.sourceforge.net/project/fuse/fuse-2.X/

1、解包 tar zxvf fuse-2.8.4.tar.gz

2、切換目錄 cd fuse-2.8.4

3、配置 ./configure

4、編譯安裝 makemake install

如果系統已經安裝了fuse,則跳過這個步驟。

安裝MFS客戶端程序

1、修改環境變量文件/etc/profile ,追加下面的行,然後再執行命令source /etc/profile使修改生效。

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

一個MFS環境到底能集羣多少服務器,最好3臺以上;並且專門用來做存儲。因爲每個數據存儲服務器的安裝和配置都是相同的,所以只需按照一個服務器的操作就可以了。

(一)、安裝數據存儲服務器chunkserver

1、下載mfs安裝包

2、解包 tar -zxvf moosefs-2.0.72-1.tar.gz

3、切換目錄 cd moosefs-2.0.72

4、創建用戶 useradd mfs -s /sbin/nologin

5配置./configure --prefix=/usr/local/mfs --with-default-user=mfs--with-default-group=mfs --enable-mfsmount  --disable-mfsmaster

6、編譯安裝 make ; make install

(二)配置數據存儲服務器chunkserver

數據存儲服務器有2個配置需要修改,一個是主配置文件mfschunkserver.cfg ,另一個配置文件是 mfshdd.cfg。每個服務器用來分配給 MFS使用的空間最好是一個單獨的硬盤或者一個raid卷,最低要求是一個分區。作者舉的例子是創建一個大文件,然後掛接在本地,這不是個好主意,只能用來做實驗了。

1、修改配置文件 /usr/local/mfs/etc/mfschunkserver.cfg。下面是修改了的配置文件:

# WORKING_USER = mfs

# WORKING_GROUP = mfs

#SYSLOG_IDENT = mfschunkserver       chunkserversyslog中的標識,說明是chunkserver產生

# LOCK_MEMORY = 0

# NICE_LEVEL = -19

 

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

 

# MASTER_RECONNECTION_DELAY = 5

 

# BIND_HOST = *本地地址用於主連接(默認是*,即默認本地地址)

 

MASTER_HOST = 192.168.1.239

MASTER_PORT = 9420

# WORKERS_MAX = 150    # WORKERS_MAX_IDLE = 40  最大數量的活躍值和閒置的的最大數量

# MASTER_TIMEOUT = 60    連接MASTER的超時時間

# CSSERV_LISTEN_HOST = *      數據複製服務器地址

# CSSERV_LISTEN_PORT = 9422

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

# HDD_TEST_FREQ = 10    循環測試連接時間

    # HDD_LEAVE_SPACE_DEFAULT = 256MiB  chunkserver硬盤保留的默認空間

# IP address to listen for client (mount)connections (* means any)

# CSSERV_LISTEN_HOST = *

 

# CSSERV_LISTEN_PORT = 9422  監聽客戶端連接端口

# MASTER_TIMEOUT = 10

 

這個配置文件裏,沒有註釋符號“#”就是被修改過的項了,

2、修改配置文件/usr/local/mfs/etc/mfshdd.cfg。爲了使mfs擁有寫目錄的權限,需要修改目錄的屬主。我的服務器的分區掛接點是/databak/chunkserverdata/ , chown -Rmfs:mfs /databak/chunkserverdata/ 把屬主改變。因爲我的每個服務器只需貢獻一個分區做爲MFS,因此配置文件只需要如下一行內容就可以了:

這裏我們指定chunkserver存儲空間大小:

/databak/chunkserverdata/ 440GiB   就是chunkserver這個機器真實存在的目錄

這個文件默認情況下有好幾行,有好幾種空間配置方式:

  • /mnt/hd1   hd1下所有的可用空間作爲存儲

  • */mnt/hd2   指定這個盤爲故障盤

  • /mnt/hd3 -5GiB 使用整塊硬盤,但是最大保留5GiB的可用空間

  • /mnt/hd4 1.5TiB 使用整塊硬盤,但是分配給chunkserver1.5TiB

(三)啓動數據存儲服務器chunkserver

在數據存儲服務器chunkserver執行命令/usr/local/mfs/sbin/mfschunkserver start 啓動數據存儲守護進程.通過以下幾種方式來檢查chunkserver的運行狀態.

1查看進程 ps aux | grep mfschunkserver

2查看網絡狀態,正常情況下應該看見9422處於監聽狀態,如果有其他數據存儲服務器chunkserver在同一個元數據服務器master管理下運行的話,應該能看見其他chunkserver跟本機的連接情況:netstat -ant

3,查看元數據服務器的系統日誌,可以看見新增的數據存儲服務器chunkserver被加入。tail -f /var/log/messages

spacer.gif

(四)關閉數據存儲服務器

跟元數據服務器master相似,執行命令/usr/local/mfs/sbin/mfschunkserver stop , chunkserver服務就停下來了。爲了使系統重啓過程能自動啓動chunkserver 服務,可以通過在/etc/rc.local文件追加行 /usr/local/mfs/sbin/mfschunkserver start 來達到這個目的(master的自動重啓處理也可同樣處理)。

1.1.4mfsclient客戶端的安裝及配置

一、 MFS的客戶端安裝

(一)安裝MFS客戶端

我們上面已經安裝了兩個客戶端了,下面只給(後端TOMCAT1192.168.1.233和(後端TOMCAT2192.168.1.234安裝fuse就可以了。

注意:使用mfsmount必須安裝FUSE模塊,全稱filesystem-userspace,如果系統內核版本低於2.6.20,會無法加載fuse.ko的模塊,那麼這就需要編譯升級內核。

Mfsmount需要依賴FUSE,因此需要先安裝好fuse,這裏我選用 fuse-2.8.4.tar.gz

Fuse下載地址:http://heanet.dl.sourceforge.net/project/fuse/fuse-2.X/

1、解包 tar zxvf fuse-2.8.4.tar.gz

2、切換目錄 cd fuse-2.8.4

3、配置 ./configure

4、編譯安裝 makemake install

如果系統已經安裝了fuse,則跳過這個步驟。

安裝MFS客戶端程序

1、修改環境變量文件/etc/profile ,追加下面的行,然後再執行命令source /etc/profile使修改生效。

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

如果不執行這個操作,在後面安裝MFS的過程中,執行命令

./configure--enable-mfsmount時可能出現"checking forFUSE... no  configure: error: mfsmountbuild was forced, but fuse development package is not installed"這樣的錯誤,而不能正確安裝MFS客戶端程序。

2、解包 tar zxvf moosefs-2.0.72-1.tar.gz

3、切換目錄 cd mfs-2.0.72

4、創建用戶 useradd mfs -s /sbin/nologin

5、配置 ./configure--prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs--enable-mfsmount

6、編譯安裝 make ; make install

檢查MFS客戶端安裝的結果。通過查看目錄/usr/local/mfs/bin目錄的文件,應該發現如下文件:[root@localhostnmxxt /]# ll/usr/local/mfs/bin/

total560

lrwxrwxrwx1 mfs mfs      8 May 13 17:44mfsappendchunks -> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44mfscheckfile -> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44 mfsdeleattr-> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44 mfsdirinfo-> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44 mfsfileinfo-> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44mfsfilerepair -> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44 mfsgeteattr -> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44 mfsgetgoal-> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44mfsgettrashtime -> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44mfsmakesnapshot -> mfstools

-rwxr-xr-x1 mfs mfs 385463 May 13 17:44 mfsmount

lrwxrwxrwx1 mfs mfs      8 May 13 17:44 mfsrgetgoal-> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44mfsrgettrashtime -> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44 mfsrsetgoal-> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44mfsrsettrashtime -> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44 mfsseteattr-> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44 mfssetgoal-> mfstools

lrwxrwxrwx1 mfs mfs      8 May 13 17:44mfssettrashtime -> mfstools

-rwxr-xr-x1 mfs mfs    137 May 13 17:44 mfssnapshot

-rwxr-xr-x1 mfs mfs 171919 May 13 17:44 mfstools

二、掛接和使用MFS文件系統

1、創建掛接點 mkdir /usr/xxtsrc/mfs

2、掛接MFS /usr/local/mfs/bin/mfsmount /mnt/mfs-H 192.168.1.237.注意,所有的MFS都是掛接同一個元數據服務器master,而不是其他數據存儲服務器chunkserver !

[root@localhostmnt]# /usr/local/mfs/bin/mfsmount -H 192.168.1.237 /usr/xxtsrc/mfs

mfsmasteraccepted connection with parameters: read-write,restricted_ip ; root mapped toroot:root

3、通過使用df -h查看磁盤使用情況來檢查是否被掛接成功。下圖是掛接的虛擬VIP地址

spacer.gif

三、掛接和使用meta文件系統(垃圾箱)

1CLIENT端掛載MFS

首先需要說明一下mfsmount的常用的參數:

-H    masterIP地址

-P    客戶端掛接master端的端口(如果master端的掛接端口已經改變)

-p    客戶端掛接master需要的密碼,該密碼在master端的mfsexports.cfg文件中。

-S    掛載MASTER端根目錄下的子目錄,前提是必須通過掛載根目錄後,創建相應的子目錄,纔可以掛載

-m    用於掛載mfsmeta文件系統,配合垃圾箱功能使用,默認掛載點是/mnt/mfsmeta該目錄沒有,需要自己創建。

-w    用於改變默認掛載點。

具體使用方法:

1: /usr/local/mfs/bin/mfsmount /usr/xxtsrc/mfs -H 192.168.1.237 -p

2: /usr/local/mfs/bin/mfsmount /usr/xxtsrc/mfs -H 192.168.1.237 -S /test -p

3: /usr/local/mfs/bin/mfsmount  /usr/xxtsrc mfsmeta -H192.168.1.237 -p –m

4: /usr/local/mfs/bin/mfsmount -w /usr/xxtsrc/mfsmeta-test  -H192.168.1.237 -p -m

2、垃圾箱恢復意外刪除的文件

通過加入-m這個參數掛載mfsmeta文件系統時,必須在MASTER端的mfsexports.cfg裏,必須打開如下內容的註釋:

例如我的mfsexports.cfg配置文件是這樣的

192.168.1.0/24           .       rw

192.168.1.0/24          /       rw,alldirs,maproot=0

在客戶端直接執行

/usr/local/mfs/bin/mfsmount /usr/xxtsrc/mfsmeta -H 192.168.1.237 -m

注意:

  1. a)        /usr/xxtsrc/mfsmeta這個目錄不需要執行chown -R mfs.mfs,直接在ROOT用戶下創建該目錄即可

  2. b)       在這個目錄下進行恢復意外刪除文件的時候,必須使用ROOT賬戶進行操作。

  3. c)        原來的位置下不能有一個已存在的與被刪文件同名的文件,否則恢復不會成功。

  4. d)       用一個-m的選項這樣可以掛接一個輔助的文件系統MFSMETA,這麼做的目的是對於意外的從MooseFS捲上刪除文件或者是爲了釋放磁盤空間而移動的文件

進行恢復。使用該命令後只是執行了恢復性的操作,並不是客戶端掛接master的操作,這個點要分清。

恢復具體流程

  1. a)      執行完上述命令後,會在/mnt/mfsmeta生成reservedtrash 出現這兩個目錄

  2. b)     trash下,有一個undel的目錄,還有一些被刪除的816進制命名的目錄,並且以"|"作爲目錄符號,再加上被刪除文件名字。(如果文件名字大於系統支持的255最大長度時,將從左到右進行裁剪,直到滿足255

規則:00000009|11代表刪除的文件。

0000002E|123|txt 代表123目錄下txt文件,如果123目錄被一起刪除,恢復的時候123這個目錄也會被一同恢復出來。

  1. c)      如果想恢復文件,把00000009|1該文件移動到/mnt/mfsmeta/trash/undel下,文件即可恢復。

  2. d)     reserved這個目錄的作用是針對那些已被徹底刪除但目前正被打開着的文件。

3、垃圾箱相關設定

垃圾箱文件保留期默認是1天,86400

查看垃圾箱保留期時間

/usr/local/mfs/bin/mfsgettrashtime/mnt/mfs

執行效果:

/mnt/mfs: 86400

/usr/local/mfs/bin/mfssettrashtime

設置垃圾箱保留期

/usr/local/mfs/bin/mfssettrashtime3600 /mnt/mfs

執行效果:

/mnt/mfs:

inodes with trashtime changed:                        3

inodes with trashtime not changed:                    0

inodes with permission denied:                        0

參數說明:

-r 表示遞歸修改這個目錄下所有文件屬性,不帶-r表示修改本級目錄。

如果將時間設置爲0,表示不啓用垃圾箱功能。

查看文件設置拷貝份數

/usr/local/mfs/bin/mfsgetgoal/mnt/mfs/123/123

執行效果

/mnt/mfs/123/123: 2

查看文件拷貝具體信息

/usr/local/mfs/bin/mfscheckfile /mnt/mfs/123/123

執行效果

   /mnt/mfs/123/123:

2 copies: 1 chunks

查看文件拷貝具體信息

/usr/local/mfs/bin/mfsfileinfo/mnt/mfs/123/123

執行效果

/mnt/mfs/123/123:

 chunk 0:000000000000001D_00000001 / (id:29 ver:1)

      copy 1:192.168.1.1:9422

          copy 2:192.168.9.5:9422

注:

  1. a)      一個文件數據長度爲零,並且也沒有對此文件設置爲0份拷貝的時候,這個文件查看拷貝信息的時候,會出現如下:/mnt/mfs/123/123:(通俗一點說,就是空文件無法獲取到信息的。

 

查看目錄具體信息,等同於du  -sh

/usr/local/mfs/bin/mfsdirinfo/mnt/mfs

執行效果

/mnt/mfs:

 inodes:                         3              文件總數

 directories:                    2          目錄數

 files:                          1        文件數

chunks:                         1             塊數

 length:                         31            文件大小總和

 size:                        70656            塊長度總和

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

 

設置文件拷貝份數

       /usr/local/mfs/bin/mfssetgoal 2/mnt/mfs

       執行效果

       /mnt/mfs:

 inodes with goal changed:                        3

 inodes with goalnot changed:                     0

 inodes withpermission denied:                    0

 

參數說明

-r 表示遞歸修改這個目錄下所有文件屬性,不帶-r表示修改本級目錄。

注:

  1. a)      拷貝份數儘量和chunkserver這個服務的數量保持一致,比較易於管理,數據額安全性也得到保障。

  2. b)     上面這個命令產生的效果是:改變當前目錄的屬性,如果當前目錄下已經存在一些文件,這些已存在文件的拷貝屬性不會發生變化,只有新建的文件纔會按照新的拷貝屬性進行復制。

  3. c)      遞歸修改這個目錄下所有文件的拷貝份數屬性後,所有文件的拷貝份數的變化需要一定的時間纔會發生變化。

 

Client端大文件傳輸過程中,強制拔下master主機電源,造成master非法關閉,使用mfsmaster -a修復後,master日誌報告有壞塊:

Jan 19 17:22:17 ngmaster mfsmaster[3250]: chunkserver hasnonexistent chunk (000000000002139F_00000001), so create it for future deletion

Jan 19 17:22:18 ngmaster mfsmaster[3250]:(192.168.5.232:9422) chunk: 000000000002139F creation status: 20

Jan 19 17:25:18 ngmaster mfsmaster[3250]: chunk000000000002139F has only invalid copies (1) - please repair it manually

Jan 19 17:25:18 ngmaster mfsmaster[3250]: chunk000000000002139F_00000001 - invalid copy on (192.168.5.232 - ver:00000000)

Jan 19 17:26:43 ngmaster mfsmaster[3250]: currentlyunavailable chunk 000000000002139F (inode: 135845 ; index: 23)

Jan 19 17:26:43 ngmaster mfsmaster[3250]: * currentlyunavailable file 135845: blog.xxx.cn-access_log200904.tar.gz

Client端使用mfsfilerepair修復

/usr/local/mfs/bin/mfsfilerepairblog.xxx.cn-access_log200904.tar.gz

blog.xxt.cn-access_log200904.tar.gz:

chunks not changed: 23

chunks erased: 1

chunks repaired: 0

查看master日誌,發現:

Jan 19 17:30:17 ngmaster mfsmaster[3250]: chunk hasn'tbeen deleted since previous loop - retry

Jan 19 17:30:17 ngmaster mfsmaster[3250]:(192.168.5.232:9422) chunk: 000000000002139F deletion status: 13

Jan 19 17:35:16 ngmaster mfsmaster[3250]: chunk hasn'tbeen deleted since previous loop - retry

Jan 19 17:35:16 ngmaster mfsmaster[3250]:(192.168.5.232:9422) chunk: 000000000002139F deletion status: 13

Client端執行以下操作後,master不再報告相關信息:

mv blog.xxt.cn-access_log200904.tar.gzblog.xxt.cn-access_log200905.tar.gz

 

1、快照

mfsmakesnapshot

       /usr/local/mfs/bin/mfsmakesnapshot/mnt/mfs/123/tmp2  /mnt/mfs/111/

此命令是一個CP的過程,會自動將tmp2這個文件cp111目錄下。也可以針對一個目錄來操作。

mfsappendchunks

/usr/local/mfs/bin/mfsappendchunks/mnt/mfs/111/shot/mnt/mfs/123/123 /mnt/mfs/123/tmp2

1個以上的源文件做成一個包,這裏是將123tmp2這兩個文件的塊追加到shot的塊文件中。

注:

源和目標必須都屬於mfs體系,即不能將mfs體系中的文件快照到其他文件系統。

1.2mfs子系統測試

破壞性測試

一、測試數據存儲服務器

我用5個服務器組成了MFS的存儲平臺,其中一個是master,其餘四個服務器是chunkserver.先停止一個chunkserver服務,然後在某個MFS客戶端往掛接點的目錄(/mnt/mfs)裏複製數據或者創建目錄/文件、或者讀取文件、或者刪除文件,觀察操作是否能正常進行。再停止第2chunkserver,重複執行上述操作;然後再停止第3個服務器,執行類似的文件讀些操作。減少chunkserver試驗後,我們再來逐步增加chunkserver服務器,然後對MFS執行讀寫等相關訪問操作,檢驗其正確性。

通過增減chunkserver服務器的測試,服務的可靠性確實不錯,哪怕只剩下最後一個服務器,也能正常提供存儲訪問服務。

二、測試元數據服務器

元數據服務器最重要的文件在目錄 /usr/local/mfs/var/mfs ,MFS每一個數據的變化,都被記錄在這個目錄的文件裏,我們可以通過備份這個目錄的全部文件,來保障整個MFS文件系統的可靠性.在正常情況下,元數據服務器的改變日誌文件(changelogs) 實時地、自動地複製到所有的數據存儲服務器,並且以changelog.*.mfs的形式命名。換句換說,即使元數據服務器報廢了,也能再部署一個元數據服務器,然後從數據存儲服務器chunkserver取得恢復所需要的文件。

(一)本地測試

1、停止元數據服務 /usr/local/mfs/sbin/mfsmaster stop

2、備份元數據服務器數據 cd /usr/local/mfs/var;  tar -czvf mfs.tgz mfs

3、刪除目錄 mv mfs mfs.bk rm –rf mfs

4、啓動元數據服務 ../sbin/mfsmaster start 啓動失敗,提示不能初始化數據。

5、解包 tar zxvf mfs.tgz

6、執行恢復啓動操作 .. /sbin/mfsmaster  -a

8、在MFS客戶端檢查MFS存儲的數據是否跟恢復前一致?能否正常訪問等等。

(二)遷移測試

1安裝新的MFS元數據服務器。

2從當前的元數據服器(master)或日誌備份服務器(mfsmetalogger)複製備份文件 metadata.mfs.back到新的元服務器目錄(metadata.mfs.back需要定時備份).

3從當前的元數據服器(master)或日誌備份服務器(mfsmetalogger)複製元數據服務器數據目錄(/usr/local/mfs/var/mfs)到這個新的元數據服務器。

4停止原先的那個元數據服務器(關閉計算機或停止它的網絡服務)。

5更改新的元數據服務器的ip爲原來那個服務器的ip.

6執行數據恢復啓動操作,其命令爲:mfsmaster -a

8MFS客戶端檢查MFS存儲的數據是否跟恢復前一致?能否正常訪問等等。

1.3mfsclient讀寫測試

這塊的誤差受局域網硬件和網絡的影響,在測試環境中,效果不太理想,基本是用dd命令執行寫入的

測試寫入:

timedd if=/dev/zero of=/mnt/mfs/1.img bs=1M count=5000

5242880000bytes (5.2 GB) copied, 70.9792 seconds, 73.9 MB/s

timedd if=/dev/zero of=/mnt/mfs/1.img bs=100K count=10000

1024000000bytes (1.0 GB) copied, 12.9659 seconds, 79.0 MB/s

測試讀取:

timedd if=/mnt/mfs/1.old of=/dev/null

5242880000bytes (5.2 GB) copied, 35.99 seconds, 146 MB/s

同時測試讀寫:

timedd if=/mnt/mfs/1.img of=/mnt/mfs/1.old  bs=1M

102400000bytes (102 MB) copied, 1.39368 seconds, 73.5 MB/s

測試刪除:

timerm –rf *

real    0m0.828s

user    0m0.000s

sys     0m0.788s


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