溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

什么是MooseFS以及怎么進(jìn)行高可用部署

發(fā)布時(shí)間:2021-11-04 17:00:55 來(lái)源:億速云 閱讀:168 作者:柒染 欄目:建站服務(wù)器

什么是MooseFS以及怎么進(jìn)行高可用部署,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

MooseFS的工作原理分析

MooseFS(下面統(tǒng)一稱(chēng)為MFS)由波蘭公司Gemius SA于2008年5月30日正式推出的一款Linux下的開(kāi)源存儲(chǔ)系統(tǒng),是OpenStack開(kāi)源云計(jì)算項(xiàng)目的子項(xiàng)目之一,被稱(chēng)為對(duì)象存儲(chǔ),提供了強(qiáng)大的擴(kuò)展性、高可靠性和持久性。它能夠?qū)⑽募植即鎯?chǔ)于不同的物理機(jī)器上,對(duì)外卻提供的是一個(gè)透明的接口的存儲(chǔ)資源池。它還具有在線擴(kuò)展、文件切塊存儲(chǔ)、節(jié)點(diǎn)無(wú)單點(diǎn)故障、讀寫(xiě)效率高等特點(diǎn)。

MFS分布式文件系統(tǒng)由元數(shù)據(jù)服務(wù)器(Master Server)、元數(shù)據(jù)日志服務(wù)器(Metalogger Server)、數(shù)據(jù)存儲(chǔ)服務(wù)器(Chunk Server)、客戶(hù)端(Client)組成。

什么是MooseFS以及怎么進(jìn)行高可用部署

MFS文件系統(tǒng)結(jié)構(gòu)圖

(1)元數(shù)據(jù)服務(wù)器:MFS系統(tǒng)中的核心組成部分,存儲(chǔ)每個(gè)文件的元數(shù)據(jù),負(fù)責(zé)文件的讀寫(xiě)調(diào)度、空間回收和在多個(gè)chunk server之間的數(shù)據(jù)拷貝等。目前MFS僅支持一個(gè)元數(shù)據(jù)服務(wù)器,因此可能會(huì)出現(xiàn)單點(diǎn)故障。針對(duì)此問(wèn)題我們需要用一臺(tái)性能很穩(wěn)定的服務(wù)器來(lái)作為我們的元數(shù)據(jù)服務(wù)器,這樣可以降低出現(xiàn)單點(diǎn)故障的概率。

(2) 元數(shù)據(jù)日志服務(wù)器:元數(shù)據(jù)服務(wù)器的備份節(jié)點(diǎn),按照指定的周期從元數(shù)據(jù)服務(wù)器上將保存元數(shù)據(jù)、更新日志和會(huì)話(huà)信息的文件下載到本地目錄下。當(dāng)元數(shù)據(jù)服務(wù)器出現(xiàn)故障時(shí),我們可以從該服務(wù)器的文件中拿到相關(guān)的必要的信息對(duì)整個(gè)系統(tǒng)進(jìn)行恢復(fù)。

此外,利用元數(shù)據(jù)進(jìn)行備份是一種常規(guī)的日志備份手段,這種方法在某些情況下并不能完美的接管業(yè)務(wù),還是會(huì)造成數(shù)據(jù)丟失。此次將采用通過(guò)iSCSI共享磁盤(pán)對(duì)元數(shù)據(jù)節(jié)點(diǎn)做雙機(jī)熱備。

(3) 數(shù)據(jù)存儲(chǔ)服務(wù)器:負(fù)責(zé)連接元數(shù)據(jù)管理服務(wù)器,聽(tīng)從元數(shù)據(jù)服務(wù)器的調(diào)度,提供存儲(chǔ)空間,并為客戶(hù)端提供數(shù)據(jù)傳輸,MooseFS提供一個(gè)手動(dòng)指定每個(gè)目錄的備份個(gè)數(shù)。假設(shè)個(gè)數(shù)為n,那么我們?cè)谙蛳到y(tǒng)寫(xiě)入文件時(shí),系統(tǒng)會(huì)將切分好的文件塊在不同的chunk server上復(fù)制n份。備份數(shù)的增加不會(huì)影響系統(tǒng)的寫(xiě)性能,但是可以提高系統(tǒng)的讀性能和可用性,這可以說(shuō)是一種以存儲(chǔ)容量換取寫(xiě)性能和可用性的策略。

(4) 客戶(hù)端:使用mfsmount的方式通過(guò)FUSE內(nèi)核接口掛接遠(yuǎn)程管理服務(wù)器上管理的數(shù)據(jù)存儲(chǔ)服務(wù)器到本地目錄上,然后就可以像使用本地文件一樣來(lái)使用我們的MFS文件系統(tǒng)了。

MFS讀寫(xiě)原理

1.MFS讀數(shù)據(jù)過(guò)程

什么是MooseFS以及怎么進(jìn)行高可用部署

MFS讀過(guò)程

MFS讀文件工作步驟:

① MFS客戶(hù)端向系統(tǒng)的元數(shù)據(jù)管理服務(wù)器提交讀取文件的任務(wù)請(qǐng)求;

② 元數(shù)據(jù)服務(wù)器檢索自己的數(shù)據(jù)并把數(shù)據(jù)所存放的位置發(fā)給客戶(hù)端;

③ 客戶(hù)端接收到元數(shù)據(jù)管理服務(wù)器返回的信息后,向已知的數(shù)據(jù)存儲(chǔ)服務(wù)器發(fā)送數(shù)據(jù)請(qǐng)求。

2.MFS寫(xiě)數(shù)據(jù)過(guò)程

什么是MooseFS以及怎么進(jìn)行高可用部署

<div align="left" font-size:16px;white-space:normal;background-color:#FFFFFF;">  

MFS寫(xiě)過(guò)程

MFS寫(xiě)文件工作步驟:

① MFS的客戶(hù)端有數(shù)據(jù)寫(xiě)需求時(shí),首先向元數(shù)據(jù)管理服務(wù)器提交些文件的任務(wù)請(qǐng)求;

② 元數(shù)據(jù)管理服務(wù)器接收到客戶(hù)端請(qǐng)求后在數(shù)據(jù)服務(wù)器創(chuàng)建新的Chunk文件塊;

③ 數(shù)據(jù)服務(wù)器將創(chuàng)建成功的消息返回給元數(shù)據(jù)管理服務(wù)器;

④ 元數(shù)據(jù)管理服務(wù)器將數(shù)據(jù)服務(wù)器的地址返回給客戶(hù)端;

⑤ 客戶(hù)端直接向已知的數(shù)據(jù)服務(wù)器寫(xiě)數(shù)據(jù);

⑥ 數(shù)據(jù)服務(wù)器將寫(xiě)文件成功的消息返回給客戶(hù)端;

⑦ 客戶(hù)端將此次寫(xiě)完成的信號(hào)發(fā)送給元數(shù)據(jù)管理服務(wù)器。

MFS 部署

主機(jī)環(huán)境:RHEL6.5 selinux and iptables disabled

Master:172.25.10.2 (HA) 172.25.10.3 (HA)

VIP 172.25.10.100

##Metalogger: 192.168.0.77

Chunkserver: 172.25.10.6 172.25.10.7 172.25.10.8

Client: 172.25.10.4

172.25.10.5 (iSCSI)


 

生成 rpm,便于部署:

# yum install gcc make rpm-build fuse-devel zlib-devel -y

# rpmbuild -tb mfs-1.6.27.tar.gz

# ls ~/rpmbuild/RPMS/x86_64

mfs-cgi-1.6.27-4.x86_64.rpm

mfs-master-1.6.27-4.x86_64.rpm

mfs-chunkserver-1.6.27-4.x86_64.rpm 

元數(shù)據(jù)服務(wù)器 Master server 安裝

yum install -y mfs-cgi-1.6.27-4.x86_64.rpm mfs-cgiserv-1.6.27-4.x86_64.rpm mfs-master-1.6.27-4.x86_64.rpm

# cd /etc/mfs/

# cp mfsmaster.cfg.dist mfsmaster.cfg

# cp mfsexports.cfg.dist mfsexports.cfg

# vi mfsexports.cfg

         172.25.10.0/24    /          rw,alldirs,maproot=0 

該文件每一個(gè)條目分為三部分:

    第一部分:客戶(hù)端的ip地址

         第二部分:被掛接的目錄

         第三部分:客戶(hù)端擁有的權(quán)限

# cd /var/lib/mfs

# cp metadata.mfs.empty metadata.mfs

# chown -R nobody /var/lib/mfs

修改/etc/hosts文件,增加下面的行:

172.25.10.2 mfsmaster

# mfsmaster start 啟動(dòng) master server

# mfscgiserv #啟動(dòng) CGI 監(jiān)控服務(wù)

lockfile created and locked

starting simple cgi server (host: any , port: 9425 , rootpath: /usr/share/mfscgi)

# cd /usr/share/mfscgi/

# chmod +x chart.cgi mfs.cgi

在瀏覽器地址欄輸入 http://172.25.10.2:9425 即可查看 master的運(yùn)行情況

存儲(chǔ)服務(wù)器 Chunk servers 安裝

# yum localinstall -y mfs-chunkserver-1.6.27-4.x86_64.rpm

# cd /etc/mfs

# cp mfschunkserver.cfg.dist mfschunkserver.cfg

# cp mfshdd.cfg.dist mfshdd.cfg

# vi mfshdd.cfg 定義 mfs 共享點(diǎn)

/mnt/mfschunks1

# chown -R nobody:nobody /mnt/mfschunks1

修改/etc/hosts 文件,增加下面的行:

172.25.10.2 mfsmaster

mkdir /var/lib/mfs

chown nobody /var/lib/mfs

現(xiàn)在再通過(guò)瀏覽器訪問(wèn) http://172.25.10.2:9425/ 應(yīng)該可以看見(jiàn)這個(gè) MFS系統(tǒng)的全部信息,包括元數(shù)據(jù)管理master和存儲(chǔ)服務(wù)chunkserver。

客戶(hù)端 client安裝

# yum localinstall -y mfs-client-1.6.27-4.x86_64.rpm

# cd /etc/mfs

# cp mfsmount.cfg.dist mfsmount.cfg

# vi mfsmount.cfg 定義客戶(hù)端默認(rèn)掛載

mfsmaster=mfsmaster

/mnt/mfs

# mfsmount

# df -h

...

mfsmaster:9421 2729728 0 2729728 0% /mnt/mfs

MFS 測(cè)試

在 MFS 掛載點(diǎn)下創(chuàng)建兩個(gè)目錄,并設(shè)置其文件存儲(chǔ)份數(shù):

# cd /mnt/mfs

# mkdir dir1 dir2

# mfssetgoal -r 2 dir2/ 設(shè)置在 dir2 中文件存儲(chǔ)份數(shù)為兩個(gè),默認(rèn)是一個(gè)

dir2/:

inodes with goal changed: 1

inodes with goal not changed: 0

inodes with permission denied: 0

對(duì)一個(gè)目錄設(shè)定“goal”,此目錄下的新創(chuàng)建文件和子目錄均會(huì)繼承此目錄的設(shè)定,但不會(huì)改變已經(jīng)存在的文件及目錄的copy份數(shù)。但使用-r選項(xiàng)可以更改已經(jīng)存在的copy份數(shù)。

拷貝同一個(gè)文件到兩個(gè)目錄

# cp /etc/passwd dir1 # cp /etc/passwd dir2

查看文件信息

# mfsfileinfo dir1/passwd

dir1/passwd:

chunk 0: 0000000000000001_00000001 / (id:1 ver:1)

copy 1: 172.25.10.6:9422

# mfsfileinfo dir2/passwd

dir2/passwd:

chunk 0: 0000000000000002_00000001 / (id:2 ver:1)

copy 1: 172.25.10.6:9422

copy 2: 172.25.10.7:9422

關(guān)閉 mfschunkserver2 后再查看文件信息

# mfsfileinfo dir1/passwd

dir1/passwd:

chunk 0: 0000000000000001_00000001 / (id:1 ver:1)

no valid copies !!!

# mfsfileinfo dir2/passwd

dir2/passwd:

chunk 0: 0000000000000002_00000001 / (id:2 ver:1)

copy 1: 172.25.10.7:9422

啟動(dòng) mfschunkserver2 后,文件回復(fù)正常。

恢復(fù)誤刪文件

# rm -f dir1/passwd

# mfsgettrashtime dir1/

dir1/: 86400

文件刪除后存放在“ 垃圾箱”中的時(shí)間稱(chēng)為隔離時(shí)間,這個(gè)時(shí)間可以用mfsgettrashtime命令來(lái)查看,用mfssettrashtime命令來(lái)設(shè)置,單位為秒,默認(rèn)為86400秒。

# mkdir /mnt/mfsmeta

# mfsmount -m /mnt/mfsmeta/ -H mfsmaster

掛載 MFSMETA 文件系統(tǒng),它包含目錄trash (包含仍然可以被還原的刪除文件的信息)和

trash/undel (用于獲取文件)。把刪除的文件,移到/ trash/undel 下,就可以恢復(fù)此文件。

# cd /mnt/mfsmeta/trash

# mv 00000004\|dir1\|passwd undel/

到 dir1 目錄中可以看到passwd文件恢復(fù)

在 MFSMETA 的目錄里,除了trash和trash/undel兩個(gè)目錄,還有第三個(gè)目錄reserved,該目錄內(nèi)有已經(jīng)刪除的文件,但卻被其他用戶(hù)一直打開(kāi)著。在用戶(hù)關(guān)閉了這些被打開(kāi)的文件后,reserved目錄中的文件將被刪除,文件的數(shù)據(jù)也將被立即刪除。此目錄不能進(jìn)行操作。

MFS高可用部署

iSCSI 配置

增加一塊虛擬磁盤(pán),無(wú)需格式化(vdb)

yum install scsi-target-utils.x86_64 -y

vim /etc/tgt/targets.conf

#<target iqn.2016-03.com.example:server.target9>

#    backing-store /dev/vdb1

# initiator-address 172.25.10.2

# initiator-address 172.25.10.3

#</target>

/etc/init.d/tgtd start && chkconfig tgtd on

在master(172.25.10.2 172.25.10.3)端下載安裝 iscsi-initiator-utils.x86_64

iscsiadm -m discovery -t st -p 172.25.10.5

iscsiadm -m node -l

將磁盤(pán)格式化為ext4格式

fdisk -cu /dev/sda

mkfs.ext4 /dev/sda1

將/var/lib/mfs/* 所有數(shù)據(jù)移到網(wǎng)絡(luò)磁盤(pán)/dev/sda1中去,然后將其掛載到/var/lib/mfs

mount /dev/sda1 /mnt/

cp -p /var/lib/mfs/* /mnt/

mfsmaster start 

Pacemaker安裝(172.25.10.2;3)

配yum源

默認(rèn)yum源只有基礎(chǔ)包Server,yum源包里有

ResilientStorage/

HighAvailability/

LoadBalancer/

Packages/

images/

Packages/

...

所需安裝包pacemaker在HighAvailability包里

yum install pacemaker -y

使用pacemaker配置時(shí)需要安裝pacemaker的接口,程序接口為crmshell,早期裝上pacemaker自帶有crmshell接口,新版本已被獨(dú)立出來(lái),不再是pacemaker組成部分。而crmshell又依賴(lài)于pssh相關(guān)包,因此得安裝這兩個(gè)組件。

# yum install crmsh-1.2.6-0.rc2.2.1.x86_64.rpm pssh-2.3.1-2.1.x86_64.rpm

使用yum install安裝pacemaker時(shí)會(huì)安裝其大量相關(guān)性依賴(lài)包,包括corosync,所以corosync不再安裝,直接修改其配置文件/etc/corosync/corosync.conf。

cd /etc/corosync/

#cp corosync.conf.example corosync.conf

vim corosync.conf

#bindnetaddr: 172.25.10.0

#mcastaddr: 226.94.1.1

#

#service {

# name: pacemaker

# ver: 0

#}

/etc/init.d/corosync start && chkconfig corosync on

fence安裝(1229)

本次部署采用外部fence ,fence是C/S架構(gòu),在fence服務(wù)端節(jié)點(diǎn)需要安裝如下三個(gè)軟件包。

fence-virtd.x86_64

fence-virtd-libvirt.x86_64

fence-virtd-multicast.x86_64

安裝好之后使用命令fence_virtd -c進(jìn)入交互式界面配置fence文件,在配置時(shí)需要注意的是選擇接口(interface)時(shí)選主機(jī)之間通信的網(wǎng)卡。

mkdir /etc/cluster #默認(rèn)不存在cluster;

服務(wù)端和客戶(hù)端之間通過(guò)key文件進(jìn)行通信,key文件默認(rèn)不存在,需要手動(dòng)生成并拷貝到所有客戶(hù)端節(jié)點(diǎn)。節(jié)點(diǎn)默認(rèn)沒(méi)有/etc/cluster目錄,需自己建立

# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key

# for i in {2,3} ;do scp /etc/cluster/fence_xvm.key master$i.example.com:/etc/cluster ; done

systemctl start fence_virtd.service

systemctl enable fence_virtd.service 

在客戶(hù)端(172.25.10.2,3)需安裝fence-virt工具

# yum install fence-virt.x86_64 -y 

元數(shù)據(jù)高可用性高可用實(shí)現(xiàn)

之前安裝好的crmshell接口提供一個(gè)命令行交互接口對(duì)pacemaker集群進(jìn)行管理,具有非常強(qiáng)大且易用的管理功能,所做的配置會(huì)同步到各個(gè)集群節(jié)點(diǎn)上。下面將元數(shù)據(jù)服務(wù)器上各個(gè)服務(wù)交由集群管理。

a. 首先將fence服務(wù)交由集群。由于外部fence只能識(shí)別domain,所以需要將domain與hostname綁定,并每隔60s監(jiān)控一次。

# crm(live)configure# primitive vmfence stonith:fence_xvm parms pcmk_host_map="master1.example.com:vm2;master2.example.com:vm3" op monitor interval=60s

b. 在將MFS系統(tǒng)服務(wù)交由集群接管之前,需建立一個(gè)虛擬IP(VIP),VIP對(duì)外為master節(jié)點(diǎn),當(dāng)集群里某個(gè)master節(jié)點(diǎn)資源宕機(jī),則服務(wù)通過(guò)VIP將資源遷移到另一個(gè)master節(jié)點(diǎn),對(duì)client來(lái)說(shuō),絲毫沒(méi)有感覺(jué)。

# crm(live)configure# primitive vip ocf:hearbeat:IPaddr2 params ip="172.25.10.100" cidr_netmask="24" op monitor interval="30s"

c. 將MFS系統(tǒng)服務(wù)交由集群管理器管理。

# crm(live)configure# property no-quorum-policy="ignore" # 默認(rèn)結(jié)點(diǎn)數(shù)若只有一個(gè),表示集群不存在,忽視

# crm(live)configure# primitive mfsdata ocf:heartbeat:Filesystem params device="/dev/sda1" directory="/var/lib/mfs" fstype="ext4" op monitor interval="60s"

# crm(live)configure# primitive mfs lsb:mfs op monitor interval="60s"

# crm(live)configure# group mfsgroup vip mfs mfsdata

# crm(live)configure# order mfs-after-mfstdata inf: mfsdata mfs

在chunk 和client端加入hosts解析

172.25.10.100 mfsmaster

此時(shí),整個(gè)集群服務(wù)搭建完畢,MooseFS集群架構(gòu)如下所示

什么是MooseFS以及怎么進(jìn)行高可用部署

看完上述內(nèi)容,你們掌握什么是MooseFS以及怎么進(jìn)行高可用部署的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI