文章目錄
一、搭建基本的MFS系統
實驗環境
主機名(ip) | 角色 |
---|---|
server1(172.25.2.1) | mfs-master |
server2(172.25.2.2) | mfs-chunk |
server3(172.25.2.3) | mfs-chunk |
server5(172.25.2.5) | mfs-client |
1.1 YUM源安裝配置MooseFS系統
在每個節點上
1、添加鍵值
curl "https://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS
2、添加YUM源
curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo
server1上
3、安裝MooseFS組件。
yum install moosefs-master moosefs-cgi moosefs-cgiserv moosefs-cli -y
4、編輯解析文件 /etc/hosts
,併發送給其他節點。
scp /etc/hosts server2:/etc/
scp /etc/hosts server3:/etc/
scp /etc/hosts server5:/etc/
5、安裝完,可以看到MFS的配置文件 mfsmaster.cfg
和 mfsexports.cfg
-
mfsexports.cfg:被掛接目錄及權限設置
-
mfsmaster.cfg:主配置文件,凡是用#註釋掉的變量均使用其默認值。
vim /etc/mfs/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_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)
6、此時,啓動moosefs-master
和moosefs-cgiserv
,查看端口發現開啓了9419,9420,9421,9425
端口。
systemctl start moosefs-master #啓動MASTER
netstat -antlupe
systemctl start moosefs-cgiserv #啓動WEBUI監控服務
netstat -antlupe
- 9419:metalogger監聽的端口地址
- 9420:用於chunkserver連接的端口地址
- 9421:用於客戶端掛接連接的端口地址
- 9425:監控各個分佈節點的端口
7、在web界面訪問:172.25.2.1:9425
,可以看到分佈式文件系統的監控頁面
在server2和server3上,Chunk Server
8、在server2和server3上,真正存儲數據的節點安裝moosefs-chunkserver
yum install moosefs-chunkserver -y
9、安裝之後在兩個節點都會生成一個mfs用戶
10、編輯配置文件mfshdd.cfg
,寫入mfs的分區/mnt/chunk1
- mfshdd.cfg:MFS使用空間配置文件
在這裏/mnt/chunk1 是一個給mfs 的分區,但在本機上是一個獨立的目錄,最好是一個單獨的硬盤或者一個raid 卷,最低要求是一個分區。
11、更改目錄/mnt/chunk
的權限,因爲mfschunkserver進程是用mfs運行的
chown -R mfs:mfs /mnt/chunk1
由於 mfschunkserver.cfg
chunk配置文件,默認Master爲mfsmaster
,且已做解析。
12、開啓chunkserver
systemctl start moosefs-chunkserver
netstat -antlupe ##開通監控的端口9422
13、此時,在server1上就可以看到,mfsmaster與server2建立了連接
server3同上操作
可以看出server2和server3同時通過server1的9420端口與server1進行交互
14、此時,在web監控頁面就可以看到
MFS Client
15、在server5上,安裝MFS Client客戶端
yum install moosefs-client -y
16、編輯掛載配置文件mfsmount.cfg
,寫入掛載點目錄/mnt/mfs
並創建。
17、掛載 mfsmount
到此爲止,我們的MFS集羣已經搭建完成。
二、MFS的高級特性
2.1 冗餘goal設置
目標(goal),是指文件被拷貝的份數,設定了拷貝的份數後是可以通過mfsgetgoal
命令來證實的,也可以通過mfsrsetgoal
來改變設定。
mfssetgoal -r 份數 目錄/文件
- 實際的拷貝份數可以通過
mfscheckfile
和mfsfile info
命令來證實
[root@server5 mfs]# mkdir rr1
[root@server5 mfs]# mkdir rr2
[root@server5 mfs]# ls
rr1 rr2
[root@server5 mfs]# mfssetgoal -r 1 rr1
rr1:
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0
[root@server5 mfs]# cd rr1
[root@server5 rr1]# cp /etc/passwd .
[root@server5 rr1]# ls
passwd
[root@server5 rr1]# mfsfileinfo passwd
passwd:
chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
copy 1: 172.25.2.3:9422 (status:VALID)
[root@server5 mfs]# mfssetgoal -r 2 rr2
rr2:
inodes with goal changed: 0
inodes with goal not changed: 1
inodes with permission denied: 0
[root@server5 mfs]# cd rr2
[root@server5 rr2]# cp /etc/fstab .
[root@server5 rr2]# ls
fstab
[root@server5 rr2]# mfsfileinfo fstab
fstab:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.2.2:9422 (status:VALID)
copy 2: 172.25.2.3:9422 (status:VALID)
- 文件可以有多份copy,當goal爲1時,文件會被隨機存到一臺chunkserver上,當goal的數大於1時,copy會由master調度保存到不同的chunkserver上,goal的大小不要超過chunkserver的數量,否則多出的copy,不會有chunkserver去存。
此時,如果server3宕機,那麼copy到server3上的副本就打不開了。
2.2 垃圾回收站
被刪除的文件能夠存放在一個“ 垃圾箱”的時間就是一個隔離時間,用mfsgettrashtime
命令查看,用mfssettrashtime
命令來設置
- 刪除文件可以通過一個單獨安裝MFSMETA 文件系統。特別是它包含目錄/ trash (包含任然可以被還原的被刪除文件的信息)和/ trash/undel (用於獲取文件)。只有管理員有權限訪問MFSMETA(用戶的uid 0,通常是root)。
[root@server5 ~]# mkdir /mnt/mfsmeta
[root@server5 ~]# mfsmount -m /mnt/mfsmeta
mfsmaster accepted connection with parameters: read-write,restricted_ip
[root@server5 ~]# mount
mfsmaster:9421 on /mnt/mfsmeta type fuse.mfsmeta (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
[root@server5 ~]# cd /mnt/mfsmeta
[root@server5 mfsmeta]# ls
sustained trash
[root@server5 mfsmeta]# cd trash/
[root@server5 trash]# find -name *passwd*
./004/00000004|rr1|passwd
[root@server5 trash]# mv ./004/00000004\|rr1\|passwd undel/
[root@server5 trash]# cd /mnt/mfs
[root@server5 mfs]# ls
rr1 rr2
[root@server5 mfs]# cd rr1
[root@server5 rr1]# ls
passwd
[root@server5 rr1]#
- 被刪文件的文件名在“垃圾箱”目錄裏還可見,文件名由一個八位十六進制的數i-node 和被刪文件的文件名組成,在文件名和i-node 之間不是用“/”,而是用了“|”替代。如果一個文件名的長度超過操作系統的限制(通常是255個字符),那麼部分將被刪除。通過從掛載點起全路徑的文件名被刪除的文件任然可以被讀寫。
移動這個文件到trash/undel 子目錄下,將會使原始的文件恢復到正確的MooseFS文件系統上路徑下(如果路徑沒有改變)。 如果在同一路徑下有個新的同名文件,那麼恢復不會成功。從“垃圾箱”中刪除文件結果是釋放之前被它站用的空間(刪除有延遲,數據被異步刪除)。
三、MFS的常見問題
3.1 啓動MFS集羣
最安全的啓動MooseFS 集羣(避免任何讀或寫的錯誤數據或類似的問題)的方式是按照以下命令步驟:
- 啓動mfsmaster 進程
- 啓動所有的mfschunkserver 進程
- 啓動mfsmetalogger 進程(如果配置了mfsmetalogger)
- 當所有的chunkservers 連接到MooseFS master 後,任何數目的客戶端可以利用mfsmount 去掛接被export 的文件系統。(可以通過檢查master 的日誌或是CGI 監視器來查看是否所有的chunkserver被連接)。
3.2 停止MFS集羣
- 在所有的客戶端卸載MooseFS 文件系統(用umount 命令或者是其它等效的命令)
- 用mfschunkserver stop 命令停止chunkserver 進程
- 用mfsmetalogger stop 命令停止metalogger 進程
- 用mfsmaster stop 命令停止master 進程
3.3 MFS Master的恢復
- 在正常關閉的時候,
/var/lib/mfs
目錄中會產生metadata.mfs
這個文件,這個文件是開啓mfsmaster服務時必備的文件。如果沒有該文件,那麼mfsmaster服務也就起不來。 - 在正常開啓的時候,
/var/lib/mfs
目錄中就會產生metadata.mfs.back
這個文件。
修改mfsmaster的啓動腳本
systemctl daemon-reload