一.MFS概述
MooseFS是一個分布式存儲的框架,其具有如下特性:
(1)通用文件系統,不需要修改上層應用就可以使用(那些需要專門api的dfs很麻煩!)。
(2)可以在線擴容,體系架構可伸縮性極強。(官方的case可以擴到70台了!)
(3)部署簡單。
(4)高可用,可設置任意的文件冗余程度(提供比raid1+0更高的冗余級別,而絕對不會影響讀或者寫的性能,只會加速!)
(5)可回收在指定時間內刪除的文件(“回收站”提供的是系統級別的服務,不怕誤操作了,提供類似oralce 的閃回等高級dbms的即時回滾特性!)
(6)提供netapp,emc,ibm等商業存儲的snapshot特性。(可以對整個文件甚至在正在寫入的文件創建文件的快照)
(7)google filesystem的一個c實現。
(8)提供web gui監控接口。
# 讀寫原理
1.MFS的讀數據過程
(1) client當需要一個數據時,首先向master server發起查詢請求;
(2)管理服務器檢索自己的數據,獲取到數據所在的可用數據服務器位置ip|port|chunkid;
(3)管理服務器將數據服務器的地址發送給客戶端;
(4)客戶端向具體的數據服務器發起數據獲取請求;
(5)數據服務器將數據發送給客戶端;
2.MFS的寫數據過程
(1)當客戶端有數據寫需求時,首先向管理服務器提供文件元數據信息請求存儲地址(元數據信息如:文件名|大小|份數等);
(2)管理服務器根據寫文件的元數據信息,到數據服務器創建新的數據塊;
(3)數據服務器返回創建成功的消息;
(4)管理服務器將數據服務器的地址返回給客戶端(chunkIP|port|chunkid);
(5)客戶端向數據服務器寫數據;
(6)數據服務器返回給客戶端寫成功的消息;
(7)客戶端將此次寫完成結束信號和一些信息發送到管理服務器來更新文件的長度和最后修改時間
環境:rhel7.3
base2 172.25.78.12 mfsmaster節點
bzse3 172.25.78.13 chunkserver
base4 172.25.78.14 chunkserver
base5 172.25.78.15 高可用
foundation78 172.25.78.254 客戶端
9421 # 對外的連接端口
9420 # 用於chunkserver 連接的端口地址
9419 # metalogger 監聽的端口地址
這個軟件可以記錄元數據日志,定期同步master數據日志,防止master掛掉
MFS元數據日志服務器(moosefs-metalogger-3.0.97-1.rhsysv.x86_64.rpm)
元數據日志守護進程是在安裝master server 時一同安裝的,
最小的要求並不比master 本身大,可以被運行在任何機器上(例如任一台
chunkserver),但是最好是放置在MooseFS master 的備份機上,備份master
服務器的變化日志文件,文件類型為changelog_ml.*.mfs。因為主要的master server 一旦失效,
可能就會將這台metalogger 機器取代而作為master server
二.MFS的安裝、部署、配置
1.安裝部署mfs
mfsmaster端
[root@base2 ~]# ls
moosefs-cgi-3.0.103-1.rhsystemd.x86_64.rpm
moosefs-cgiserv-3.0.103-1.rhsystemd.x86_64.rpm
moosefs-cli-3.0.103-1.rhsystemd.x86_64.rpm
moosefs-master-3.0.103-1.rhsystemd.x86_64.rpm
[root@base2 ~]# yim install -y *.rpm
[root@base2 ~]# vim /etc/hosts # 寫解析,不然啟動不起來
172.25.78.12 base2 mfsmaster
[root@base2 ~]# systemctl start moosefs-master
[root@base2 ~]# netstat -antlp
[root@base2 ~]# ll /var/lib/mfs/ # 數據目錄
[root@base2 ~]# ll /etc/mfs/ # 主配置文件目錄
[root@base2 ~]# systemctl start moosefs-cgiserv # 打開web圖形處理工具
配置chunkserver
[root@base3 ~]# yum install -y moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm
[root@base3 ~]# vim /etc/hosts # 從節點也必須寫解析
172.25.78.12 base2 mfsmaster
[root@base3 ~]# cd /etc/mfs/
[root@base3 mfs]# vim mfshdd.cfg # 定義base3中存儲數據的掛載點
/mnt/chunk1
[root@base3 mfs]# mkdir /mnt/chunk1 # 創建掛載點
[root@base3 mfs]# chown mfs.mfs /mnt/chunk1 # 改該掛載目錄的所有人和所有組,這樣才可以在目錄中進行讀寫操作
[root@base3 mfs]# systemctl start moosefs-chunkserver # 開啟服務
[root@base4 ~]# yum install -y moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm
[root@base4 ~]# vim /etc/hosts
172.25.78.12 base2 mfsmaster
[root@base4 ~]# cd /etc/mfs/
[root@base4 mfs]# vim mfshdd.cfg
[root@base4 mfs]# mkdir /mnt/chunk2
[root@base4 mfs]# chown mfs.mfs /mnt/chunk2
[root@base4 mfs]# systemctl start moosefs-chunkserver
8
瀏覽器訪問,從節點添加成功
2.客戶端測試分布式存儲
配置客戶端
[root@foundation78 3.0.103]# rpm -ivh moosefs-client-3.0.103-1.rhsystemd.x86_64.rpm # 安裝客戶端軟件
[root@foundation78 mfs]# cd /etc/mfs/
[root@foundation78 mfs]# vim mfsmount.cfg # 確定掛載數據的目錄
/mnt/mfs
[root@foundation78 mfs]# mkdir /mnt/mfs # 創建掛載數據的目錄
[root@foundation78 mfs]# vim /etc/hosts # 編輯解析文件
172.25.78.12 base2 mfsmaster
[root@foundation78 mfs]# cd /mnt/mfs
[root@foundation78 mfs]# mfsmount # 自動讀取后端文件進行掛載
[root@foundation78 mnt]# df
[root@foundation78 mfs]# mkdir dir1
[root@foundation78 mfs]# mkdir dir2
[root@foundation78 mfs]# ls
dir1 dir2
[root@foundation78 mfs]# mfsgetgoal dir1 # 默認的文件副本是2份
dir1: 2
[root@foundation78 mfs]# mfsgetgoal dir2
dir2: 2
[root@foundation78 mfs]# mfssetgoal -r 1 dir1 # 修改dir1的文件備份份數為1
[root@foundation78 mfs]# cd dir1/
[root@foundation78 dir1]# cp /etc/passwd .
[root@foundation78 dir1]# mfsfileinfo passwd # 查看文件具體信息,數據存儲在chunk1上,因為我們設置了數據只能存儲在一台服務器上
[root@foundation78 dir1]# cd ../dir2/
[root@foundation78 dir2]# cp /etc/fstab .
[root@foundation78 dir2]# mfsfileinfo fstab # 實際上數據存儲默認為兩份
3.對於大文件,實行離散存儲
[root@foundation78 dir2]# cd ../dir1/
[root@foundation78 dir1]# dd if=/dev/zero of=file1 bs=1M count=100
[root@foundation78 dir1]# mfsfileinfo file1
4.如果我們在客戶端不小心刪除了元數據,那么怎么恢復呢?
[root@foundation78 dir1]# mfsgettrashtime . # 查看當前文件的緩存時間,在 86400秒內的文件都可以恢復
.: 86400
[root@foundation78 mfs]# mkdir /mnt/mfsmeda
[root@foundation78 mfs]# mfsmount -m /mnt/mfsmeda # 掛載
[root@foundation78 mfs]# mount # 查看掛載記錄
[root@foundation78 mfs]# cd /mnt/mfsmeda/
[root@foundation78 mfsmeda]# ls
sustained trash
[root@foundation78 trash]# ls
[root@foundation78 trash]# find -name *passwd* # 查找丟失文件
./004/00000004|dir1|passwd
[root@foundation78 trash]# cd 004
[root@foundation78 004]# ls
00000004|dir1|passwd undel
[root@foundation78 004]# mv 00000004\|dir1\|passwd undel/ # 恢復文件,注意特殊字符要進行轉譯
[root@foundation78 004]# cd /mnt/mfs/dir1/
[root@foundation78 dir1]# ls # 文件成功恢復
file1 passwd
5.master有時候會處於非正常服務狀態,導致客戶端無法獲取數據
(1)正常關閉master
當服務端正常關閉時,客戶端就會卡頓
[root@base2 ~]# systemctl stop moosefs-master
[root@foundation78 dir1]# df
當服務端重新開啟時,客戶端就會恢復正常
[root@base2 ~]# systemctl start moosefs-master
(2)非正常關閉master
[root@base2 ~]# ps ax
[root@base2 ~]# kill -9 11986 # 模擬非正常關閉
[root@base2 ~]# systemctl start moosefs-master
[root@base2 ~]# /usr/sbin/mfsmaster -a
[root@base2 ~]# ps ax # 查看進程,成功開啟
但是每次master非正常關閉之后,我們每次執行這個命令就有點麻煩,所以我們直接寫在配置文件里,這樣不管是否正常關閉,都可以保證服務成功開啟
[root@base2 ~]# vim /usr/lib/systemd/system/moosefs-master.service
[Unit]
Description=MooseFS Master server
Wants=network-online.target
After=network.target network-online.target
[Service]
Type=forking
ExecStart=/usr/sbin/mfsmaster -a
ExecStop=/usr/sbin/mfsmaster stop
ExecReload=/usr/sbin/mfsmaster reload
PIDFile=/var/lib/mfs/.mfsmaster.lock
TimeoutStopSec=1800
TimeoutStartSec=1800
Restart=no
[Install]
WantedBy=multi-user.target
[root@base2 ~]# systemctl daemon-reload
[root@base2 ~]# ps ax
[root@base2 ~]# kill -9 12060
[root@base2 ~]# systemctl start moosefs-master # 此時開啟就不會報錯了
[root@base2 ~]# systemctl status moosefs-master
三.mfsmaser的高可用
配置master,先獲取高可用安裝包
[root@base2 ~]# vim /etc/yum.repos.d/yum.repo # 配置高可用yum源
[rhel7.3]
name=rhel7.3
baseurl=http://172.25.78.254/rhel7.3
gpgcheck=0
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.78.254/rhel7.3/addons/HighAvailability
gpgcheck=0
[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.78.254/rhel7.3/addons/ResilientStorage
gpgcheck=0
[root@base2 ~]# yum repolist
[root@base2 ~]# yum install -y pacemaker corosync pcs # 這是高可用安裝包
[root@base2 ~]# rpm -q pacemaker
pacemaker-1.1.15-11.el7.x86_64
[root@base2 ~]# ssh-keygen # 生成密鑰,方便連接
[root@base2 ~]# ssh-copy-id base5 # 設置免密
[root@base2 ~]# systemctl start pcsd
[root@base2 ~]# systemctl enable pcsd
[root@base2 ~]# passwd hacluster
Changing password for user hacluster. # 設置密碼,主備必須相同
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
配置bankup-mfsmaster
[root@base5 ~]# ls
moosefs-master-3.0.103-1.rhsystemd.x86_64.rpm
[root@base5 ~]# rpm -ivh moosefs-master-3.0.103-1.rhsystemd.x86_64.rpm
[root@base5 ~]# vim /usr/lib/systemd/system/moosefs-master.service
[Unit]
Description=MooseFS Master server
Wants=network-online.target
After=network.target network-online.target
[Service]
Type=forking
ExecStart=/usr/sbin/mfsmaster -a
ExecStop=/usr/sbin/mfsmaster stop
ExecReload=/usr/sbin/mfsmaster reload
PIDFile=/var/lib/mfs/.mfsmaster.lock
TimeoutStopSec=1800
TimeoutStartSec=1800
Restart=no
[Install]
WantedBy=multi-user.target
[root@base5 ~]# systemctl daemon-reload
[root@base5 ~]# vim /etc/yum.repos.d/yum.repo # 配置高可用yum源
[rhel7.3]
name=rhel7.3
baseurl=http://172.25.78.254/rhel7.3
gpgcheck=0
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.78.254/rhel7.3/addons/HighAvailability
gpgcheck=0
[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.78.254/rhel7.3/addons/ResilientStorage
gpgcheck=0
[root@base5 ~]# yum repolist
[root@base5 ~]# yum install -y pacemaker corosync
[root@base5 ~]# yum install -y pcs
[root@base5 ~]# systemctl start pcsd
[root@base5 ~]# systemctl enable pcsd
[root@base5 ~]# passwd hacluster
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
開始創建集群
[root@base2 ~]# pcs cluster auth base2 base5 # 創建集群
[root@base2 ~]# pcs cluster setup --name mycluster base2 base5 # 給集群起名稱
[root@base2 ~]# pcs status nodes # 查看集群狀態,有報錯,是因為有部分服務沒有開啟
Error: error running crm_mon, is pacemaker running?
[root@base2 ~]# pcs cluster start --all # 開啟所有的服務
[root@base2 ~]# pcs status nodes # 再次查看節點信息
[root@base2 ~]# corosync-cfgtool -s # 驗證corosync是否正常
[root@base2 ~]# pcs status corosync # 查看corosync狀態
創建主備集群
[root@base2 ~]# crm_verify -L -V # 檢查配置,有報錯
[root@base2 ~]# pcs property set stonith-enabled=false # 更改屬性,禁用STONITH
[root@base2 ~]# crm_verify -L -V # 再次檢查,沒有報錯
[root@base2 ~]# pcs status # 查看狀態
[root@base2 ~]# pcs resource create vip ocf:heartbeat:IPaddr2 ip=172.25.78.100 cidr_netmask=32 op monitor interval=30s # 創建vip
[root@base2 ~]# ip a # 查看創建成功
[root@base5 ~]# crm_mon # 查看監控
執行故障轉移
[root@base2 ~]# pcs cluster stop base2 # 關閉master,查看監控vip會自動漂移
[root@base2 ~]# pcs cluster start base2 # 當master重新開啟時,不會搶占資源
[root@base5 ~]# pcs cluster stop base5 # 關閉backup-master,vip又自動漂移到master上
以上實驗我們實現了mfs的高可用,當master出故障時,backup-master會立刻接替master的工作,保證客戶端可以正常得到服務
[root@base2 ~]# pcs resource standards # 獲取可用資源標准列表
[root@base2 ~]# pcs resource providers # 查看資源提供者的列表
[root@base2 ~]# pcs resource agents ocf:heartbeat # 查看特定的可用資源代理
2.存儲共享(我們用vip的方式來實現共享)
先恢復環境,寫好解析
[root@foundation78 ~]# umount /mnt/mfs
[root@foundation78 ~]# umount /mnt/mfsmeta
[root@foundation78 ~]# vim /etc/hosts
172.25.78.100 mfsmaster
[root@base2 ~]# systemctl stop moosefs-master
[root@base2 ~]# vim /etc/hosts
172.25.78.100 mfsmaster
[root@base3 ~]# systemctl stop moosefs-chunkserver
[root@base3 ~]# vim /etc/hosts
172.25.78.100 mfsmaster
[root@base4 ~]# systemctl stop moosefs-chunkserver
[root@base4 ~]# vim /etc/hosts
172.25.78.100 mfsmaster
給chunkserver(base3)添加一塊磁盤
[root@base3 ~]# fdisk -l
[root@base3 ~]# yum install -y targetcli # 安裝遠程塊存儲設備
[root@base3 ~]# systemctl start target # 開啟服務
[root@base3 ~]# targetcli # 配置iSCSI服務
/> cd backstores/block
/backstores/block> create my_disk1 /dev/vdb
/backstores/block> cd ..
/backstores> cd ..
/> cd iscsi
/iscsi> create iqn.2019-04.com.example:base3
/iscsi> cd iqn.2019-04.com.example:base3
/iscsi/iqn.20...example:base3> cd tpg1/luns
/iscsi/iqn.20...se3/tpg1/luns> create /backstores/block/my_disk1
/iscsi/iqn.20...se3/tpg1/luns> cd ..
/iscsi/iqn.20...le:base3/tpg1> cd acls
/iscsi/iqn.20...se3/tpg1/acls> create iqn.2019-04.com.example:client
/iscsi/iqn.20...se3/tpg1/acls> cd ..
/iscsi/iqn.20...le:base3/tpg1> cd ..
/iscsi/iqn.20...example:base3> cd ..
/iscsi> cd ..
/> ls
/> exit
在master上安裝iscsi客戶端軟件
[root@base2 ~]# yum install -y iscsi-*
[root@base2 ~]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2019-04.com.example:client
[root@base2 ~]# iscsiadm -m discovery -t st -p 172.25.78.13 # 發現遠程設備
172.25.78.13:3260,1 iqn.2019-04.com.example:base3
[root@base2 ~]# iscsiadm -m node -l # 登錄
[root@base2 ~]# fdisk -l # 可以查看到遠程共享出來的磁盤
[root@base2 ~]# fdisk /dev/sda # 使用共享磁盤,建立分區
Command (m for help): n
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-16777215, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-16777215, default 16777215):
Using default value 16777215
Command (m for help): p
Command (m for help): wq
[root@base2 ~]# mkfs.xfs /dev/sda1 # 格式化分區
[root@base2 ~]# dd if=/dev/zero of=/dev/sda bs=512 count=1 # 破壞分區
[root@base2 ~]# fdisk -l /dev/sda # 查看不到分區
因為截取速度太快,導致分區被自動刪除,不過不用擔心,因為我們把/dev/sda下的所有空間都分給了/dev/sda1,所以我們只需要重新建立分區即可
[root@base2 ~]# mount /dev/sda1 /media/ # 查看到分區不存在
mount: special device /dev/sda1 does not exist
[root@base2 ~]# fdisk /dev/sda # 重新創建分區
Command (m for help): n
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-16777215, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-16777215, default 16777215):
Using default value 16777215
Command (m for help): wq
[root@base2 ~]# mount /dev/sda1 /mnt
[root@base2 ~]# df
[root@base2 ~]# cd /var/lib/mfs/ # 這是mfs的數據目錄
[root@base2 mfs]# ls
changelog.10.mfs changelog.13.mfs changelog.4.mfs metadata.crc metadata.mfs.back.1 stats.mfs
changelog.12.mfs changelog.3.mfs changelog.6.mfs metadata.mfs metadata.mfs.empty
[root@base2 mfs]# cp -p * /mnt # 帶權限拷貝/var/lib/mfs的所有數據文件到/dev/sdb1上
[root@base2 mfs]# cd /mnt
[root@base2 mnt]# ll
[root@base2 mnt]# chown mfs.mfs /mnt # 當目錄屬於mfs用戶和組時,才能正常使用
[root@base2 mnt]# ll -d /mnt
drwxr-xr-x 2 mfs mfs 285 Apr 6 13:30 /mnt
[root@base2 mnt]# cd
[root@base2 ~]# umount /mnt
[root@base2 ~]# mount /dev/sda1 /var/lib/mfs/ # 使用分區,測試是否可以使用共享磁盤
[root@base2 ~]# df
[root@base2 ~]# systemctl start moosefs-master # 服務開啟成功,就說明數據文件拷貝成功,共享磁盤可以正常使用
[root@base2 ~]# ps ax
[root@base2 ~]# systemctl stop moosefs-master
配置backup-master,是之也可以使用共享磁盤
[root@base5 ~]# vim /etc/hosts
[root@base5 ~]# yum install -y iscsi-*
[root@base5 ~]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2019-04.com.example:client
[root@base5 ~]# iscsiadm -m discovery -t st -p 172.25.78.13
172.25.78.13:3260,1 iqn.2019-04.com.example:base3
[root@base5 ~]# iscsiadm -m node -l
[root@base5 ~]# fdisk -l
[root@base5 ~]# mount /dev/sda1 /var/lib/mfs/ # 此處使用的磁盤和master是同一塊,因為master已經做過配置了,所以我們只需要使用即可,不用再次配置
[root@base5 ~]# systemctl start moosefs-master # 測試磁盤是否可以正常使用
[root@base5 ~]# systemctl stop moosefs-master
[root@base5 ~]# pcs cluster start base5
在master上創建mfs文件系統
[root@base2 ~]# pcs resource create mfsdata ocf:heartbeat:Filesystem device=/dev/sda1 directory=/var/lib/mfs fstype=xfs op monitor interval=30s
[root@base2 ~]# pcs resource show
[root@base2 ~]# pcs resource create mfsd systemd:moosefs-master op monitor interval=1min # 創建mfsd系統
[root@base2 ~]# pcs resource group add mfsgroup vip mfsdata mfsd # 把vip,mfsdata,mfsd 集中在一個組中
[root@base2 ~]# pcs cluster stop base2 # 當關閉master之后,master上的服務就會遷移到backup-master上
3.fence解決腦裂問題
(1)先在客戶端測試高可用
打開chunkserver
[root@base3 ~]# systemctl start moosefs-chunkserver
[root@base3 ~]# ping mfsmaster # 保證解析可以通信
[root@base4 ~]# systemctl start moosefs-chunkserver
[root@base4 ~]# ping mfsmaster
查看vip的位置
[root@base5 ~]# ip a
開啟master
[root@base2 ~]# pcs cluster start base2
在客戶端進行分布式存儲測試
[root@foundation78 ~]# mfsmount # 掛載,掛載失敗
[root@foundation78 ~]# cd /mnt/mfs
[root@foundation78 mfs]# ls # 因為此目錄下不是空的
dir1 dir2
[root@foundation78 mfs]# rm -fr * # 刪除此目錄下的所有文件
[root@foundation78 mfs]# ls
[root@foundation78 mfs]# cd
[root@foundation78 ~]# mfsmount # 可以成功掛載
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root
[root@foundation78 ~]# cd /mnt/mfs/dir1
[root@foundation78 dir1]# dd if=/dev/zero of=file2 bs=1M count=2000 # 我們上傳一份大文件
[root@base2 ~]# pcs cluster stop base5 # 在客戶端上傳大文件的同時,關閉正在提供服務的服務端
[root@foundation78 dir1]# mfsfileinfo file2 # 我們查看到文件上傳成功,並沒有受到影響
通過以上實驗我們發現,當master掛掉之后,backup-master會立刻接替master的工作,保證客戶端可以進行正常訪問,但是,當master重新運行時,我們不能保證master是否會搶回自己的工作,從而導致master和backup-master同時修改同一份數據文件從而發生腦裂,此時fence就派上用場了
安裝fence服務
[root@base5 ~]# yum install -y fence-virt
[root@base5 ~]# mkdir /etc/cluster
[root@base2 ~]# yum install -y fence-virt
[root@base2 ~]# mkdir /etc/cluster
生成一份fence密鑰文件,傳給服務端
[root@foundation78 ~]# yum install -y fence-virtd
[root@foundation78 ~]# yum install fence-virtd-libvirt -y
[root@foundation78 ~]# yum install fence-virtd-multicast -y
[root@foundation78 ~]# fence_virtd -c
Listener module [multicast]:
Multicast IP Address [225.0.0.12]:
Multicast IP Port [1229]:
Interface [virbr0]: br0 # 注意此處要修改接口,必須與本機一致
Key File [/etc/cluster/fence_xvm.key]:
Backend module [libvirt]:
[root@foundation78 ~]# mkdir /etc/cluster # 這是存放密鑰的文件,需要自己手動建立
[root@foundation78 ~]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1
[root@foundation78 ~]# systemctl start fence_virtd
[root@foundation78 ~]# cd /etc/cluster/
[root@foundation78 cluster]# ls
fence_xvm.key
[root@foundation78 cluster]# scp fence_xvm.key root@172.25.78.12:/etc/cluster/
[root@foundation78 cluster]# scp fence_xvm.key root@172.25.78.15:/etc/cluster/
[root@foundation78 cluster]# netstat -anulp | grep 1229
[root@foundation78 cluster]# virsh list # 查看主機域名
在master查看監控crm_mon
[root@base2 ~]# cd /etc/cluster
[root@base2 cluster]# pcs stonith create vmfence fence_xvm pcmk_host_map="base2:base2;base5:base5" op monitor interval=1min
[root@base2 cluster]# pcs property set stonith-enabled=true
[root@base2 cluster]# crm_verify -L -V
[root@base2 cluster]# fence_xvm -H base5 # 使base5斷電重啟
[root@base2 cluster]# crm_mon # 查看監控,base5上的服務遷移到master上
[root@base2 cluster]# echo c > /proc/sysrq-trigger # 模擬master端內核崩潰
查看監控,base5會立刻接管master的所有服務
查看監控發現,master重啟成功之后,並不會搶占資源,服務依舊在backup-master端正常運行,說明fence生效