易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 4|回复: 4
收起左侧

关于drbd的状态使用说明

[复制链接]
发表于 2023-12-21 11:06:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
近期遇到很早以前的crm管理服务. V! {9 r8 }# Z# o2 U
按照常规的方式启动没有问题,但是后来发现有些状态是异常的。- z. w. W; m% T6 ]$ P" F
4 \  [9 Y" r6 ?' D. t
无意中接触到drbd这个组件,以及crm主键:& N* ?6 ?/ B2 n7 f
一:
6 U* n' E/ Q1 V2 b- s还可以使用drbd-overview获取一些简单的信息。. b) ]# D' m/ y3 T' m
正常的 :/ ?2 \- h9 a/ p! f
drbd-overview
  _2 t/ s* f$ D/ ~/ y% }7 b; MNOTE: drbd-overview will be deprecated soon.. {) o2 w7 h5 A2 p0 s
Please consider using drbdtop.
; Q4 p8 u) ?5 h7 S9 O5 V: ^# i- ~  v, _6 ~* g) B- U8 I% H
0:rs0/0  Connected(2*) Second/Primar UpToDa/UpToDa
" T4 c- S) w1 V$ {) V' n: Q8 m: K% ` 1:rs0/1  Connected(2*) Second/Primar UpToDa/UpToDa! k  x% {! `; l/ X2 |
. t- Q6 n1 N. _1 }$ S6 o- Y

( H% `- _) ?+ ]( ]$ D' m有问题的:  e- R2 b' u9 K; }9 }
drbd-overview
6 d7 P3 z& ^" @7 d' o7 A" G. h 0:mysql/0  Connected Secondary/Primary UpToDate/UpToDate 5 S* V$ X2 ~; H9 Y1 i; Z7 ~
1:image/0  Connected Secondary/Primary Diskless/UpToDate + o1 q  y7 V4 k; B* g) ~
( d. D. \' b6 k- Y( n9 G/ \
  l$ Q9 l; `. L3 o1 \6 x7 x- u6 N
2.状态# w5 c! E) X* n3 ], H6 [# R3 F
/proc/drbd文件中的状态信息如下:* f$ {$ P; h0 t0 N
cat /proc/drbd
! Q3 V% H9 L! Sversion: 8.4.5 (api:1/proto:86-101)
) d5 s5 H: Z" f( }: \; N' C9 IGIT-hash: 1d360bde0e095d495786eaeb2a1ac76888e4db96 build by root@cucloud002, 2015-02-06 20:04:43
( ?) y' ]; s& B# @# m6 a* M 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
) W9 R% ?  T4 G- d* H+ \    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! g# n' P; A& |
1: cs:Connected ro:Secondary/Primary ds:Diskless/UpToDate C r-----2 \5 ?. u" F9 y# c* J1 d
    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:05 X( ]( r6 r7 t2 a
, |" R  B0 O* n' X* ^5 }* E6 Z

* o0 e$ [+ \/ F1 |% G其中第三行中:
$ {- u  `  C8 l; g0 L8 a# b# F
# r- ~7 H. i( o0是drbd的次设备号(minor),表示该行是/dev/drbd0资源的信息。3 ~* a; i4 Y) R$ j: v
cs是connect state,即节点的连接状态。
, l; T' m* |, r4 s. T: e1 Tro是roles,即节点的角色状态。( u- l8 y/ r( ^7 ~
ds是disk state,即磁盘的状态,也即drbd底层设备的状态。7 ^' f" N4 D7 ]' ?, @' g
C是drbd的复制协议,即A、B、C协议。' ]% G# _5 Z8 ^& l" W7 h, V5 m
r-----是IO标记,反应的是该资源的IO状态信息。共有6种IO状态标记符号。1 J6 U! z. N) }. T/ R+ x5 I: d9 ^
第四行是drbd同步过程中的状态,总体概括为"性能指标"。
3 i( U, u5 D. M0 p, F" H  P7 H
以下翻译自官方手册: users-guide-8.4users-guide-9.0 。如果有疑问,可从官方手册自行查找答案。
1 d1 J- X2 X* k+ W  n  t, Z
0 g! ]7 A+ ^. k4 j" g( I2 G) Y

2 F1 j5 ^% d6 C# B3 c: }1 C$ [  O
" \0 X1 p+ h: Z
drbd-overview : h. P- F, k  U* N
0:mysql/0  Connected Secondary/Primary UpToDate/UpToDate
2 p% {$ p  l! m" X, B! L 1:image/0  Connected Secondary/Primary Diskless/UpToDate 8 \# Y5 T# _1 @4 ^4 u

( c$ v* k: w; y2 Q8 X二:. i" Y# L1 I; i5 Q
2.1 连接状态(connect state,cs)和复制状态) y) ?+ x# U! O
节点间通过TCP连接进行通信,在建立连接、断开连接、特殊情况下有很多种连接状态。
! o6 Z8 v: g1 u4 X0 \0 g% K' o, \8 d) b" B8 b& |& b; G# m
建立TCP连接后,还有称为"DRBD"的连接。DRBD连接建立完成,表示元数据区、数据区等一切都已准备好,可以进行任何数据同步的操作。
5 e$ s* ~8 m: g$ J1 E( j2 L/ Y" H9 I( H; H0 i2 [
节点间的连接状态既可以从/proc/drbd文件中获取,也可以使用下面的命令来获取。
& {' n% ^& ~/ D7 {4 `1 D7 ~& I. m1 K. n0 }) x$ E2 ?
( h  x" u5 n2 w8 S8 @
drbdadm cstate mysql) n! C# W1 [$ o5 `1 B
Connected
* ?! F, Z9 P$ ]) B8 N4 k. h
1 Y7 `: F+ ]5 K# a$ D* }' ^2 M. M3 I. s. C, v
drbd84中,将连接状态和复制状态全部都归类为连接状态。但在drbd9中,由于可以通过net指令定义多个drbd节点,它更网络对端和volume的概念。因此它将和连接关系不大的状态独立划分为"复制状态(replication)"中,例如同步、验证相关的状态。本文就懒得去区分它们了,都放在一起解释吧。5 h0 |! V: ], D, s
( f/ B) t9 N. R: C' a6 W( t
有以下几种连接状态,其中最常捕获到的状态已经加粗显示。0 u+ e0 k/ S$ U" ^
# C# w9 h( T. V9 f
WFConnection:当前节点正在等待对端节点出现。例如对方节点drbdadm down后,本节点将处于本状态。# a" J5 a* h) l- X9 ?( G
StandAlone:无连接。出现这种状态可能是因为:未连接过、使用drbdadm disconnect断开连接、节点由于身份验证的原因未成功加入drbd集群使得连接被删除、脑裂后断开连接。2 E: l; Z. U, k& W+ e8 a
Disconnecting:断开连接的一个临时过渡状态。它很快就会切入下一状态就是StandAlone。/ B5 o8 m+ ^# V, ?8 {9 H
Unconnected:尝试再次发起TCP连接时的一个临时连接状态(是连接超时后再次发送连接请求产生的状态),它的下一个状态可能是WFConnection,也可能是WFReportParams。# ^3 Q- I" o: T
Timeout:和对端通信超时时的临时状态。下一个状态就是Unconnection。
+ _$ {6 ^; W4 N% z; i; ^$ UBrokenPipe:和对端连接丢失时的临时状态。下一个状态是Unconnection。
' D# [/ \6 \! N; K2 g, mNetworkFailure:和对端连接丢失时的临时状态。下一个状态是Unconnection。(没错,和上面的一样)
) {9 m; y; E+ v4 ZProtocolError:和对端连接丢失时的临时状态。下一个状态是Unconnection。(没错,还是和上面的一样)/ B  o0 R+ P) ^: P4 [
TearDown:对端关闭TCP连接时的临时状态。下一个状态是Unconnection。8 ]- ]7 C9 \* z
Connected:DRBD连接已经建立完成,数据镜像已经激活成功。这个状态是drbd正常运行时的状态。! ?6 O0 x; v# e  X
WFReportParams:TCP连接已经建立完成,该节点正在等待对端的第一个数据包。
9 |2 f% m- _$ ]$ o1 w; d$ hStartingSyncS:全盘数据同步中。只有在初始化时才应该全盘同步。下一个状态是:SyncSource或PauseSyncS。* u9 h0 d* ?/ w7 O6 q- H; e* r
StartingSyncT:全盘数据同步中。只有在初始化时才应该全盘同步。下一个状态是:WFSyncUUID。
! t, V. K, |9 u/ PWFBitMapS:部分数据正在同步。下一个状态是:SyncSource或PauseSyncS。0 n0 V. g4 [4 @+ w3 h7 A6 [9 g
WFBitMapT:部分数据正在同步。下一个状态是:WFSyncUUID。$ j0 {+ L1 ~: D, n% j8 U8 D, T: c( F
WFSyncUUID:同步马上就要开始了。下一个状态:SyncTarget或PauseSyncT。1 [. Z# a8 V/ [2 c' y/ }3 B8 f2 u
SyncSource:正在同步,且本节点是数据同步的源端。
$ o; f3 n6 f! U4 L9 {  f5 SSyncTartget:正在同步,且本节点是数据同步的目标端。1 V0 d2 f8 [1 A
PauseSyncS:本节点是同步的源端节点,但同步过程当前被暂停。出现这种状态的原因可能是当前同步进程依赖于另一个同步进程完成,或者使用drbdadm pause-sync手动中断了同步操作。5 C9 o7 b% H. x! O7 w- E7 J
PauseSyncT:本节点是同步的目标端,但同步过程当前被暂停。出现这种状态的原因可能是当前同步进程依赖于另一个同步进程完成,或者使用drbdadm pause-sync手动中断了同步操作。
: J9 O* g; e0 Z: n/ OVerifyS:正在进行在线设备验证,且本节点将成为验证的源端。
- v4 X  E2 P# y% _VerifyT:正在进行在线设备验证,且本节点将成为验证的目标端。5 J3 T8 Q$ X+ [. ?* g! |1 g3 Y/ j: V
在drbd9中,WFConnection状态改为connecting状态。删除了WFReportParams状态。添加了以下几个同步相关的状态:; F; G' e! n& W; v

+ s) H9 o8 J' h6 VOff:该卷组还未同步,因为连接未建立。+ H  t' l' d0 L; \: a! c
Established:所有对该卷组的写操作已经在线完成同步。这是drbd正常运行时的状态。" }. R5 C: q+ M6 v1 c2 e0 y
Ahead:数据同步操作被挂起,因为网络套接字中达到了一定的堵塞程度,无法应付更多的负载。该状态需要配置"on-congestion"选项来启用。
7 ?; e& Q4 |% A  nBehind:对端将数据同步操作挂起,因为网络套接字中达到了一定的堵塞程度,无法应付更多的负载。该状态需要在对端节点上配置"on-congestion"选项来启用。& i- l  T# x2 G: u# l; \

0 G: e; H6 t7 J% S: z( }( a" ^  s* O1 C- m) E/ ?2 h) Y
2.1 角色状态(roles,ro)
7 L$ v( r( g/ o, y7 I  H     资源的角色状态既可以从/proc/drbd文件中获取,也可以使用下面的命令来获取。3 I7 [& f( h2 Q# _; R/ t5 v% q
4 d% X1 A5 b" v: {6 [" Z. I

/ U5 m* d* N2 Z" d, \) v9 I- Rdrbdadm role mysql
. v+ ^0 [! \+ m( m; o2 CSecondary/Primary3 T+ y) z: I( ]) S! s

; m3 E/ k: g& g( j+ `/ R$ t1 F/ Y" k7 W# a! @" T" W7 J: v- ~, s7 v
drbdadm role image
# ~; x1 p* |. t1 NSecondary/Primary
6 M2 |: b  C) S5 D! t% P% _5 D1 B' M
' o/ b2 b7 x8 J% q8 ~2 F4 i  [3 b- P( K
在角色状态信息中,本地节点总是标记在第一位,远程节点标记在结尾。+ r' [; u' L( a) N& h. \

9 ?) {6 X; H) u$ y0 P  Z可能的节点角色状态有:
. Z( w# _$ B- q. i3 ]( u; O* j0 c4 P, ]2 `
Primary:资源的primary角色,该角色状态下的drbd设备可以进行挂载、读、写等。在没有启用多主复制模型(dual-primary mode),只能有一个primary节点。
0 |) M2 @; m9 Z8 BSecondary:资源的secondary角色。该角色状态下的drbd设备会接收来自primary端的数据更新(除非和对端不是primary)。且该角色的drbd设备不可挂载、不可读、不可写。3 f3 `. a* d: k, Z% J2 e
Unknown:资源的角色未知。本地节点的角色状态绝对不可能会是这种状态。只有对端节点断开连接时对端节点才处于Unknown状态。
" q7 N3 V8 s  B4 ?$ K6 n
1 y& H  k( |, d3 V: \
2 c6 [0 z7 ?; l/ g- r0 H磁盘状态(disk state,ds)
' Z( L4 E' Z' G. `2 P

$ D! x7 D: |! f9 d5 c5 [, \6 R# W, @  K
磁盘的状态既可以从/proc/drbd文件中获取,也可以使用下面的命令来获取。
3 w6 Q( w2 m5 {( h
& i% A8 m2 O5 A; zdrbdadm dstate mysql
% s( `5 k: H4 a# W2 K5 HUpToDate/UpToDate$ R" ]5 _8 s- H: C. S$ A
6 h& s3 A3 k% O  J( K4 r
drbdadm dstate image$ p8 O" I7 G- W
Diskless/UpToDate
" t, W3 w  {7 a" {3 w5 E5 A# l& l) L7 b9 z3 Z) I

$ s- N, L3 p- d  `7 t
在磁盘状态信息中,本地节点的磁盘状态总是标记在第一位,远程节点标记在结尾。这两端节点的状态信息都可能为以下值:
  • Diskless:没有为DRBD驱动分配底层块设备。这意味着资源可能从没有和它的底层块设备进行关联绑定(attach),也可能是手动detach解除了关联,还可能是出现了底层IO错误时自动detach。
  • Attaching:读取元数据时的一个短暂的状态。
  • Failed:本地块设备故障时的一个短暂的状态,下一个状态是:Diskless。
  • Negotiating:在已连接的DRBD设备上还要进行Attach时的一个短暂的状态。
  • Inconsistent:数据不一致。在双方节点(还未进行全盘同步之前)刚创建新的资源时会立即进入此状态。在某一端(目标段)正接收同步数据时,也会进入不一致状态。
  • Outdated:资源的数据是一致的,但是数据过期了。(例如,已经同步后secondary下线了,之后又上线了,在还没开始重新同步的时候就是Outdated状态)
  • DUnknown:用于标识对端节点没有连接时的磁盘状态。
  • Consistent:连接断开时的数据处于一致性状态,当连接建立后,将决定数据是UpToDate还是Outdated状态。
  • UpToDate:资源的数据是一致的,且数据是最新的。这是drbd数据正常时的状态。5 M7 D: ]8 @! b: m# a
7 d! c3 w6 U% M2 V" P* t7 @) }

3 l0 C( v, E, B" U3 ]& t, C" N' G) _  b- D* e  X# [0 L$ V% ?  s; _
 楼主| 发表于 2023-12-21 11:27:06 | 显示全部楼层
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:网络套接字和后端块设备同时处于阻塞状态。
      , C& P$ F: j8 c9 q
  • Activity Log更新挂起:当al更新被挂起时,处于该状态,标记为"s",通常该状态栏应该处于"-"。(如果不知道什么是Active Log,请无视本标记)
    , O& z& C1 m: P/ l# y6 U
  s9 `5 g; b+ |( ?0 ^
 楼主| 发表于 2023-12-21 11:27:44 | 显示全部楼层
性能指标
主要是一些计数器和计量器的值。
请结合drbd原理图进行理解:
) O( S/ t8 {7 J7 s- ~5 B* i! F9 T
                               
登录/注册后可看大图
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。: ^; W, x9 v2 n# I4 h5 h
上面所有"未给予回复"的指标数量都表示动作还未完成,需要回复后才表示操作完成。这些未回复数值不能太大。
此外,drbd9中添加了以下几个指标:
  • resync-suspended:重新同步操作当前是否被挂起。可能的值为no/user/peer/dependency。
  • blocked:本地IO的拥挤情况。
    • no:本地IO不拥挤。
    • upper:DRBD层之上的IO被阻塞。例如到文件系统上的IO阻塞。可能有以下几种原因:
      • 管理员使用drbdadm suspend-io命令挂起了IO操作。
      • 短暂的IO阻塞,例如attach/detach导致的。
      • 删除了缓冲区。
      • bitmap的IO等待。
        ! }: P; y. z4 D
    • lower:底层设备处于拥挤状态。
      . Z, \" z( p5 c4 S6 A- v: W
    8 p$ E8 @8 \) ~8 {2 P$ [
 楼主| 发表于 2023-12-21 11:30:55 | 显示全部楼层
crm status 3 t! k! g$ i2 G7 J) A" a, |3 c$ @, U
Last updated: Thu Dec 21 03:30:22 2023
+ _+ i& P* `- O5 _1 }Last change: Wed Dec 20 09:30:19 2023 via crm_attribute on cucloud002* d/ v% D) `9 E3 u, h
Stack: classic openais (with plugin)
8 R6 E# X8 w; h  {4 xCurrent DC: cucloud001 - partition with quorum
- N- m' D8 ~  O- t) A$ YVersion: 1.1.10-14.el6_5.2-368c726" R, ~9 {* t4 ~) H* A
2 Nodes configured, 3 expected votes
9 W  q( o* q3 H21 Resources configured
  t# P. C  r8 u! ^0 j
6 j9 @8 v9 m& G7 f* F, F% o+ U- @2 E4 L0 J9 e9 `2 A! R
Node cucloud002: standby7 v* `! s0 S- J( J6 |! }" h' Q6 p
Online: [ cucloud001 ]
; V9 A! v7 s& s4 f% e7 {  d# A5 G. m1 v* |+ `9 B7 H
Master/Slave Set: ms_drbd_1 [res_drbd_drbd_mysql]1 o1 y, h* u+ K( I. z
     Masters: [ cucloud001 ]
* O+ R4 n! I' V2 m     Stopped: [ cucloud002 ]
& Y( h4 ]" v0 k Master/Slave Set: ms_drbd_1_2 [res_drbd_drbd_image]# K/ J2 q2 I9 p$ g$ a2 M
     Masters: [ cucloud001 ]
1 o5 H* O+ K: z% i. g2 z) h$ l7 z& v) L     Stopped: [ cucloud002 ]
" j  G  [6 E) P. E% L+ S0 q Resource Group: openstack_g( ~( n/ d' ?, W+ z) G! l1 G  K! z
     fs_glance        (ocf::heartbeat:Filesystem):        Started cucloud001
8 r. P; d2 H. w2 r0 A3 r( Z& G# c     fs_mysql        (ocf::heartbeat:Filesystem):        Started cucloud001 4 y2 P7 A7 X! S! ?3 i
     mysqld        (lsb:mysqld):        Started cucloud001
1 q; a! O8 d- Z: g3 B& e     ip_openstack        (ocf::heartbeat:IPaddr2):        Started cucloud001
* a) L( V2 k9 r$ s0 c7 d( k     openstack_keystone        (ocf:: openstack:keystone):        Started cucloud001 9 K; M- {" ~4 M$ ?
     op-glance-reg        (ocf:: openstack:glance-registry):        Started cucloud001
! U' m% W2 _/ a6 L- {9 K- D; _     op-glance-api        (lsb: openstack-glance-api):        Started cucloud001 - k1 l; u, J5 \
     op-quantum        (ocf:: openstack:quantum-server):        Started cucloud001 + U% A+ H6 W3 K. @5 D% G3 V# Z9 b
     openstack-nova-conductor        (ocf:: openstack:nova-conductor):        Started cucloud001 ; e" L4 j9 l. f% {" h
     openstack-nova-consoleauth        (ocf:: openstack:nova-consoleauth):        Started cucloud001
' m6 u# }  P8 f2 K     openstack-nova-scheduler        (ocf:: openstack:nova-scheduler):        Started cucloud001
$ q$ e7 c( }% {, L     openstack-nova-api        (ocf:: openstack:nova-api):        Started cucloud001
9 a5 b. N+ S3 M& ?6 K4 b, m Resource Group: others_g
" t: ]8 S' W3 `     ip_others        (ocf::heartbeat:IPaddr2):        Started cucloud001
2 i  s& B9 R# @5 P- r  V     qpidd        (lsb:qpidd):        Started cucloud001 % [2 P, ~5 ^1 v7 m% F0 w9 V# V
     qrj-keystonedb        (ocf::qrj:qrj_clean_keystonedb):        Started cucloud001 5 Q2 ?4 v' v; H& E$ b" G
ntpd        (lsb:ntpd):        Started cucloud001 8 P0 U6 `5 w* u  c8 a, u+ Z$ v

0 l) c; U* B9 n/ ~% |- MFailed actions:
6 v: q6 e( t2 Z& U- b" @9 Y0 q( x    res_drbd_drbd_image_start_0 on cucloud002 'unknown error' (1): call=14958, status=complete, last-rc-change='Wed Dec 20 09:18:22 2023', queued=1133ms, exec=0ms
! q% E) \% C  G  q6 c4 }. h9 j  R9 ]+ w( R2 d1 R% R7 q- P
 楼主| 发表于 2023-12-21 23:11:10 | 显示全部楼层
1、配置文件介绍$ f' p8 a; N. g6 z" m& e
5 O( H$ E) g  K  r& \$ K( f. W6 k! `
    drbd的主配置文件为/etc/drbd.conf;为了管理的便捷性,目前通常会将些配置文件分成多个部分,且都保存至/etc/drbd.d目录中,主配置文件中仅使用"include"指令将这些配置文件片断整合起来。通常,/etc/drbd.d目录中的配置文件为global_common.conf和所有以.res结尾的文件。其中global_common.conf中主要定义global段和common段,而每一个.res的文件用于定义一个资源。# s+ L, w5 P2 E4 s$ H
5 i+ c3 W( y3 K5 M+ O7 h; ?4 Q
    在配置文件中,global段仅能出现一次,且如果所有的配置信息都保存至同一个配置文件中而不分开为多个文件的话,global段必须位于配置文件的最开始处。目前global段中可以定义的参数仅有minor-count, dialog-refresh, disable-ip-verification和usage-count。' W/ R) Z7 _, p, B3 K
! R9 J2 _2 B6 G$ S1 ?3 F
    common段则用于定义被每一个资源默认继承的参数,可以在资源定义中使用的参数都可以在common段中定义。实际应用中,common段并非必须,但建议将多个资源共享的参数定义为common段中的参数以降低配置文件的复杂度。* C1 g# |: O3 h7 k0 p9 D9 \
6 w8 ~) b* k, h4 J& }) C0 K9 v
    resource段则用于定义drbd资源,每个资源通常定义在一个单独的位于/etc/drbd.d目录中的以.res结尾的文件中。资源在定义时必须为其命名,名字可以由非空白的ASCII字符组成。每一个资源段的定义中至少要包含两个host子段,以定义此资源关联至的节点,其它参数均可以从common段或drbd的默认中进行继承而无须定义。" Y! l9 Y- F4 Y5 o/ `, C
3 d9 {# Y* }9 d5 W
以下是我的配置事例:5 T9 {8 Q) x- T" n) `4 c& Y: O
0 F6 U+ ]' j- [* N8 S& M2 ~  a
#cat /etc/drbd.d/global-common.conf% A& u& ]; }, [# ?9 z

  ?0 h4 U0 ~7 \* A: l( C% C) F2 N+ g5 ^) x& R6 d# ^
) q0 L: Z+ O2 P- C4 c* A( Y6 `
, e% l9 S' i; T: e: x8 c3 k0 W
global {
( u+ ^4 ]5 L0 U8 j8 y        usage-count no;: C& W3 L6 {) E
        # minor-count dialog-refresh disable-ip-verification( N& \1 ~- j9 F& ^! I9 F! T9 ]/ d6 T
}
. M0 G. R* l( n  [3 c5 @common {
6 u( w  G; t; t! `+ q. U8 Y0 S) d4 o        protocol C;9 {) Y  X5 v4 Z  E0 P7 p/ k
        handlers {2 d# R( ?6 e' {% s. t$ y+ y9 v
                pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";9 T4 Z3 h2 J1 f& U; Y
                pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
0 G. }" z  s) _                local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";; g4 O5 J) H  F! k" J9 _! J+ F2 N) V; G
                # fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
* a* I; E/ `0 Y6 }# `: g                # split-brain "/usr/lib/drbd/notify-split-brain.sh root";
1 [: d4 _4 q( r3 Y( k! k; _                # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";1 o/ l# I! c- P, w
                # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";7 W2 F6 `- M2 I5 o. p# F+ M
                # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;( F/ L4 I% |8 F  u
        }
1 c' i) E# e2 H. ]! b        startup {8 E7 g2 Y9 G6 w9 t
                #wfc-timeout 120;
: W* |' u2 x# V                #degr-wfc-timeout 120;: `5 N% L$ _' j& [4 R
        }
$ t0 W( S* ?0 J, D9 v        disk {
5 w4 a% U+ K/ i                on-io-error detach;
/ t& U( B- h' h& G: {% x# M4 s                #fencing resource-only;
) L! U7 h3 `# w  S        }0 s0 ~  O, i1 S5 e, y7 ?! m# H
        net {3 L7 }2 F: m+ ^) P) y6 c& P' l
                cram-hmac-alg "sha1";3 r# \% ?1 {/ }
                shared-secret "mydrbd";: G- N9 z0 V0 k& y1 q5 L( A" _  w! @
        }. [5 ~# E3 A( ?4 H, H3 R, q5 |
        syncer {
0 q+ C5 W; i! L1 P; S9 G* y# l/ ]                rate 1000M;6 L. l0 f* U8 o1 i6 B% j
        }' X$ s) J5 S; U/ q* P
}  |$ M# z! ]" k$ c4 Z
2、定义一个资源/etc/drbd.d/web.res,内容如下:
8 |" l  j. Z! f5 {7 y- }
1 v+ v) L$ g% ?# x+ ^# ^- }; ]$ ^. Z/ P7 {6 \3 O9 N1 a8 _

+ J$ h3 R* ~! A. ?: Tresource web {* B4 R) L9 y+ Q
  on node1.wzlinux.com {1 ]. b9 i- O6 r7 M
    device    /dev/drbd0;& K1 \4 Z3 z! l% Y6 {, y
    disk      /dev/sdb;
+ n) D; u3 ^) D+ J    address   192.168.0.10:7789;
- g7 n$ e7 q9 Q' u% J" A+ X! q% b    meta-disk internal;# G% T  C- d8 h% H& Z0 [
  }1 j8 F0 L2 X# C, h  l$ j4 E; Y1 ^
  on node2.wzlinux.com {7 `- \( N" E- a8 Z- |
    device    /dev/drbd0;
% ]( G; e) _7 l. [6 t& {# c    disk      /dev/sdb;+ v5 ^9 [9 l# G3 q% D, e
    address   192.168.0.11:7789;
, G: t/ [2 K( L* d- Y" P    meta-disk internal;
( t3 S/ M2 N$ v. _2 T6 t) G  }
( ?  D) Q/ a, m  v4 Q}
; T9 L7 j  m& A0 r( n7 D5 Y注:以上配置在两个节点上必须相同* P% Z% j8 J3 i7 _7 N
9 k; N1 s$ r" ^
) _+ }0 }: S" `, s2 m9 I) V, q
: x( [' ]0 @  \
四、drbd启动和查看
8 \" a  l6 J3 i6 H! T8 A" f( p) ^+ ?/ M% V3 N$ J! s/ E  |
1、初始化资源
9 i6 D+ t3 W& e4 x/ F( |; p6 z  e6 @  {" B
在Node1和Node2上分别执行:
, e! V$ v; w9 b! g0 G) D+ |' _. m) G
# drbdadm create-md web
9 {* W8 q! U9 F2 x7 F# p
5 F1 s& e# X; s* U+ o( ~wKiom1Zuaaezfc2oAABvnsE2UA0970.jpg
. {) v7 n) x8 c2 `& z) F6 e* I& q: @0 c' D5 U* w& \4 F/ ^2 z( Q
2、启动服务  O: B+ m; v& ]5 j2 d, f5 f! X3 ^
  n* Z- d: z. r
在Node1和Node2上分别执行:
# U$ L; U$ Q2 N: U8 L; U: e+ p
$ S& J1 k. i7 G+ c4 l( |. y( @# service drbd start
/ w% S' {2 `8 f' k- I( R
; c8 k# w+ B3 t- }: l# L, K7 UwKiom1Zuad-yY6IVAAA5oMSEnj0629.jpg- f) G( U) ^" p4 F0 R* ~4 [

1 H, |4 d' Y/ g8 k7 r8 x1 a- x  D3、查看启动状态; z+ _& f+ `7 a5 {0 W6 Y# I2 E

+ d9 Q7 D5 \# [, e3 `$ Z1 ?9 ]5 f1 K: R3 `! X

2 s5 v, a) d4 Y) Y; u9 c% W
1 M* f# N  D4 e9 ^+ z: k. c" U7 {cat  /proc/drbd        #或者直接使用命令drbd-overview
* _4 m0 P6 m' e( L$ CwKiom1ZubITTPfQFAABtRuKmbw0960.jpg
8 V0 e7 @3 K; }) N) H
" u! J2 ~/ m& W: V1 p/ D    从上面的信息中可以看出此时两个节点均处于Secondary状态。于是,我们接下来需要将其中一个节点设置为Primary。在要设置为Primary的节点上执行如下命令:$ H9 ?. A) I$ ~) f8 I
& v  O3 \9 q! E% A: q+ h; B

; o- W* o, o% B+ x
: c0 T7 L" ^7 Q! U# l1 T
- j8 O; F  x* d8 i" ?- mdrbdadm primary --force web
$ T  }$ `! M; T3 j1 O    然后我们再去查看状态,可以看到数据在同步中。& W. ^5 c- w8 i  @/ h, [" M

# M  X. g3 T' O) EwKiom1Zub52A0x25AACE9DA7R5s955.jpg
, M7 |- H) U* a& U5 D) T7 L
. {( j. x! ?' D; Y% Z 注: 也可以在要设置为Primary的节点上使用如下命令来设置主节点:
! j8 L3 g# W0 n( _" c5 M+ m/ x; P: d  d" I6 u& F/ k! S
     # drbdadm -- --overwrite-data-of-peer primary web
9 K' A- ?  s' o
6 b# \3 i, a  V2 G( P    等数据同步完成以后再次查看状态,可以发现节点已经牌实时状态,且节点已经有了主次:
6 L, H+ e# }2 Q
2 Q9 S! K3 _  _% H+ l& ewKioL1ZucCri9IWoAABunqEsX6c581.jpg6 n" C5 z9 M$ C6 j) i% h

- V) f: M% j  X% Y  o4、创建文件系统
  U0 M  B" Q% J8 {' x" X/ e3 U0 v6 A, n: Y, i' _+ o; D
    文件系统的挂载只能在Primary节点进行,因此,也只有在设置了主节点后才能对drbd设备进行格式化:. k) U$ [# E  |, l

9 }& h. x! `; r0 q1 `* M' Z) K( Z4 R; M6 {9 g  A

+ o: Q' k; g8 J  |
4 {3 z  f( k6 i* L2 c; Tmkfs.ext4 /dev/drbd06 \  h: [7 \' f
mount  /dev/drbd0  /var/www/html
  G! R( Q; _) P' \9 }+ V. [wKioL1ZucXTzM6dgAABh9dm3wdc516.jpg
* j( Z4 \0 Q. [2 j/ H1 ?
9 o5 q& J1 r3 z" F8 ]5、切换Primary和Secondary节点
  v1 _, f% I# K) ?  I$ S* x
0 t! \' v$ n  w1 Y' b5 b    对主Primary/Secondary模型的drbd服务来讲,在某个时刻只能有一个节点为Primary,因此,要切换两个节点的角色,只能在先将原有的Primary节点设置为Secondary后,才能原来的Secondary节点设置为Primary:
! T6 L1 D  w# F  v9 q% {% E4 u& A$ r& N2 d  E
Node1:# T1 [: ]: s6 d8 c0 k/ K

6 F" p4 z/ l7 |, D& `+ @9 X8 x; {* T
% V9 F7 j3 K, D0 [+ G2 p: n& w1 O

9 ]2 Q- L) ~. s1 Q1 B! _; |! ~- Ucp  /etc/fstab  /var/www/html/        #复制一个测试文件
) v3 i5 N# K0 b" L3 s6 y2 sumount  /var/www/html
# Z" m# l* ~3 R- p. vdrbdadm secondary web              #设定为备节点
- K' y8 p, L5 r6 j: w* c查看状态:* @4 L, G% G$ J

8 a) ?/ d5 i: O0 n/ F4 ~1 r5 n* B& K# h. S$ o
- p% B/ X  E. s2 Q" u9 D
# drbd-overview 6 @# k5 I0 y3 i
  0:web  Connected Secondary/Secondary  UpToDate/UpToDate  C r----
- ^, |$ k2 ^& X8 x2 A$ T0 A# mNode2:  Y' c! N7 d0 V* f, g! f: V9 V2 p
) V( E) z, d4 z; w) |6 f

' w" D. C7 V# _9 e" Z; b  y  f
' l) x- u! t& ]9 }) d. bdrbdadm primary web             #提升为主节点* `/ {' }' g1 @- ~
drbd-overview                   #查看状态是否提升成功
0 ^; r* C) _5 @; N+ v4 ]mount  /dev/drbd0  /var/www/html   #挂载文件
7 n0 m( z6 D/ E4 |, L: {+ y: b    使用下面的命令查看在此前在主节点上复制至此设备的文件是否存在:" d, [9 u5 Y! S* w8 G6 `

% T; Y* s" z* }
5 t" _  A  }; w, q: e% F& R# u0 {, w! |         1
- [& l# n! Z. i8 ~8 A! N0 e# U
. y$ S1 T9 k/ |1 zll /var/www/html/
' t; h  ^. s3 j  O6 ZwKiom1Zuc0Cgl5JqAAAw2zqGE2k492.jpg
; r" p# l! P' K- R
# z8 b! ?' r$ ^( r1 h" q    到目前为止WEB服务的数据可以实现实时同步,只要把WEB服务搭建起来就可以直接使用了,非常方便。
& L3 _9 v4 ?7 R$ o( Q2 u4 Q+ X# h5 I! T
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-8 23:59 , Processed in 0.081357 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

快速回复 返回顶部 返回列表