基于MFS高可用的分布式存儲(chǔ)架構(gòu)

MFS是一個(gè)具有容錯(cuò)性的網(wǎng)絡(luò)分布式文件系統(tǒng),它把數(shù)據(jù)分散存放在多個(gè)物理服務(wù)器上,而呈現(xiàn)給用戶的則是一個(gè)統(tǒng)一的資源;分布式文件系統(tǒng)就是把一些分散在多臺(tái)計(jì)算機(jī)上的共享文件夾,集合到一個(gè)共享文件夾內(nèi),用戶要訪問(wèn)這些文件夾的時(shí)候,只要打開(kāi)一個(gè)文件夾,就可以的看到所有鏈接到此文件夾內(nèi)的共享文件夾。
MFS分布式存儲(chǔ)系統(tǒng)中角色分類及規(guī)劃

管理服務(wù)器:負(fù)責(zé)各個(gè)數(shù)據(jù)存儲(chǔ)服務(wù)器的管理,文件讀寫(xiě)調(diào)度,文件空間回收以及恢復(fù).多節(jié)點(diǎn)拷貝;

十余年的亳州網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營(yíng)銷的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整亳州建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“亳州網(wǎng)站設(shè)計(jì)”,“亳州網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

元數(shù)據(jù)日志服務(wù)器:負(fù)責(zé)備份master 服務(wù)器的變化日志文件,文件類型為changelog_ml.*.mfs ,以便于在master server 出問(wèn)題的時(shí)候接替其進(jìn)行工作;

數(shù)據(jù)存儲(chǔ)服務(wù)器:負(fù)責(zé)連接管理服務(wù)器,聽(tīng)從管理服務(wù)器調(diào)度,提供存儲(chǔ)空間,并為客戶提供數(shù)據(jù)傳輸.存儲(chǔ)的是數(shù)據(jù)塊或則碎片;

客戶機(jī):通過(guò)fuse 內(nèi)核接口掛接遠(yuǎn)程管理服務(wù)器上所管理的數(shù)據(jù)存儲(chǔ)服務(wù)器,.看起來(lái)共享的文件系統(tǒng)和本地unix 文件系統(tǒng)使用一樣的效果。

本次實(shí)驗(yàn)架構(gòu)及相關(guān)準(zhǔn)備信息(備注:所有系統(tǒng)環(huán)境均為 centos7.4,請(qǐng)按圖表配置好IP與主機(jī)名)

基于MFS高可用的分布式存儲(chǔ)架構(gòu)

MFS體系工作涉及流程分析
MFS的讀數(shù)據(jù)過(guò)程

1:client當(dāng)需要一個(gè)數(shù)據(jù)時(shí),首先向master server發(fā)起查詢請(qǐng)求;

2:管理服務(wù)器檢索自己的數(shù)據(jù),獲取到數(shù)據(jù)所在的可用數(shù)據(jù)服務(wù)器位置ip|port|chunkid;

3:管理服務(wù)器將數(shù)據(jù)服務(wù)器的地址發(fā)送給客戶端;

4:客戶端向具體的數(shù)據(jù)服務(wù)器發(fā)起數(shù)據(jù)獲取請(qǐng)求;

5:數(shù)據(jù)服務(wù)器將數(shù)據(jù)發(fā)送給客戶端;

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

1:當(dāng)客戶端有數(shù)據(jù)寫(xiě)需求時(shí),首先向管理服務(wù)器提供文件元數(shù)據(jù)信息請(qǐng)求存儲(chǔ)地址(元數(shù)據(jù)信息如:文件名|大小|份數(shù)等);

2:管理服務(wù)器根據(jù)寫(xiě)文件的元數(shù)據(jù)信息,到數(shù)據(jù)服務(wù)器創(chuàng)建新的數(shù)據(jù)塊;

3:數(shù)據(jù)服務(wù)器返回創(chuàng)建成功的消息;

4:管理服務(wù)器將數(shù)據(jù)服務(wù)器的地址返回給客戶端(chunkIP|port|chunkid);

5:客戶端向數(shù)據(jù)服務(wù)器寫(xiě)數(shù)據(jù);

6:數(shù)據(jù)服務(wù)器返回給客戶端寫(xiě)成功的消息;

7:客戶端將此次寫(xiě)完成結(jié)束信號(hào)和一些信息發(fā)送到管理服務(wù)器來(lái)更新文件的長(zhǎng)度和最后修改時(shí)間

MFS的刪除文件過(guò)程

1:客戶端有刪除操作時(shí),首先向Master發(fā)送刪除信息;

2:Master定位到相應(yīng)元數(shù)據(jù)信息進(jìn)行刪除,并將chunk server上塊的刪除操作加入隊(duì)列異步清理;

3:響應(yīng)客戶端刪除成功的信號(hào)

MFS修改文件內(nèi)容的過(guò)程

1:客戶端有修改文件內(nèi)容時(shí),首先向Master發(fā)送操作信息;

2:Master申請(qǐng)新的塊給.swp文件,

3:客戶端關(guān)閉文件后,會(huì)向Master發(fā)送關(guān)閉信息;

4:Master會(huì)檢測(cè)內(nèi)容是否有更新,若有,則申請(qǐng)新的塊存放更改后的文件,刪除原有塊和.swp文件塊;

5:若無(wú),則直接刪除.swp文件塊。

MFS重命名文件的過(guò)程

1:客戶端重命名文件時(shí),會(huì)向Master發(fā)送操作信息;

2:Master直接修改元數(shù)據(jù)信息中的文件名;返回重命名完成信息;

MFS遍歷文件的過(guò)程

1:遍歷文件不需要訪問(wèn)chunk server,當(dāng)有客戶端遍歷請(qǐng)求時(shí),向Master發(fā)送操作信息;

2:Master返回相應(yīng)元數(shù)據(jù)信息;

3:客戶端接收到信息后顯示

注意:

1:Master記錄著管理信息,比如:文件路徑|大小|存儲(chǔ)的位置(ip,port,chunkid)|份數(shù)|時(shí)間等,元數(shù)據(jù)信息存在于內(nèi)存中,會(huì)定期寫(xiě)入metadata.mfs.back文件中,定期同步到metalogger,操作實(shí)時(shí)寫(xiě)入changelog.*.mfs,實(shí)時(shí)同步到metalogger中。master啟動(dòng)將metadata.mfs載入內(nèi)存,重命名為metadata.mfs.back文件。

2:文件以chunk大小存儲(chǔ),每chunk最大為64M,小于64M的,該chunk的大小即為該文件大?。?yàn)證實(shí)際chunk文件略大于實(shí)際文件),超過(guò)64M的文件將被切分,以每一份(chunk)的大小不超過(guò)64M為原則;塊的生成遵循規(guī)則:目錄循環(huán)寫(xiě)入(00-FF 256個(gè)目錄循環(huán),step為2)、chunk文件遞增生成、大文件切分目錄連續(xù)。

3:Chunkserver上的剩余存儲(chǔ)空間要大于1GB(Reference Guide有提到),新的數(shù)據(jù)才會(huì)被允許寫(xiě)入,否則,你會(huì)看到No space left on device的提示,實(shí)際中,測(cè)試發(fā)現(xiàn)當(dāng)磁盤(pán)使用率達(dá)到95%左右的時(shí)候,就已經(jīng)不行寫(xiě)入了,當(dāng)時(shí)可用空間為1.9GB。

4:文件可以有多份copy,當(dāng)goal為1時(shí),文件會(huì)被隨機(jī)存到一臺(tái)chunkserver上,當(dāng)goal的數(shù)大于1時(shí),copy會(huì)由master調(diào)度保存到不同的chunkserver上,goal的大小不要超過(guò)chunkserver的數(shù)量,否則多出的copy,不會(huì)有chunkserver去存。

5:Chunkserver上的剩余存儲(chǔ)空間要大于1GB(Reference Guide有提到),新的數(shù)據(jù)才會(huì)被允許寫(xiě)入,否則,你會(huì)看到No space left on device的提示,實(shí)際中,測(cè)試發(fā)現(xiàn)當(dāng)磁盤(pán)使用率達(dá)到95%左右的時(shí)候,就已經(jīng)不行寫(xiě)入了,當(dāng)時(shí)可用空間為1.9GB

整個(gè)MFS高可用架構(gòu)內(nèi),各服務(wù)依賴流程

1:keepalived決定了,VIP在那臺(tái)機(jī)器上,

2:有VIP的機(jī)器視為drbd的(主)primay角色,需要將/dev/drbd0 掛載到指定位置 /var/lib/mfs,

3:然后啟動(dòng),mfsmaster服務(wù),并且啟用mfscgiser監(jiān)控服務(wù)(web形式提供)

4:(注意:?jiǎn)?dòng)mfsmaster時(shí),需要目錄里有meta.mfs,不然無(wú)法啟動(dòng),通常其會(huì)被改成meta.mfs.back,需要手動(dòng)改回來(lái),才能啟動(dòng)mfsmaster)

第一階段:軟件部署

在所有主機(jī)上添加mfs的官方源

salt "*" cmd.run " yum install epel* bash-c* wget tree -y && yum update -y "
salt "*" cmd.run 'curl "http://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS'
salt "*" cmd.run 'curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo'

在master和slave上安裝masterserver服務(wù)

salt -L "Master62,Slave63" cmd.run 'yum install moosefs-master moosefs-cgi moosefs-cgiserv moosefs-cli -y'

在chunk上

salt  "chunk6[5-7]" cmd.run 'yum install moosefs-chunkserver -y'

在logger上

salt  "logger64" cmd.run 'yum install moosefs-metalogger -y'

在client上

salt  "client68" cmd.run 'yum install moosefs-client -y'
第二階段:在master和slave進(jìn)行drbd資源創(chuàng)建階段
在master和slave上安裝drbd服務(wù)
salt  -L "Master62,Slave63" cmd.run 'rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org'
salt  -L "Master62,Slave63" cmd.run 'rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm'
salt  -L "Master62,Slave63" cmd.run 'yum install kmod-drbd84 drbd84-utils -y'
salt  -L "Master62,Slave63" cmd.run "chmod +x /etc/rc.d/rc.local"
salt  -L "Master62,Slave63" cmd.run  'echo "modprobe drbd" >> /etc/rc.local'
salt  -L "Master62,Slave63" cmd.run  'modprobe drbd'
salt  -L "Master62,Slave63" cmd.run "lsmod | grep drbd"
在master和slave上查看sdb的容量,以便如何分區(qū)(先不格式化磁盤(pán))
salt  -L "Master62,Slave63" cmd.run "fdisk -l |grep sdb"
salt  -L "Master62,Slave63" cmd.run "parted /dev/sdb mklabel gpt "
#fdisk非交互式分區(qū),分15G的分區(qū)出來(lái)
salt  -L "Master62,Slave63" cmd.run 'echo -e "n\np\n1\n\n+15G\nw\n" |fdisk /dev/sdb '
salt  -L "Master62,Slave63" cmd.run "parted /dev/sdb p"
salt  -L "Master62,Slave63" cmd.run "fdisk -l |grep sdb"
在master和slave上配置drbd并啟動(dòng)它(兩臺(tái)配置相同)
#在主和從上分別創(chuàng)建drbd資源配置文件
salt  -L "Master62,Slave63" cmd.run "touch /etc/drbd.d/mfs-meta.res"
#drbd資源配置文件內(nèi)容如下
vi /etc/drbd.d/mfs-meta.res
resource mfs_meta0 {
	protocol C;
	startup { wfc-timeout 0; degr-wfc-timeout 120; }
	disk { on-io-error detach; }
	net {
		timeout 60;
		connect-int 10;
		ping-int 10;
		max-buffers 2048;
		max-epoch-size 2048;
	}
	meta-disk internal;
	device    /dev/drbd0;
	syncer {
		verify-alg sha1;
	}
	on Master62 {
		disk /dev/sdb1;
		address 192.168.1.62:7789;
	}
	on Slave63 {
		disk /dev/sdb1;
		address 192.168.1.63:7789;
	}
 }
#啟動(dòng)drbd(建議將drbd服務(wù)加入到開(kāi)機(jī)自啟里)
salt  -L "Master62,Slave63" cmd.run "systemctl start drbd.service"
salt  -L "Master62,Slave63" cmd.run "systemctl enable drbd.service"  #開(kāi)機(jī)后會(huì)啟動(dòng)所有drbd資源
在master和slave上初始化DRBD
salt  -L "Master62,Slave63" cmd.run "drbdadm create-md mfs_meta0"
salt  -L "Master62,Slave63" cmd.run "drbdadm up mfs_meta0"
salt  -L "Master62,Slave63" cmd.run "cat /proc/drbd "	#正常狀態(tài)應(yīng)該是Secondary/Secondary
#將其中一個(gè)節(jié)點(diǎn)置主(這里在主節(jié)點(diǎn),Master62)
salt  "Master62" cmd.run "drbdadm primary mfs_meta0 --force"
#查看狀態(tài),(一主一叢是正常狀態(tài))
[root@client68 ~]# salt  -L "Master62,Slave63" cmd.run "cat /proc/drbd "
Slave63:
    version: 8.4.10-1 (api:1/proto:86-101)
    GIT-hash: a4d5de01fffd7e4cde48a080e2c686f9e8cebf4c build by mockbuild@, 2017-09-15 14:23:22
     0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r-----
        ns:0 nr:1380352 dw:1371760 dr:0 al:8 bm:0 lo:30 pe:1 ua:29 ap:0 ep:1 wo:f oos:14356364
    	[>...................] sync'ed:  8.8% (14016/15356)M
    	finish: 0:11:27 speed: 20,880 (18,048) want: 24,720 K/sec
Master62:
    version: 8.4.10-1 (api:1/proto:86-101)
    GIT-hash: a4d5de01fffd7e4cde48a080e2c686f9e8cebf4c build by mockbuild@, 2017-09-15 14:23:22
     0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
        ns:1381112 nr:0 dw:0 dr:1383240 al:0 bm:0 lo:0 pe:30 ua:0 ap:0 ep:1 wo:f oos:14356364
    	[>...................] sync'ed:  8.8% (14016/15356)M
    	finish: 0:11:27 speed: 20,880 (18,048) K/sec
#只需在(主)Primary上執(zhí)行格式化
salt  "Master62" cmd.run "mkfs.xfs -b 4096 /dev/drbd0"
第三階段:配置并啟動(dòng)mfsmaster和mfscgiser,web監(jiān)控服務(wù)
在master和slave上配置并啟動(dòng)metaserver服務(wù)
#metaserver的配置文件/etc/mfs/mfsmaster.cfg 完全可以不用修改
#在drbd的主上進(jìn)行掛載/dev/drbd0設(shè)備(/var/lib/mfs是管理機(jī)存儲(chǔ)元數(shù)據(jù)的地方)
salt  "Master62" cmd.run "mount /dev/drbd0 /var/lib/mfs "
#不修改為mfsmaster程序的用戶mfs可能無(wú)法創(chuàng)建文件,導(dǎo)致無(wú)法啟動(dòng)mfsmaster
salt  -L "Master62,Slave63" cmd.run "chown mfs:mfs /var/lib/mfs/ -R"
salt  -L "Master62,Slave63" cmd.run "systemctl start moosefs-master.service "
#配置本地hosts解析(因?yàn)閣eb監(jiān)控會(huì)調(diào)用mfsmaster解析到ip,當(dāng)然每次手動(dòng)輸入也可以)
salt  -L "Master62,Slave63" cmd.run 'echo "192.168.1.61	 mfsmaster" >> /etc/hosts '
#在主上啟用監(jiān)控(會(huì)監(jiān)控9425端口,用瀏覽器可以查看 http://192.168.1.61:9425)
salt  "Master62" cmd.run "systemctl start moosefs-cgiserv.service"
第四階段:安裝并配置keepalived
在master和slave上安裝keepalived服務(wù)
salt  -L "Master62,Slave63" cmd.run "yum install keepalived -y"
在master和slave上配置keepalived(參看每行注釋,back的配置只有兩點(diǎn)"state,priority"不一樣)
[root@Master62 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
     root@wsfnk.com		#設(shè)置郵件報(bào)警地址,可以設(shè)置多個(gè),每行一個(gè)
   }
   notification_email_from 123@wsfnk.com #設(shè)置郵件的發(fā)送地址
   smtp_server 192.168.200.1		 #設(shè)置smtp server
   smtp_connect_timeout 30		 #設(shè)置連接smtp server的超時(shí)時(shí)間
   router_id LVS_DEVEL			 #表示運(yùn)行keepalived服務(wù)器的一個(gè)標(biāo)示,發(fā)送郵件時(shí)顯示在郵件主題中的信息
   vrrp_skip_check_adv_addr
   #vrrp_strict				 #注意:當(dāng)你發(fā)現(xiàn)無(wú)法ping通虛擬VIP時(shí),建議將此行注釋掉
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
#定義一個(gè)檢查mfsmaster的腳本vrrp_script chk_mfsmaster {
	script "/etc/keepalived/keepalived_drbd_mfs.sh check"
	#這個(gè)腳本,若是發(fā)現(xiàn)不執(zhí)行,可以檢查他的權(quán)限,777是不可以的,日志提示不安全,可以直接chmod +x /etc/keepalived/keepalived_drbd_mfs.sh 就行
	#script "shutdown -r now"	#或者,直接用命令進(jìn)行調(diào)試
	interval 2
	weight 2
}
#vrrp實(shí)例定義部分
vrrp_instance VI_1 {
    state MASTER	#指定角色為主MASTER,備為BACKUP
    interface ens192	#指定HA監(jiān)測(cè)網(wǎng)絡(luò)的接口,接口名字要與系統(tǒng)一致(建議監(jiān)測(cè)口獨(dú)立)
    virtual_router_id 51  #虛擬路由標(biāo)示,這個(gè)標(biāo)示是一個(gè)數(shù)字,同一個(gè)vrrp實(shí)例使用唯一的標(biāo)示
    priority 100	#主權(quán)值必須設(shè)得比 back 高,數(shù)字越大越高
    advert_int 1	#設(shè)定keepalived-master與備節(jié)點(diǎn)的心跳間隔時(shí)間,單位是秒
    authentication {	#設(shè)置驗(yàn)證類型和密碼
        auth_type PASS	#設(shè)置驗(yàn)證類型,由PASS與HA兩種
        auth_pass 1111	#設(shè)置驗(yàn)證密碼,同一vrrp實(shí)例下,keepalived-master與backup節(jié)點(diǎn)必須使用相同的密碼才能正常通信
    }
    virtual_ipaddress {	#設(shè)置虛擬ip,可以設(shè)置多個(gè)虛擬的vip,每行一個(gè)
        192.168.1.61/24 dev ens192
    }
    track_script {	#調(diào)用上面定義檢查mfsmaster的腳本
        chk_mfsmaster
    }
    notify_master "/etc/keepalived/keepalived_drbd_mfs.sh master"  #表示當(dāng)切換到master狀態(tài)時(shí),要執(zhí)行的腳本
    notify_backup "/etc/keepalived/keepalived_drbd_mfs.sh backup"  #表示當(dāng)切換到backup狀態(tài)時(shí),要執(zhí)行的腳本
    notify_fault "/etc/keepalived/keepalived_drbd_mfs.sh fault"	#表示切換出現(xiàn)故障時(shí)要執(zhí)行的腳本
    notify_stop "/etc/keepalived/keepalived_drbd_mfs.sh fault"	#停止前,執(zhí)行的
}
在master和slave上啟動(dòng)keepalived服務(wù)
salt  -L "Master62,Slave63" cmd.run "systemctl start keepalived "
第五階段:配置(metalogger)元數(shù)據(jù)日志服務(wù)器(這個(gè)角色可以在任何機(jī)器上運(yùn)行,可以遠(yuǎn)程備份)
配置(metalogger)元數(shù)據(jù)日志服務(wù)器(這個(gè)角色可以在任何機(jī)器上運(yùn)行,可以遠(yuǎn)程備份)(可以后來(lái)才添加,也能保持元數(shù)據(jù)一致性)
#修改目錄權(quán)限
salt  "metalogger64" cmd.run "chown mfs:mfs /var/lib/mfs -R "
#很簡(jiǎn)單,只需要,修改到mfsmaster的ip地址就可以了
vi mfsmetalogger.cfg
MASTER_HOST = 192.168.1.64	#指定mfsmaster的主機(jī)地址
#啟動(dòng),并開(kāi)機(jī)啟動(dòng)metalogger服務(wù)
salt  "metalogger64" cmd.run "systemctl start moosefs-metalogger"
salt  "metalogger64" cmd.run "systemctl enable moosefs-metalogger"
#查看同步過(guò)來(lái)的文件/var/lib/mfs/metadata_ml.mfs.back是否與mfsmaster上的/var/lib/mfs/metadata.mfs.back相同(結(jié)果相同)
第六階段:配置并啟動(dòng)后端存儲(chǔ)服務(wù)器chunk
配置chunk服務(wù)器
#創(chuàng)建數(shù)據(jù)存放目錄并修改目錄所有者(mfs用戶,在用yum 安裝mfs套件時(shí)已經(jīng)自動(dòng)創(chuàng)建)
salt  -L "chunk65,chunk66,chunk67" cmd.run "mkdir /data"
salt  -L "chunk65,chunk66,chunk67" cmd.run "chown mfs:mfs /data"
vi /etc/mfs/mfschunkserver.cfg
MASTER_HOST = 192.168.1.61		#master的ip地址
HDD_CONF_FILENAME = /etc/mfs/mfshdd.cfg
CSSERV_LISTEN_PORT = 9422		#這個(gè)端口用于與其他chunk服務(wù)器進(jìn)行連接,通常是數(shù)據(jù)復(fù)制
vi /etc/mfs/mfshdd.cfg
/data		#指定數(shù)據(jù)碎片存儲(chǔ)的真實(shí)路徑(可以是目錄,磁盤(pán)等)
#啟動(dòng)
salt  -L "chunk65,chunk66,chunk67" cmd.run "systemctl enable moosefs-chunkserver.service"
salt  -L "chunk65,chunk66,chunk67" cmd.run "systemctl start moosefs-chunkserver.service"	
#驗(yàn)證:會(huì)在chunk的/data目錄里創(chuàng)建00-FF個(gè)目錄用于存放碎片文件
salt  -L "chunk65,chunk66,chunk67" cmd.run "tree /data"
第七階段:配置客戶端
#確??蛻舳藱C(jī)器內(nèi)核有fuse模塊(若是沒(méi)有:用 modprobe fuse 進(jìn)行加載)
#當(dāng)然:我發(fā)現(xiàn)若是之前沒(méi)有加載fuse模塊時(shí),運(yùn)行下面的掛載命令,該模塊會(huì)被自動(dòng)加載(此步驟可忽略)
lsmod | grep fuse
#創(chuàng)建一個(gè)掛載點(diǎn)(這個(gè)掛載點(diǎn),或則目錄里不能有任何文件,否在會(huì)掛載失?。?mkdir /data
#執(zhí)行掛載(進(jìn)入目錄 cd /data 后,就可以像操作本地?cái)?shù)據(jù)一樣進(jìn)行操作了)
mfsmount -H 192.168.1.61 /data
(附)第八階段:編寫(xiě)keepalived控制drbd和mfs的監(jiān)控腳本
#這是我寫(xiě)的監(jiān)控腳本,(這里的腳本,只能實(shí)現(xiàn),在master和slave上的drbd開(kāi)機(jī)自啟動(dòng)后,master上啟動(dòng)keepalived后能自動(dòng)完成各種監(jiān)測(cè),并成功啟動(dòng)mfsmaster,但是slave上無(wú)法實(shí)現(xiàn)檢查,當(dāng)master故障后slave自動(dòng)切換會(huì)失敗)有待完善
wget https://qiniu.wsfnk.com/keepalived_drbd_mfs.sh
mv keepalived_drbd_mfs.sh /etc/keepalived/
chmod +x /etc/keepalived/keepalived_drbd_mfs.sh
(附)問(wèn)題一:多client掛載,會(huì)有數(shù)據(jù)不一致的情況發(fā)生么

答:不會(huì),原因:參看MFS的工作原理流程分析

(附)問(wèn)題二:假比chunk有三臺(tái),掛了一臺(tái),新加入一臺(tái),原本的數(shù)據(jù)副本數(shù)為2,那么必然部分?jǐn)?shù)據(jù)的副本數(shù)會(huì)降為1,請(qǐng)問(wèn)如何恢復(fù)降低副本數(shù)的副本份數(shù),以保障數(shù)據(jù)的可靠性
(附)問(wèn)題三:整個(gè)架構(gòu),啟動(dòng)與停止順序
正常啟動(dòng)順序:matser >> chunk >> metalogger >> client
正常關(guān)閉順序:client >> chunk >> metalogger >> master
master主機(jī)上:drbd資源啟動(dòng) >> drbd資源置主 >> 掛載drbd到指定目錄 >> 啟動(dòng)mfsmaster和mfscgiser >> 啟動(dòng)keepalived掌管VIP
slave備機(jī)上:drbd資源啟動(dòng) >> drbd資源置從 >> 啟動(dòng)keepalived監(jiān)測(cè)master主機(jī)是否故障
(附)問(wèn)題四:drbd腦裂情況及其處理方法(注意:只有當(dāng)狀態(tài)為Primary的一方,才可以掛載磁盤(pán))
正常狀態(tài):
1:role=Primary/Secondary	cstate=Connected  UpToDate/UpToDate	#這是正常工作狀態(tài),一主一叢,連接狀態(tài),數(shù)據(jù)最新
2:role=Secondary/Secondary   cstate=Connected  UpToDate/UpToDate	#這是drbd資源剛剛啟動(dòng)階段,默認(rèn)都是為從,只需將一端手動(dòng)置主即可
故障狀態(tài)分類
#故障原因:可能是由于主drbd服務(wù)器,網(wǎng)絡(luò)出現(xiàn)故障(如網(wǎng)卡down了等),備服務(wù)器處于正常狀態(tài)
3:(主上)role=Primary/Unknown	cstate=StandAlone  UpToDate/DUnkown	#表示網(wǎng)絡(luò)配置不可用,資源還沒(méi)有被連接或者是被管理斷開(kāi)
3:(備上)role=Secondary/Unknown  cstate=WFConnection  UpToDate/DUnkown	#等待對(duì)端節(jié)點(diǎn)恢復(fù).
#解決辦法:將主drbd的網(wǎng)絡(luò)故障排除后,在主上執(zhí)行連接命令 drbdadm connect mfs_meta0 (或則,將備drbd置主,下線主)
#故障原因:可能是由于備drbd服務(wù)器,網(wǎng)絡(luò)出現(xiàn)故障,主處于正常
4:(主上)role=Primary/Unknown	cstate=WFConnection  UpToDate/DUnkown	#等待對(duì)端節(jié)點(diǎn)恢復(fù).
4:(備上)role=Secondary/Unknown  cstate=StandAlone  UpToDate/DUnkown	#表示網(wǎng)絡(luò)配置不可用,資源還沒(méi)有被連接或者是被管理斷開(kāi)
#解決辦法:
(1)可以不做處理,因?yàn)橹魇钦5模?(2)當(dāng)然也可以在排除備機(jī)網(wǎng)絡(luò)故障后,在備上重新連接 drbdadm connect mfs_meta0;(放棄本地?cái)?shù)據(jù)進(jìn)行連接)drbdadm connect --discard-my-data mfs_meta0
#故障原因:原因不明,主備都出現(xiàn)故障
5:(主上)role=Primary/Unknown	cstate=StandAlone  UpToDate/DUnkown	#表示網(wǎng)絡(luò)配置不可用,資源還沒(méi)有被連接或者是被管理斷開(kāi)
5:(備上)role=Secondary/Unknown  cstate=StandAlone  UpToDate/DUnkown	#表示網(wǎng)絡(luò)配置不可用,資源還沒(méi)有被連接或者是被管理斷開(kāi)
解決辦法:
A:先要排除主備機(jī)器的網(wǎng)絡(luò)故障
B:在備上
drbdadm disconnect mfs_meta0
drbdadm secondary mfs_meta0
drbdadm connect --discard-my-data mfs_meta0	#放棄本地?cái)?shù)據(jù)進(jìn)行連接
C:在主上
drbdadm connect mfs_meta0
D:驗(yàn)證是否正常
(附)問(wèn)題五:如何修復(fù)因斷電導(dǎo)致的master可能無(wú)法啟動(dòng)的情況
#需要最后一個(gè)元數(shù)據(jù)日志changelog 并入主要的metadata 中。這個(gè)操作時(shí)通過(guò) mfsmetarestore 工具做的
#先修復(fù)(幾次測(cè)試發(fā)現(xiàn):如果mfsmetarestore -a無(wú)法修復(fù),則使用metalogger也無(wú)法修復(fù))
mfsmetarestore -a
#如果master 數(shù)據(jù)被存儲(chǔ)在MooseFS 編譯指定地點(diǎn)外的路徑,則要利用-d 參數(shù)指定使用,如:
mfsmetarestore -a -d /opt/mfsmaster
#再啟動(dòng)(才能成功)
#強(qiáng)制使用metadata.mfs.back創(chuàng)建metadata.mfs,可以啟動(dòng)master,但應(yīng)該會(huì)丟失1小時(shí)的數(shù)據(jù)。
#明確表示會(huì)丟失故障點(diǎn)到上一個(gè)整點(diǎn)之間的數(shù)據(jù)。和之前我猜測(cè)的一致。因?yàn)閷?duì)mfs的操作日志都記錄到changelog.0.mfs里面。changelog.0.mfs每小時(shí)合并一次到metadata.mfs中,如果突然斷電,則changelog.0.mfs里面的信息就沒(méi)有合并到metadata中,強(qiáng)制使用metadata.mfs.back創(chuàng)建metadata.mfs,就會(huì)導(dǎo)致丟失changelog.0.mfs里的數(shù)據(jù)。

轉(zhuǎn)載來(lái)源:https://www.linuxprobe.com/mfs.html

文章題目:基于MFS高可用的分布式存儲(chǔ)架構(gòu)
URL分享:http://muchs.cn/article14/ihgsde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、小程序開(kāi)發(fā)、網(wǎng)站排名、用戶體驗(yàn)、標(biāo)簽優(yōu)化定制開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站