超詳細MFS網絡分布式文件系統

-----------------------MFS----------------------

(1)分布式原理

分布式文件系統( Distributed File System)是指文件系統管理的物理存儲資源不一定直接連接在本地節點上,而是通過計算機網絡與節點相連。簡單來說,就是把一些分散的(分布在局域網內各個計算機上)共享文件夾,集合到一個文件夾內(虛擬共享文件夾)。對于用戶來說,要訪問這些共享文件夾時,只要打開這個虛擬共享文件夾,就可以看到所有鏈接到虛擬共享文件夾內的共享文件夾,用戶感覺不到這些共享文件
是分散于各個計算機上的。分布式文件系統的好處是集中訪問、簡化操作、數據容災,以及提高文件的存取性能。


(2)MFS原理

MFS是一個具有容錯性的網絡分布式文件系統,它把數據分散存放在多個物理服
務器上,而呈現給用戶的則是一個統一的資源。

1)MFS文件系統的組成。

  • 元數據服務器( Master):一臺管理整個文件系統的獨立主機,在整個體系中負責管理文件系統,維護元數據。(文件的大小、屬性、位置信息,包括所有非常規文件的所有信息,例如目錄、套接字、管道以及設備文件)
  • 元數據日志服務器( MetaLogger):備份 Master服務器的變化日志文件,文件類型為 changelog ml。*mfs當 Master服務器數據丟失或者損壞時,可以從日志服務器中取得文件,進行恢復。
  • 數據存儲服務器( Chunk server):真正存儲數據的服務器。存儲文件時,會把文件分塊保存,并在數據服務器之間進行復制。數據服務器越多,能使用的“容量”就越大,可靠性就越高,性能也就越好。
  • 客戶端( Client):可以像掛載NFS一樣掛載MFS文件系統,其操作是相同的。
    MFS文件系統的組成架構如圖所示。
    超詳細MFS網絡分布式文件系統

2)MFS讀取數據的處理過程

  • 客戶端向元數據服務器發出讀請求。
  • 元數據服務器把所需數據存放的位置( Chunk Server的P地址和 Chunk編號)告知客戶端。
  • 客戶端向已知的 Chunk server請求發送數據。
  • Chunk Server向客戶端發送數據。

3)MFS寫入數據的處理過程

  • 客戶端向元數據服務器發送寫入請求
  • 元數據服務器與 Chunk Server進行交互(只有當所需的分塊 Chunks存在的時候才進行這個交互),但元數據服務器只在某些服務器創建新的分塊Chunks,創建成功后由 Chunk servers告知元數據服務器操作成功。
  • 元數據服務器告知客戶端,可以在哪個 Chunk Server的哪些 Chunks寫入數據。
  • 客戶端向指定的 Chunk server寫入數據。
  • 該 Chunk Server與其他 Chunk Server進行數據同步,同步成功后 ChunkServer告知客戶端數據寫入成功
  • 客戶端告知元數據服務器本次寫入完畢

---------------------案例實驗----------------------

概述
公司之前的圖片服務器采用的是NFS,隨著業務量增加,多臺服務器通過NFS方式共享一個服務器的存儲空間,使得NFsS服務器不堪重負,經常出現超時問題。而且NFS存在著單點故障問題,盡管可以rsync同步數據到另外一臺服務器上做NFS服務的備份,但這對提高整個系統的性能并無幫助。基于目前的需求,我們需要對NFS服務器進行優化或采取別的解決方案,然而優化并不能應對日益增多的客戶端的性能要求,因此選擇的解決方案是采用分布式文件系統。采用分布式文件系統后,服務器之間的數據訪問不再是一對多的關系,而是多對多的關系,這樣可以使性能得到大幅提升。
在當前多種常用的分布式文件系統中,我們采用了MFS( MooseFS)。

[需要注意:MFS的MasterServer管理節點只有一個,也有可能會出現單點故障,后續我會寫出解決方案FastDFS】

MFS雖然有單點故障的可能性缺點,但也有很多比較好的特點比如:
1、高可靠(數據的多個拷貝被存儲在不同的計算機上)
2、通過附加新的計算機或者硬盤可以實現容量的動態擴展
3、刪除的文件可以根據一個可配置的時間周期進行保留(一個文件系統級別的回收站)
4、不受訪問和寫入影響的文件連貫快照


MFS正式推出是在2008年5月,它是一個具有容錯功能的、高可用、可擴展的海量級分布式文件系統。MFS把數據分散在多臺服務器上,但用戶看到的只是一個源。MFS也像其他類UNX文件系統一樣,包含了層級結構和文件屬性,可以創建特殊的文件(塊設備、字符設備、管道、套接字)、符號鏈接和硬鏈接。

實驗環境:

主機操作系統IP地址軟件安裝
Master ServerCentOS 7192.168.233.128mfs-1.6.27-5.tar.gz
MetaLogger ServerCentOS 7192.168.233.6mfs-1.6.27-5.tar.gz
Chunk Server 1CentOS 7192.168.233.4mfs-1.6.27-5.tar.gz
Chunk Server 2CentOS 7192.168.233.10mfs-1.6.27-5.tar.gz
ClientCentOS 7192.168.233.11mfs-1.6.27-5.tar.gz fuse-2.9.2.tar.gz
軟件包百度網盤
mfs-1.6.27-5.tar.gz鏈接:https://pan.baidu.com/s/1-l0ZEisWmlGT2aNqR2nGaw 密碼:e98v
fuse-2.9.2.tar.gz鏈接:https://pan.baidu.com/s/1rZPOnsVISzu0Z0aucr7J7g 密碼:71si

一、Master Server和MetaLogger Server共同步驟:

1.關閉防火墻

#關閉防火墻
systemctl stop firewalld.service 
setenforce 0

2.安裝環境

yum install gcc gcc-c++ zlib-devel -y

3.創建MFS程序用戶

useradd -s /sbin/nologin mfs

4.解壓縮MFS文件

tar zxvf mfs-1.6.27-5.tar.gz -C /opt

5.安裝設置

cd /opt/mfs-1.6.27/
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount

6.編譯安裝

make && make install

7.復制元數據文件

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

接下來是Master Server和MetaLogger Server的單獨操作

二、Master Server操作

1.復制配置模板,從而開啟功能

cd /usr/local/mfs/etc/mfs/
[root@localhost mfs]# cp mfsexports.cfg.dist mfsexports.cfg       #權限配置文件
[root@localhost mfs]# cp mfsmaster.cfg.dist mfsmaster.cfg            #master配置文件
[root@localhost mfs]# cp mfstopology.cfg.dist mfstopology.cfg           #本服務器的日志文件

2.啟動主服務器服務:

/usr/local/mfs/sbin/mfsmaster start

3.查看下mfsmaster服務是否開啟

ps -ef | grep mfs

超詳細MFS網絡分布式文件系統

三、MetaLogger Server操作

1.復制配置模板,從而開啟功能

cd /usr/local/mfs/etc/mfs/
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

2.修改mfs日志服務配置文件

[root@localhost mfs]# vim mfsmetalogger.cfg
....以上內容忽略
MASTER_HOST = 192.168.233.128         #修改并指向Master Server的地址
#MASTER_PORT = 9419
....以下內容忽略修改完成后保存退出

3.啟動MetaLogger Server服務器服務

/usr/local/mfs/sbin/mfsmetalogger start

4.查看下服務是否開啟

[root@localhost mfs]# ps -ef | grep mfs

超詳細MFS網絡分布式文件系統

日志服務器服務開啟

需要注意:
默認為24小時,即每隔一天從元數據服務器Master下載一個metadata.mfs.back 文件。
當元數據服務器關閉或者出故障時,matedata.mfs.back 文件將消失,
那么要恢復整個mfs, 則需從 metalogger服務器取得該文件。
請特別注意這個文件,它與日志文件一起,才能夠恢復整個被損壞的分布式文件系統。

四、Chunk Server 1和2共同操作

1.安裝環境

yum install gcc gcc-c++ zlib-devel -y

2.創建MFS程序用戶

useradd -s /sbin/nologin mfs

3.解壓縮文件

tar zxvf mfs-1.6.27-5.tar.gz -C /opt

4.安裝設置

cd /opt/mfs-1.6.27/
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfsmount

5.編譯安裝

make && make install

6.復制配置模板,從而開啟功能

cd /usr/local/mfs/etc/mfs/
cp mfschunkserver.cfg.dist mfschunkserver.cfg
cp mfshdd.cfg.dist mfshdd.cfg

7.修改mfschunk配置文件

vim mfschunkserver.cfg
....以上內容忽略
#BIND_HOST = *
MASTER_HOST = 192.168.233.128                        #修改并指向Master Server的地址
#MASTER_PORT = 9420
....以下內容忽略修改完成后保存退出

8.修改配置文件

vim mfshdd.cfg
....以上內容忽略
#/mnt/hd1
#/mnt/hd2
#etc.
/data                             #添加文件目錄
~            
修改完成后保存退出

9.創建文件目錄,并且更改屬主屬組

mkdir /data
chown -R mfs.mfs /data

10.開啟服務

/usr/local/mfs/sbin/mfschunkserver start

11.查看服務開啟

ps -ef | grep mfs

超詳細MFS網絡分布式文件系統

五、Client 操作

1.關閉防火墻

systemctl stop firewalld.service 
setenforce 0

2.安裝環境

yum install gcc gcc-c++ zlib-devel -y

3.解壓縮fuse

tar zxvf fuse-2.9.2.tar.gz -C /opt/

4.編譯安裝

cd /opt/fuse-2.9.2/
./configure
make && make install

5.編輯環境變量

vim  /etc/profile
#在末尾插入一行:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH添加完成后保存退出
source /etc/profile

6.安裝mfs

cd ~ 
useradd -s /sbin/nologin mfs              #創建mfs程序用戶
tar zxvf mfs-1.6.27-5.tar.gz -C /opt              #解壓縮文件

7.編譯安裝mfs

cd /opt/mfs-1.6.27/
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfschunkserver \
--enable-mfsmount
make && make install

8.加載Fuse內核

mkdir /opt/mfs         #創建掛載目錄
modprobe fuse           #加載fuse內核
/usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.233.128               #Master Server掛載到客戶端

超詳細MFS網絡分布式文件系統

PS:優化客戶端操作

Client操作:
1.為了可以直接使用mfsmount這條命令,進行環境變量的修改。
編輯環境變量:

vim /etc/profile
#末尾插入一行:
export PATH=/usr/local/mfs/bin:$PATH添加完成后保存退出

超詳細MFS網絡分布式文件系統

-----------在Master Server上啟動監控程序-----------

啟動監控:

/usr/local/mfs/sbin/mfscgiserv

超詳細MFS網絡分布式文件系統

輸入Master Server地址進入監控
http://192.168.233.128:9425
超詳細MFS網絡分布式文件系統
超詳細MFS網絡分布式文件系統

轉載于:https://blog.51cto.com/13767783/2287720

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537769.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537769.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537769.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

markdown文件轉word文件

工具: https://github.com/jgm/pandoc/releases/tag/2.2.3.2 下載pandoc安裝包之后,像安裝普通軟件一樣點開安裝就可以了。安裝完成之后,打開cmd命令行,輸入pandoc -v,如果正常顯示出類似下面的信息就表明安裝成功&a…

android全面屏系統哪個版本開始,Android全面屏

所謂全面屏手機,就是屏幕縱橫比大于1.86的設備。例如:舉個例子.png官方文檔:If your app targets Android 8.0 (API level 26) or higher, it fills the entire screen, according to its layout.If your app targets Android 7.1 (API level…

AliOS Things聲源定位應用演示

摘要: 1. 概述 利用麥克風陣列進行聲源定位在智能降噪、語音增強、語音識別等領域有廣泛應用和研究前景。本文介紹基于AliOS Things STM32F413H Discovery開發板實現聲源定位算法集成和功能演示。 概述利用麥克風陣列進行聲源定位在智能降噪、語音增強、語音識別等…

Mysql 使用正則表達式

需求:匹配出姓名字段里非中文的 SELECT * FROM 表 WHERE REAL_NAME REGEXP ([\\u4e00-\\u9fa5]{1,20}|[a-zA-Z\\.\\s]{1,20}) ; 查詢結果如下

Android點擊返回鍵銷毀自己,Activity界面銷毀 軟鍵盤未收回

在項目開發過程中,界面包含EditText輸入框時,輸入內容時軟鍵盤彈起。但是此時我們調用界面中自定義的返回按鈕執行.finish()方法銷毀Activity后發現軟鍵盤并沒有跟隨關閉收回,參考了網上各種方法后,試驗總結出自己項目中可用的方案…

2、Collections操作(自定義類)的各種實現

2019獨角獸企業重金招聘Python工程師標準>>> 1、排序(sort) 要想實現排序,必須實現compare方法,這樣Collection才知道是怎樣的排序規則。普通的數據類型,比如:int 、String、long等都已經實現了Comparable接口&#xf…

Mysql sql語句積累

分組排序 #alter table zxfw_offline_qa add zx_number varchar(50) COMMENT 咨詢編號,提問日期提問順序 AFTER id;/* select (i : case when pre_consult_timeconsult_time then i 1 else 1 end ) rownum, qa.*,(pre_consult_time:consult_time) from zxfw_…

中綴表達式轉換成后綴表達式(只適用于加減乘除運算)

1 #include <iostream>2 #include <stack>3 #include <cctype>4 5 using namespace std;6 7 //獲取符號的優先級8 int getPriority(char c)9 { 10 int priority -1; 11 switch (c) { 12 case : 13 priority 1; 14 break; 15 …

android多接口請求參數,okhttp3 使用json參數post方式請求接口數據(android)

1. 谷歌自帶的json不支持像map一樣直接put字符串進去&#xff0c;所以先導入阿里的json包2. 創建json對象&#xff0c;并且放入所要請求的參數 //登錄 private void loginRequest() { String url Contents.url"login"; JSONObject json new JSONObject(); json.put…

由淺入深,一文掌握NGINX知識文集

&#x1f3c6;作者簡介&#xff0c;普修羅雙戰士&#xff0c;一直追求不斷學習和成長&#xff0c;在技術的道路上持續探索和實踐。 &#x1f3c6;多年互聯網行業從業經驗&#xff0c;歷任核心研發工程師&#xff0c;項目技術負責人。 &#x1f389;歡迎 &#x1f44d;點贊?評論…

MySQL not in查詢不出數據(MySQL not in 無效)

今天使用 MySQL 的 not in 進行查詢的時候&#xff0c;發現結果里面并沒有返回任何數據。SQL 語句沒有任何問題&#xff0c;但是結果集卻是空&#xff0c;實在無法理解。糾結了半天&#xff0c;最后使用 left join&#xff0c;兩表關聯&#xff0c;找到了目標數據。但是這樣的話…

Python語法特點如注釋規則、代碼縮進、編碼規范等

在Python中&#xff0c;通常包括3種類型的注釋&#xff0c;分別是單行注釋、多行注釋和中文編碼聲明注釋。單行注釋在Python中&#xff0c;使用“#”作為單行注釋的符號。從符號“#”開始直到換行為止&#xff0c;“#”后面所有的內容都作為注釋的內容&#xff0c;并被Python編…

修改android.jar教程,Android修改jar包文件

1、Android studio中新建java文件&#xff0c;取和將要修改的文件相同的文件名&#xff0c;把class文件中代碼復制過去&#xff0c;修改需要改動的代碼2、新建txt文件&#xff0c;將新建的Java文件按照依賴關系將路經添加到新建的txt文件中&#xff0c;被依賴的放在最前面(ps:此…

安卓市場上架總結

安卓上架截圖&#xff08;不要帶手機外觀&#xff09; 注意&#xff1a;截圖不能有二維碼小米 至少3張&#xff0c;480*854像素&#xff0c;JPG、PNG格式。騰訊應用寶 請上傳2-5張截圖&#xff08;尺寸保持一致&#xff09;&#xff0c;單張圖片不超過1M。截圖不能小于320*480像…

android 左右分欄聯動布局,Layout 布局(24 分欄)

基礎布局使用單一分欄創建基礎的柵格布局(:span“0~24”).el-row {margin-bottom: 20px;&:last-child {margin-bottom: 0;}}.el-col {border-radius: 4px;}.bg-purple-dark {background: #99a9bf;}.bg-purple {background: #d3dce6;}.bg-purple-light {background: #e5e9f2…

洛谷P4238 【模板】多項式求逆(NTT)

傳送門 學習了一下大佬的->這里 已知多項式$A(x)$&#xff0c;若存在$A(x)B(x)\equiv 1\pmod{x^n}$ 則稱$B(x)$為$A(x)$在模$x^n$下的逆元&#xff0c;記做$A^{-1}(x)$ 具體的來說的話&#xff0c;就是兩個多項式$A,B$相乘模$x^n$之后&#xff0c;所有次數大于等于$n$的項都…

win10安裝TortoiseGit

TortoiseGit 是Git的可視化工具。所以前提是已經安裝了Git&#xff0c;安裝很簡單一路next。 下載地址&#xff0c;百度搜“TortoiseGit”&#xff0c;一般是第一個。 目前地址是&#xff1a;https://tortoisegit.org/download/ 如果打不開&#xff0c;可以進入騰訊軟件中心…

CF1045G AI robots(動態開點線段樹)

題意 火星上有$N$個機器人排成一行&#xff0c;第$i$個機器人的位置為$x_{i}$&#xff0c;視野為$r_{i}$&#xff0c;智商為$q_{i}$。我們認為第$i$個機器人可以看到的位置是$[x_{i}-r_{i},x_{i}r_{i}]$。如果一對機器人相互可以看到&#xff0c;且它們的智商$q_{i}$的差距不大…

android qq登錄 獲取用戶信息嗎,免登錄 只需要一個QQ號就能獲取QQ頭像和QQ昵稱 獲取QQ用戶信息API...

[PHP] 純文本查看 復制代碼<?php // headerheader("Content-Type:application/json");error_reporting(E_ALL^E_NOTICE^E_WARNING);// 獲取QQ號$qq $_GET["qq"];// 過濾if (trim(empty($qq))) {echo json_encode(array(status > error,msg > 未…

Python3.8安裝 jupyter報錯 NotImplementedError

報錯如下&#xff1a; 原因&#xff1a; 是由于 python3.8 asyncio 在 windows 上默認使用 ProactorEventLoop 造成的&#xff0c;而不是之前的 SelectorEventLoop。jupyter 依賴 tornado&#xff0c;而 tornado 在 window 上需要使用 SelectorEventLoop&#xff0c;所以產生這…