MFS分佈式文件系統實戰(三)——MFS高可用(利用pacemaker+corosync+iscsi)、部署Fence解決mfsmaster高可用的解決腦裂

一、什麼是MFS高可用

mfsmaster是MFS分佈式文件系統的調度器,是最核心的地方。 如果mfsmaster掛了,那麼整個MFS架構就會掛掉,對此我們要對mfsmaster進行高可用冗餘操作。

構建思路
利用pacemaker構建高可用平臺,利用iscis做共享存儲,mfschunkserver做存儲設備。
有人可能要問爲什麼不用keepalived,我想說的是就是keepalived是可以完全做的,但是keepalived不具備對服務的健康檢查;整個corosync驗證都是腳本編寫的,再通過vrrp_script模塊進行調用,利用pacemaker比較方便。

用途
解決mfs master的單點問題,同樣可以作爲其他需要高可用環境的標準配置方法

1.1 什麼是Pacemaker?

Pacemaker是一個集羣管理器。
它利用首選集羣基礎設施(OpenAIS或heartbeat)提供的消息和成員能力,由輔助節點和系統進行故障檢測和回收,實現性羣集服務(亦稱資源)的高可用性。
它可以做幾乎任何規模的集羣,並帶有一個強大的依賴模式,讓管理員能夠準確地表達羣集資源之間的關係(包括順序和位置)。
幾乎任何可以編寫的腳本,都可以作爲管理起搏器集羣的一部分。
尤爲重要的是Pacemaker不是一個heartbeat的分支,似乎很多人存在這樣的誤解。
Pacemaker是CRM項目(亦名V2資源管理器)的延續,該項目最初是爲heartbeat而開發,但目前已經成爲獨立項目。

1.2 什麼是corosync?

Corosync是集羣管理套件的一部分,它在傳遞信息的時候可以通過一個簡單的配置文件來定義信息傳遞的方式和協議等。

corosync+pacemaker:在配置corosync時最好具有三個以上的節點,並且節點個數爲奇數個,如果使用偶數個節點的話也沒關係,只是要關閉不具有法定票數的決策策略功能

二、MFS高可用搭建

實驗環境

主機 服務
server1 mfsmaster,pacemaker,iscsi客戶端
server2 mfschunkserever,iscsi服務端
server3 mfschunkserever
server4 mfsmaster-backup,pacemaker,iscsi客戶端
server5 client

實驗準備
在基礎MFS分佈式文件系統上搭建高可用,停掉之前mfs分佈式文件系統啓動的服務,並卸載客戶端掛載的目錄,爲後續的pcs集羣做準備

[root@server1 ~]# systemctl stop moosefs-master
	##moosefs-cgiserv服務可以不用關閉,因爲moosefs-cgisev服務只是用來提供web界面的
[root@server2 ~]# systemctl stop moosefs-chunkserver
[root@server3 ~]# systemctl stop moosefs-chunkserver

[root@server5 ~]# umount /mnt/mfsmeta
[root@server5 ~]# umount /mnt/mfs

2.1 配置server4作爲mfsmaster-backup端

1、配置MooseFS的yum源

(1)添加鍵值

curl "https://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS

(2)添加YUM源

curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo

2、安裝moosefs-master

yum install moosefs-master moosefs-cgiserv -y

在這裏插入圖片描述
3、編輯本地解析文件

[root@server4 ~]# vim /etc/hosts  
172.25.2.1  server1  mfsmaster

在這裏插入圖片描述
4、修改moosefs-master服務的啓動腳本/usr/lib/systemd/system/moosefs-master.service

[root@server4 ~]vim /usr/lib/systemd/system/moosefs-master.service
8 ExecStart=/usr/sbin/mfsmaster -a
[root@server4 ~]# systemctl daemon-reload
[root@server4 ~]# systemctl start moosefs-master   #檢查腳本是否有錯誤,即查看moosefs-master服務是否能夠正常啓動
[root@server4 ~]# systemctl stop moosefs-master 

在這裏插入圖片描述在這裏插入圖片描述

2.2 安裝高可用套件pacemaker+corosync

使用corosync作爲集羣消息事務層(Massage Layer),pacemaker作爲集羣資源管理器(Cluster Resource Management),pcs作爲CRM的管理接口工具。

1、server1和server4 配置高可用yum源

[root@server1 yum.repos.d]# vim rhel7_5.repo
[rhel7.5]
name=rhel7.5
baseurl=http://172.25.2.250/westos7.5
gpgcheck=0

[HighAvailability]
name=HighAvailability
baseurl=http://172.25.2.250/westos7.5/addons/HighAvailability
gpgcheck=0

[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.2.250/westos7.5/addons/ResilientStorage
gpgcheck=0

在這裏插入圖片描述2、在server1上和server4上,安裝pacemaker+corosync

[root@server1 yum.repos.d]# yum install pacemaker corosync -y
[root@server4 ~]# yum install pacemaker corosync -y

3、在server1和server4 節點之間要做ssh免密

[root@server1 yum.repos.d]# ssh-keygen
[root@server1 yum.repos.d]# ssh-copy-id server4
[root@server1 yum.repos.d]# ssh-copy-id server1

在這裏插入圖片描述
在這裏插入圖片描述驗證免密是否成功
在這裏插入圖片描述

4、在server1和server4上,安裝集羣化管理工具pcs並且開啓相應服務

yum install -y pcs
systemctl start pcsd
systemctl enable  pcsd 
	##開啓該服務之後會在/etc/passwd目錄下生成hacluster用戶,及高可用管理用戶
passwd hacluster 
	##配置高可用集羣管理用戶的密碼

在這裏插入圖片描述

5、在server1上,創建mfs集羣mycluster並且啓動

[root@server1 yum.repos.d]# pcs cluster auth server1 server4
Username: hacluster   (此處需要輸入的用戶名必須爲pcs自動創建的hacluster,其他用戶不能添加成功)
Password: 
server4: Authorized
server1: Authorized
[root@server1 yum.repos.d]# pcs cluster setup --name mycluster server1 server4
	#創建集羣mycluster
[root@server1 yum.repos.d]# pcs cluster start --all
	#啓動集羣

在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
6、查看集羣狀態

[root@server1 yum.repos.d]# corosync-cfgtool  -s
	##查看節點狀態
[root@server1 yum.repos.d]# pcs status corosync
	##查看corosync狀態

在這裏插入圖片描述
在這裏插入圖片描述
7、檢查集羣服務是否正常

[root@server1 yum.repos.d]# crm_verify -L -V
   error: unpack_resources:	Resource start-up disabled since no STONITH resources have been defined
   error: unpack_resources:	Either configure some or disable STONITH with the stonith-enabled option
   error: unpack_resources:	NOTE: Clusters with shared data need STONITH to ensure data integrity
Errors found during check: config not valid
 	##這裏的錯誤是由於沒有設置fence導致的,後面我們會設置fence
[root@server1 yum.repos.d]# pcs property set stonith-enabled=false
	##當前沒有Fence,建議禁用STONITH,再次檢查就不會報錯
[root@server1 yum.repos.d]# crm_verify -L -V

在這裏插入圖片描述8、此時,查看我們創建的集羣,還沒有添加過資源,所以資源這裏什麼都沒有

[root@server1 ~]# pcs status

在這裏插入圖片描述

9、創建集羣資源,添加VIP

[root@server1 ~]# pcs resource create vip ocf:heartbeat:IPaddr2 ip=172.25.2.100 cidr_netmask=32 op monitor interval=30s
[root@server1 ~]# pcs resource show #同命令"pcs resource"

在這裏插入圖片描述在server1上,可以看到vip:172.25.2.100
在這裏插入圖片描述當然也可以在server4端打開監控,來實時監控集羣中資源的狀態

[root@server4 ~]# crm_mon   #使用Ctrl+c退出監控

在這裏插入圖片描述
10、爲了驗證vip這個資源的高可用,我們停掉pcs集羣中的server1端,看vip是否在server4上運行

[root@server1 ~]# pcs cluster stop server1
[root@server1 ~]# ip addr show   ##此時已經沒有vip

在這裏插入圖片描述
此時vip在server4上面

在這裏插入圖片描述
爲查看是否回切,再次打開pcs集羣中的server1端,vip仍在server4上運行,並未回切到server1
在這裏插入圖片描述
此時,已經實現了高可用。

2.3 安裝iscsi實現數據共享

1、添加20G的虛擬硬盤

2、.在server2,即chunkserver節點上進行iscsi配置:

[root@server2 ~]# yum install -y targetcli
[root@server2 ~]# targetcli
targetcli shell version 2.1.fb46
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

/> ls   ##查看targetcli的相關信息
/> backstores/block create my_disk1 /dev/sdb	##添加磁盤
Created block storage object my_disk1 using /dev/sdb.
/> iscsi/ create iqn.2019-12.com.example:server2  ##創建磁盤目錄,進入目錄下的相應目錄創建已添加磁盤
Created target iqn.2019-12.com.example:server2.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/> iscsi/iqn.2019-12.com.example:server2/tpg1/luns create /backstores/block/my_disk1 
Created LUN 0.
	##創建client磁盤共享目錄
/> iscsi/iqn.2019-12.com.example:server2/tpg1/acls  create iqn.2019-12.com.example:client
Created Node ACL for iqn.2019-12.com.example:client
Created mapped LUN 0.
/> exit

在這裏插入圖片描述
3、在server1上,下載iscsi並且做相應配置

[root@server1 ~]# yum install -y iscsi-*

##修改客戶端的iscsi加密服務文件的問題,及添加服務端的鑰匙
[root@server1 ~]# vim  /etc/iscsi/initiatorname.iscsi 
[root@server1 ~]# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2019-12.com.example:client

##登錄查看是否共享成功
[root@server1 ~]# iscsiadm -m discovery -t st -p 172.25.2.2
[root@server1 ~]# iscsiadm -m node -l

在這裏插入圖片描述
在這裏插入圖片描述在server1上,登錄查看:fdisk -l

在這裏插入圖片描述
4.在server1 上,創建共享的磁盤分區並格式化

[root@server1 ~]# fdisk /dev/sdb
[root@server1 ~]# mkfs.xfs /dev/sdb1

在這裏插入圖片描述

在這裏插入圖片描述
5、server1上,掛載格式化後的分區/dev/sdb1

[root@server1 ~]# mount /dev/sdb1 /mnt
[root@server1 ~]# cd /var/lib/mfs/  這是mfs的數據目錄
[root@server1 mfs]# ls
changelog.2.mfs  changelog.4.mfs  changelog.6.mfs  metadata.mfs         metadata.mfs.empty
changelog.3.mfs  changelog.5.mfs  metadata.crc     metadata.mfs.back.1  stats.mfs
[root@server1 mfs]# cp -p * /mnt/   帶權限拷貝/var/lib/mfs的所有數據文件到/dev/sdb1上
[root@server1 mfs]# cd /mnt/
[root@server1 mnt]# ls
changelog.2.mfs  changelog.4.mfs  changelog.6.mfs  metadata.crc  metadata.mfs.back.1  stats.mfs
changelog.3.mfs  changelog.5.mfs  lost+found       metadata.mfs  metadata.mfs.empty
[root@server1 mnt]# chown mfs.mfs /mnt   當目錄屬於mfs用戶和組時,才能正常使用
[root@server1 mnt]# cd
[root@server1 ~]# umount /mnt
[root@server1 ~]# mount /dev/sdb1 /var/lib/mfs/   # 使用分區,測試是否可以使用共享磁盤
[root@server1 ~]# systemctl start moosefs-master  服務開啓成功,就說明數據文件拷貝成功,共享磁盤可以正常使用

在這裏插入圖片描述

6、在server4上操作同server1

root@server4 system]# yum install -y iscsi-*
[root@server4 system]# vim /etc/iscsi/initiatorname.iscsi 
文件編輯內容如下:
InitiatorName=iqn.2019-05.com.example:client
[root@server4 system]#  iscsiadm -m discovery -t st -p 172.25.16.2
[root@server4 system]# iscsiadm -m node -l
[root@server4 system]# fdisk -l #共享成功

在這裏插入圖片描述

2.4 添加MFS相關資源

	##創建資源
[root@server1 mfs]#  pcs resource create mfsdata ocf:heartbeat:Filesystem device=/dev/sdb1 directory=/var/lib/mfs/ fstype=xfs op monitor interval=30s
	##創建mfsd文件系統
[root@server1 ~]# pcs resource create mfsd systemd:moosefs-master op monitor interval=1min
[root@server1 ~]# pcs resource show  
	##此時服務並未集中在一臺主機上
 vip	(ocf::heartbeat:IPaddr2):	Started server4
 mfsdata	(ocf::heartbeat:Filesystem):	Started server1
 mfsd	(systemd:moosefs-master):	Started server1
[root@server1 ~]# pcs resource group add mfsgroup vip mfsdata mfsd 
	##把服務集中在一臺主機上,其中添加的順序是有嚴格限制的,按照資源添加的順序,進行添加。
[root@server1 ~]# pcs resource show  
	##此時服務已集中在一臺主機上了。
 Resource Group: mfsgroup
     vip	(ocf::heartbeat:IPaddr2):	Started server4
     mfsdata	(ocf::heartbeat:Filesystem):	Started server4
     mfsd	(systemd:moosefs-master):	Started server4

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
此時,關掉server4上的master服務,發現backup master上的服務遷移到master上也就是server1

在這裏插入圖片描述

2.5 配置通過虛擬ip訪問web監控頁面

1、修改server1,server2,server3,server4,server5的本地解析文件

[root@server1 ~]# vim /etc/hosts
172.25.2.100 mfsmaster
[root@server1 ~]# scp /etc/hosts server2:/etc/
[root@server1 ~]# scp /etc/hosts server3:/etc/
[root@server1 ~]# scp /etc/hosts server4:/etc/
[root@server1 ~]# scp /etc/hosts server5:/etc/

在這裏插入圖片描述
2、開啓server2和server3moosefs-chunkserver服務

[root@server2 ~]# systemctl start moosefs-chunkserver
[root@server3 ~]# systemctl start moosefs-chunkserver

3、訪問瀏覽器172.25.2.100:9425,看到的內容

在這裏插入圖片描述
4、測試:客戶端往mfs分佈式文件系統中寫入內容,此時服務端(mfsmaster)端掛掉了,我們看看客戶端會不會受到影響。

#客戶端往mfs分佈式文件系統中寫內容。
[root@foundation83 mfs]# dd if=/dev/zero of=dir1/bigfile3 bs=1M count=1000
 
#同時mfsmaster端掛掉mfsmaster服務
[root@server1 ~]# pcs cluster stop server4
  
#值的注意的是:兩端的操作要同時進行,即兩端都要卡頓一下

在這裏插入圖片描述

在這裏插入圖片描述

查看狀態,切換到了server4:

在這裏插入圖片描述
客戶端沒有受到一點的影響,這就是實現mfsmatser高可用的好處

在這裏插入圖片描述

三、部署Fence解決mfsmaster高可用的解決腦裂

fence的工作原理:

當意外原因導致主機異常或者宕機時,備機會首先調用FENCE設備,然後通過FENCE設備將異常主機重啓或者從網絡隔離,當FENCE操作成功執行後,返回信息給備機,備機在接到FENCE成功的信息後,開始接管主機的服務和資源。這樣通過FENCE設備,將異常節點佔據的資 源進行了釋放,保證了資源和服務始終運行在一個節點上,並且有效的阻止了腦裂(高可用節點分裂爲兩個獨立節點,這個時候會開始爭搶共享資源)的發生。

1、配置物理機,作爲fence服務端:

yum install fence-virtd.x86_64 fence-virtd-libvirt.x86_64 fence-virtd-multicast.x86_64 -y

2、進行初始化設置(其中要將接口設備改爲br0,其他默認回車,最後一項輸入y確定即可)

fence_virtd -c

在這裏插入圖片描述
3、生成fence_xvm.key

[root@foundation2 html]# mkdir /etc/cluster 
[root@foundation2 html]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1
	##dd截取,生成128位的fence_xvm.key,可以file查看這個key類型是數據(data),所以只能利用下面的命令來查看該文件
[root@foundation2 html]#  hexdump -C /etc/cluster/fence_xvm.key
	###查看key

在這裏插入圖片描述4、啓動fence_virtd服務,並查看1229端口(fence_virtd服務對應的端口)是否存在

[root@foundation2 html]# systemctl start fence_virtd.service
[root@foundation2 html]# netstat -antulpe | grep 1229

在這裏插入圖片描述

5、配置server1和server4,作爲fence客戶端

yum install fence-virt -y

從fence服務端那裏拷貝fence_xvm.key

[root@server1 ~]# mkdir /etc/cluster
[root@server1 ~]# cd /etc/cluster
[root@server1 cluster]# scp @172.25.2.250:/etc/cluster/fence_xvm.key .
[root@server1 cluster]# ll /etc/cluster/

在這裏插入圖片描述
6、添加fence設備,啓用STONITH

[root@server1 ~]# pcs stonith create vmfence fence_xvm pcmk_host_map="server1:server1;server4:server4" op monitor interval=1min   #添加名爲vmfence的fence設備(其中第一個server1表示虛擬機的名字,第二個server1表示主機名。server4同理)。其中vmfence這個名字隨意給
[root@server1 ~]# pcs property set stonith-enabled=true
[root@server1 ~]# crm_verify -L -V
[root@server1 ~]# fence_xvm -H server4 # 使server4斷電重啓
[root@server1 ~]# crm_mon 

在這裏插入圖片描述

`[root@server1 cluster]# crm_mon		# 查看監控,server4上的服務遷移到master的server1上`
[root@server1 cluster]# echo c > /proc/sysrq-trigger  # 模擬master端內核崩潰

查看監控,server4會立刻接管master的所有服務

在這裏插入圖片描述

server1重啓成功後,不會搶佔資源,不會出現腦裂的狀況。查看監控發現,master重啓成功之後,並不會搶佔資源,服務依舊在backup-master端正常運行,說明fence生效。

發佈了127 篇原創文章 · 獲贊 26 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章