drbd(三):drbd的状态说明
1.幾種獲取狀態(tài)信息的方法
drbd有很多獲取信息的方式。在drbd84和之前的版本,大多都使用cat /proc/drbd來獲取信息,多數(shù)情況下,這個文件展示的信息對于管理和維護(hù)drbd來說已經(jīng)足夠。
例如以下是drbd84上兩個volume的節(jié)點狀態(tài)信息:
[root@drbd1 ~]# cat /proc/drbd version: 8.4.10-1 (api:1/proto:86-101) GIT-hash: a4d5de01fffd7e4cde48a080e2c686f9e8cebf4c build by mockbuild@, 2017-09-15 14:23:220: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----ns:76408 nr:0 dw:76408 dr:3441 al:22 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:01: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----ns:4957732 nr:0 dw:76324 dr:4883249 al:29 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0但從drbd9開始,/proc/drbd文件已經(jīng)廢棄了(其實從drbd84就已經(jīng)廢棄了,只不過仍然能獲取信息),因為drbd9中添加了幾個新狀態(tài)信息,也修改了一些信息的顯示名稱,而這個文件并沒有"跟上腳步"。以下是drbd9中該文件展示的信息。
[root@drbd91 ~]# cat /proc/drbd version: 9.0.9-1 (api:2/proto:86-112) GIT-hash: f7b979e7af01813e031aac579140237640c94569 build by mockbuild@, 2017-09-14 17:45:45 Transports (api:16): tcp (9.0.9-1)在drbd9中,更多的是使用drbdadm或drbdsetup來獲取節(jié)點的狀態(tài)信息。當(dāng)然,在drbd84中也可以使用它們來獲取詳細(xì)的信息,只不過使用/proc/drbd既方便,又簡潔,多數(shù)人都直接更愿意使用/proc/drbd。
例如,使用drbdadm獲取節(jié)點的基本信息。
######### drbdadm status [--verbose] RESOURCE[root@drbd90 ~]# drbdadm status rs0 rs0 role:Primaryvolume:0 disk:UpToDatevolume:1 disk:UpToDatedrbd91.longshuai.com role:Secondaryvolume:0 replication:SyncSource peer-disk:Inconsistent done:0.43volume:1 replication:SyncSource peer-disk:Inconsistent done:23.72[root@drbd90 ~]# drbdadm status rs0 --verbose drbdsetup status rs0 rs0 role:Primaryvolume:0 disk:UpToDatevolume:1 disk:UpToDatedrbd91.longshuai.com role:Secondaryvolume:0 replication:SyncSource peer-disk:Inconsistent done:7.04volume:1 replication:SyncSource peer-disk:Inconsistent done:48.44使用drbdsetup獲取更詳細(xì)的信息:
######### drbdsetup status [--verbose] [--statistics] RESOURCE`[root@drbd90 ~]# drbdsetup status rs0 --verbose --statistics rs0 node-id:0 role:Primary suspended:nowrite-ordering:flushvolume:0 minor:0 disk:UpToDatesize:4882432 read:537552 written:0 al-writes:0 bm-writes:0 upper-pending:0 lower-pending:0 al-suspended:no blocked:novolume:1 minor:1 disk:UpToDatesize:4882432 read:2811712 written:0 al-writes:0 bm-writes:0 upper-pending:0 lower-pending:0 al-suspended:no blocked:nodrbd91.longshuai.com node-id:1 connection:Connected role:Secondary congested:novolume:0 replication:SyncSource peer-disk:Inconsistent done:11.00 resync-suspended:noreceived:0 sent:537096 out-of-sync:4345336 pending:0 unacked:0volume:1 replication:SyncSource peer-disk:Inconsistent done:57.58 resync-suspended:noreceived:0 sent:2811256 out-of-sync:2071176 pending:0 unacked:0除此之外,還可以使用drbd-overview獲取一些簡單的信息。
[root@drbd91 ~]# drbd-overview NOTE: drbd-overview will be deprecated soon. Please consider using drbdtop.0:rs0/0 Connected(2*) Second/Primar UpToDa/UpToDa 1:rs0/1 Connected(2*) Second/Primar UpToDa/UpToDa2.狀態(tài)
/proc/drbd文件中的狀態(tài)信息如下:
[root@drbd1 ~]# cat /proc/drbd version: 8.4.10-1 (api:1/proto:86-101) GIT-hash: a4d5de01fffd7e4cde48a080e2c686f9e8cebf4c build by mockbuild@, 2017-09-15 14:23:220: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----ns:76408 nr:0 dw:76408 dr:3441 al:22 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0其中第三行中:
- 0是drbd的次設(shè)備號(minor),表示該行是/dev/drbd0資源的信息。
- cs是connect state,即節(jié)點的連接狀態(tài)。
- ro是roles,即節(jié)點的角色狀態(tài)。
- ds是disk state,即磁盤的狀態(tài),也即drbd底層設(shè)備的狀態(tài)。
- C是drbd的復(fù)制協(xié)議,即A、B、C協(xié)議。
- r-----是IO標(biāo)記,反應(yīng)的是該資源的IO狀態(tài)信息。共有6種IO狀態(tài)標(biāo)記符號。
第四行是drbd同步過程中的狀態(tài),總體概括為"性能指標(biāo)"。
以下翻譯自官方手冊: users-guide-8.4 和 users-guide-9.0 。如果有疑問,可從官方手冊自行查找答案。
2.1 連接狀態(tài)(connect state,cs)和復(fù)制狀態(tài)
節(jié)點間通過TCP連接進(jìn)行通信,在建立連接、斷開連接、特殊情況下有很多種連接狀態(tài)。
建立TCP連接后,還有稱為"DRBD"的連接。DRBD連接建立完成,表示元數(shù)據(jù)區(qū)、數(shù)據(jù)區(qū)等一切都已準(zhǔn)備好,可以進(jìn)行任何數(shù)據(jù)同步的操作。
節(jié)點間的連接狀態(tài)既可以從/proc/drbd文件中獲取,也可以使用下面的命令來獲取。
[root@drbd91 ~]# drbdadm cstate rs0 Connecteddrbd84中,將連接狀態(tài)和復(fù)制狀態(tài)全部都?xì)w類為連接狀態(tài)。但在drbd9中,由于可以通過net指令定義多個drbd節(jié)點,它更網(wǎng)絡(luò)對端和volume的概念。因此它將和連接關(guān)系不大的狀態(tài)獨立劃分為"復(fù)制狀態(tài)(replication)"中,例如同步、驗證相關(guān)的狀態(tài)。本文就懶得去區(qū)分它們了,都放在一起解釋吧。
有以下幾種連接狀態(tài),其中最常捕獲到的狀態(tài)已經(jīng)加粗顯示。
- WFConnection:當(dāng)前節(jié)點正在等待對端節(jié)點出現(xiàn)。例如對方節(jié)點drbdadm down后,本節(jié)點將處于本狀態(tài)。
- StandAlone:無連接。出現(xiàn)這種狀態(tài)可能是因為:未連接過、使用drbdadm disconnect斷開連接、節(jié)點由于身份驗證的原因未成功加入drbd集群使得連接被刪除、腦裂后斷開連接。
- Disconnecting:斷開連接的一個臨時過渡狀態(tài)。它很快就會切入下一狀態(tài)就是StandAlone。
- Unconnected:嘗試再次發(fā)起TCP連接時的一個臨時連接狀態(tài)(是連接超時后再次發(fā)送連接請求產(chǎn)生的狀態(tài)),它的下一個狀態(tài)可能是WFConnection,也可能是WFReportParams。
- Timeout:和對端通信超時時的臨時狀態(tài)。下一個狀態(tài)就是Unconnection。
- BrokenPipe:和對端連接丟失時的臨時狀態(tài)。下一個狀態(tài)是Unconnection。
- NetworkFailure:和對端連接丟失時的臨時狀態(tài)。下一個狀態(tài)是Unconnection。(沒錯,和上面的一樣)
- ProtocolError:和對端連接丟失時的臨時狀態(tài)。下一個狀態(tài)是Unconnection。(沒錯,還是和上面的一樣)
- TearDown:對端關(guān)閉TCP連接時的臨時狀態(tài)。下一個狀態(tài)是Unconnection。
- Connected:DRBD連接已經(jīng)建立完成,數(shù)據(jù)鏡像已經(jīng)激活成功。這個狀態(tài)是drbd正常運行時的狀態(tài)。
- WFReportParams:TCP連接已經(jīng)建立完成,該節(jié)點正在等待對端的第一個數(shù)據(jù)包。
- StartingSyncS:全盤數(shù)據(jù)同步中。只有在初始化時才應(yīng)該全盤同步。下一個狀態(tài)是:SyncSource或PauseSyncS。
- StartingSyncT:全盤數(shù)據(jù)同步中。只有在初始化時才應(yīng)該全盤同步。下一個狀態(tài)是:WFSyncUUID。
- WFBitMapS:部分?jǐn)?shù)據(jù)正在同步。下一個狀態(tài)是:SyncSource或PauseSyncS。
- WFBitMapT:部分?jǐn)?shù)據(jù)正在同步。下一個狀態(tài)是:WFSyncUUID。
- WFSyncUUID:同步馬上就要開始了。下一個狀態(tài):SyncTarget或PauseSyncT。
- SyncSource:正在同步,且本節(jié)點是數(shù)據(jù)同步的源端。
- SyncTartget:正在同步,且本節(jié)點是數(shù)據(jù)同步的目標(biāo)端。
- PauseSyncS:本節(jié)點是同步的源端節(jié)點,但同步過程當(dāng)前被暫停。出現(xiàn)這種狀態(tài)的原因可能是當(dāng)前同步進(jìn)程依賴于另一個同步進(jìn)程完成,或者使用drbdadm pause-sync手動中斷了同步操作。
- PauseSyncT:本節(jié)點是同步的目標(biāo)端,但同步過程當(dāng)前被暫停。出現(xiàn)這種狀態(tài)的原因可能是當(dāng)前同步進(jìn)程依賴于另一個同步進(jìn)程完成,或者使用drbdadm pause-sync手動中斷了同步操作。
- VerifyS:正在進(jìn)行在線設(shè)備驗證,且本節(jié)點將成為驗證的源端。
- VerifyT:正在進(jìn)行在線設(shè)備驗證,且本節(jié)點將成為驗證的目標(biāo)端。
在drbd9中,WFConnection狀態(tài)改為connecting狀態(tài)。刪除了WFReportParams狀態(tài)。添加了以下幾個同步相關(guān)的狀態(tài):
- Off:該卷組還未同步,因為連接未建立。
- Established:所有對該卷組的寫操作已經(jīng)在線完成同步。這是drbd正常運行時的狀態(tài)。
- Ahead:數(shù)據(jù)同步操作被掛起,因為網(wǎng)絡(luò)套接字中達(dá)到了一定的堵塞程度,無法應(yīng)付更多的負(fù)載。該狀態(tài)需要配置"on-congestion"選項來啟用。
- Behind:對端將數(shù)據(jù)同步操作掛起,因為網(wǎng)絡(luò)套接字中達(dá)到了一定的堵塞程度,無法應(yīng)付更多的負(fù)載。該狀態(tài)需要在對端節(jié)點上配置"on-congestion"選項來啟用。
2.2 角色狀態(tài)(roles,ro)
資源的角色狀態(tài)既可以從/proc/drbd文件中獲取,也可以使用下面的命令來獲取。
[root@drbd1 ~]# drbdadm role data1 Primary/Unknown Primary/Unknown在角色狀態(tài)信息中,本地節(jié)點總是標(biāo)記在第一位,遠(yuǎn)程節(jié)點標(biāo)記在結(jié)尾。
可能的節(jié)點角色狀態(tài)有:
- Primary:資源的primary角色,該角色狀態(tài)下的drbd設(shè)備可以進(jìn)行掛載、讀、寫等。在沒有啟用多主復(fù)制模型(dual-primary mode),只能有一個primary節(jié)點。
- Secondary:資源的secondary角色。該角色狀態(tài)下的drbd設(shè)備會接收來自primary端的數(shù)據(jù)更新(除非和對端不是primary)。且該角色的drbd設(shè)備不可掛載、不可讀、不可寫。
- Unknown:資源的角色未知。本地節(jié)點的角色狀態(tài)絕對不可能會是這種狀態(tài)。只有對端節(jié)點斷開連接時對端節(jié)點才處于Unknown狀態(tài)。
2.3 磁盤狀態(tài)(disk state,ds)
磁盤的狀態(tài)既可以從/proc/drbd文件中獲取,也可以使用下面的命令來獲取。
# drbdadm dstate <resource> UpToDate/UpToDate在磁盤狀態(tài)信息中,本地節(jié)點的磁盤狀態(tài)總是標(biāo)記在第一位,遠(yuǎn)程節(jié)點標(biāo)記在結(jié)尾。這兩端節(jié)點的狀態(tài)信息都可能為以下值:
- Diskless:沒有為DRBD驅(qū)動分配底層塊設(shè)備。這意味著資源可能從沒有和它的底層塊設(shè)備進(jìn)行關(guān)聯(lián)綁定(attach),也可能是手動detach解除了關(guān)聯(lián),還可能是出現(xiàn)了底層IO錯誤時自動detach。
- Attaching:讀取元數(shù)據(jù)時的一個短暫的狀態(tài)。
- Failed:本地塊設(shè)備故障時的一個短暫的狀態(tài),下一個狀態(tài)是:Diskless。
- Negotiating:在已連接的DRBD設(shè)備上還要進(jìn)行Attach時的一個短暫的狀態(tài)。
- Inconsistent:數(shù)據(jù)不一致。在雙方節(jié)點(還未進(jìn)行全盤同步之前)剛創(chuàng)建新的資源時會立即進(jìn)入此狀態(tài)。在某一端(目標(biāo)段)正接收同步數(shù)據(jù)時,也會進(jìn)入不一致狀態(tài)。
- Outdated:資源的數(shù)據(jù)是一致的,但是數(shù)據(jù)過期了。(例如,已經(jīng)同步后secondary下線了,之后又上線了,在還沒開始重新同步的時候就是Outdated狀態(tài))
- DUnknown:用于標(biāo)識對端節(jié)點沒有連接時的磁盤狀態(tài)。
- Consistent:連接斷開時的數(shù)據(jù)處于一致性狀態(tài),當(dāng)連接建立后,將決定數(shù)據(jù)是UpToDate還是Outdated狀態(tài)。
- UpToDate:資源的數(shù)據(jù)是一致的,且數(shù)據(jù)是最新的。這是drbd數(shù)據(jù)正常時的狀態(tài)。
2.4 IO狀態(tài)標(biāo)記
IO狀態(tài)標(biāo)記表示的是當(dāng)前資源的IO操作狀態(tài)。共有6種狀態(tài):
- IO掛起:r或s都可能表示IO掛起,一般是r。r=running,s=suspended。
- 串行重新同步:資源正在等待進(jìn)行重新同步,但被resync-after選項延遲了同步進(jìn)度。該狀態(tài)標(biāo)記為"a",通常該狀態(tài)欄應(yīng)該處于"-"。
- 對端初始化同步掛起:資源正在等待進(jìn)行重新同步,但對端節(jié)點因為某些原因而IO掛起。該狀態(tài)標(biāo)記為"p",通常該狀態(tài)欄應(yīng)該處于"-"。
- 本地初始化同步掛起:資源正在等待進(jìn)行重新同步,但本節(jié)點因為某些原因而IO掛起。該狀態(tài)標(biāo)記為"u",通常該狀態(tài)欄應(yīng)該處于"-"。
- 本地IO阻塞:通常該狀態(tài)欄應(yīng)該處于"-"。可能有以下幾種標(biāo)記:
- d:因為DRBD內(nèi)部原因?qū)е碌腎O阻塞。
- b:后端設(shè)備正處于IO阻塞。
- n:網(wǎng)絡(luò)套接字阻塞。
- a:網(wǎng)絡(luò)套接字和后端塊設(shè)備同時處于阻塞狀態(tài)。
- Activity Log更新掛起:當(dāng)al更新被掛起時,處于該狀態(tài),標(biāo)記為"s",通常該狀態(tài)欄應(yīng)該處于"-"。(如果不知道什么是Active Log,請無視本標(biāo)記)
2.5 性能指標(biāo)
主要是一些計數(shù)器和計量器的值。
請結(jié)合drbd原理圖進(jìn)行理解:
drbd84中使用縮寫符號來標(biāo)記性能指標(biāo),而drbd9中使用全稱來表示。例如drbd84中的ns和drbd9中的send是同一個意思。
- ns/send (network send):通過網(wǎng)絡(luò)連接發(fā)送給對端的數(shù)據(jù)量,單位為Kb。
- nr/receive (network receive):通過網(wǎng)絡(luò)連接接收到對端發(fā)送來的數(shù)據(jù)量,單位為Kb。
- dw/written (disk write):該卷(volume)寫入本地磁盤的數(shù)據(jù)量,單位為Kb。
- dr/read (disk read):該卷(volume)從本地磁盤讀取的數(shù)據(jù)量,單位為Kb。
- al/al-writes (activity log):元數(shù)據(jù)區(qū)中al更新的次數(shù)。
- bm/bm-writes (bit map):元數(shù)據(jù)區(qū)中bitmap更新的次數(shù)。
- lo/lower-pending (local count):DRBD發(fā)起的打開本地IO子系統(tǒng)的請求次數(shù)。
- pe/pending (pending):本地發(fā)送給對端但卻沒有回復(fù)的次數(shù)。
- ua/unacked (unacknowledged):接收到對端發(fā)送的請求但卻沒有給予回復(fù)的請求數(shù)量。
- ap/upper-pending (application pending):轉(zhuǎn)發(fā)給DRBD的IO塊的請求,但DRBD還沒給予回復(fù)的請求數(shù)量。
- ep (epochs):epoch對象的數(shù)量。通常為1。drbd9中沒有該指標(biāo)。
- wo/write-ordering (write order):當(dāng)前正在使用的write order方法:b(barrier), f(flush), d(drain)或n(none)。
- oos/out-of-sync (out of sync):當(dāng)前不同步的數(shù)據(jù)量,單位為Kb。
上面所有"未給予回復(fù)"的指標(biāo)數(shù)量都表示動作還未完成,需要回復(fù)后才表示操作完成。這些未回復(fù)數(shù)值不能太大。
此外,drbd9中添加了以下幾個指標(biāo):
- resync-suspended:重新同步操作當(dāng)前是否被掛起。可能的值為no/user/peer/dependency。
- blocked:本地IO的擁擠情況。
- no:本地IO不擁擠。
- upper:DRBD層之上的IO被阻塞。例如到文件系統(tǒng)上的IO阻塞。可能有以下幾種原因:
- 管理員使用drbdadm suspend-io命令掛起了IO操作。
- 短暫的IO阻塞,例如attach/detach導(dǎo)致的。
- 刪除了緩沖區(qū)。
- bitmap的IO等待。
- lower:底層設(shè)備處于擁擠狀態(tài)。
總結(jié)
以上是生活随笔為你收集整理的drbd(三):drbd的状态说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超简单的mysql多实例布置
- 下一篇: [转] Lodash