drbd(三):drbd的狀態說明

1.幾種獲取狀態信息的方法

drbd有很多獲取信息的方式。在drbd84和之前的版本,大多都使用cat /proc/drbd來獲取信息,多數情況下,這個文件展示的信息對于管理和維護drbd來說已經足夠。

例如以下是drbd84上兩個volume的節點狀態信息:

[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文件已經廢棄了(其實從drbd84就已經廢棄了,只不過仍然能獲取信息),因為drbd9中添加了幾個新狀態信息,也修改了一些信息的顯示名稱,而這個文件并沒有"跟上腳步"。以下是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中,更多的是使用drbdadmdrbdsetup來獲取節點的狀態信息。當然,在drbd84中也可以使用它們來獲取詳細的信息,只不過使用/proc/drbd既方便,又簡潔,多數人都直接更愿意使用/proc/drbd。

例如,使用drbdadm獲取節點的基本信息。

######### 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獲取更詳細的信息:

######### 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/UpToDa

2.狀態

/proc/drbd文件中的狀態信息如下:

[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的次設備號(minor),表示該行是/dev/drbd0資源的信息。
  • cs是connect state,即節點的連接狀態。
  • ro是roles,即節點的角色狀態。
  • ds是disk state,即磁盤的狀態,也即drbd底層設備的狀態。
  • C是drbd的復制協議,即A、B、C協議。
  • r-----是IO標記,反應的是該資源的IO狀態信息。共有6種IO狀態標記符號。

第四行是drbd同步過程中的狀態,總體概括為"性能指標"。

以下翻譯自官方手冊: users-guide-8.4users-guide-9.0 。如果有疑問,可從官方手冊自行查找答案。

2.1 連接狀態(connect state,cs)和復制狀態

節點間通過TCP連接進行通信,在建立連接、斷開連接、特殊情況下有很多種連接狀態。

建立TCP連接后,還有稱為"DRBD"的連接DRBD連接建立完成,表示元數據區、數據區等一切都已準備好,可以進行任何數據同步的操作。

節點間的連接狀態既可以從/proc/drbd文件中獲取,也可以使用下面的命令來獲取。

[root@drbd91 ~]# drbdadm cstate rs0
Connected

drbd84中,將連接狀態和復制狀態全部都歸類為連接狀態。但在drbd9中,由于可以通過net指令定義多個drbd節點,它更網絡對端和volume的概念。因此它將和連接關系不大的狀態獨立劃分為"復制狀態(replication)"中,例如同步、驗證相關的狀態。本文就懶得去區分它們了,都放在一起解釋吧。

有以下幾種連接狀態,其中最常捕獲到的狀態已經加粗顯示。

  • WFConnection當前節點正在等待對端節點出現。例如對方節點drbdadm down后,本節點將處于本狀態。
  • StandAlone無連接。出現這種狀態可能是因為:未連接過、使用drbdadm disconnect斷開連接、節點由于身份驗證的原因未成功加入drbd集群使得連接被刪除、腦裂后斷開連接。
  • Disconnecting:斷開連接的一個臨時過渡狀態。它很快就會切入下一狀態就是StandAlone。
  • Unconnected:嘗試再次發起TCP連接時的一個臨時連接狀態(是連接超時后再次發送連接請求產生的狀態),它的下一個狀態可能是WFConnection,也可能是WFReportParams。
  • Timeout:和對端通信超時時的臨時狀態。下一個狀態就是Unconnection。
  • BrokenPipe:和對端連接丟失時的臨時狀態。下一個狀態是Unconnection。
  • NetworkFailure:和對端連接丟失時的臨時狀態。下一個狀態是Unconnection。(沒錯,和上面的一樣)
  • ProtocolError:和對端連接丟失時的臨時狀態。下一個狀態是Unconnection。(沒錯,還是和上面的一樣)
  • TearDown:對端關閉TCP連接時的臨時狀態。下一個狀態是Unconnection。
  • ConnectedDRBD連接已經建立完成,數據鏡像已經激活成功。這個狀態是drbd正常運行時的狀態。
  • WFReportParams:TCP連接已經建立完成,該節點正在等待對端的第一個數據包。
  • StartingSyncS:全盤數據同步中。只有在初始化時才應該全盤同步。下一個狀態是:SyncSource或PauseSyncS。
  • StartingSyncT:全盤數據同步中。只有在初始化時才應該全盤同步。下一個狀態是:WFSyncUUID。
  • WFBitMapS:部分數據正在同步。下一個狀態是:SyncSource或PauseSyncS。
  • WFBitMapT:部分數據正在同步。下一個狀態是:WFSyncUUID。
  • WFSyncUUID:同步馬上就要開始了。下一個狀態:SyncTarget或PauseSyncT。
  • SyncSource正在同步,且本節點是數據同步的源端。
  • SyncTartget正在同步,且本節點是數據同步的目標端。
  • PauseSyncS:本節點是同步的源端節點,但同步過程當前被暫停。出現這種狀態的原因可能是當前同步進程依賴于另一個同步進程完成,或者使用drbdadm pause-sync手動中斷了同步操作。
  • PauseSyncT:本節點是同步的目標端,但同步過程當前被暫停。出現這種狀態的原因可能是當前同步進程依賴于另一個同步進程完成,或者使用drbdadm pause-sync手動中斷了同步操作。
  • VerifyS:正在進行在線設備驗證,且本節點將成為驗證的源端。
  • VerifyT:正在進行在線設備驗證,且本節點將成為驗證的目標端。

在drbd9中,WFConnection狀態改為connecting狀態。刪除了WFReportParams狀態。添加了以下幾個同步相關的狀態:

  • Off:該卷組還未同步,因為連接未建立。
  • Established所有對該卷組的寫操作已經在線完成同步。這是drbd正常運行時的狀態。
  • Ahead:數據同步操作被掛起,因為網絡套接字中達到了一定的堵塞程度,無法應付更多的負載。該狀態需要配置"on-congestion"選項來啟用。
  • Behind:對端將數據同步操作掛起,因為網絡套接字中達到了一定的堵塞程度,無法應付更多的負載。該狀態需要在對端節點上配置"on-congestion"選項來啟用。

2.2 角色狀態(roles,ro)

資源的角色狀態既可以從/proc/drbd文件中獲取,也可以使用下面的命令來獲取。

[root@drbd1 ~]# drbdadm role data1
Primary/Unknown
Primary/Unknown

在角色狀態信息中,本地節點總是標記在第一位,遠程節點標記在結尾。

可能的節點角色狀態有:

  • Primary:資源的primary角色,該角色狀態下的drbd設備可以進行掛載、讀、寫等。在沒有啟用多主復制模型(dual-primary mode),只能有一個primary節點。
  • Secondary:資源的secondary角色。該角色狀態下的drbd設備會接收來自primary端的數據更新(除非和對端不是primary)。且該角色的drbd設備不可掛載、不可讀、不可寫。
  • Unknown:資源的角色未知。本地節點的角色狀態絕對不可能會是這種狀態。只有對端節點斷開連接時對端節點才處于Unknown狀態。

2.3 磁盤狀態(disk state,ds)

磁盤的狀態既可以從/proc/drbd文件中獲取,也可以使用下面的命令來獲取。

# drbdadm dstate <resource>
UpToDate/UpToDate

在磁盤狀態信息中,本地節點的磁盤狀態總是標記在第一位,遠程節點標記在結尾。這兩端節點的狀態信息都可能為以下值:

  • Diskless:沒有為DRBD驅動分配底層塊設備。這意味著資源可能從沒有和它的底層塊設備進行關聯綁定(attach),也可能是手動detach解除了關聯,還可能是出現了底層IO錯誤時自動detach。
  • Attaching:讀取元數據時的一個短暫的狀態。
  • Failed:本地塊設備故障時的一個短暫的狀態,下一個狀態是:Diskless。
  • Negotiating:在已連接的DRBD設備上還要進行Attach時的一個短暫的狀態。
  • Inconsistent:數據不一致。在雙方節點(還未進行全盤同步之前)剛創建新的資源時會立即進入此狀態。在某一端(目標段)正接收同步數據時,也會進入不一致狀態。
  • Outdated:資源的數據是一致的,但是數據過期了。(例如,已經同步后secondary下線了,之后又上線了,在還沒開始重新同步的時候就是Outdated狀態)
  • DUnknown:用于標識對端節點沒有連接時的磁盤狀態。
  • Consistent:連接斷開時的數據處于一致性狀態,當連接建立后,將決定數據是UpToDate還是Outdated狀態。
  • UpToDate:資源的數據是一致的,且數據是最新的。這是drbd數據正常時的狀態。

2.4 IO狀態標記

IO狀態標記表示的是當前資源的IO操作狀態。共有6種狀態:

  • IO掛起:r或s都可能表示IO掛起,一般是r。r=running,s=suspended。
  • 串行重新同步:資源正在等待進行重新同步,但被resync-after選項延遲了同步進度。該狀態標記為"a",通常該狀態欄應該處于"-"。
  • 對端初始化同步掛起:資源正在等待進行重新同步,但對端節點因為某些原因而IO掛起。該狀態標記為"p",通常該狀態欄應該處于"-"。
  • 本地初始化同步掛起:資源正在等待進行重新同步,但本節點因為某些原因而IO掛起。該狀態標記為"u",通常該狀態欄應該處于"-"。
  • 本地IO阻塞:通常該狀態欄應該處于"-"。可能有以下幾種標記:
    • d:因為DRBD內部原因導致的IO阻塞。
    • b:后端設備正處于IO阻塞。
    • n:網絡套接字阻塞。
    • a:網絡套接字和后端塊設備同時處于阻塞狀態。
  • Activity Log更新掛起:當al更新被掛起時,處于該狀態,標記為"s",通常該狀態欄應該處于"-"。(如果不知道什么是Active Log,請無視本標記)

2.5 性能指標

主要是一些計數器和計量器的值。

請結合drbd原理圖進行理解:

drbd84中使用縮寫符號來標記性能指標,而drbd9中使用全稱來表示。例如drbd84中的ns和drbd9中的send是同一個意思。

  • ns/send (network send):通過網絡連接發送給對端的數據量,單位為Kb。
  • nr/receive (network receive):通過網絡連接接收到對端發送來的數據量,單位為Kb。
  • dw/written (disk write):該卷(volume)寫入本地磁盤的數據量,單位為Kb。
  • dr/read (disk read):該卷(volume)從本地磁盤讀取的數據量,單位為Kb。
  • al/al-writes (activity log):元數據區中al更新的次數。
  • bm/bm-writes (bit map):元數據區中bitmap更新的次數。
  • lo/lower-pending (local count):DRBD發起的打開本地IO子系統的請求次數。
  • pe/pending (pending):本地發送給對端但卻沒有回復的次數。
  • ua/unacked (unacknowledged):接收到對端發送的請求但卻沒有給予回復的請求數量。
  • ap/upper-pending (application pending):轉發給DRBD的IO塊的請求,但DRBD還沒給予回復的請求數量。
  • ep (epochs):epoch對象的數量。通常為1。drbd9中沒有該指標。
  • wo/write-ordering (write order):當前正在使用的write order方法:b(barrier), f(flush), d(drain)或n(none)。
  • oos/out-of-sync (out of sync):當前不同步的數據量,單位為Kb。

上面所有"未給予回復"的指標數量都表示動作還未完成,需要回復后才表示操作完成。這些未回復數值不能太大。

此外,drbd9中添加了以下幾個指標:

  • resync-suspended:重新同步操作當前是否被掛起。可能的值為no/user/peer/dependency。
  • blocked:本地IO的擁擠情況。
    • no:本地IO不擁擠。
    • upper:DRBD層之上的IO被阻塞。例如到文件系統上的IO阻塞。可能有以下幾種原因:
      • 管理員使用drbdadm suspend-io命令掛起了IO操作。
      • 短暫的IO阻塞,例如attach/detach導致的。
      • 刪除了緩沖區。
      • bitmap的IO等待。
    • lower:底層設備處于擁擠狀態。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539002.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539002.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539002.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Lock的lock()方法

ReentrantLock是JDK唯一實現了Lock接口的類 lock() 是平常使用得最多的一個方法&#xff0c;就是用來獲取鎖。如果鎖已被其他線程獲取&#xff0c;則進行等待。 由于在前面講到如果采用Lock&#xff0c;必須主動去釋放鎖&#xff0c;并且在發生異常時&#xff0c;不會自動釋放鎖…

Lock的tryLock()方法

概述 tryLock()方法是有返回值的&#xff0c;它表示用來嘗試獲取鎖&#xff0c;如果獲取成功&#xff0c;則返回true&#xff0c;如果獲取失敗&#xff08;即鎖已被其他線程獲取&#xff09;&#xff0c;則返回false&#xff0c;這個方法無論如何都會立即返回。在拿不到鎖時不…

python requests庫詳解_python的requests庫詳解

快速上手迫不及待了嗎&#xff1f;本頁內容為如何入門 Requests 提供了很好的指引。其假設你已經安裝了 Requests。如果還沒有&#xff0c;去安裝一節看看吧。首先&#xff0c;確認一下&#xff1a;Requests 已安裝Requests 是最新的讓我們從一些簡單的示例開始吧。發送請求使用…

python QTreeWidgetItem下面有幾個子tree_python-nlp ch1筆記:nlp的基礎應用、高級應用、python優勢、nltk環境搭建...

本帖是對(印度)Jalaj Thanaki作品《python自然語言處理》的翻譯、縮減及改編~nlp的基礎應用NLP是AI的子分支&#xff0c;其相關概念可以用于以下專家系統中&#xff1a;語音識別系統問答系統機器翻譯文本摘要情感分析基于模板的聊天機器人文本分類主題分割nlp的高級應用理解自然…

C#使用ListView更新數據出現閃爍解決辦法

C#使用ListView更新數據出現閃爍解決辦法 在使用vs自動控件ListView控件時候&#xff0c;更新里面的部分代碼時候出現閃爍的情況 如圖&#xff1a; 解決以后&#xff1a; 解決辦法使用雙緩沖&#xff1a;添加新類繼承ListView 對其重寫 1 public class DoubleBufferListView : …

Lock的tryLock(long time, TimeUnit unit)方法

概述 tryLock(long time, TimeUnit unit)方法和tryLock()方法是類似的&#xff0c;只不過區別在于這個方法在拿不到鎖時會等待一定的時間&#xff0c;在時間期限之內如果還拿不到鎖&#xff0c;就返回false。如果一開始拿到鎖或者在等待期間內拿到了鎖&#xff0c;則返回true。…

python語音識別的第三方庫_python標準庫+內置函數+第三方庫: 7.音頻處理

python標準庫內置函數第三方庫 欲善其事&#xff0c;必先利其器 這其器必是python的標準庫內置函數&#xff0c;話說許多第三方庫&#xff0c; 也是對標準庫的使用&#xff0c;進行封裝&#xff0c;使得使用起來更方便。 這些庫以使用場景來分類: 7、音頻處理 音頻處理主要適用…

SperingBoot+vue文件上傳下載預覽

上傳文件&#xff1a; 前端&#xff1a; 整個過程&#xff0c;就是在使用FormData 添加 上File&#xff08;這個Blob&#xff09;&#xff0c;并且key要和后臺的名字對應上在點擊上傳按鈕開始上傳之前&#xff0c;使用了URL.createObjectURL(File)創建blobUrl&#xff0c;給了…

keepalived腦裂問題查找

在自己環境做keepalivedredis實驗時&#xff0c;當重啟了備用redies機器后&#xff0c;發現兩臺redies主機都拿到了VIP [plain] view plaincopy [rootredis2 ~]# ip addr list 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopbac…

python 多線程并行 矩陣乘法_python實現簡單的并行矩陣乘法

python實現簡單的并行矩陣乘法python實現簡單的并行矩陣乘法本文采用的矩陣乘法方式是利用一個矩陣的行和二個矩陣的列相乘時不會互相影響。假設A(m,n)表示矩陣的m行&#xff0c;n列。那么C(m,m)A(m,n) * B(n,m) &#xff1a;計算C矩陣時候分解成&#xff1a;process-1&#xf…

停止Java線程,小心interrupt()方法

轉自http://www.blogjava.NET/jinfeng_wang/archive/2008/04/27/196477.html ---------------------------------------------------------------------------------------------------- 程序是很簡易的。然而&#xff0c;在編程人員面前&#xff0c;多線程呈現出了一組新的難…

python輸入數學表達式并求值_用Python3實現表達式求值

一、題目描述 請用 python3編寫一個計算器的控制臺程序&#xff0c;支持加減乘除、乘方、括號、小數點&#xff0c;運算符優先級為括號>乘方>乘除>加減&#xff0c;同級別運算按照從左向右的順序計算。 二、輸入描述 數字包括"0123456789"&#xff0c;小數點…

mac上的mysql管理工具sequel pro

https://blog.csdn.net/wan_zaiyunduan/article/details/54909389 以前用過Plsql、Navicat、Workbench&#xff0c;現在換到mac上&#xff0c;用了現在這一款管理工具&#xff0c;很好用&#xff0c;所以推薦給大家。 完整的MySQL支持 Sequel Pro是一個快速,易于使用的Mac數據庫…

報錯 classes 拒絕訪問_3種方式“移除”快速訪問;為什么移除?你懂的...

Windows 10 在文件資源管理器中引入了"快速訪問"這個功能&#xff0c;每當打開文件資源管理器窗口時&#xff0c;您都會看到常用文件夾和最近訪問的文件的列表&#xff0c;這個功能雖然方便了日常使用&#xff0c;可能會提高工作效率&#xff0c;但是如果是公司的電腦…

java set是重復_java算法題,set內出現重復元素

題目將數字 1…9 填入一個33 的九宮格中&#xff0c;使得格子中每一橫行和的值全部相等&#xff0c;每一豎列和的值全部相等。請你計算有多少種填數字的方案。這個是計蒜客上面的一個模擬題&#xff0c;我采用暴力。public class _3 {/** 將數字 1…9 填入一個33 的九宮格中&am…

Lock的lockInterruptibly()

概述 lockInterruptibly()方法比較特殊&#xff0c;當通過這個方法去獲取鎖時&#xff0c;如果其他線程正在等待獲取鎖&#xff0c;則這個線程能夠響應中斷&#xff0c;即中斷線程的等待狀態。也就使說&#xff0c;當兩個線程同時通過lock.lockInterruptibly()想獲取某個鎖時&…

python中把輸出結果寫到一個文件中_Python3.6筆記之將程序運行結果輸出到文件的方法...

Python3.6筆記之將程序運行結果輸出到文件的方法 更新時間&#xff1a;2018年04月22日 14:27:32 投稿&#xff1a;jingxian 下面小編就為大家分享一篇Python3.6筆記之將程序運行結果輸出到文件的方法&#xff0c;具有很好的參考價值&#xff0c;希望對大家有所幫助。一起跟隨小…

hangfire.mysql.core_abp 使用 hangfire結合mysql

abp 官方使用的hangfire 默認使用的是sqlserver的存儲mysql須要引入支持mysql的類庫sql我這邊使用的是Hangfire.MySql.Core數據庫直接用nuget安裝便可app首先按照官方文檔要求&#xff0c;改幾個地方sqlserver分別是 Startup 文件下serverservices.AddHangfire(config >{con…

python 圖標題上移_Python-Matplotlib將圖形標題移動到y軸

我目前在python中使用matplotlib來繪制一些數據,但是我希望圖表的標題位于Y軸上,因為沒有足夠的空間來存儲一個圖形的標題和另一個圖形的x軸標簽.我知道我可以將hspace設置為更大的數字但是,我不想這樣做,因為我計劃將幾個圖表堆疊在一起,如果我調整hspace,那么圖表將是真的簡短…

solr的基礎使用

查詢運算符 例如&#xff1a;http://localhost:8984/solr/mycore/select?q*:* : 指定字段查指定值&#xff0c;如返回所有值q*:* ? 匹配單個字符&#xff0c; 例如: qtitle:??拳 可以匹配標題為“形意拳”的文檔 * 匹配零個或多個字符, 例如: qtitle:*形意拳 或者 qtitl…