NO IMAGE

今天分享給大家的是一個可容錯、高可用性、高效能、高擴充套件性的一個網路分散式檔案系統MooseFS

MooseFS檔案系統結構包括以下四個角色

  • 1 管理伺服器:負責各個資料儲存伺服器的管理,檔案讀寫排程,檔案空間回收以及恢復.多節點拷貝
  • 2 後設資料日誌伺服器: 負責備份master伺服器的變化日誌檔案,檔案型別為changelog_ml.*.mfs,以便於在master server出問題的時候接替其進行工作
  • 3 資料儲存伺服器:負責連線管理伺服器,聽從管理伺服器排程,提供儲存空間,併為客戶提供資料傳輸.
  • 4 客戶端: 通過fuse核心介面掛接遠端管理伺服器上所管理的資料儲存伺服器,.看起來共享的檔案系統和本地unix檔案系統使用一樣的效果.

應用場景

  • 大規模高併發的線上資料儲存及訪問(小檔案、大檔案)
  • 大規模的資料處理,例如日誌分析。小檔案強調效能沒HDFS強大

缺點

  • 目前是單點,可通過DRBD Heartbeat方案或者使用DRBD Inotify方案解決,master與backup之間同步(類似MySQL主從同步)
  • master伺服器對記憶體要求高
  • metalogger複製後設資料間隔時間較長(預設是y可使用定時指令碼觸發)

環境申明

本次實驗使用網段為192.168.122.0/24,上層區域網網段為10.0.10.0/24
下面測試會使用一臺伺服器做轉發,會在步驟中宣告出。

實驗所使用的伺服器均為1核 1M 60G的虛擬機器,系統使用的是CentOS7.5.1804

實驗伺服器劃分

Server-21---對應IP--->192.168.122.21---對應服務--->Master Servers
Server-22---對應IP--->192.168.122.22---對應服務--->Metaloggers
Server-24---對應IP--->192.168.122.23---對應服務--->Chunk Servers
Server-24---對應IP--->192.168.122.24---對應服務--->Chunk Servers
Server-25---對應IP--->192.168.122.25---對應服務--->Chunk Servers
Server-26---對應IP--->192.168.122.26---對應服務--->Clients

宿主機Server-60
IP:
ens32:192.168.122.1
virbr0:10.0.10.60

Server-60與所有節點伺服器做免密認證,實驗部分需統一操作均使用ansible進行操作

ansible hosts檔案

[mfs]
192.168.122.21
192.168.122.22
192.168.122.23
192.168.122.24
192.168.122.25
192.168.122.26

注意所有節點預設使用OPSX官方reop

部署MooseFS

這裡使用的是官方推薦的安裝方式(通過官方yum源進行yum安裝),如果有時間的話會更新原始碼包的安裝方式

將所有伺服器節點下載官方官方yum源的repo檔案

[[email protected] ~]# ansible mfs -m shell -a 'curl "https://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS'
[[email protected] ~]# ansible mfs -m shell -a 'curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/Moo

Master Servers

伺服器IP地址:192.168.122.21/24、10.0.10.21/24
主機名稱:Server-21

[[email protected] ~]# yum -y install moosefs-master moosefs-cgi moosefs-cgiserv moosefs-cli

Chunk Servers

伺服器IP地址:192.168.122.23/24
主機名稱:Server-23

伺服器IP地址:192.168.122.24/24
主機名稱:Server-24

伺服器IP地址:192.168.122.25/24
主機名稱:Server-25

多臺伺服器使用ansible批量安裝

[[email protected] ~]# ansiblemfs_chunk -m yum -a "name=moosefs-chunkserver state=present"

Metaloggers

[[email protected] ~]# yum -y install moosefs-metalogger

Clients

[[email protected] ~]# yum -y install moosefs-client

到這裡基本整個架構就已經搭建完成了

我們再來看下整體的架構是怎樣的(似乎有點顛倒,但個人覺得安裝完成後再來梳理真個架構會比較清晰)

MooseFS叢集架構

架構圖內容:

  • 先在Server-21搭建服務端Master Servers,Metaloggers是記錄日誌的伺服器
  • 然後將客戶端Server-23、Server-24、Server-25新增硬碟後掛載加入mfs叢集
  • 客戶端Clients掛載服務端共享出來的磁碟

啟動服務

Master Servers

# 啟動主程式
[[email protected] ~]# mfsmaster start
open files limit has been set to: 16384
working directory: /var/lib/mfs
lockfile created and locked
initializing mfsmaster modules ...
exports file has been loaded
topology file has been loaded
loading metadata ...
can't find metadata.mfs - try using option '-a'
init: metadata manager failed !!!
error occurred during initialization - exiting

當我們啟動服務的時候可能會報上面這麼一個錯誤,所以我們需要配置一下配置檔案才行

上面的報錯它說沒有metadata.mfs這個配置檔案,於是我跑到配置檔案目錄下看了一下,以為這個模板應該就放在裡頭,不過我進去一看並沒有

[[email protected] ~]# cd /etc/mfs/
[[email protected] mfs]# ls
mfsexports.cfg  mfsexports.cfg.sample  mfsmaster.cfg  mfsmaster.cfg.sample  mfstopology.cfg  mfstopology.cfg.sample

於是我便使用find從根目錄搜尋,並沒能找到,所以我在後面加了個*號匹配所有,果然找到了

[[email protected] mfs]# find / -name 'metadata.mfs*'
/var/lib/mfs/metadata.mfs.empty
/var/lib/mfs/metadata.mfs.back.1
/var/lib/mfs/metadata.mfs.back

接下來就只要拷貝back檔案過去就可以了,當並非我想的那樣,拷貝到/etc/mfs/目錄下還是報著一樣的錯誤,所以我乾脆直接在metadata.mfs.back所在目錄內重新命名為metadata.mfs,然後真的可以啟動了

[[email protected] mfs]# mv /var/lib/mfs/metadata.mfs.back /var/lib/mfs/metadata.mfs

啟動成功後是這樣的

[[email protected] mfs]# mfsmaster start
open files limit has been set to: 16384
working directory: /var/lib/mfs
lockfile created and locked
initializing mfsmaster modules ...
exports file has been loaded
topology file has been loaded
loading metadata ...
loading sessions data ... ok (0.0000)
loading storage classes data ... ok (0.0001)
loading objects (files,directories,etc.) ... ok (1.4122)
loading names ... ok (0.0000)
loading deletion timestamps ... ok (0.0000)
loading quota definitions ... ok (0.0000)
loading xattr data ... ok (0.0000)
loading posix_acl data ... ok (0.0000)
loading open files data ... ok (0.0000)
loading flock_locks data ... ok (0.0000)
loading posix_locks data ... ok (0.0000)
loading chunkservers data ... ok (0.0000)
loading chunks data ... ok (0.0000)
checking filesystem consistency ... ok
connecting files and chunks ... ok
all inodes: 1
directory inodes: 1
file inodes: 0
chunks: 0
metadata file has been loaded
stats file has been loaded
master <-> metaloggers module: listen on *:9419
master <-> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly

接下來就啟動web應用就可以了

# 啟動web管理
[[email protected] ~]# mfscgiserv start
lockfile created and locked
starting simple cgi server (host: any , port: 9425 , rootpath: /usr/share/mfscgi)

接下來訪問一下web

然而看起來並不是那麼地成功,其實到這裡你已經很成功了,在輸入框內輸入127.0.0.1後按回車鍵就可以進入監控頁面了

這裡已經完成一大半了,後面繼續配置其他服務。

下面是主配置檔案,一般可以不用配置,但如果你要配置也可以,這裡我講下這個配置檔案的作用

[[email protected] ~]# cat /etc/mfs/mfsmaster.cfg | grep -vE "^#|^$"
DATA_PATH = /var/lib/mfs                     # 指定後設資料的儲存路徑
EXPORTS_FILENAME = /etc/mfs/mfsexports.cfg   # 許可權控制檔案的儲存位置
MATOML_LISTEN_PORT = 9419                    # Master to Chunk Server埠監聽
MATOCS_LISTEN_PORT = 9420                    # Master to MetaLogger
MATOCL_LISTEN_PORT = 9421                    # 客戶端掛載MFS時連結的埠

Metaloggers

修改配置檔案,將這下面幾個選項開啟註釋並修改

[[email protected] ~]# cat /etc/mfs/mfsmetalogger.cfg | grep -Ev '^#|^$'
DATA_PATH = /var/lib/mfs           # 從Master獲取日誌檔案儲存的位置
BACK_LOGS = 50                     # 超過50個備份日誌則輪轉
META_DOWNLOAD_FREQ = 24            # 後設資料備份下載的頻率,預設是24小時
MASTER_HOST = 192.168.122.21       # 指定Master伺服器
MASTER_PORT = 9419                 # Master的埠

啟動服務

[[email protected] ~]# mfsmetalogger start
open files limit has been set to: 4096
working directory: /var/lib/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly

Chunk Server

使用的三臺伺服器分別是Server-23、Server-24、Server-25

在啟動Chunk Server服務之前,我們需要修改兩個配置檔案

  • 修改/etc/mfs/mfschunkserver.cfg配置檔案,將MASTER_HOST修改為Master Servers的IP地址
[[email protected] ~]# vim /etc/mfs/mfschunkserver.cfg
MASTER_HOST = 192.168.122.21
  • 再之就是修改掛載分割槽或目錄的配置檔案,這樣才能讓Chunk Server知道要使用的是哪個目錄來儲存檔案,在配置檔案中新增一行直接寫上路徑即可
[[email protected] ~]# vim /etc/mfs/mfshdd.cfg
/data

啟動Chunk Server使用mfschunkserver命令啟動

mfschunkserver start

當我們啟動時遇到下面錯誤時,說明掛載的分割槽/目錄沒有許可權

[[email protected] ~]# mfschunkserver start
open files limit has been set to: 16384
working directory: /var/lib/mfs
lockfile created and locked
setting glibc malloc arena max to 4
setting glibc malloc arena test to 4
initializing mfschunkserver modules ...
hdd space manager: can't create lock file '/data/.lock': EACCES (Permission denied)
hdd space manager: no hdd space defined in /etc/mfs/mfshdd.cfg file
init: hdd space manager failed !!!
error occurred during initialization - exiting

所以我們需要分配許可權給掛載的分割槽/目錄然後再啟動,就不會報錯了

[[email protected] ~]# chown -R mfs. /data/
[[email protected] ~]# mfschunkserver start
open files limit has been set to: 16384
working directory: /var/lib/mfs
lockfile created and locked
setting glibc malloc arena max to 4
setting glibc malloc arena test to 4
initializing mfschunkserver modules ...
hdd space manager: path to scan: /data/
hdd space manager: start background hdd scanning (searching for available chunks)
main server module: listen on *:9422
no charts data file - initializing empty charts
mfschunkserver daemon initialized properly

能正常啟動後,我們需要將這兩個配置檔案同步給另外兩臺儲存的伺服器,記得建立/data目錄,有磁碟則掛載到這個目錄下,然後啟動服務

啟動服務後可以檢視下埠,如果9422埠對應是mfschunkserver服務則為正常啟動,否則檢查配置檔案是都有新增多餘的配置

配置完成之後我們再來看下web監控頁面,點選Server-,可以看到這三臺Chunk Server伺服器的磁碟狀況

這說明已經成功了

接下來就使用客戶端來掛載磁碟

Clients

客戶端我們在上面就已經安裝了,所以直接使用掛載就可以

[[email protected] ~]# mfsmount /data/ -p -H 192.168.122.21
MFS Password:                    # 這個地方我沒有設定密碼,所以直接回車
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root

掛載後我們檢視下掛載情況

[[email protected] ~]# df -h
檔案系統                 容量  已用  可用 已用% 掛載點
/dev/mapper/centos-root  7.1G  1.3G  5.9G   18% /
devtmpfs                 484M     0  484M    0% /dev
tmpfs                    496M     0  496M    0% /dev/shm
tmpfs                    496M  6.8M  490M    2% /run
tmpfs                    496M     0  496M    0% /sys/fs/cgroup
/dev/vda1               1014M  130M  885M   13% /boot
tmpfs                    100M     0  100M    0% /run/user/0
192.168.122.21:9421       22G  4.5G   17G   22% /data

可以看到最後一行,已經將它掛載到/data目錄下

在web監控的Mounts可以看到有哪臺伺服器掛載了,且可以看到掛載到哪個目錄

接下來我們就做個寫測試,看能不能寫入資料

[[email protected] ~]# echo htllo >/data/file1.txt
[[email protected] ~]# cat /data/file1.txt 
htllo

然後我們去到web頁面的Mounts裡看到有一個檔案,或者直接到儲存伺服器Server-23-25看檔案是否已存進去

[[email protected] ~]# tree /data/
/data/
├── 00
│  └── chunk_0000000000000001_00000001.mfs

上面這個就是存進去後的格式,測試的話你可以進行,這次的實驗就到這啦~~~