您好,登錄后才能下訂單哦!
什么是MooseFS以及怎么進行高可用部署,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
MooseFS(下面統一稱為MFS)由波蘭公司Gemius SA于2008年5月30日正式推出的一款Linux下的開源存儲系統,是OpenStack開源云計算項目的子項目之一,被稱為對象存儲,提供了強大的擴展性、高可靠性和持久性。它能夠將文件分布存儲于不同的物理機器上,對外卻提供的是一個透明的接口的存儲資源池。它還具有在線擴展、文件切塊存儲、節點無單點故障、讀寫效率高等特點。
MFS分布式文件系統由元數據服務器(Master Server)、元數據日志服務器(Metalogger Server)、數據存儲服務器(Chunk Server)、客戶端(Client)組成。
MFS文件系統結構圖
(1)元數據服務器:MFS系統中的核心組成部分,存儲每個文件的元數據,負責文件的讀寫調度、空間回收和在多個chunk server之間的數據拷貝等。目前MFS僅支持一個元數據服務器,因此可能會出現單點故障。針對此問題我們需要用一臺性能很穩定的服務器來作為我們的元數據服務器,這樣可以降低出現單點故障的概率。
(2) 元數據日志服務器:元數據服務器的備份節點,按照指定的周期從元數據服務器上將保存元數據、更新日志和會話信息的文件下載到本地目錄下。當元數據服務器出現故障時,我們可以從該服務器的文件中拿到相關的必要的信息對整個系統進行恢復。
此外,利用元數據進行備份是一種常規的日志備份手段,這種方法在某些情況下并不能完美的接管業務,還是會造成數據丟失。此次將采用通過iSCSI共享磁盤對元數據節點做雙機熱備。
(3) 數據存儲服務器:負責連接元數據管理服務器,聽從元數據服務器的調度,提供存儲空間,并為客戶端提供數據傳輸,MooseFS提供一個手動指定每個目錄的備份個數。假設個數為n,那么我們在向系統寫入文件時,系統會將切分好的文件塊在不同的chunk server上復制n份。備份數的增加不會影響系統的寫性能,但是可以提高系統的讀性能和可用性,這可以說是一種以存儲容量換取寫性能和可用性的策略。
(4) 客戶端:使用mfsmount的方式通過FUSE內核接口掛接遠程管理服務器上管理的數據存儲服務器到本地目錄上,然后就可以像使用本地文件一樣來使用我們的MFS文件系統了。
MFS讀過程
MFS讀文件工作步驟:
① MFS客戶端向系統的元數據管理服務器提交讀取文件的任務請求;
② 元數據服務器檢索自己的數據并把數據所存放的位置發給客戶端;
③ 客戶端接收到元數據管理服務器返回的信息后,向已知的數據存儲服務器發送數據請求。
<div align="left" font-size:16px;white-space:normal;background-color:#FFFFFF;">
MFS寫過程
MFS寫文件工作步驟:
① MFS的客戶端有數據寫需求時,首先向元數據管理服務器提交些文件的任務請求;
② 元數據管理服務器接收到客戶端請求后在數據服務器創建新的Chunk文件塊;
③ 數據服務器將創建成功的消息返回給元數據管理服務器;
④ 元數據管理服務器將數據服務器的地址返回給客戶端;
⑤ 客戶端直接向已知的數據服務器寫數據;
⑥ 數據服務器將寫文件成功的消息返回給客戶端;
⑦ 客戶端將此次寫完成的信號發送給元數據管理服務器。
主機環境: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
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
該文件每一個條目分為三部分:
第一部分:客戶端的ip地址
第二部分:被掛接的目錄
第三部分:客戶端擁有的權限
# 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 啟動 master server
# mfscgiserv #啟動 CGI 監控服務
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的運行情況
# 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 共享點
/mnt/mfschunks1
# chown -R nobody:nobody /mnt/mfschunks1
修改/etc/hosts 文件,增加下面的行:
172.25.10.2 mfsmaster
mkdir /var/lib/mfs
chown nobody /var/lib/mfs
現在再通過瀏覽器訪問 http://172.25.10.2:9425/ 應該可以看見這個 MFS系統的全部信息,包括元數據管理master和存儲服務chunkserver。
# yum localinstall -y mfs-client-1.6.27-4.x86_64.rpm
# cd /etc/mfs
# cp mfsmount.cfg.dist mfsmount.cfg
# vi mfsmount.cfg 定義客戶端默認掛載
mfsmaster=mfsmaster
/mnt/mfs
# mfsmount
# df -h
...
mfsmaster:9421 2729728 0 2729728 0% /mnt/mfs
在 MFS 掛載點下創建兩個目錄,并設置其文件存儲份數:
# cd /mnt/mfs
# mkdir dir1 dir2
# mfssetgoal -r 2 dir2/ 設置在 dir2 中文件存儲份數為兩個,默認是一個
dir2/:
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0
對一個目錄設定“goal”,此目錄下的新創建文件和子目錄均會繼承此目錄的設定,但不會改變已經存在的文件及目錄的copy份數。但使用-r選項可以更改已經存在的copy份數。
拷貝同一個文件到兩個目錄
# 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
關閉 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
啟動 mfschunkserver2 后,文件回復正常。
恢復誤刪文件
# rm -f dir1/passwd
# mfsgettrashtime dir1/
dir1/: 86400
文件刪除后存放在“ 垃圾箱”中的時間稱為隔離時間,這個時間可以用mfsgettrashtime命令來查看,用mfssettrashtime命令來設置,單位為秒,默認為86400秒。
# mkdir /mnt/mfsmeta
# mfsmount -m /mnt/mfsmeta/ -H mfsmaster
掛載 MFSMETA 文件系統,它包含目錄trash (包含仍然可以被還原的刪除文件的信息)和
trash/undel (用于獲取文件)。把刪除的文件,移到/ trash/undel 下,就可以恢復此文件。
# cd /mnt/mfsmeta/trash
# mv 00000004\|dir1\|passwd undel/
到 dir1 目錄中可以看到passwd文件恢復
在 MFSMETA 的目錄里,除了trash和trash/undel兩個目錄,還有第三個目錄reserved,該目錄內有已經刪除的文件,但卻被其他用戶一直打開著。在用戶關閉了這些被打開的文件后,reserved目錄中的文件將被刪除,文件的數據也將被立即刪除。此目錄不能進行操作。
增加一塊虛擬磁盤,無需格式化(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
將磁盤格式化為ext4格式
fdisk -cu /dev/sda
mkfs.ext4 /dev/sda1
將/var/lib/mfs/* 所有數據移到網絡磁盤/dev/sda1中去,然后將其掛載到/var/lib/mfs
mount /dev/sda1 /mnt/
cp -p /var/lib/mfs/* /mnt/
mfsmaster start
配yum源
默認yum源只有基礎包Server,yum源包里有
ResilientStorage/
HighAvailability/
LoadBalancer/
Packages/
images/
Packages/
...
所需安裝包pacemaker在HighAvailability包里
yum install pacemaker -y
使用pacemaker配置時需要安裝pacemaker的接口,程序接口為crmshell,早期裝上pacemaker自帶有crmshell接口,新版本已被獨立出來,不再是pacemaker組成部分。而crmshell又依賴于pssh相關包,因此得安裝這兩個組件。
# 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時會安裝其大量相關性依賴包,包括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 ,fence是C/S架構,在fence服務端節點需要安裝如下三個軟件包。
fence-virtd.x86_64
fence-virtd-libvirt.x86_64
fence-virtd-multicast.x86_64
安裝好之后使用命令fence_virtd -c進入交互式界面配置fence文件,在配置時需要注意的是選擇接口(interface)時選主機之間通信的網卡。
mkdir /etc/cluster #默認不存在cluster;
服務端和客戶端之間通過key文件進行通信,key文件默認不存在,需要手動生成并拷貝到所有客戶端節點。節點默認沒有/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
在客戶端(172.25.10.2,3)需安裝fence-virt工具
# yum install fence-virt.x86_64 -y
之前安裝好的crmshell接口提供一個命令行交互接口對pacemaker集群進行管理,具有非常強大且易用的管理功能,所做的配置會同步到各個集群節點上。下面將元數據服務器上各個服務交由集群管理。
a. 首先將fence服務交由集群。由于外部fence只能識別domain,所以需要將domain與hostname綁定,并每隔60s監控一次。
# 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系統服務交由集群接管之前,需建立一個虛擬IP(VIP),VIP對外為master節點,當集群里某個master節點資源宕機,則服務通過VIP將資源遷移到另一個master節點,對client來說,絲毫沒有感覺。
# crm(live)configure# primitive vip ocf:hearbeat:IPaddr2 params ip="172.25.10.100" cidr_netmask="24" op monitor interval="30s"
c. 將MFS系統服務交由集群管理器管理。
# crm(live)configure# property no-quorum-policy="ignore" # 默認結點數若只有一個,表示集群不存在,忽視
# 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
此時,整個集群服務搭建完畢,MooseFS集群架構如下所示
看完上述內容,你們掌握什么是MooseFS以及怎么進行高可用部署的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。