1、 分佈式文件系統mfs(moose file system)
1.1、mfs文件系統的組成
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-M)192.168.1.134
(前端NGINX-S)192.168.1.36
(文件服務器NEW-WEB)192.168.1.238
Mfs客戶端:(後端TOMCAT1)192.168.1.233
(後端TOMCAT2)192.168.1.234
(前端NGINX-M)192.168.1.134
(前端NGINX-S)192.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.237和192.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,
首先我們獲取moosefs的rpm-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.72的yum源:
# 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
啓動mfsmaster和mfschunkserver:
# 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.cfg及mfsexports.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 數據存放路徑,此目錄下大致有三類文件,changelog,sessions和stats;三種類型文件。
#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種類型的文件:
(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的運行狀況:
先看啓動過程:
查看master系統日誌tail -f /var/log/messages
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 元數據日誌服務運行時,在系統日誌輸出的標識,下面給出一段系統日誌:
(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-M)192.168.1.134和(前端NGINX-S)192.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、編譯安裝 make;make 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 chunkserver在syslog中的標識,說明是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
(四)關閉數據存儲服務器
跟元數據服務器master相似,執行命令/usr/local/mfs/sbin/mfschunkserver stop , chunkserver服務就停下來了。爲了使系統重啓過程能自動啓動chunkserver 服務,可以通過在/etc/rc.local文件追加行 /usr/local/mfs/sbin/mfschunkserver start 來達到這個目的(master的自動重啓處理也可同樣處理)。
1.1.4、mfsclient客戶端的安裝及配置
一、 MFS的客戶端安裝
(一)安裝MFS客戶端
我們上面已經安裝了兩個客戶端了,下面只給(後端TOMCAT1)192.168.1.233和(後端TOMCAT2)192.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、編譯安裝 make;make 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地址
三、掛接和使用meta文件系統(垃圾箱)
首先需要說明一下mfsmount的常用的參數:
-H master的IP地址
-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
注意:
a) /usr/xxtsrc/mfsmeta這個目錄不需要執行chown -R mfs.mfs,直接在ROOT用戶下創建該目錄即可
b) 在這個目錄下進行恢復意外刪除文件的時候,必須使用ROOT賬戶進行操作。
c) 原來的位置下不能有一個已存在的與被刪文件同名的文件,否則恢復不會成功。
d) 用一個-m的選項這樣可以掛接一個輔助的文件系統MFSMETA,這麼做的目的是對於意外的從MooseFS捲上刪除文件或者是爲了釋放磁盤空間而移動的文件
進行恢復。使用該命令後只是執行了恢復性的操作,並不是客戶端掛接master的操作,這個點要分清。
恢復具體流程
a) 執行完上述命令後,會在/mnt/mfsmeta生成reserved和trash 出現這兩個目錄
b) 在trash下,有一個undel的目錄,還有一些被刪除的以8位16進制命名的目錄,並且以"|"作爲目錄符號,再加上被刪除文件名字。(如果文件名字大於系統支持的255最大長度時,將從左到右進行裁剪,直到滿足255)
規則:00000009|1,1代表刪除的文件。
0000002E|123|txt 代表123目錄下txt文件,如果123目錄被一起刪除,恢復的時候123這個目錄也會被一同恢復出來。
c) 如果想恢復文件,把00000009|1該文件移動到/mnt/mfsmeta/trash/undel下,文件即可恢復。
d) reserved這個目錄的作用是針對那些已被徹底刪除但目前正被打開着的文件。
垃圾箱文件保留期默認是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
注:
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表示修改本級目錄。
注:
a) 拷貝份數儘量和chunkserver這個服務的數量保持一致,比較易於管理,數據額安全性也得到保障。
b) 上面這個命令產生的效果是:改變當前目錄的屬性,如果當前目錄下已經存在一些文件,這些已存在文件的拷貝屬性不會發生變化,只有新建的文件纔會按照新的拷貝屬性進行復制。
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
/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
/usr/local/mfs/bin/mfsmakesnapshot/mnt/mfs/123/tmp2 /mnt/mfs/111/
此命令是一個CP的過程,會自動將tmp2這個文件cp到111目錄下。也可以針對一個目錄來操作。
/usr/local/mfs/bin/mfsappendchunks/mnt/mfs/111/shot/mnt/mfs/123/123 /mnt/mfs/123/tmp2
將1個以上的源文件做成一個包,這裏是將123和tmp2這兩個文件的塊追加到shot的塊文件中。
注:
源和目標必須都屬於mfs體系,即不能將mfs體系中的文件快照到其他文件系統。
1.2、mfs子系統測試
破壞性測試
一、測試數據存儲服務器
我用5個服務器組成了MFS的存儲平臺,其中一個是master,其餘四個服務器是chunkserver.先停止一個chunkserver服務,然後在某個MFS客戶端往掛接點的目錄(/mnt/mfs)裏複製數據或者創建目錄/文件、或者讀取文件、或者刪除文件,觀察操作是否能正常進行。再停止第2個chunkserver,重複執行上述操作;然後再停止第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
8、在MFS客戶端檢查MFS存儲的數據是否跟恢復前一致?能否正常訪問等等。
1.3、mfsclient讀寫測試
這塊的誤差受局域網硬件和網絡的影響,在測試環境中,效果不太理想,基本是用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