目錄
* 分佈式原理
* MFS原理
* 案例實施
* 總結歸納
分佈式原理
分佈式文件系統是指文件系統管理的物理存儲資源不一定直接連接在本地節點上,而是通過計算機網絡與節點相連。簡單來說,就是把分散的共享文件夾,集合到一個虛擬文件夾內,客戶只要打開這個虛擬文件夾,就可以訪問到所有連接到虛擬文件夾內的共享文件。
MFS原理
MFS是一個具有容錯性的網絡分佈式文件系統,它把數據分散存放在多個物理服務器上,而呈現給用戶的則是一個統一的資源。
(1)MFS文件系統
- 元數據服務器(master)---在整個體系中負責管理文件系統,維護元數據。
- 元數據日誌服務器(metalogger)---備份master服務器的日誌變化,數據丟失時,可從日誌文件中恢復。
- 數據存儲服務器(chunk server)---真正存儲數據的服務器。存儲時把文件分塊保存,並在數據服務器間進行復制。
- 客戶端(client)---可以像掛載NFS一樣掛載MFS文件系統
(2)讀取數據處理過程
(3)寫入數據處理過程
案例環境
主機 | 操作系統 | IP地址 | 主要軟件 |
---|---|---|---|
Master Server | CentOS-7-x86_64 | 192.168.37.128 | mfs-1.6.27-5.tar.gz |
Metalogger Server | CentOS-7-x86_64 | 192.168.37.130 | mfs-1.6.27-5.tar.gz |
Chunk Server1 | CentOS-7-x86_64 | 192.168.37.131 | mfs-1.6.27-5.tar.gz |
Chunk Server2 | CentOS-7-x86_64 | 192.168.37.132 | mfs-1.6.27-5.tar.gz |
Client | CentOS-7-x86_64 | 192.168.37.133 | mfs-1.6.27-5.tar.gz;fuse-2.9.2.tar.gz |
源碼包:鏈接:https://pan.baidu.com/s/1UdorWep8OzdlL7CPbgyzJQ 提取碼:62nv
案例實施
一、搭建Master Server
1、下載源碼包及安裝環境包
yum install gcc gcc-c++ zlib-devel -y
systemctl stop firewalld.service
setenforce 0
2、創建用戶
useradd -s /sbin/nologin mfs
3、安裝mfs
tar zxvf mfs-1.6.27-5.tar.gz -C /opt
cd /opt/mfs-1.6.27
./configure \
--prefix=/usr/local/mfs \ #工作目錄
--with-default-user=mfs \ #運行masterserver的用戶
--with-default-group=mfs \ #運行masterserver的組
--disable-mfschunkserver \ #關閉節點服務
--disable-mfsmount #關閉客戶端服務
make && make install
4、複製配置文件
cd /usr/local/mfs/etc/mfs
cp mfsexports.cfg.dist mfsexports.cfg #被掛載目錄及權限配置文件
cp mfsmaster.cfg.dist mfsmaster.cfg #主配置文件
cp mfstopology.cfg.dist mfstopology.cfg #拓撲架構感知
5、配置文件(此處無任何操作,主要對配置文件進行簡介)
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)
mfsexports.cfg
#Allow everything but "meta".
* / rw,alldirs,admin,maproot=0:0
#Allow "meta".
* . rw
每個條目被分爲三部分:客戶端IP 允許掛載的目錄 客戶端擁有的權限
alldirs:所有子目錄都支持掛載
maproot:映射爲root,還是指定的用戶
6、啓動服務
/usr/local/mfs/sbin/mfsmaster start
netstat -ntap | grep mfsmaster
#/usr/local/mfs/sbin/mfsmaster -s //停止
二、搭建Metalogger Server
1、下載源碼包及安裝環境包
yum install gcc gcc-c++ zlib-devel -y
systemctl stop firewalld.service
setenforce 0
2、創建用戶
useradd -s /sbin/nologin mfs
3、安裝mfs
tar zxvf mfs-1.6.27-5.tar.gz -C /opt
cd /opt/mfs-1.6.27
./configure \
--prefix=/usr/local/mfs \ #工作目錄
--with-default-user=mfs \ #運行masterserver的用戶
--with-default-group=mfs \ #運行masterserver的組
--disable-mfschunkserver \ #關閉節點服務
--disable-mfsmount #關閉客戶端服務
make && make install
4、複製配置文件
cd /usr/local/mfs/etc/mfs
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
5、修改配置文件
vim mfsmetalogger.cfg
MASTER_HOST = 192.168.37.128 #指向master server
6、開啓服務
/usr/local/mfs/sbin/mfsmetalogger start
netstat -ntap | grep mfsmetalogger
三、搭建Chunk Server
1、下載源碼包及安裝環境包
yum install gcc gcc-c++ zlib-devel -y
systemctl stop firewalld.service
setenforce 0
2、創建用戶
useradd -s /sbin/nologin mfs
3、安裝mfs
tar zxvf mfs-1.6.27-5.tar.gz -C /opt
cd /opt/mfs-1.6.27
./configure \
--prefix=/usr/local/mfs \ #工作目錄
--with-default-user=mfs \ #運行masterserver的用戶
--with-default-group=mfs \ #運行masterserver的組
--disable-mfsmaster \ #關閉主服務
--disable-mfsmount #關閉客戶端服務
make && make install
4、複製配置文件
cd /usr/local/mfs/etc/mfs
cp mfschunkserver.cfg.dist mfschunkserver.cfg
cp mfshdd.cfg.dist mfshdd.cfg #提供存儲空間
5、修改配置文件
vim mfschunkserver.cfg
MASTER_HOST = 192.168.37.128 ** #指向master server**
vim mfshdd.cfg #末行插入
/data
mkdir /data
chown -R mfs.mfs /usr/local/mfs #權限設置
6、開啓服務
/usr/local/mfs/sbin/mfschunkserver start
netstat -ntap | grep mfschunkserver
四、客戶端
1、安裝環境包
yum install gcc gcc-c++ zlib-devel -y
systemctl stop firewalld.service
setenforce 0
2、安裝fuse插件(mfs客戶端依賴於fuse)
tar zxvf fuse-2.9.2.tar.gz -C /opt #加載內核的小插件
cd /opt/fuse-2.9.2
./configure
make && make install
3、設置環境變量
vim /etc/profile #末行插入環境變量
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
#pkg-config 是通過庫提供的一個 .pc 文件獲得庫的各種必要信息的,這些信息可以通過 pkg-config 提供的參數單獨提取出來直接供編譯器和連接器使用。
source /etc/profile
4、安裝mfs客戶端
useradd -s /sbin/nologin mfs #創建用戶
tar zxvf mfs-1.6.27 -C /opt
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
5、掛載mfs文件系統
mkdir /opt/mfs
modprobe fuse #加載fuse模塊到內核
/usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.37.128
df -h
6、優化mfs客戶端常用操作
#mfs安裝後生成/usr/local/mfs/bin目錄,爲方便使用其目錄下的命名,可以加入到環境變量
vim /etc/profile
export PATH=/usr/local/mfs/bin:$PATH #識別mfs中所有命令
source /etc/profile
7、常用操作
mfsgetgoal -r /opt/mfs #複製文本
mfsgetgoal test #查詢複製份數
8、開啓監控
#在master server開啓監控,端口爲9425
/usr/local/mfs/sbin/mfscgiserv
netstat -ntap | grep 9425
9、客戶端測試
客戶端通過瀏覽器訪問 http://192.168.37.128:9425
監控界面各部分含義如下:
- Info:顯示MFS基本信息。
- Servers:列出現有的Chunk Server。
- Disks:列出現有的Chunk Server的硬盤信息。
- Exports:列出可被掛載的目錄。
- Mounts:列出被掛載的目錄。
- Operations:顯示正在執行的操作。
- Resources:列出當前儲存信息。
- Quotas:列出當前配額信息。
- Master Charts:顯示Master Server操作情況。
- Server Charts:顯示Chunk Server操作情況、數據傳輸及系統狀態。
總結歸納
1、本實驗中master只能做單點,會出現單點故障。
2、要保證Master Server的高可用,需要增加一臺master,做羣集服務,本章主要講述其原理及操作,後續會有羣集的博文更新。
3、master發生故障時,可以從metalogger中恢復。
4、希望與大家一起學習,不斷成長!