|
|
楼主 |
发表于 2023-12-21 23:11:10
|
显示全部楼层
1、配置文件介绍
) W% E' i4 Y4 E+ o j3 W
+ V8 B( c) F6 s/ @$ |5 P, T0 L drbd的主配置文件为/etc/drbd.conf;为了管理的便捷性,目前通常会将些配置文件分成多个部分,且都保存至/etc/drbd.d目录中,主配置文件中仅使用"include"指令将这些配置文件片断整合起来。通常,/etc/drbd.d目录中的配置文件为global_common.conf和所有以.res结尾的文件。其中global_common.conf中主要定义global段和common段,而每一个.res的文件用于定义一个资源。0 W2 k# L5 |6 V. N; H
! p4 T1 y/ B$ ^. ]# O5 N 在配置文件中,global段仅能出现一次,且如果所有的配置信息都保存至同一个配置文件中而不分开为多个文件的话,global段必须位于配置文件的最开始处。目前global段中可以定义的参数仅有minor-count, dialog-refresh, disable-ip-verification和usage-count。, r4 V5 }/ i4 z" l1 s8 B! z; B& o
5 a7 ?. x+ z8 |: I$ ~
common段则用于定义被每一个资源默认继承的参数,可以在资源定义中使用的参数都可以在common段中定义。实际应用中,common段并非必须,但建议将多个资源共享的参数定义为common段中的参数以降低配置文件的复杂度。$ L0 P; F$ E9 e4 m
& v- X* N$ d8 N4 }' T1 W# a
resource段则用于定义drbd资源,每个资源通常定义在一个单独的位于/etc/drbd.d目录中的以.res结尾的文件中。资源在定义时必须为其命名,名字可以由非空白的ASCII字符组成。每一个资源段的定义中至少要包含两个host子段,以定义此资源关联至的节点,其它参数均可以从common段或drbd的默认中进行继承而无须定义。% s6 n+ f3 A+ d. n ?
" Q/ ]; D' v; E
以下是我的配置事例:) b7 S0 n. T) y1 w; r& O! M
* e( [. b: J0 i* v7 j: W
#cat /etc/drbd.d/global-common.conf
5 d1 s* z6 r- \/ ]6 h4 D4 I* ]! ~( W( n+ Y7 Q6 i2 Y
0 \! w+ A/ e4 z; x. q2 K
- v! t: ~! U; K/ F0 @$ L" f: [. F+ D0 P, Y" i7 n* E) t2 f
global {+ q6 a: c3 _) n' o0 [
usage-count no;
3 S `5 F- M7 L # minor-count dialog-refresh disable-ip-verification
4 w+ A3 z0 S |5 n}8 Z$ m" k+ s1 ]
common {: m9 ?. t& g3 b; {' _% s! }
protocol C;
$ E( Z R! O/ D1 E" N/ {$ r handlers {
/ p0 G+ [8 | @0 a, X4 S 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";
: D7 n4 C1 j" ?( B. o# a' w 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 [4 C) r& _' r3 h
local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";; W- Q* l1 a: j1 f$ l4 e; Z
# fence-peer "/usr/lib/drbd/crm-fence-peer.sh";; @) k: I# S* d& \9 T0 K' n0 O
# split-brain "/usr/lib/drbd/notify-split-brain.sh root";5 k% \* X1 [. e% L% _* O: p* {
# out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
. U+ N7 K3 {5 m6 p" t; Z # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";( p. h5 [; {2 u, Y" t T
# after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;% T7 f$ p- ?6 B e- F9 U: b4 Q
}: n" M$ r" }' R8 O3 ~
startup {% p/ I1 x- ]' B
#wfc-timeout 120;, t% N6 D V& r* C
#degr-wfc-timeout 120;. }0 S# K) [. `# l
}% S7 n2 O2 f7 m3 s& B4 u! D
disk {- g4 K# x P2 Z: o# E0 d4 P
on-io-error detach;( C& d- n. [" ]* Y; V
#fencing resource-only;7 j# O0 s7 z" I, B1 f
}
0 a: r+ v$ ^1 q! j$ {8 _* R net {
+ O8 h/ r+ Y* }/ }$ n cram-hmac-alg "sha1";
7 |& b! H; v3 [ shared-secret "mydrbd";
! v8 u* c( W$ d }
3 \* Q; {( U6 W syncer {. l! z- ^- H1 V- H; w$ B; W2 y
rate 1000M;1 V' f/ l J0 Z6 z! a8 f7 m
}/ n4 N( e9 I+ s
}1 q$ m9 Y' m; v2 L9 C& x0 T
2、定义一个资源/etc/drbd.d/web.res,内容如下:
6 d1 D0 v9 a) Y# M8 [ i& N% h* p2 k% U4 \. e, l
( [' E- s0 d6 ?/ c1 L& h; E
% M; r7 b! Z" q$ G* m' Xresource web {4 U. G6 O4 o" K6 p2 \( ?
on node1.wzlinux.com {/ p( d5 i0 ]' A+ q
device /dev/drbd0;% J+ |; f- O4 F6 v4 w p% _% F& g
disk /dev/sdb;
: Q& C5 R3 ^; W2 |9 R/ \4 f0 U# a address 192.168.0.10:7789;7 L9 N t Q" C3 H. [% K" N- q
meta-disk internal;
9 x+ N6 c6 H; Y Q }0 J& E# V: ?) \ R3 P
on node2.wzlinux.com {9 N+ S% `, S! G2 i0 D' c0 V
device /dev/drbd0;5 X8 ~+ @: U# _" z, d* B
disk /dev/sdb;
$ ~5 B# \( r: y' ^) d address 192.168.0.11:7789;7 |! `' t6 M8 \! d- o
meta-disk internal;2 Y& Z$ k1 E, i
}/ R7 g5 ]' V- y7 _4 s( H1 V5 {
}
, {% A! I8 x9 Q1 q: f- }' l6 k注:以上配置在两个节点上必须相同
& l) t0 K8 X; r7 d( q6 q# F* i1 M5 C4 O1 ~+ D0 r8 Q
9 Q/ q9 e. U4 q
3 o7 ^: |/ i9 T1 c3 K9 R2 q; g. k
四、drbd启动和查看
1 F: m0 U6 X, _! Y5 C4 e% O: W/ s% y7 s3 H' @- _
1、初始化资源
2 P5 j" u- w/ W0 r5 D( B" Z0 I( C+ Q) y( g5 o' K8 m: X
在Node1和Node2上分别执行:
3 B& I5 f1 r( }- A3 ]- R, ]4 @5 h% c Y2 Y/ T$ w
# drbdadm create-md web
( c6 o( L) F3 w& g* U% ~
1 z; ~4 l7 \/ HwKiom1Zuaaezfc2oAABvnsE2UA0970.jpg
- c& j1 r( `! e7 t0 A$ q& ]0 c9 X4 r) `/ ?
2、启动服务1 l/ y5 b7 Y+ ?5 O5 F
* M4 Z3 C% Z* }. r
在Node1和Node2上分别执行:
: z& u ]& |( W: H( H' R8 z/ G5 \7 d# H
# service drbd start; n O, J5 @5 I- l2 I$ C
% W: x: S$ g1 L) g5 [wKiom1Zuad-yY6IVAAA5oMSEnj0629.jpg
: c2 R3 t) F& r* z1 L' V6 t4 ^9 J9 w N3 O+ K# K$ p/ P
3、查看启动状态
) a1 t5 M4 R0 w- G# z! ]3 H) T
4 p$ e0 l& S! X6 I$ I4 g, d6 x; |9 v9 x, H
; X" L r: X T" o: T% b5 C' ]. a9 q) {6 d' R ?( }% ^7 a8 Q
cat /proc/drbd #或者直接使用命令drbd-overview& A4 E. L: I0 ^ c
wKiom1ZubITTPfQFAABtRuKmbw0960.jpg
9 }8 w7 \; _% T" p/ P
* x( }1 ?8 i8 Z! L% T 从上面的信息中可以看出此时两个节点均处于Secondary状态。于是,我们接下来需要将其中一个节点设置为Primary。在要设置为Primary的节点上执行如下命令:& @" _5 p! h6 w( y
" s# y {" E+ U# L: H" X
9 Z) }: e) n, {7 }5 J! z: F* p! X7 G( `/ G
: W N- `4 ^% L; j
drbdadm primary --force web
1 k6 V0 P X9 J- v# Z 然后我们再去查看状态,可以看到数据在同步中。' z$ f9 |# r8 J' l7 @' f. A
. |1 Q6 c1 k; o* Z& {( q, X/ E1 A& k, MwKiom1Zub52A0x25AACE9DA7R5s955.jpg
% M& R! w l" l! f x7 @. ?0 t( I
注: 也可以在要设置为Primary的节点上使用如下命令来设置主节点:5 ~ J6 @+ k, R! c
# G# B4 l( A- ~7 f
# drbdadm -- --overwrite-data-of-peer primary web
" r c; b5 x# [! m
' M3 ?( r. O3 m: s9 A5 f* d 等数据同步完成以后再次查看状态,可以发现节点已经牌实时状态,且节点已经有了主次:
$ U! q+ t& b6 M" i( s6 ^ H; z/ r( r& g8 b" ]* d
wKioL1ZucCri9IWoAABunqEsX6c581.jpg* L* p* ]) A: y
/ n1 B( R- B3 e9 d" g% L4、创建文件系统
/ w+ z, f0 l! ^1 I, W) e) n$ X, Z; b' V* E- q$ R* _8 x
文件系统的挂载只能在Primary节点进行,因此,也只有在设置了主节点后才能对drbd设备进行格式化:$ y3 f+ f' j+ S( P R
5 c; S7 a8 \: t) R$ R% a1 Y! I0 `# O4 Z
5 {' w+ v6 g" W% E) N& ?3 S
& S7 F* s! E5 q( u6 r
3 d6 [# Y, O5 X/ ]; emkfs.ext4 /dev/drbd0* t" W, V' x$ _" ~6 F) t5 }
mount /dev/drbd0 /var/www/html
- u' _5 r | K- gwKioL1ZucXTzM6dgAABh9dm3wdc516.jpg
, i( l7 ]$ b/ u7 G' t' |5 T* B0 b2 L1 l: l. S9 e
5、切换Primary和Secondary节点' |2 j1 ]$ f! {9 w! J
3 @4 w& x5 D) S" O
对主Primary/Secondary模型的drbd服务来讲,在某个时刻只能有一个节点为Primary,因此,要切换两个节点的角色,只能在先将原有的Primary节点设置为Secondary后,才能原来的Secondary节点设置为Primary:3 i, w0 K) s1 [( m }
+ z4 N0 d5 h; a5 F }( O# }3 H' T
Node1:
* I8 @ o% c/ V! _+ X5 l( w
3 ?( ~. m4 m u5 I L- s0 b- Q4 V( Q9 _
8 A. g" `6 I$ n t. n, w2 W: _+ n4 c& `3 ^# b
cp /etc/fstab /var/www/html/ #复制一个测试文件: g4 |9 c) h0 o9 D
umount /var/www/html5 Z0 {8 n! F; U- `! h! }
drbdadm secondary web #设定为备节点
1 L) y5 i9 S3 t" F. j0 p查看状态:
! R; p g" {0 W# G/ M, M
! f; J: k& Z7 d$ P
0 }* P- A$ e2 D, k2 {# R; J; @2 U7 _7 L8 ^6 H' o2 s2 ?8 g
# drbd-overview : ~& `; {9 t% S7 ]5 q; n# E
0:web Connected Secondary/Secondary UpToDate/UpToDate C r----+ j1 R5 q: I% u/ ]* ?# g
Node2:
" Y" Y p. A/ d4 j! e7 V, Q- t9 U; Z% h W( D* J7 l
. d( ~6 X. L: y6 J1 U, I# U N
# Y* H& V- Y. v T7 O l; S
drbdadm primary web #提升为主节点
3 B/ A' l h$ H- |1 R, ^7 ^drbd-overview #查看状态是否提升成功& A% m) N8 o y/ X7 x
mount /dev/drbd0 /var/www/html #挂载文件1 S. \* R, A% e; X& ^
使用下面的命令查看在此前在主节点上复制至此设备的文件是否存在:
# ~3 |. ~" H* n" P) h% }9 W6 ?$ E
" W" t3 u; F3 `) h- L8 m# R( I) k
1
9 D9 t Z" S. e1 s5 B3 l- O( T, ^* m; r5 {) u/ r4 ?
ll /var/www/html/
+ z. i& l* o" PwKiom1Zuc0Cgl5JqAAAw2zqGE2k492.jpg& j& V( k) Y) r9 `/ z, F# ~
# W/ K8 H5 d* R" G0 b6 P 到目前为止WEB服务的数据可以实现实时同步,只要把WEB服务搭建起来就可以直接使用了,非常方便。; m/ o. v0 E6 \' E# f, j, K
0 O. A4 F o( s& ` |
|