|
|
近期遇到很早以前的crm管理服务
0 _: h6 q/ q( F4 N按照常规的方式启动没有问题,但是后来发现有些状态是异常的。" w3 Z( a, M& R3 d8 M4 i
5 W- D: t0 k& ~
无意中接触到drbd这个组件,以及crm主键:
8 [& k! X/ L" S* |! O/ K一:
+ n6 M1 y, s0 _# B6 N, S: s: l还可以使用drbd-overview获取一些简单的信息。
+ A9 A8 P _% f正常的 :
" j! S& Z% c- adrbd-overview 9 w* {$ }- Y, I3 R4 x. }' M
NOTE: drbd-overview will be deprecated soon.$ i) E* b4 z6 K. C! v; a
Please consider using drbdtop.2 ^* ~$ f7 ^% \ v4 @' B
3 N9 o$ }3 I1 S5 y9 o 0:rs0/0 Connected(2*) Second/Primar UpToDa/UpToDa 9 w3 E/ b8 I% F6 ]7 W+ k5 q
1:rs0/1 Connected(2*) Second/Primar UpToDa/UpToDa
# {% y0 ~: i% E, T& x
$ \5 |. z, b4 W! ^& \/ w8 S. a( ?3 _
有问题的:0 o% C! e6 u, G! j& q5 B4 G% N% ?
drbd-overview & o, `* h& g% G
0:mysql/0 Connected Secondary/Primary UpToDate/UpToDate " W0 T& P$ I8 U# _: n5 }
1:image/0 Connected Secondary/Primary Diskless/UpToDate
. w- r" Z/ z1 @2 H$ s
V' B& K( y! J1 V6 U1 E5 J/ ^; G! D- F4 K
2.状态
- D4 o& C, \% k$ d9 [' C8 v% q/proc/drbd文件中的状态信息如下:
! S% _# }; K! W9 z- x( ]5 b cat /proc/drbd # T: P8 x6 J: W3 M$ i0 o" r
version: 8.4.5 (api:1/proto:86-101)* K5 j8 X) m% x. r o
GIT-hash: 1d360bde0e095d495786eaeb2a1ac76888e4db96 build by root@cucloud002, 2015-02-06 20:04:43) W2 B+ o1 Q. j0 I l }
0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----" G* @7 z6 ~, D8 K& i r; _; t. y
ns:0 nr:8359712 dw:8359712 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0; E, L! D4 C8 u
1: cs:Connected ro:Secondary/Primary ds:Diskless/UpToDate C r-----$ k4 x! w, s. O
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
+ A- y+ ^0 R) [. D* O. [9 q) _, G1 b6 T5 }, T/ ?
. x- Z' g; [3 b% R1 L其中第三行中:% h* Y% G, J8 |+ Y' w
5 L. K& {/ z4 \7 T' X3 M1 `; d
0是drbd的次设备号(minor),表示该行是/dev/drbd0资源的信息。9 Z8 `- W* k7 S n# f# ~. r
cs是connect state,即节点的连接状态。& l6 q# v# o2 `, G. N& T" l& x
ro是roles,即节点的角色状态。
" S% U7 J8 Y" P" f. Wds是disk state,即磁盘的状态,也即drbd底层设备的状态。
P, ~) q; a0 Q% q1 {C是drbd的复制协议,即A、B、C协议。
4 ?% `& p5 ]' H& }; ]! X0 @7 Wr-----是IO标记,反应的是该资源的IO状态信息。共有6种IO状态标记符号。
" H9 L, Z* f" d1 a2 E第四行是drbd同步过程中的状态,总体概括为"性能指标"。
1 N3 ]. s5 L# _" E5 j, s$ y# U! y' d1 ^0 {
以下翻译自官方手册: users-guide-8.4 和 users-guide-9.0 。如果有疑问,可从官方手册自行查找答案。) p% u4 x+ J, ?' w
) i/ ^4 N6 |+ ]" [& `6 J" V
- w) K$ |+ Y/ B! w$ Q5 \' [9 |! P1 j, d
drbd-overview 8 `* C5 H2 r- p! R
0:mysql/0 Connected Secondary/Primary UpToDate/UpToDate , T# c/ R9 e3 P6 ]% x1 D5 L* [
1:image/0 Connected Secondary/Primary Diskless/UpToDate
0 J% ?8 A9 L6 b4 k* L8 h3 U8 x7 d. s k6 o
二: _) h" P2 g/ K: b
2.1 连接状态(connect state,cs)和复制状态) ^' L& e, m& D7 d/ P
节点间通过TCP连接进行通信,在建立连接、断开连接、特殊情况下有很多种连接状态。
! D9 R/ [8 A$ s: j+ ]
6 |- j* m8 R2 n* N3 \建立TCP连接后,还有称为"DRBD"的连接。DRBD连接建立完成,表示元数据区、数据区等一切都已准备好,可以进行任何数据同步的操作。5 n( G4 E4 @2 U
0 b- L' Z- y7 e* d+ I节点间的连接状态既可以从/proc/drbd文件中获取,也可以使用下面的命令来获取。
+ x; D, ]$ ~- y" r( ~! c; h6 w. z# M& f4 o- v; w& d) W
% Z0 U2 W1 D& p, m3 F
drbdadm cstate mysql
' o+ i6 d) u3 h9 n! K5 m# aConnected2 m1 x( N5 B; \% Y$ `
& l! G1 d: c$ f: M* O' ~0 g& P, d/ \/ t/ O+ T
drbd84中,将连接状态和复制状态全部都归类为连接状态。但在drbd9中,由于可以通过net指令定义多个drbd节点,它更网络对端和volume的概念。因此它将和连接关系不大的状态独立划分为"复制状态(replication)"中,例如同步、验证相关的状态。本文就懒得去区分它们了,都放在一起解释吧。- i9 Y3 a& b( }6 G) Z
; m9 V8 H# s/ n4 {5 ^/ O7 Y/ K有以下几种连接状态,其中最常捕获到的状态已经加粗显示。) m# E: n1 s1 @# Y6 q' e7 N
' `0 v. W3 P: E" \: |
WFConnection:当前节点正在等待对端节点出现。例如对方节点drbdadm down后,本节点将处于本状态。- R' b1 |# F! i! c1 |
StandAlone:无连接。出现这种状态可能是因为:未连接过、使用drbdadm disconnect断开连接、节点由于身份验证的原因未成功加入drbd集群使得连接被删除、脑裂后断开连接。
5 |: j5 b4 F, [7 eDisconnecting:断开连接的一个临时过渡状态。它很快就会切入下一状态就是StandAlone。' f3 L' h, s6 K$ L
Unconnected:尝试再次发起TCP连接时的一个临时连接状态(是连接超时后再次发送连接请求产生的状态),它的下一个状态可能是WFConnection,也可能是WFReportParams。
& \% G: _2 J8 Z7 @9 E+ i( p) FTimeout:和对端通信超时时的临时状态。下一个状态就是Unconnection。( G* P& \/ x( ?0 K& f/ J0 C* Q
BrokenPipe:和对端连接丢失时的临时状态。下一个状态是Unconnection。
6 x7 E; G" ?# C4 s/ L& O2 [NetworkFailure:和对端连接丢失时的临时状态。下一个状态是Unconnection。(没错,和上面的一样)
" l' D3 D/ g5 l! c5 JProtocolError:和对端连接丢失时的临时状态。下一个状态是Unconnection。(没错,还是和上面的一样)
! F7 Z# r! b r$ H& yTearDown:对端关闭TCP连接时的临时状态。下一个状态是Unconnection。
% V) J, O# P& c. t8 t1 @Connected:DRBD连接已经建立完成,数据镜像已经激活成功。这个状态是drbd正常运行时的状态。+ L! p# [4 f, T" n7 _, P
WFReportParams:TCP连接已经建立完成,该节点正在等待对端的第一个数据包。
1 K v7 V9 {3 |. L! DStartingSyncS:全盘数据同步中。只有在初始化时才应该全盘同步。下一个状态是:SyncSource或PauseSyncS。9 O* i' b& i- I7 `
StartingSyncT:全盘数据同步中。只有在初始化时才应该全盘同步。下一个状态是:WFSyncUUID。: P9 r) ?# \2 |% t6 q
WFBitMapS:部分数据正在同步。下一个状态是:SyncSource或PauseSyncS。
N8 f4 q* w; ~: ]1 V# J( ^6 J6 fWFBitMapT:部分数据正在同步。下一个状态是:WFSyncUUID。
; y! \' L, w S' p2 Z; C& TWFSyncUUID:同步马上就要开始了。下一个状态:SyncTarget或PauseSyncT。
9 l! m8 m# e" sSyncSource:正在同步,且本节点是数据同步的源端。
% ^/ e0 V2 q# ?* n7 pSyncTartget:正在同步,且本节点是数据同步的目标端。9 t) }7 D: }* L- a( K* B
PauseSyncS:本节点是同步的源端节点,但同步过程当前被暂停。出现这种状态的原因可能是当前同步进程依赖于另一个同步进程完成,或者使用drbdadm pause-sync手动中断了同步操作。+ Y) E' a" }/ Y# e' V
PauseSyncT:本节点是同步的目标端,但同步过程当前被暂停。出现这种状态的原因可能是当前同步进程依赖于另一个同步进程完成,或者使用drbdadm pause-sync手动中断了同步操作。, O0 L1 ^" M; d; |& I0 ?- L+ i
VerifyS:正在进行在线设备验证,且本节点将成为验证的源端。
6 J! v# Q) F6 q- K) b8 S3 V5 iVerifyT:正在进行在线设备验证,且本节点将成为验证的目标端。
: }5 @7 H4 l. E1 `9 o9 r( S% ^在drbd9中,WFConnection状态改为connecting状态。删除了WFReportParams状态。添加了以下几个同步相关的状态: R; N" @' R: `. [; M! e
+ Z+ V# a" B3 iOff:该卷组还未同步,因为连接未建立。
- e9 l6 P& D/ a" q5 tEstablished:所有对该卷组的写操作已经在线完成同步。这是drbd正常运行时的状态。: z$ I1 |4 ^4 b+ v* ~( k z& Z1 l
Ahead:数据同步操作被挂起,因为网络套接字中达到了一定的堵塞程度,无法应付更多的负载。该状态需要配置"on-congestion"选项来启用。9 m. ^; Z. N8 y% H" W
Behind:对端将数据同步操作挂起,因为网络套接字中达到了一定的堵塞程度,无法应付更多的负载。该状态需要在对端节点上配置"on-congestion"选项来启用。& j" B1 e( z1 x# P9 P# e' F
5 u+ I+ u s( N9 P8 y4 U9 i
4 j" |3 X" O1 o' Z2.1 角色状态(roles,ro)1 E/ q2 I% C0 O2 j8 k; M" i: Z
资源的角色状态既可以从/proc/drbd文件中获取,也可以使用下面的命令来获取。+ z9 A% D. W! ] T) N6 l
. E8 W; F0 p9 W3 Y! t
- L9 D; o" r4 p4 Idrbdadm role mysql$ O8 C1 A5 v$ u2 J
Secondary/Primary9 s: |; J# H$ E Z- c0 m# Q7 b
" c1 V. A' W6 i; H# i" O- k5 `' ?- G! C) ?
drbdadm role image
8 _, x. G. O9 kSecondary/Primary" s' Z" ]% u7 y" x: i9 k
! W7 c1 d+ R. ?- c7 N, b' B. I* k' l6 R6 q. Q) v- w6 ]( `
在角色状态信息中,本地节点总是标记在第一位,远程节点标记在结尾。5 g( j* B6 Y& p- v4 d1 M" ? i
1 k1 I. b/ q6 `) A# @
可能的节点角色状态有:
8 b3 u( N7 h; C4 P0 J
% e' o' Y3 ^ b) A4 |% U) T# VPrimary:资源的primary角色,该角色状态下的drbd设备可以进行挂载、读、写等。在没有启用多主复制模型(dual-primary mode),只能有一个primary节点。2 p( Y( X* [0 D$ m
Secondary:资源的secondary角色。该角色状态下的drbd设备会接收来自primary端的数据更新(除非和对端不是primary)。且该角色的drbd设备不可挂载、不可读、不可写。
! K+ l4 N2 u0 ?2 L. @Unknown:资源的角色未知。本地节点的角色状态绝对不可能会是这种状态。只有对端节点断开连接时对端节点才处于Unknown状态。! y, _9 W. H$ K$ J
/ s9 i U6 |+ O) O7 D% U9 w' s) F( r# D' c2 \8 L/ J
磁盘状态(disk state,ds)6 U: w6 D, B$ b) U
6 {: t- t5 H5 k4 T. J( \+ _
, U4 b9 O4 _) d9 o+ }) O磁盘的状态既可以从/proc/drbd文件中获取,也可以使用下面的命令来获取。, P) m! t' d# F0 {( r
2 A- ]7 I& s' `( S# Q0 _: odrbdadm dstate mysql
$ e- F! L% O' v. qUpToDate/UpToDate
3 x; S& E) e! b1 i8 l
+ x) a% `7 E* o9 zdrbdadm dstate image
' y# e: ~+ l6 K6 e8 m' rDiskless/UpToDate
; [0 |" \- D: l1 n& f% H( I; H6 h/ h9 N6 N, I. A" C" }, q! }
j# Y$ ^# H2 a4 Y3 J
在磁盘状态信息中,本地节点的磁盘状态总是标记在第一位,远程节点标记在结尾。这两端节点的状态信息都可能为以下值: - Diskless:没有为DRBD驱动分配底层块设备。这意味着资源可能从没有和它的底层块设备进行关联绑定(attach),也可能是手动detach解除了关联,还可能是出现了底层IO错误时自动detach。
- Attaching:读取元数据时的一个短暂的状态。
- Failed:本地块设备故障时的一个短暂的状态,下一个状态是:Diskless。
- Negotiating:在已连接的DRBD设备上还要进行Attach时的一个短暂的状态。
- Inconsistent:数据不一致。在双方节点(还未进行全盘同步之前)刚创建新的资源时会立即进入此状态。在某一端(目标段)正接收同步数据时,也会进入不一致状态。
- Outdated:资源的数据是一致的,但是数据过期了。(例如,已经同步后secondary下线了,之后又上线了,在还没开始重新同步的时候就是Outdated状态)
- DUnknown:用于标识对端节点没有连接时的磁盘状态。
- Consistent:连接断开时的数据处于一致性状态,当连接建立后,将决定数据是UpToDate还是Outdated状态。
- UpToDate:资源的数据是一致的,且数据是最新的。这是drbd数据正常时的状态。
6 E8 U' D) l7 h8 o. x- ] + ^7 \# a/ u, T5 ?, \" \
- V1 s8 R6 h5 e; I) e( D3 b
/ t) G3 [( m" s- k, n |
|