歡迎您光臨本站 註冊首頁

moosefs分散式文件系統實施配置方案

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

基於linux下分散式文件系統方案 前言 現在有大量的企業採用共享存儲伺服器NFS的方式,來對應用數據進行網路存儲,但這存在性能瓶頸和單點故障的問題,於是分散式文件存儲管理系統開始流行起來.其優點是不言而喻的,以下介紹的是分散式文件系統MFS,相信對大家有所幫助. 隨著公司業務量的增加,相關的業務數據也隨著成倍的增加.相應的機器存儲空間不足的問題就成為目前一個比較突出的問題,隨之而來的備份亦成為一個很為頭痛的問題.公司雖然有幾台大容量的計算機可用來存放相關數據,但其位置位於各個機房,一時較難以組織,即使將其組織起來只能滿足在一段時間內的存儲需求,這個需要利用多台伺服器上空閑空間加以組織利用,以提供更大的磁碟空間.目前絕大多數業務系統採用NFS文件共享的方式來解決文件惟一性的問題,這種方法在規模較小、訪問量低的時候還可以;隨著量(訪問及文件數目)的增加,這種共享架構顯得有些力不從心了,性能與用戶體驗會有不小的下降.除此之外,還要努力保證這台NFS伺服器不能宕機,所有靠共享提供數據的應用就不再可用.基於這樣一種需求,我們需要對NFS伺服器進行優化或採取別的解決方案,然而優化並不能對應對日益增多的客戶端的性能要求,因此只能是採取別的解決方案了.分散式文件系統是一個比較合適的選擇,採用分散式文件系統后,伺服器之間的數據訪問不再是一對多的關係(1個NFS伺服器,多個NFS客戶端),而是多對多的關係,這樣一來,性能大幅提升毫無問題,同時可靠性也高了許多.

Moose File System是一個具備容錯功能的網路分散式文件系統,它將數據分佈在網路中的不同伺服器上,MooseFS通過 FUSE 使之看起來就是一個 Unix 的文件系統. 以下是使用mfs共享的網路拓撲圖: 關於分散式文件系統MFS 之所以選擇了moosefs(以下簡稱MFS)這種分散式文件系統來作為我的共享存儲伺服器.為什麼要選它呢? 1. 安裝簡單方便(易用性). MFS的安裝、部署、配置相對於其他幾種工具來說,要簡單和容易得多. 2.擴容方便(高可靠性). MFS框架做好后隨時增加伺服器擴充容量;擴充和減少容量皆不會影響現有的

服務. 3.管理方便(可操作性).你可以很方便的動態調整集群運行參數,即時生效而不用重啟服務! 4.恢復服務容易.除了MFS本身具備高可用特性外,手動恢復服務也是非常快捷的. MFS特性 ★ 高可靠性(數據能被分成幾個副本存儲在不同的計算機里) ★ 通過增加計算機或增加新的硬碟動態擴充可用磁碟空間 ★ 可以設置刪除文件的空間回收時間 mfs系統的組成部分: 1、元數據伺服器.在整個體系中負責管理管理文件系統,目前MFS只支持一個元數據伺服器master,這是一個單點故障,需要一個性能穩定的伺服器來充當.希望今後MFS能支持多個master伺服器,進一步提高系統的可靠性.

2、數據存儲伺服器chunkserver.真正存儲用戶數據的伺服器,存儲文件時,把文件分成塊,然後這些塊在數據伺服器chunkserver之間複製,數據伺服器可以是多個,並且數量越多,可使用的"磁碟空間"越小,可靠性也越高. 3、客戶端.使用MFS文件系統來存儲和訪問的主機稱為MFS的客戶端,成功掛接MFS文件系統以後,就可以像以前使用NFS一樣共享這個虛擬性的存儲了. 元數據日誌伺服器 4.Metalogger server(Metalogger).負責備份master 伺服器的變化日誌文件,文件類型為changelog_ml.*.mfs ,以便於在master server 出問題的時候接替其進行工作. 以下是mfs的官方示意圖: 以下是具體得安裝步驟 主控伺服器Master server 安裝 當我們安裝主控伺服器時,在配置過程中

(./configure),可以取消安裝chunk server --disable-mfschunkserver)以及MooseFS 客戶端(--disable-mfsmount. 安裝 主控伺服器master 的具體步驟為: 1、添加mfs #groupadd mfs 2、新增系統用戶mfs #useradd -g mfs mfs 3

、切換目錄 #cd /usr/src 4、解包歸檔文件 #tar -zxvf mfs-1.6.15.tar.gz 5、進入安裝目錄 #cd mfs-1.6.15 6、配置 #./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/lib --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount 7、編譯並安裝 #make #make install 成功安裝master 以後,系統會在/etc 目錄自動生成樣例配置文件,這些樣例文件是以.dist後綴命名.這裡我們將借用這些樣例文件作為

MooseFS 主控伺服器的目標配置文件: 1、切換目錄 #cd /etc 2、複製樣例文件,以得到master 所需的配置文件 #cp mfsmaster.cfg.dist mfsmaster.cfg #cp mfsmetalogger.cfg.dist mfsmetalogger.cfg #cp mfsexports.cfg.dist mfsexports.cfg 如果我們打算更改這些配置文件中的某些項目的值,則需要打開特定配置文件相關文本行前的註釋,然後修改跟隨其後的值.被註釋掉的行,即是MooseFS 內置的預設值. [[email protected] etc]# cp mfsmaster.cfg.dist mfsmaster.cfg [[email protected] etc]# vi 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; 注意: 進程必須是用root啟動) # EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg 被掛接目錄及其許可權控制文件的存放位置 # DATA_PATH = /usr/local/mfs/var/mfs 數據存放路徑,此目錄下大致有三類文件,changelog,sessions和stats; # BACK_LOGS = 50 metadata 的改變log 文件數目(默認是50); # 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); # MATOCU_LISTEN_HOST = * 用於客戶端掛接連接的IP 地址(默認是*,代表任何IP); # MATOCU_LISTEN_PORT = 9421 用於客戶端掛接連接的埠地址(默認是9421); # CHUNKS_LOOP_TIME = 300 chunks 的迴環頻率(默認是:300 秒); 註:原文為Chunks loop frequency in seconds (default is 300) # CHUNKS_DEL_LIMIT = 100 # CHUNKS_WRITE_REP_LIMIT = 1 在一個循環里複製到一個chunkserver 的最大chunk數目(默認是1) # CHUNKS_READ_REP_LIMIT = 5 在一個循環里從一個chunkserver 複製的最大chunk數目(默認是5)

# REJECT_OLD_CLIENTS = 0 彈出低於1.6.0 的客戶端掛接(0 或1,默認是0) 注意mfsexports 訪問控制對於那些老客戶是沒用的 需要注意的是,凡是用#註釋掉的變數均使用其默認值. 以上是對master server 的mfsmaster.cfg 配置文件的解釋,對於這個文件不需要做任何修改就可以工作. 配置文件mfsexports.cfg 指定那些客戶端主機可以遠程掛接MooseFS 文件系統,以及授予掛接客戶端什麼樣的訪問許可權.例如,我們指定只有192.168.2.x 網段的主機可以以讀寫模式訪問MooseFS 的整個共享結構資源(/).在配置文件mfsexports.cfg 文件的第一行,先取消註釋,然後把星號(*)改成192.168.2.0/24,以便我們可以得到下面的文本行: 192.168.2.0/24 / rw,alldirs,maproot=0 [[email protected] 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 指定客戶端密碼 二進位文件metadata 和文本文件changelog 將被保存在目錄/var/lib/mfs,這是我們安裝過程的configure 步驟使用了選項 --localstatedir=/var/lib .首次安裝master 時,會自動生成一個名為metadata.mfs.empty 的元數據文件metadata,該文件是空的.MooseFSmaster 運必須有文件metadata.mfs,這個文件是從metadata.mfs.empty 改名而來: 1、切換目錄 #cd /var/lib/mfs 2、重命名文件 #cp metadata.mfs.empty metadata.mfs

[譯者注]MooseFS master 運行以後,metadata.mfs 文件大小將發生變化,肯定不會是 空文件了. 這個時候,我們可以試著運行master 服務(服務將以安裝配置configure 指定的用戶運行,這我們的案例里,它是mfs): #/usr/sbin/mfsmaster start 在一個生產環境里,我們應當設置自動啟動腳本,以便操作系統重新啟動時,MooseFS master也能自動運行. 為了監控MooseFS 當前運行狀態,我們可以運行CGI 監控服務,這樣就可以用瀏覽器查看整個MooseFS 的運行情況: #/usr/sbin/mfscgiserv 現在,我們在瀏覽器地址欄輸入http://ip地址:9425 即可查看master 的運行情況(這個時候,是不能看見chunk server 的數據). 可通過命令檢查如下: [[email protected] etc]# ps -ef|grep mfs mfs 12327 1 0 08:38 ? 00:00:00 /usr/local/mfs/sbin/mfsmaster start 停止master server 安全停止master server 是非常必要的,最好不要用kill.利用mfsmaster –s 來安全停止master serve. 備份伺服器Backup server (metalogger) 安裝

用來安裝metalogger 的主機,在性能上應該比master 強大(至少有更多的內存).一旦主控伺服器master 失效,只要導入changelogs 到元數據文件,備份伺服器metalogger 將能接替發生故障的master,行使管理伺服器的職能. 備份伺服器Metalogger 安裝跟主控伺服器master 安裝非常類似.其安裝命令如下: 1、 創建組mfs #groupadd mfs 2、創建用戶mfs #useradd -g mfs mfs 3、切換目錄 #cd /usr/src 4、解包歸檔文件 #tar -zxvf mfs-1.6.15.tar.gz 5、切換目錄 #cd mfs-1.6.15 6、配置 #./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/lib --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount

7、編譯及安裝 #make #make install 8、產生配置文件 #cd /etc #cp mfsmetalogger.cfg.dist mfsmetalogger.cfg 該服務只有一個配置文件,那就是mfsmetalogger.cfg. [[email protected] etc]# vi 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.3.34 # MASTER_PORT = 9419 # MASTER_TIMEOUT = 60 # deprecated, to be removed in MooseFS 1.7 # LOCK_FILE = /var/run/mfs/mfsmetalogger.lock 這個文件中需要修改的是MASTER_HOST 變數,這個變數的值是master server 的IP 地址. 現在,我們來試著運行備份服務mfsmetaloger: #/usr/sbin/mfsmetalogger start [[email protected] sbin]# ./mfsmetalogger start working directory: /usr/local/mfs/var/mfs lockfile created and locked initializing mfsmetalogger modules ... mfsmetalogger daemon initialized properly 這說明metalogger 服務正常啟動了.利用命令檢查: 通過進程: [[email protected] sbin]# ps -ef |grepmfs mfs 12254 1 0 15:25 ? 00:00:00 ./mfschunkserver start

通過埠檢查: [[email protected] sbin]# lsof -i:9419 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME mfsmetalo 12292 mfs 7u IPv4 1395372 TCP mail.tt.com:52456->192.168.3.34:9419 (ESTABLISHED) 在一個生產環境里,我們應當設置自動啟動腳本,以便操作系統重新啟動時,MooseFS mfsmetalogger 服務也能自動運行. 查看日誌伺服器的工作目錄 [[email protected] mfs]# pwd /var//lib/mfs [[email protected] 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 小時后: [[email protected] mfs]# ll 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 停止metalogger服務 [[email protected] sbin]# ./mfsmetalogger -s working directory: /usr/local/mfs/var/mfs sending SIGTERM to lock owner (pid:12284) waiting for termination ... terminated 如果沒有啟動metalogger 服務,在master server 則會有如下提示信息產生: tail -f /var/log/messages Dec 30 16:53:00 nas mfsmaster[14291]: no meta loggers connected !!! 存儲塊伺服器Chunk servers 安裝 在每個chunk server 主機上執行下面的命令: #groupadd mfs #useradd -g mfs mfs #cd /usr/src #tar -zxvf mfs-1.6.15.tar.gz #cd mfs-1.6.15 6 #./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/lib --with-default-user=mfs

--with-default-group=mfs --disable-mfsmaster #make #make install 準備chunk server 服務所需的配置文件: #cd /etc/ #cp mfschunkserver.cfg.dist mfschunkserver.cfg #cp mfshdd.cfg.dist mfshdd.cfg mfschunkserver.cfg的配置 [[email protected] etc]# vi 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.3.34 元數據伺服器的名稱或地址,可以是主機名,也可以是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 使用的磁碟空間配置文件的位置 在配置文件mfshdd.cfg 中,我們給出了用於客戶端掛接MooseFS 分散式文件系統根分區所使用的共享空間位置.建議在chunk server 上劃分單獨的空間給 MooseFS 使用,這樣做的好處是便於管理剩餘空間.此處我們假定要使用兩個共享點/mnt/mfschunks1 和/mnt/mfschunks2,為此,我們在mfshdd.cfg 加入下面的文本行: /mnt/mfschunks1 /mnt/mfschunks2 在啟動chunk server 前,需確保用戶mfs 有許可權讀寫將要被掛接的分區(chunk server 運行時要在此創建一個.lock 的文件): #chown -R mfs:mfs /mnt/mfschunks1 #chown -R mfs:mfs /mnt/mfschunks2 啟動mfschunkserver #/usr/sbin/mfschunkserver start 檢查如下: [[email protected] etc]# ps -ef|grep mfs

mfs 12327 1 0 08:38 ? 00:00:00 /usr/local/mfs/sbin/ mfschunkserver start 停止mfschunkserver 停止mfschunkserver,利用mfschunkserver–s 來安全停止mfschunkserver. 現在再通過瀏覽器訪問 http://ip地址:9425/ 應該可以看見這個MooseFS 系統的全部信息,包括主控master 和存儲服務chunkserver . MFS客戶端的安裝及配置 為了掛接基於MooseFS 分散式文件,客戶端主機必須安裝FUSE 軟體包( fuse 版本號至少2.6,推薦使用版本號大於2.7.2 的fuse).如果系統沒有安裝fuse,你必須手動對其進行安裝.一種常見的安裝方式是從源碼進行編譯安裝: #cd /usr/src #tar -zxvf fuse-2.8.3.tar.gz #cd fuse-2.8.3 #./configure #make #make install 安裝客戶端軟體 mfsmount 的步驟: #groupadd mfs #useradd -g mfs mfs #cd /usr/src

#tar -zxvf mfs-1.6.15.tar.gz #cd mfs-1.6.15 #./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/lib --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver --enable-mfsmount #make #make install 注意: 在這個過程中,當執行到–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 掛接MFS文件系統 (1)、創建掛接點mkdir /mnt/mfs (2)、載入fuse 模塊到內核:modprobe fuse (3)、掛接MFS /usr/bin/mfsmount /mnt/mfs -H 192.168.3.34 -p 然後在輸入密碼就可以了. 特別需要注意的是,所有的MFS 都是掛接同一個元數據伺服器master 的IP,而不是其他數據存儲伺服器chunkserver 的IP. [email protected] 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

[[email protected] ~]# 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 MFS文件系統管理 編譯和安裝 MooseFS 部署的首選方法是從源代碼安裝,源代碼包安裝支持標準./configure && make && make install 的步驟,重要的配置選項有: --disable-mfsmaster 不創建成管理伺服器(用於純節點的安裝) --disable-mfschunkserver 不創建成數據存儲chunkserver 伺服器 --disable-mfsmount 不創建mfsmount 和m fstools(如果用開發包安裝,他們會被默認創建的) --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 用戶組

本文出自 「it民工」 博客,請務必保留此出處http://zyw1209.blog.51cto.com/1266169/580272


[火星人 ] moosefs分散式文件系統實施配置方案已經有750次圍觀

http://coctec.com/docs/linux/show-post-48343.html