MFS(MooseFS分佈式文件系統)
作者:張首富
時間:2020-05-22
w x:y18163201
MooseFS[MFS]是一個具有容錯性的網絡分佈式文件系統。它把數據分散存放在多個物理服務器上,而呈現給用戶的則是一個統一的資源。
官網地址:http://www.moosefs.com/
MFS簡介
MooseFS是一個具有容錯性,高可用,高性能,擴展性強的網絡分佈式文件系統,他將數據分佈在多個存儲服務器上,這些存儲服務器對用戶而言就是一塊虛擬磁盤,它符合POSIX並且像任何其他類UNIX文件系統一樣支持:
- 分層結構:文件和文件夾
- 文件屬性
- 特殊文件:
- 硬軟鏈接
- 安全控制和ACL
MooseFS pro企業級架構圖,我們使用的普通版,不具有下面的從服務器,不能直接使用它自帶的高可用,我們後面介紹另外一種高可用方式keepalive
<img src="/Users/zhumengyuan/Library/Application Support/typora-user-images/image-20200522104005363.png" alt="image-20200522104005363" style="zoom:189%;" />
MooseFS的優點:
- 高可用性:存儲節點(Chunk server)沒有單點故障,文件系統的元數據在物理冗餘服務器上保存爲兩個或多個副本,用戶數據冗餘冗餘分佈在系統的中存儲服務器上
- 低成本的數據安全:MooseFS使用戶能夠節省大量硬盤空間,保持相同的數據冗餘級別。
- 高性能性:支持高性能I/O操作,用戶數據可以才雨多存儲節點上同時讀取/寫入。
MooseFS文件系統的四種角色(roles)
-
管理服務器(managing server )master:
負責各個數據存儲服務器(chunk server)的管理,文件讀寫調度,文件空間回收以及恢復、多節點拷貝 -
元數據日誌服務器(Metalogger server)Metalogger:
負責備份master服務器的變化日誌文件,文件類型爲changelog_ml.*.mfs,以便於在master server出問題的時候接替其進行工作 -
數據存儲服務器(data server)chunk server:
聽從管理服務器調度,提供存儲空間,並未客戶端提供數據傳輸。真正存儲用戶數據的服務器。存儲文件時,首先把文件分成塊,然後這些塊在數據服務器chunkserver 之間複製(複製多少份可以被手工指定,建議設置爲3)。數據服務器可以是多個,並且數量越多,可以使用的“磁盤空間”越大,可靠性也越高 - 客戶機掛載使用 client computer :
掛載進程mfs服務器共享出的存儲並使用。通過fuse內核接口掛載進程管理服務器上所管理的數據存儲服務器共享出的硬盤。 共享的文件系統的用法和 nfs 相似。 使用 MFS 文件系統來存儲和訪問的主機稱爲 MFS 的客戶端,成功掛接 MFS 文件系統以後,就可以像以前使用 NFS 一樣共享這個虛擬性的存儲了。
MooseFS文件系統的工作流程
讀取文件的流程
1,客戶端向master server服務器詢問資源所在的位置
2,然後master server服務器返回資源在chunk server上所在的位置
3,客戶端拿着返回的地址去找資源,然後chunk server返回實際的資源
存儲數據的過程
1,客戶端告訴master server服務器他要存儲數據
2,然後master server端去查找chunk server上空閒的位置
3,如果chunk server上還有空閒的位置,就會返回給master server位置
4,然後master server返回給客戶端,然後客戶端拿着這個位置去存儲數據
5,chunk server把數據進行多分存儲,存儲完成之後會返回給客戶端,
6,然後斷開連接
安裝構建MooseFS
主機規劃
主機名 | 角色 | IP地址 |
---|---|---|
master_11 | Managing server | 10.0.0.11/24 |
node_1_12 | Metalogger server | 10.0.0.12/24 |
node_2_13 | chunk server 1 | 10.0.0.13/24 |
node_3_14 | chunk server 2 | 10.0.0.14/24 |
Node_4_15 | client computers | 10.0.0.15/24 |
環境準備
實驗所需要的主機都必須支持FUSE內核模塊,因爲mfs的客戶端程序也就是加載mfs磁盤系統的命令是使用了fuse,因此只要是想要掛在mfs的服務器,必要的前提條件就是先安裝fuse,這樣編譯mfs的時候才能通過
FUSE:用戶空間文件系統(Filesystem in Userspace)是操作系統中的概念,指完全在用戶態實現的文件系統,,注:2.6內核以上都自帶FUSE
- 所有的服務器採用:
centos 7.5
- 關閉selinux和IPtables
開始搭建
1)在所有的服務器添加yum源
curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo
sed -i "/^gpgcheck/c gpgcheck=0" /etc/yum.repos.d/MooseFS.repo
yum clean all
yum list
2) 在主服務器上安裝
[root@master_11 /]# yum install -y moosefs-master moosefs-cgi moosefs-cgiserv moosefs-cli
[root@master_11 /]# rpm -ql moosefs-master
/etc/mfs/mfsexports.cfg.sample
/etc/mfs/mfsmaster.cfg.sample
/etc/mfs/mfstopology.cfg.sample
3) 在metaloggers服務器上
[root@node_1_12 /]# yum install moosefs-metalogger -y
[root@node_1_12 /]# rpm -ql moosefs-metalogger
/etc/mfs/mfsmetalogger.cfg.sample
4) 在數據節點上chunk server
[root@node_2_13 monitor]# yum install moosefs-chunkserver -y
[root@node_3_14 monitor]# yum install moosefs-chunkserver -y
[root@node_2_13 monitor]# rpm -ql moosefs-chunkserver
/etc/mfs/mfschunkserver.cfg.sample
/etc/mfs/mfshdd.cfg.sample
5) 在客戶節點上安裝
[root@node_4_15 ~]# yum -y install moosefs-client
[root@node_4_15 ~]# rpm -ql moosefs-client
/etc/mfs/mfsmount.cfg.sample
6) 在master端修改共享出去的目錄和權限
[root@master_11 ~]# echo '10.0.0.0/24 /mfs_test rw,admin,maproot=0:0' >> /etc/mfs/mfsexports.cfg
[root@master_11 /]# systemctl start moosefs-master.service
[root@master_11 /]# systemctl enable moosefs-master.service
[root@master_11 /]# netstat -ntalp | grep mfsmaster
tcp 0 0 0.0.0.0:9419 0.0.0.0:* LISTEN 3969/mfsmaster
tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN 3969/mfsmaster
tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN 3969/mfsmaster
7)在日誌服務器上配置manage端的地址
[root@node_1_12 mfs]# vim /etc/mfs/mfsmetalogger.cfg
MASTER_HOST = 10.0.0.11
[root@node_1_12 mfs]# systemctl start moosefs-metalogger.service
[root@node_1_12 mfs]# systemctl enable moosefs-metalogger.service
[root@node_1_12 mfs]# netstat -ntalp | grep mfs
tcp 0 0 10.0.0.12:45152 10.0.0.11:9419 ESTABLISHED 2837/mfsmetalogger
// 可以看出log端和master端已經成功建立連接
8)修改chunk server端並啓動
[root@node_2_13 mfs]# vim mfschunkserver.cfg
MASTER_HOST = 10.0.0.11
[root@node_2_13 mfs]# vim mfshdd.cfg
/tmp //數據存放在哪個地方,一般工作中會配置一個獨立的分區
[root@node_2_13 mfs]# systemctl start moosefs-chunkserver.service
[root@node_2_13 mfs]# systemctl enable moosefs-chunkserver.service
[root@node_2_13 mfs]# netstat -ntalp | grep mfs
tcp 0 0 0.0.0.0:9422 0.0.0.0:* LISTEN 1387/mfschunkserver
tcp 0 0 10.0.0.13:45530 10.0.0.11:9420 ESTABLISHED 1387/mfschunkserver
// 可以看出他已經與master端建立連接了,另外一臺chunk server也做同樣的配置
[root@node_2_13 tmp]# ls
00 22 44 66 88 AA C8 EA
01 23 45 67 89 AB C9 EB
02 24 46 68 8A AC CA EC
03 25 47 69 8B AD CB ED
04 26 48 6A 8C AE CC EE
// 分塊存儲,人類無法直接識別
9) 客戶端掛載
[root@node_4_15 mfs]# vim mfsmount.cfg
mfsmaster=10.0.0.11
[root@node_4_15 mfs]# mfsmount /tmp/ -o nonempty -H 10.0.0.11:/mfs_test -p
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root
掛載的目錄是master管理端 mfshdd.cfg 裏面的共享目錄和權限,如果我沒沒有指定連接的密碼,就需要使用 -o nonempty 參數來信任密碼
10) 取消掛載
[root@node_4_15 ~]# umount -t fuse.mfs /tmp/
11)開啓web界面
在master server上面執行
[root@master_11 ~]# mfscgiserv
lockfile created and locked
starting simple cvimgi server (host: any , port: 9425 , rootpath: /usr/share/mfscgi)
然後瀏覽器訪問IP:9425端口
優化操作
設定文件copy的份數(mfssetgoal)
在client 端執行命令
[root@node_4_15 tmp]# mfssetgoal -r 1 /tmp/
-r遞歸 1代表一份,然後在哪個掛載目錄上實行
查看一個文件被複制了幾份(mfscheckfile\mfsfileinfo)
在client端執行命令
mfscheckfile /tmp/sshd /tmp/1.txt
/tmp/sshd:
chunks with 1 copy: 1
/tmp/1.txt:
chunks with 1 copy: 1
// chunks with 1 copy 代表當前複製了1份
測試copy份數的設定是否成功
[root@node_4_15 tmp]# mfssetgoal -r 2 /tmp/
/tmp/:
inodes with goal changed: 47
inodes with goal not changed: 0
inodes with permission denied: 0
[root@node_4_15 tmp]# mfscheckfile /tmp/sshd /tmp/1.txt
/tmp/sshd:
chunks with 2 copies: 1
mfsfileinfo 查看文件屬性
mfsfileinfo的參數:
- -q:簡潔模式,僅顯示副本數,拷貝的份數
- -c:從chunkserver接收塊校驗和
- -s:計算文件簽名(使用校驗和)
[root@node_4_15 tmp]# mfsfileinfo /tmp/sshd
/tmp/sshd:
chunk 0: 0000000000000038_00000001 / (id:56 ver:1)
copy 1: 10.0.0.13:9422 (status:VALID)
copy 2: 10.0.0.14:9422 (status:VALID)
// 從上述可以看出兩個副本存在的位置
mfsgetclass 顯示文件的副本數和目錄的副本數
[root@node_4_15 tmp]# mfsgetsclass -r /tmp/
/tmp/:
files with goal 2 : 46
directories with goal 2 : 2
mfsdirinfo 顯示目錄的狀態
用法:mfsdirinfo [-nhHkmg] [-idfclsr] [-p] name [name ...]
- -n - 以簡單格式顯示數字
- -h-使用基數2前綴的“人類可讀”數字(IEC 60027)
- -H - 使用基數10前綴(SI)的“可讀”數字
- -k - 以千比數顯示純數字(二進制千 - 1024)
- -m - 在mebis中顯示純數字(二進制mega - 1024 ^ 2)
- -g - 以赤字顯示純數字(二進制千兆 - 1024 ^ 3)
'顯示'開關:
- -i - 顯示索引節點數
- -d - 顯示目錄數
- -f - 顯示文件數
- -c - 顯示塊數
- -l - 顯示長度
- -s - 顯示大小
- -r - 顯示realsize
'模式'開關: - -p - 精確模式
[root@node_4_15 tmp]# mfsdirinfo -h /tmp/
/tmp/:
inodes: 48 //當前使用的inode號
directories: 2 //兩個目錄
files: 46 //46個文件
chunks: 33 //佔用了33個塊
length: 28KiB //文件的總大小是28K
size: 2.3MiB //塊長度總和爲2.3M
realsize: 4.6MiB //使用的磁盤空間,因爲我們是複製了2份,所以。。
[root@node_4_15 tmp]# mfsdirinfo -h -p /tmp/
/tmp/:
inodes: 48
directories: 2
files: 46
chunks: 33
length: 28KiB
size: 2.3MiB
realsize: 4.6MiB
/tmp/ (precise data):
inodes: 48
directories: 2
files: 46
chunks: 33
length: 28KiB
size: 2.3MiB
realsize: 4.6MiB
mfssetgoal和mfsgetgoal命令
mfssetgoal設置目標copy的份數
mfssetgoal 3 /tmp //tmp目錄下的copy 3份,但是他裏面的目錄還是備份兩份
mfssetgoal -r 3 /tmp //tmp目錄下所有的文件copy 3份,包括他裏面的子目錄
mfsgetgoal獲取目標copy的份數
[root@node_4_15 tmp]# mfsgetgoal /tmp/
/tmp/: 2
[root@node_4_15 tmp]# mfsgetgoal /tmp/sshd
/tmp/sshd: 2
mfsgetquota 獲取執行目錄給定的配額
[root@node_4_15 tmp]# mfsgetquota -h /tmp/
/tmp/: (current values | soft quota | hard quota) ; soft quota grace period: default
inodes | 47 | - | - |
length | 28KiB | - | - |
當前值 軟配額 硬配額
[root@node_4_15 tmp]# mfsgetquota -h /tmp/123/
/tmp/123/: (current values | soft quota | hard quota) ; soft quota grace period: default
inodes | 0 | - | - |
length | 0B | - | - |
mfsrsettrashtime和mfsgettrashtime命令 垃圾箱存放時間
刪除的文件存放在“垃圾箱(trash bin)”的時間就是隔離時間(quarantine time),這個時間可以用mfsgettrashtime 來驗證,也可以用mfssettrashtime來設置。設置的時間是按照小時計算,設置的單位是秒,不滿一小時就按一小時計算。
mfs web展示界面介紹
- 1、當前master端的Ip地址
- 2、當前的mfs的版本
- 3、當前內存的使用
- 4、cpu的使用率
- 5、總共的磁盤大小
- 6、可用的磁盤大小
配置文件詳解
mfsmaster.cfg master主配置文件詳解
#######運行選項######################
# WORKING_USER = mfs #運行master守護進程的用戶,默認是mfs
# WORKING_GROUP = mfs #運行master守護進程的用戶組,默認是mfs
# SYSLOG_IDENT = mfsmaster #要在syslog消息中放置的進程名稱(默認爲mfsmaster),消息默認是記錄在/var/log/messages裏
# LOCK_MEMORY = 0 #是否執行mlockall()以避免mfsmaster 進程溢出(默認爲0);
# LIMIT_GLIBC_MALLOC_ARENAS = 4 #僅限於Linux:將malloc區域限制爲給定值 - 防止服務器使用大量虛擬內存(默認爲4)
# DISABLE_OOM_KILLER = 1 #僅限Linux:禁用內存killer(默認爲1)
# NICE_LEVEL = -19 #運行守護進程的良好級別(默認爲-19;注意:進程必須以root身份啓動以提高優先級,如果優先級設置失敗,進程保留開始的好水平)
# FILE_UMASK = 027 #爲組和其他設置默認umask(用戶始終爲0,默認爲027,塊寫入組並阻止所有其他)
# DATA_PATH = /usr/local/mfs-3.0.94/var/mfs #在哪裏存儲守護進程鎖文件(默認爲/usr/local/mfs-3.0.94/var/mfs)
# EXPORTS_FILENAME = /usr/local/mfs-3.0.94/etc/mfs/mfsexports.cfg #mfsexports.cfg文件的位置(默認爲/usr/local/mfs-3.0.94/etc/mfs/mfsexports.cfg)
# TOPOLOGY_FILENAME = /usr/local/mfs-3.0.94/etc/mfs/mfstopology.cfg #mfstopology.cfg文件的位置(默認爲/usr/local/mfs-3.0.94/etc/mfs/mfstopology.cfg)
# BACK_LOGS = 50 #元數據更改日誌文件數(默認值爲50),產生changelog.0.mfs-changelog.49.mfs,50個這樣的日誌文件用於存放元數據更改記錄。
# METADATA_SAVE_FREQ = 1 #master多久會保存一次元數據,默認是1小時。
# BACK_META_KEEP_PREVIOUS = 1 #要保留的以前的元數據文件數(默認值爲1),metadata.mfs.back.1留下一個這樣的備份文件。
# CHANGELOG_PRESERVE_SECONDS = 1800 #在內存中必須保留多少秒的更改日誌(默認爲1800;這設置最小值,由於日誌保存在5k塊中,實際數量可能會更大一些;零會禁用額外的日誌存儲)
# MISSING_LOG_CAPACITY = 100000 #在主機中將存儲多少個缺失的塊(最多可分配 100*MISSING_LOG_CAPACITY 字節的內存)
#######命令連接選項#####################
# MATOML_LISTEN_HOST = * #監聽的IP地址,用於metalogger與masters間的連接,*表示任何。
# MATOML_LISTEN_PORT = 9419 #監聽端口默認是9419,用於metalogger與masters間的連接
#######CHUNKSERVER連接選項###############
# MATOCS_LISTEN_HOST = * #監聽chunkservers連接的IP地址,默認是所有
# MATOCS_LISTEN_PORT = 9420 #監聽端口默認是9420
# MATOCS_TIMEOUT = 10 #master-chunkserver連接的默認超時時間(默認爲10秒)
# AUTH_CODE = mfspassword #可選認證字符串。 定義時 - 只有具有相同AUTH_CODE的塊服務器才允許連接到該主站。 當未定義(默認) - 然後所有chunkservers是允許的。如果要打開chunkserver身份驗證,
#則首先在所有chunkserver中定義AUTH_CODE(並重新加載/重新啓動它們),然後取消註釋此選項並重新加載/重新啓動master重新加載當前連接 chunkservers沒有斷開連接。 當chunkservers將進行新的連接時,將使用新的AUTH_CODE。
# REMAP_BITS = 24 #可選IP類重映射。
# REMAP_SOURCE_IP_CLASS = 192.168.1.0
# REMAP_DESTINATION_IP_CLASS = 10.0.0.0
#######CHUNKSERVER工作選項##############
#REPLICATIONS_DELAY_INIT = 300 #開始複製前的初始延遲(秒)(默認爲300)
# CHUNKS_LOOP_MAX_CPS = 100000 #Chunks循環不應該比每秒鐘檢查更多的塊數(默認爲100000)
# CHUNKS_LOOP_MIN_TIME = 300 #Chunks循環不應該在比給定的數字少的秒鐘內完成(默認值爲300)
# CHUNKS_SOFT_DEL_LIMIT = 10 #在一個chunk服務器上刪除的最大塊數(默認值爲10)
# CHUNKS_HARD_DEL_LIMIT = 25 #在一個chunkserver上最多刪除的塊數(默認爲25)
# CHUNKS_WRITE_REP_LIMIT = 2,1,1,4 #最大數量的塊複製到一個chunkserver,第一個限制是比較危險的塊(塊只有一個副本);第二個限制是undergoal塊(塊的拷貝數量低於指定的目標);
#第三個限制是平衡與周圍空間使用服務器之間的算術平均數;第四個限制是其他服務器之間的平衡(極低或極高的空間使用情況);這裏mfs官方建議是第一個數字大於等於第二,第二大於或等於第三,第四大於或等於第三,即(第一個限制 > = 第二個限制 > = 第三個限制< = 第四個限制)。
# CHUNKS_READ_REP_LIMIT = 10,5,2,5 #從一個chunkserver複製的最大塊數(默認爲10,5,2,5)一個數字等於四個相同數字,以冒號分隔,限制組與寫入限制相同,數字之間的關係也應該相同 在寫限制(1st> = 2nd> = 3rd <= 4th)
# 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 #定義chunkserver將在“grace”模式下保持多長時間(以秒爲單位)
# ACCEPTABLE_PERCENTAGE_DIFFERENCE = 1.0 #chunkserver的空間使用量的最大差異百分比(默認值爲1.0;有效值:0.1 - 10.0)
# PRIORITY_QUEUES_LENGTH = 1000000 #優先隊列的長度(瀕危,undergoal等塊-應該首先處理塊,默認值是1000000)。
# CS_MAINTENANCE_MODE_TIMEOUT = 0 #服務器可以處於維護模式的最大秒數(默認值爲0 - 這意味着“永遠”)。
# CS_TEMP_MAINTENANCE_MODE_TIMEOUT = 1800 #服務器可以處於“臨時”維護模式的最大秒數(重新連接服務器自動切換回正常模式後,服務器切換到此模式,默認值爲1800)
###########客戶連接選項########################
# MATOCL_LISTEN_HOST = * #用於監聽客戶端(安裝)連接的IP地址(*表示任何)
# MATOCL_LISTEN_PORT = 9421 #端口監聽客戶端(mount)連接(默認爲9421)
###########客戶工作選擇########################
# SESSION_SUSTAIN_TIME = 86400 #維持斷開的客戶端會話的時間(以秒爲單位;默認值爲86400 = 1天)
# QUOTA_DEFAULT_GRACE_PERIOD = 604800 #軟配額的默認寬限期(秒)(默認爲604800 - 7天)不推薦使用:QUOTA TIME_LIMIT
# ATIME_MODE = 0
#修改模式(默認爲0 - 訪問期間始終修改atime)
#所有模式:
#0 - 始終修改文件,文件夾和符號鏈接的atime。
#1 - 始終修改atime,但僅在文件的情況下(在文件夾和符號鏈接的情況下不要修改atime)。
#2 - 僅在ctime或mtime低於當前時間高於ctime或mtime時修改atime,當前atime早於24h時,修改atime。 在訪問期間對所有對象進行操作(如Linux中的“relatime”選項)。
#3 - 與上述相同但僅在文件的情況下。 如果文件夾和符號鏈接不能修改atime。
#4 - 在訪問期間不要修改atime(如“noatime”選項)。
mfsexports.cfg 配置文件詳解
# cat /usr/local/mfs/etc/mfs/mfsexports.cfg #這裏就跟NFS的/etc/exports文件類似,就是允許讓哪些客戶端來進行掛載
一行的格式:[ip range] [path] [options]
ip範圍:
*:表示任何ip(與0.0.0.0/0相同)
A.B.C.D:表示單個IP
A.B.C.D-E.F.G.H : IP地址範圍
A.B.C.D / XX:A.B.C.D網絡和子網掩碼
A.B.C.D/E.F.G.H : A.B.C.D網絡與E.F.G.H網絡掩碼
path:
. :特殊的“路徑",意思是“元”
/...:路徑在mfs結構
options:
ro/rw/readonly/readwrite:從字面意思就可以看出來只讀/讀寫/只讀/讀寫
alldirs:任何子目錄都可以以root身份加載
dynamicip:ip僅在第一次身份驗證期間進行測試,則客戶端可以使用來自任何ip的相同會話ID
ignoregid:組ID(gid)
admin:管理權限 - 當前:允許操縱配額值
maproot=UID[:GID]:將所有根(uid零)操作視爲用戶執行的操作,其中uid等於UID,gid等於GID(如果GID未指定,則爲該用戶的默認gid)
mapall=UID[:GID}:如上所述,對於所有操作(對於這兩個選項,UID和/或GID可以指定爲主機上存在的用戶名或組名)
password=TEXT:強制認證使用給定的密碼
md5pass=MD5:如上所述,但是密碼被定義爲MD5哈希(MD5指定爲128位十六進制數)
minversion=VER:僅允許版本號等於或大於VER的客戶端(VER可以指定爲X或X.Y或X.Y.Z)
mingoal=N : 不允許將目標設定在N以下(N應該是從'1'到'9'的數字)
maxgoal=N:不允許將目標設定在N(N以上)
mintrashtime=TIMEDURATION:不要將垃圾時間設置在TIME DURATION之下(時間DURATION可以按照設定順序指定秒數或元素#W,#D,#H,#M,#S的組合)
maxtrashtime=TIMEDURATION:不允許設置超過TIMEDURATION的時間(TIMEDURATION可以指定如上)
默認值:
readonly,maproot=999:999,mingoal=1,maxgoal=9,mintrashtime=0,maxtrashtime=4294967295
mfsmetalogger.cfg 配置文件詳解
###########運行選項############################
# WORKING_USER = mfs
# WORKING_GROUP = mfs
# SYSLOG_IDENT = mfsmetalogger #要在syslog消息中放置的進程名稱(默認爲mfsmetalogger)
# LOCK_MEMORY = 0
# LIMIT_GLIBC_MALLOC_ARENAS = 4
# DISABLE_OOM_KILLER = 1
# NICE_LEVEL = -19
# FILE_UMASK = 027
# DATA_PATH = /usr/local/mfs-3.0.94/var/mfs
# BACK_LOGS = 50
# BACK_META_KEEP_PREVIOUS = 3 #要保留的以前的元數據文件數(默認爲3),metadata_ml.mfs.back.1-metadata_ml.mfs.back.3留下三個這樣的備份文件。
# META_DOWNLOAD_FREQ = 24 #元數據下載頻率以小時爲單位(默認爲24,應至少爲BACK_LOGS/2)。注意這裏是要修改的一般改爲1.
META_DOWNLOAD_FREQ = 1
##########MASTER連接選項######################
# MASTER_RECONNECTION_DELAY = 5 #如果未連接,則在下次嘗試重新連接到主機之前延遲秒(默認爲5)
# BIND_HOST = * #用於與主機連接的本地地址(默認爲*,即默認本地地址)
# MASTER_HOST = mfsmaster #MooseFS主機,只允許在單主機安裝中使用IP(默認爲mfsmaster),這裏也是需要修改的地方。
# MASTER_PORT = 9419 #master的端口
# MASTER_TIMEOUT = 10 #與master連接的超時時間,默認是10秒鐘
mfschunkserver.cfg配置文件詳解
##########運行選項###########################
# WORKING_USER = mfs
# WORKING_GROUP = mfs
# SYSLOG_IDENT = mfschunkserver #在syslog消息中放置的進程名稱(默認爲mfschunkserver)
# LOCK_MEMORY = 0
# LIMIT_GLIBC_MALLOC_ARENAS = 4
# DISABLE_OOM_KILLER = 1
# NICE_LEVEL = -19
# FILE_UMASK = 027
# DATA_PATH = /usr/local/mfs-3.0.94/var/mfs #在哪裏存儲守護進程鎖文件(默認爲/usr/local/mfs-3.0.94/var/mfs)
# HDD_CONF_FILENAME = /usr/local/mfs-3.0.94/etc/mfs/mfshdd.cfg #mfshdd.cfg文件位置,分配給MFS磁盤空間的配置文件的位置
# HDD_TEST_FREQ = 10 #塊測試周期(默認值爲10秒)
# HDD_LEAVE_SPACE_DEFAULT = 256MiB #每個硬盤驅動器上應該留下多少空間(默認值:256MiB)
# HDD_REBALANCE_UTILIZATION = 20 #批量服務器允許在hdd空間重新平衡上花費的總工作時間的百分比
# HDD_ERROR_TOLERANCE_COUNT = 2 #在單個硬盤驅動器上以給定的秒數(PERIOD)容許多少個I/O錯誤(COUNT);如果錯誤數量超過此設置,則有害的硬盤驅動器將被標記爲損壞
# HDD_ERROR_TOLERANCE_PERIOD = 600
# HDD_FSYNC_BEFORE_CLOSE = 0 #在chunk關閉前啓用/禁用fsync
# HDD_SPARSIFY_ON_WRITE = 1 #在寫入期間啓用/禁用sparsification(跳過零)
# WORKERS_MAX = 250 #最大的活躍會話數
# WORKERS_MAX_IDLE = 40 #最大的空閒會話數
###########與master連接選項#################
# LABELS = #標籤字符串(默認爲空 - 無標籤)
# BIND_HOST = * #用於master連接的本地地址(默認爲*,即默認本地地址)
# MASTER_HOST = mfsmaster #MooseFS主機,只允許在單主機安裝中使用IP(默認爲mfsmaster)。這裏是要修改的地方。
# MASTER_PORT = 9420 #與master端連接的端口
# MASTER_TIMEOUT = 10 #與master連接的超時時間(默認爲10秒)
# MASTER_RECONNECTION_DELAY = 5 #如果未連接,則在下次嘗試重新連接到主機之前延遲秒(默認爲5)
# AUTH_CODE = mfspassword #authentication字符串(僅當master需要授權時才使用)
##########客戶端連接選項####################
# CSSERV_LISTEN_HOST = * #IP地址來監聽客戶端(掛載)連接(*表示任何)
# CSSERV_LISTEN_PORT = 9422 #端口監聽客戶端(mount)連接(默認爲9422)
fsmshdd.cfg 配置文件詳解
該文件保留硬盤驅動器的安裝點(路徑)的定義以與塊服務器一起使用。
一個路徑可以從多個字符開始,這些字符可以切換其他選項:
*:表示這個硬盤被標記爲刪除,所有數據將被複制到其他硬盤驅動器(通常在其他chunkserver上)
<:表示來自此硬盤驅動器的所有數據都應該移動到其他硬盤驅動器
>:表示來自其他硬盤驅動器的所有數據都應移動到該硬盤驅動器
〜:表示總計數的重大變化不會將此驅動器標記爲損壞
如果同時使用“<”和“>”驅動器,那麼只能在這些驅動器之間移動數據
可以指定可選的空間限制(在每個安裝點之後),有兩種方法:
將空間設置爲在硬盤驅動器上未使用(這覆蓋了mfschunkserver.cfg的默認設置)
限制在硬盤上使用的空間,如:/mnt/hd4 -5GiB或/mnt/hd4 1.5TiB
mfsmount.cfg 掛載文件
#可選的mfsmount.cfg文件可用於指定mfsmount的默認值。 默認安裝選項可以在一行以逗號分隔或多行指定。如(下面一看就能明白就不解釋了):
# nosuid,nodev
# mfsmaster=mfsmaster
# mfspassword=secret #主要是這裏,如果master設置了掛載密碼,如果你這裏不設置就要手工輸了,然後如果客戶端想開機自動掛載就需要在這裏設置密碼了。
#默認安裝點也可以設置。 默認安裝點必須以“/”開頭,並且是一個完全限定的路徑。如:
# /mnt/mfs
數據恢復
誤刪除數據從垃圾箱恢復
1)client我們已經掛載過目錄了,直接在這個文件裏面刪除一個文件並給他恢復
> [root@node_5_16 tmp]# echo "this is test del file" >> test.png
[root@node_5_16 tmp]# ls
test_file.txt
2)掛載垃圾箱
先查看刪除的文件在垃圾箱存放的時間
[root@node_5_16 tmp]# mfsgettrashtime /tmp/
/tmp/: 3600
//掛載垃圾箱
[root@node_5_16 tmp]# mfsmount -m /mnt/ -H 10.0.0.11:/mfs_test
mfsmaster accepted connection with parameters: read-write,restricted_ip
3)刪除數據,找到文件在垃圾箱的所在位置
[root@node_5_16 tmp]# rm -f test.png
[root@node_5_16 trash]# find /mnt/ -name *test.txt
/mnt/trash/0F9/000000F9|test.txt
被刪除的文件名在垃圾箱裏面其實還是可以找到的,文件名是由一個8位16進制數的i-node和被刪的文件名組成。在文件名和i-node之間不可以用"/",而是以“|” 替代。如果一個文件名的長度超過操作系統的限制(通常是255字符),那麼超出部分將被刪除。從掛載點起全部路徑的文件名被刪除的文件仍然可以被讀寫。需要注意的是,被刪除的文件在使用文件名(注意文件名是兩部分),一定要用單引號引起來。
4)恢復數據
[root@node_5_16 tmp]# cd /mnt/trash/0F9/
[root@node_5_16 0F9]# ls
000000F9|1.txt undel
[root@node_5_16 0F9]# mv 000000F9\|1.txt undel/
[root@node_5_16 0F9]# cd /tmp/
[root@node_5_16 tmp]# ls
1.txt
[root@node_5_16 tmp]# cat test.txt
this is test del file
5)注意:
垃圾回收站不一定需要時刻都掛載,你可以等到你想從垃圾箱裏面恢復數據的時候在掛載就行了