- 积分
- 16843
在线时间 小时
最后登录1970-1-1
|

楼主 |
发表于 2023-12-25 20:48:51
|
显示全部楼层
8.1 crmsh - 概述 ## N. M/ b! ?% \3 \1 @ k
crm 命令有多个子命令,这些子命令用于管理资源、CIB、节点和资源代理等。它提供了全面的帮助系统,并嵌入了示例。所有示例都遵循附录 B 中所述的命名约定。: T7 a+ ]7 `/ L% u' c7 y
" Y, `/ m$ {& d I, |
提示提示:交互式 crm 提示符
# ~2 z$ n* I+ p. J# f使用不带自变量(或只带一个 sublevel 自变量)的 crm,crm 外壳将进入交互式模式。此模式由以下提示符指示:' M h7 P1 X f3 A. a+ J' {
! N; Y& U$ r1 NCOPY( `6 |+ r3 T* y$ p& O7 B! i4 D4 w" w
为了容易阅读,我们的文档在交互式 crm 提示符中省略了主机名。仅当您需要在特定的节点(如 alice)上运行交互式外壳时,才包含主机名,例如:
. M$ w+ I4 w% N' r G W# o: `' N
8 j# R" h. S# H8 U* pCOPY
# V% X" |; o$ V: l+ [' L8.1.1 获得帮助 #
# S5 j W8 g8 L4 m. r; ~! K可通过以下方式之一访问帮助:! p, j [1 F& ]9 N+ S
# Y n# x! k1 G" A/ V2 Z输出 crm 及其命令行选项的用法:4 \3 }; B- y& J& O% \. f, [
. b5 u% V# g$ K. U
crm --help
) a# O5 Y& m0 O! i. d8 FCOPY
; W& N. @7 F1 {列出所有可用的命令:1 H" o& F5 L0 h6 h0 W
1 j6 a- Q$ b0 R5 ~
crm help8 D, |8 Z9 K5 C/ b9 z- ?% p" L
COPY+ k' ], J* R* x6 a6 Y' M, F6 B
访问其他帮助部分,而不只是命令参考:9 [. L, F( N6 Y
, F& ?$ ?# d' \7 C- {3 B. j O4 W) ^# Acrm help topics3 |' J; k1 h2 j9 q: `5 j
COPY
9 h* U; F3 v& ~/ s# k查看 configure 子命令的完整帮助文本:
) J& d8 V/ K6 [6 u8 R) s: n* I( B4 H1 D# ]' b' j
crm configure help$ h' [6 Z% E* n# Y
COPY
5 L4 j8 Z+ o9 V5 Z要列显 configure 的 group 子命令的语法、用法及示例:
. l" I6 B0 ^2 f E1 ^+ X6 M2 }: F1 e' A; O- L' m# ]% G* V& u
crm configure help group. t5 w) y) Y( I. t9 ?7 [
COPY& s: F& R+ Y: }9 U
以下命令的作用相同:
$ s. F$ k( F+ T! u/ O8 G0 D0 n, U3 G! l
crm help configure group
% j0 X, q- ?& e, y/ \+ dCOPY
) G" ~* W, i% w1 \: {9 M几乎所有 help 子命令(请不要与 --help 选项混淆)的输出都会打开文本编辑器。此文本编辑器允许您向上/向下滚动,以便更加方便地阅读帮助文本。要退出文本编辑器,请按 Q 键。; j3 Y$ \9 J+ o7 m9 G4 S
" ]" @" w4 z( o% F提示提示:在 Bash 和交互式外壳中使用 Tab 键补全: K4 F' y7 d/ Y9 _1 m+ E2 x( T! m
crmsh 不仅为交互式外壳提供 Tab 键补全,还全面支持在 Bash 中直接使用此功能。例如,键入 crm help config→| 会补全文字(就像在交互式外壳中一样)。
& X c! q' D% I: D! ^1 N
6 R7 ?9 m3 r" |9 D& H$ }8.1.2 执行 crmsh 的子命令 #( l \, A0 h3 @( c9 {
crm 命令本身可按以下方式使用:
( Q( ? B+ S( K$ Y; H0 l
/ H0 W4 o2 K) @9 a5 I$ j( t8 o直接:: 将所有子命令连接到 crm 中,按 Enter,您将立即看到输出。例如,输入 crm help ra 可获取有关 ra 子命令(资源代理)的信息。5 L" P& A5 m6 r+ @. p3 ]0 ~, {
% k6 H) l( ?5 i
可以缩写子命令,只要缩写后的子命令是唯一的即可。例如,可以将 status 缩写为 st,crmsh 可以识别该缩写。
/ H: c, U' e0 X% c6 I" L
' D: l# ?$ T) f& X4 z/ p- \* }另一项功能是缩写参数。通常,您是通过 params 关键字添加参数的。如果 params 部分是第一个且是唯一存在的部分,则您可以省略它。例如,下面一行:4 S7 E5 K w2 I4 N* Y: r: q
) r \+ @! `" A
crm primitive ipaddr ocf:heartbeat:IPaddr2 params ip=192.168.0.55! Q1 Q6 ? i# Q* X" i
COPY2 f- D# f/ j" B8 b: p
相当于下行:6 P( A- R& Z5 t" p4 L& f: s8 b. _
/ O; t/ K) q4 ?! ^7 S: J
crm primitive ipaddr ocf:heartbeat:IPaddr2 ip=192.168.0.55
& K- V3 i/ M( Y6 J4 Q* FCOPY
2 p/ u$ F, V- b2 k+ N- ?作为 crm 外壳脚本: Crm 外壳脚本包含 crm 的子命令。有关详细信息,请参见第 8.1.4 节 “使用 crmsh 的外壳脚本”。
7 V. \- x1 A% B ^. r+ q; w9 B2 ~( P% p9 Q1 M% ^5 z& Z4 T. g- o
作为 crmsh 群集脚本:: 此类脚本是元数据、对 RPM 包的参照、配置文件及多个 crmsh 子命令捆绑在一起并以单个描述性名称命名的集合。可以通过 crm script 命令管理这些内容。# f* w! B3 B" A6 d1 C7 c& E
" C7 m5 ~* y- i请不要将它们与 crmsh 外壳脚本相混淆:尽管两者具有一些共同的目标,但 crm 外壳脚本只包含子命令,而群集脚本所包含的远远不只是简单的命令枚举。有关详细信息,请参见第 8.1.5 节 “使用 crmsh 的群集脚本”。
0 ] ?' v1 D9 [; Q7 ~
2 w' O7 |$ l# S- a0 {& F4 _, N作为内部外壳交互: 输入 crm 以进入内壳。提示更改为 crm(live)。使用 help 可获取可用子命令的概述。由于内壳具有不同级别的子命令,您可以键入一个子命令然后按 Enter“进入”相应的级别。) Q; p, e6 j! x: Z; ^; I# F
9 k7 C- c3 \* D; v
例如,如果输入 resource,则进入资源管理级别。提示符将更改为 crm(live)resource#。要退出内壳,可使用命令 quit、bye 或 exit。如果需要返回上一个级别,可使用 back、up、end 或 cd。
^- ?1 e) l' M6 e& q! k
- c! i; }2 u: Z& o您可以键入 crm 和相应的子命令(不含任何选项)直接输入级别,然后按 Enter。
8 Q U& |' F9 H7 Y% b9 U. k" G" y4 R X% F$ G
内壳还支持使用 Tab 键完成子命令和资源。输入命令的开头,按 →| 和 crm 完成相应对象。
/ e% Y& j/ V% o/ G4 X2 w2 j d. s( y. N9 n, i2 w, s$ a6 c
除了前面说明的方法外,crmsh 还支持执行同步命令。使用 -w 选项可以激活该命令。如果已启动不带 -w 选项的 crm,则可以稍后通过将用户自选设置的 wait 设为 yes (options wait yes) 来启用它。如果此选项已启用,则 crm 将会等到事务完成为止。事务一经启用,就会打印出点以指示进度。同步命令执行仅适用于 resource start 之类的命令。
$ t- Y; s3 M8 P1 ?$ ]1 @9 G& L$ V# L
: r% b. r8 K4 o" i- E* h7 J- w' `/ u注意注意:管理和配置子命令之间的区别6 `' C' Q! x9 k7 j4 j
crm 工具有管理功能(子命令 resource 和 node),可用于配置(cib 和 configure)。1 `# |7 i" s+ U0 \! w
* U' d3 y b( m6 r" k以下小节概述了 crm 工具的一些重要方面。
y4 u3 e0 \; C# [' J$ @; W% I* I5 u7 ~+ l0 M- d
8.1.3 显示有关 OCF 资源代理的信息 #
, \" m2 t# h: E0 e3 U- Z由于在群集配置中一直需要处理资源代理,crm 工具包含了 ra 命令。使用该命令可以显示有关资源代理的信息并对其进行管理(如需其他信息,另请参见第 6.3.2 节 “支持的资源代理类”):* u$ J; q, D4 a) ~8 x
2 R' |* q+ r; W( q" N
crm ra' R c0 a$ V# n' N. w
COPY
! j7 P, q" p8 B) M; }命令 classes 可列出所有类和提供程序:
1 T" b1 G& d+ P. H( v! o& K8 g0 m3 S
classes
( i* K" S( @% C* Z) X' P" d) G; G lsb
' F, w5 C$ N2 s1 P F9 G ocf / heartbeat linbit lvm2 ocfs2 pacemaker" p7 n v1 Q( s* |# M# {
service
, d) ~7 o- O( @+ Z J7 g stonith6 Y$ h! a! j* D3 A4 E' n5 s
systemd& }# g: T8 i% u6 d$ ]
COPY
. }& E8 M7 t6 e要获取某个类(和提供程序)的所有可用资源的概述,可使用 list 命令:1 o5 s/ W% J7 Q+ y& J$ ^; t0 A
6 ~ H; _6 @( j' C9 w5 B. \8 s! B) vlist ocf/ f/ U% c9 r) x+ X
AoEtarget AudibleAlarm CTDB ClusterMon
1 \3 {1 k( P- j7 i( l2 c5 pDelay Dummy EvmsSCC Evmsd
- R/ k! e* @1 E ^Filesystem HealthCPU HealthSMART ICP9 @$ T; \/ j, g/ w, K8 O v
IPaddr IPaddr2 IPsrcaddr IPv6addr
0 b4 |3 v( D5 {2 ?5 k9 mLVM LinuxSCSI MailTo ManageRAID5 w/ d& I5 o% u3 n1 R7 f( e; \4 ^/ d
ManageVE Pure-FTPd Raid1 Route
3 g: G2 ^% g9 D( \SAPDatabase SAPInstance SendArp ServeRAID
1 j/ z2 q0 a, @...) l% {4 Q9 d" p3 f
COPY2 j Y% d1 n# g) F# M
可使用 info 查看资源代理的概述:
; G% X0 ~& G7 G" F) A2 n+ G- a/ R H' k% H$ c, Q
info ocf:linbit:drbd
0 \9 T& D5 t, F/ c8 Y" j" A+ NThis resource agent manages a DRBD* resource
3 _: X4 h/ F2 D6 ]. P: g, O6 eas a master/slave resource. DRBD is a shared-nothing replicated storage0 i& o: [/ j. w) D2 V
device. (ocf:linbit:drbd)$ M: S. r4 H7 V: {/ u' G
" h' L x, t! S: h( hMaster/Slave OCF Resource Agent for DRBD' H9 [5 R# A; x$ I
5 x) q7 x. G# w# q; @" rParameters (* denotes required, [] the default):
8 o; I, K/ }0 F; v1 d; F0 X" q
3 q1 }7 K. u( j7 V: x6 f5 r" Y1 Qdrbd_resource* (string): drbd resource name
6 I" B) E# |0 j5 T The name of the drbd resource from the drbd.conf file.# }5 F7 U' a% M. r. i: S( I" b) e
# [5 X( x$ v+ N* f% P/ }drbdconf (string, [/etc/drbd.conf]): Path to drbd.conf! A5 z4 C- d7 L2 z) R! E
Full path to the drbd.conf file.
$ c6 t3 J8 `. v2 d) b0 l: L) I2 K1 z& @* S7 k
Operations' defaults (advisory minimum):6 E# [4 T C1 |3 \: ^4 u4 \
9 S( F h* Y5 R* j5 _ start timeout=2407 |8 f6 p* X% W, K' b9 W
promote timeout=90
4 p3 t! Q3 L4 d4 ~7 J1 X demote timeout=90 * _$ ?3 |% ^% d" I& m
notify timeout=90 , V. ?8 R- k# z* e& Z
stop timeout=100
. s6 ?; Y% I* ^ monitor_Slave_0 interval=20 timeout=20 start-delay=1m: l! K1 H; i, T- M# k( H
monitor_Master_0 interval=10 timeout=20 start-delay=1m
& ^5 g* W( l T, B: K8 aCOPY
( G- Y& o) w' p* n$ J按 Q 退出查看器。* x; w+ l5 ?+ c* ^6 t+ t8 W
2 Q# j7 q* {9 m% z e+ W: N; E* \: C
提示提示:直接使用 crm/ e+ X, e7 H# z% b) {) X" O
在之前的示例中,我们使用了 crm 命令的内壳。但是您不一定非要使用它。将相应子命令添加到 crm 中也可获得相同的结果。例如,在外壳中输入 crm ra list ocf 可以列出所有 OCF 资源代理。) d- d3 L7 v4 T+ d5 I* p% a
/ E# |! X( q* D- ~1 P- q0 M
8.1.4 使用 crmsh 的外壳脚本 #
. d3 W2 U* c' h( Y: YCrmsh 外壳脚本提供了将 crmsh 子命令枚举到文件中的便捷方式。如此,您便可轻松地注释特定行或稍后重新运行这些行。请注意,crmsh 外壳脚本只能包含 crmsh 子命令,不允许包含任何其他命令。
$ Q5 v. A0 y% A7 M/ O1 C. p j! {! f% h1 b1 A) {+ H
您需要先创建包含特定命令的文件,然后才能使用 crmsh 外壳脚本。例如,下面的文件会列显群集的状态并提供所有节点的列表:! Z# Y* g+ {9 ?" l$ z3 b
% @9 q9 C7 F% ~+ V' ~
例 8.1︰ 简单 CRMSH 外壳脚本 #
; Z1 Y, a2 f9 U& \# l# A small example file with some crm subcommands$ E$ T9 U+ Y. ]8 H" B
status0 R3 j$ s6 \$ o9 {: Y
node list
3 e' H: S8 V: `9 B8 o+ _; NCOPY
/ T& x6 G6 s* D8 Q以井字符号 (#) 开头的所有行都是注释,可忽略。如果行过长,可在结尾处插入反斜杠 (\),然后在下一行继续。建议缩进属于特定子命令的行以便于阅读。9 a3 s" _. J, j# b/ D
' [. I. u% ^* O8 C% O要使用此脚本,请使用以下其中一种方法:
7 U( ~' q# S/ w4 @2 F; @, s3 O( \ J& R0 X. V4 Z
crm -f example.cli
0 U& j* T8 `" w$ ]) W7 @ o& R: ucrm < example.cli
* w+ G9 L4 X/ X8 h/ O. ]COPY( ^; u0 c3 E) w
8.1.5 使用 crmsh 的群集脚本 # ] ] ?: t4 g! }. j" d G* y/ J
从所有群集节点收集信息并部署任何更改是一项关键的群集管理任务。您不必在不同的节点上手动执行相同的过程(这很容易出错),可以使用 crmsh 群集脚本来代替该过程。3 ^& l& ~- m$ Q3 o& w
% g8 R1 T- L1 s
请不要将它们与 crmsh 外壳脚本相混淆,第 8.1.4 节 “使用 crmsh 的外壳脚本”中对后者进行了介绍。% w- J% u+ X( t3 @- |2 A
/ j7 P8 Y7 U4 O4 o6 O- S! h对比 crmsh 外壳脚本,群集脚本另外会执行如下任务:
6 X% J/ M, {, ] j# f' G( u" Y. Q! G% \/ v' }: Z, x! q
安装特定任务所需的软件。
) {0 ~! N2 |" a% l1 k- p
; n" ]% G- I, J5 K: ^8 b创建或修改任何配置文件。( T( g4 @; d" U! F
" I7 ]. j+ x( e( k @
收集信息并报告群集的潜在问题。
- {% m# x- u# A8 a* z+ F1 @, P$ S. q4 w" F! H# ~$ Z+ e q
将更改部署到所有节点。
. T" t" y- K8 B. k; I( d( } O! ~5 \ }. m6 t' g! m8 J
crmsh 群集脚本并不能取代其他群集管理工具,它只是提供了一种集成的方式用于在群集中执行上述任务。有关详细信息,请参见http://crmsh.github.io/scripts/。5 T4 m# f; R4 n: v" Z
* o. c; d6 L5 {# W3 b5 c( N8.1.5.1 使用 #
* b" _: Z8 e' F6 h) T& `要获取所有可用群集脚本的列表,请运行:, C& v9 g# h N0 x9 \
& v i9 o* t* F" G! b
crm script list, z3 [7 O" ^. }3 x+ T( v3 Q
COPY. `1 a) b; P0 Y
要查看脚本的组成部分,请使用 show 命令和群集脚本的名称,例如:
7 F" \9 f% ^: L6 G/ x: g
3 T5 [# @4 C9 S& F+ x Jcrm script show mailto
& N1 N/ a! l0 T5 \! G: L6 X) Smailto (Basic)* g$ M# a$ b5 Y `
MailTo
8 {6 N: b7 ~2 c$ K$ x9 G8 j4 I3 b, v9 K. y" r- e
This is a resource agent for MailTo. It sends email to a sysadmin
# K- L2 n3 ^7 r8 Hwhenever a takeover occurs.( _: C- ]7 n$ g* p1 |/ \# E
9 T! y; w+ l$ k& ~& W! r z& B
1. Notifies recipients by email in the event of resource takeover
) l1 Q3 P; h1 V I& S" a8 s, e9 C! }% E8 X8 f6 N
id (required) (unique)- h1 X6 l$ T5 B. P) {, ~8 ]
Identifier for the cluster resource
. Z+ v7 V) ^, g" u; f email (required)0 H) w; i2 A4 X6 j9 m
Email address
$ l# _1 v) p& u9 u2 |3 m( m5 Y6 r subject
- A$ q$ x& C4 F5 B e Subject2 h* ?& H- x9 x l8 m
COPY% x6 s8 {& v E& P
show 的输出包含标题、简要说明和过程。每个过程分为一系列按给定顺序执行的步骤。
d: I T% E5 c
0 L% r3 m& m- r: D8 v7 w0 J每个步骤都包含一份必要参数与可选参数及其简要说明和默认值的列表。
/ F. c. q6 }4 Y8 k9 f) m+ d
4 K) L& ` K$ A {: r每个群集脚本都可识别一组通用参数。这些参数可传递给任何脚本:8 T* r7 D5 Y9 {9 G/ w
* z! n" S) R0 h! w7 o表 8.1︰ 通用参数 #1 u9 e+ p3 F( I$ h6 |) r+ J0 o- \1 T5 Z
参数 自变量 描述
3 ?' Y& _6 b0 i! T7 Caction INDEX 如果设置此参数,则只会执行单个操作(verify 会返回索引)2 q0 a1 Y3 ~6 d( T2 X
dry_run BOOL 如果设置此参数,则只会模拟执行(默认值:no)" j9 M$ @! a. s6 a/ s4 m
nodes LIST 列出要对其执行脚本的节点1 B5 s& |1 p: X$ j( ?
port NUMBER 要连接的端口
! M# f. h! w- T1 rstatefile FILE 在以单一步进方式执行时,状态将保存在给定文件中
5 R# [( P9 u: M8 ssudo BOOL 如果设置此参数,crm 将在适当的情况下提示输入 sudo 口令并使用 sudo(默认值:no) u5 ]* ^& @% J$ }
timeout NUMBER 以秒为单位的执行超时(默认值:600)
8 Q; W( N2 H- A3 \user USER 以给定用户的身份运行脚本
" L e: h. P% U3 y) x1 I( S: @; S3 c8.1.5.2 校验和运行群集脚本 #
Y) K M$ L; K) i* E3 Y2 |& l9 K5 K在运行某个群集脚本之前,请检查该脚本将要执行的操作并校验其参数,以免出现问题。群集脚本可能会执行一系列操作,并且可能会出于各种原因而失败。因此,在运行脚本之前校验参数有助于避免出现问题。; S9 j$ }6 B4 K5 _. y7 z
+ y* a, ?- W- \6 U: P( i例如,mailto 资源代理需要唯一的标识符和一个电子邮件地址。要校验这些参数,请运行:
" u2 e2 }. | x
+ x w5 q+ V8 S/ dcrm script verify mailto id=sysadmin email=tux@example.org
% a* ]3 J& i" H6 Q9 I7 H: t1. Ensure mail package is installed! `9 O9 N* o# x5 E) c
7 |+ x( w% Z" J! i* \# i" s' r0 | mailx4 n) g# i$ m ^2 v. a3 }
" A# }* E9 j- s0 Q/ G, p
2. Configure cluster resources# n/ Q& g& C. k
% T( G2 w9 h5 `9 q, V, Z primitive sysadmin ocf:heartbeat:MailTo
* J$ E# m% \0 _" J- ]: J email="tux@example.org"2 S4 D) |1 S4 h; m6 s7 M' l
op start timeout="10"
6 C" k+ W, ^" l* d op stop timeout="10"
' C8 M. S2 B, o. d0 c op monitor interval="10" timeout="10"
; }# D4 Y& Z1 x% ]* }& F% s) [
& h4 H8 f0 N# M& e) U clone c-sysadmin sysadmin
7 ]: a; M6 R. KCOPY
( _2 s3 J7 X" V# z0 u6 |& \verify 将会列显步骤,并将所有占位符替换为您的给定参数。如果 verify 发现任何问题,将会报告问题。如果一切正常,请将 verify 命令替换为 run:
& Q2 k/ {6 s3 ~- P6 ], ^! H! w# M8 G: r) X
crm script run mailto id=sysadmin email=tux@example.org A8 u- r, `; F' ]/ V1 R% l
INFO: MailTo/ v" y% m, B: H: z/ i) z9 a
INFO: Nodes: alice, bob) }+ D7 o/ j* \! T! Y! x
OK: Ensure mail package is installed
# d f% C, \; [8 S+ YOK: Configure cluster resources0 {" z( Y- C1 z3 h
COPY; b7 o5 M, x1 A+ r
使用 crm status 检查您的资源是否已集成到群集中:
9 g1 k/ l5 _- o( s
& B- `' |1 |1 a) r G& g* ?- K- ecrm status8 a/ ]6 T# T7 H- L3 h
[...]
- H; X8 k8 H% U" y) }( O! r* P Clone Set: c-sysadmin [sysadmin]
3 Q! o+ A# I, r, s" x e! h# ^, Q% ~ Started: [ alice bob ]
% A% {9 l! O C" y' mCOPY
5 y. M9 N% H* ]7 ]* B! F, v B8 J8.1.6 使用配置模板 #% l3 b D2 t" \ Y
注意注意:弃用通告
3 |6 v1 D0 [" \/ ~/ m* r1 P- ^配置模板已弃用,将来会被去除。配置模板将由群集脚本取代,具体请参见第 8.1.5 节 “使用 crmsh 的群集脚本”。) u4 N: a. [6 f3 S
1 k. `6 o( b& Y! H5 b& i
配置模板可为 crmsh 提供即时可用的群集配置。请不要将其与资源模板(如第 8.3.3 节 “创建资源模板”中所述)混淆。资源模板只适用于群集,而不适用于 crm 外壳。
0 l8 g, a, a' i6 R
0 K H+ R* |! C# i配置模板只需稍作更改,即可满足特定用户的需要。每次使用模板创建配置时,都会出现警告消息,提示您哪些可以稍后编辑以供将来自定义。/ [5 S& C! m" L4 u
: a/ z" a# K. t8 w- a
以下步骤显示了如何创建简单有效的 Apache 配置:8 j/ \! c( k3 i
9 e9 a& j% t8 R7 a+ x以 root 用户身份登录,然后启动 crm 交互式外壳:& s# N5 v, Q" C B. v2 f- }
1 K$ r" |2 l. ]: z7 E+ t9 `
crm configure d2 t) v: h8 P9 _) ^1 u7 y( S
COPY
* c8 }+ D7 f5 B9 r从配置模板创建一个新配置:
- h, b# {/ h3 D3 k J
( o# D+ ], U* g切换到 template 子命令:
( K( x6 n E4 B) e
; r6 ]; F# V7 Y4 _template
! V0 G2 O, D/ V7 D0 DCOPY: |) z; H3 |( N, v( _% I- d
列出可用的配置模板:5 X8 \" t/ C9 R7 `2 M
. j& c( Z4 h% `* [& Y2 Jlist templates
4 S- b/ O* Q" [* p5 S9 ~gfs2-base filesystem virtual-ip apache clvm ocfs2 gfs2
1 G) z* A: i- f. j6 h$ BCOPY
( L9 ^ c6 {3 \6 p1 o- b4 K确定需要的配置模板。由于我们需要 Apache 配置,因此选择了 apache 模板并将其命名为 g-intranet:
" X# B% y0 A6 x. j6 ]* p! A; | M* [; f* v+ X# y2 C! [
new g-intranet apache
) Q, `* Q# W& kINFO: pulling in template apache
7 |% R9 W4 h/ aINFO: pulling in template virtual-ip* y7 I' p7 J; X* q9 x! M7 a
COPY5 ]+ b/ u/ s- I, j
定义参数:
5 C, \# w5 g8 T1 u% W( H: K1 l
: e. K! z5 |! _ y列出您创建的配置:
( \9 I: I1 |1 b9 f: F# w: v5 m+ O/ M# a6 Q u6 d
list
' } g& N* |( g8 G' ?2 E' o fg-intranet
+ K" u/ a$ {4 }2 ~ L+ `7 @$ z( G7 F7 oCOPY# S) l5 I+ h% k, ]
显示需要由您填充的最少的必要更改:
S! ~4 F$ n$ v; S: A
5 T; X( Y: C; mshow
5 b, i2 a. L2 h- N# \7 zERROR: 23: required parameter ip not set+ k {& w3 K8 k% O" l4 i; z$ J( N. ^
ERROR: 61: required parameter id not set
; W' |& s& b/ N3 w4 I- TERROR: 65: required parameter configfile not set
, q o" Q% `% C1 R' x- ^8 ^2 S( ACOPY
6 x2 r: x* O. a, s% z5 m* M( j$ k调用首选的文本编辑器,填写显示为错误(如步骤 3.b 中所示)的所有行:+ D3 I; w7 F3 g; E$ v$ ?
6 V0 o' r7 c( w. P! ?8 x+ f1 medit7 a: y4 N: P; T
COPY
% K1 I6 w9 l/ V; W2 U" K8 S/ a. q) @显示配置并检查配置是否有效(粗体文本取决于您在步骤 3.c 中进入的配置):
7 S! W0 P9 H) M5 T4 p5 b# v
1 g& L/ @, |6 e9 G4 {show
3 U: O8 O8 d" uprimitive virtual-ip ocf:heartbeat:IPaddr \7 ?" q- Q7 a' @! T+ u; H
params ip="192.168.1.101"
& e* x% I4 s k2 x, vprimitive apache ocf:heartbeat:apache \
8 c/ ]3 B, W) x8 S. I7 S params configfile="/etc/apache2/httpd.conf"
- D; m% T2 a+ L; ~ monitor apache 120s:60s
; J& O" L/ R6 [* \; z- ggroup g-intranet \* h% ]8 m" r& {+ T- ^* M r" `2 q
apache virtual-ip
1 }, S0 Q* A2 k# _COPY: d4 u7 s- I; y: K8 y) k7 c4 S
应用配置:
5 r% r7 X T N+ M2 N' m7 l$ v% D& w8 P! a: v# V4 h8 ^) |8 A
apply/ f* k8 v4 k2 q0 q; h& P* Z
cd .. T- Z6 k7 i3 l- {) I& v+ W7 T- `
show
, i, v/ t( U1 n$ Y: zCOPY
- _: }* [+ ~9 k# Z1 G将更改提交到 CIB:% s* e0 p3 l; j! b+ \
/ h! t$ \, _: ^8 l1 L- @3 e
commit/ N# P; |+ }7 E7 E; ]4 `6 t$ R1 ?
COPY
7 F, [+ y$ k& I5 M% W, h如果知道细节,可以更加简化命令。上述过程可汇总为外壳上的以下命令:# D" I5 Y0 }2 ?+ j. ^6 W
9 R5 Z- \7 i# T* @ K
crm configure template \7 ~5 ]& N) n3 l: G% D
new g-intranet apache params \
/ T; o2 r* o" j7 C0 i configfile="/etc/apache2/httpd.conf" ip="192.168.1.101"
$ |5 F B k2 U% ^9 [COPY; v O/ G+ {5 }4 [" ]3 o
如果在 crm 内壳中,可使用以下命令:( f2 a: ^* K! A
, X9 }6 {4 D" h# x% {! [: Xnew intranet apache params \' w- S: E$ Q) m
configfile="/etc/apache2/httpd.conf" ip="192.168.1.101"9 @2 G/ c7 i% @2 q$ x/ [# a
COPY
/ D4 [: U" ~1 S但是,前一条命令仅会从配置模板创建其配置。它不会将其应用或提交到 CIB。9 h, m: T) b* s" V# W9 |( S
: Z6 `; Q- }* |! k+ L8.1.7 使用阴影配置进行测试 #3 w% P* z, K. |, u, y) I% \) j; t
阴影配置可用于测试不同的配置方案。如果创建了多个阴影配置,则可逐一测试这些配置,以查看更改的影响。
# w! X+ e ^9 M$ B/ h0 q' R
. b& \( v3 M/ J+ L, F一般的流程显示如下:
- q" q, l }2 k k! H0 ]. c3 j0 Q1 D. a3 y8 t; E" o5 `( I
以 root 用户身份登录,然后启动 crm 交互式外壳:& ^6 ?0 Z; i6 I$ q/ e( \- \
- X" t/ Z% k$ s# E, y9 W: ?+ G% L
crm configure* b/ t. U3 `* H0 b
COPY9 Y$ o+ V6 X5 H/ Z$ A [
创建新的阴影配置:
6 p# B. T# o/ ?
. [( g, \8 {3 E& Kcib new myNewConfig# l; J0 _: c+ f6 t) v B% c+ I. F
INFO: myNewConfig shadow CIB created
: A1 f9 X. v& b# s: \COPY
: ~. F1 ~9 x+ a; n3 l0 p如果省略阴影 CIB 的名称,则会创建临时名称 @tmp@。
( R2 |6 e. o3 h L3 m! a$ E$ n+ L3 l! i
要将当前的活动配置复制到阴影配置中,可使用以下命令,否则请跳过此步骤:
& x7 \) U4 T! V" T4 G
8 ~: P2 o# Z+ w6 _8 vcrm(myNewConfig)# cib reset myNewConfig
3 m4 j6 {6 \/ S/ l2 o1 vCOPY
. V; P8 P; C$ f) ^9 _: I9 G使用上面的命令便于稍后修改现有资源。+ f( ?6 ?' ~( l0 q0 \% f
/ h" j% B/ _6 v( o0 F6 t$ ?照常进行更改。创建阴影配置后,会应用所有更改。要保存所有更改,请使用以下命令:
- u( m" m4 F1 Y% u4 b( C. U8 R1 |; D! n/ d3 \. Z
crm(myNewConfig)# commit
+ e3 e5 Z; k% N+ n& B* ?COPY |# H# ^! j$ S9 N/ J( t
如果再次需要活动群集配置,可使用以下命令切换回此配置:
+ s, n0 |5 _" b+ I* Q6 G9 Y5 q" |. Q. @
crm(myNewConfig)configure# cib use live% c3 X5 X6 |8 j$ y6 q. F& m
COPY
. [; d! O! u8 X3 `8.1.8 调试配置更改 #% X6 S4 i8 y) K+ C. D8 O3 B: d' P
将配置更改装载回群集之前,建议使用 ptest 复查更改。使用 ptest 命令可显示提交更改后产生的操作图。您需要 graphviz 包才能显示该图形。以下示例是一个抄本,添加了监视操作:
0 ?# t8 U( I1 G+ D* J; G$ \# _; Z4 E* ^* O: _ q0 }/ m8 s
crm configure9 S' g) s% c: x/ N6 W
show fence-bob
# ~- |" O2 @; T4 O; Z; vprimitive fence-bob stonith:apcsmart \, C1 [$ N$ U2 _- r8 s
params hostlist="bob"" f4 Z$ P9 p* l
monitor fence-bob 120m:60s
0 B: n7 P9 ]: _. v$ y* Y1 `4 F9 Wshow changed B3 y# E& G1 r- V8 [- G4 _
primitive fence-bob stonith:apcsmart \( n( K0 `7 ?* e, ?5 i
params hostlist="bob" \
3 h& D6 V+ x% B5 ~+ C! I op monitor interval="120m" timeout="60s"" N% o0 P/ E2 ~3 m6 Z1 J; n% Q/ b
ptest- ^3 Z# Q# d& m5 z- \: _
commit
, o; m$ ] i! E3 C4 HCOPY, u! x+ [% C6 M/ {
8.1.9 群集图表 #
4 S/ M' m9 }8 F' Y6 B, F. E要输出群集图表,请使用命令 crm configure graph。它会在当前的窗口上显示当前配置,因此需要配备 X11。8 t1 {, r7 }& {% ]8 u
) G( Z' }% f9 N8 u+ `) K* V" ?
如果您希望使用可缩放矢量图 (SVG),请使用以下命令:; P( N- {1 `' T8 l: U& ]
2 z% X* B. j( J" r4 v7 ~ D2 gcrm configure graph dot config.svg svg
) v& _% l- I9 _/ ECOPY* T( m5 N2 X4 D: N* R# z3 Z* W
8.2 管理 Corosync 配置 ## m2 i2 G2 {7 Z0 P s
Corosync 是大多数 HA 群集的基础讯息交换层。corosync 子命令提供了用于编辑和管理 Corosync 配置的命令。
3 n) Q! p7 C- ?
1 U# G) I* K2 ?* t U7 |例如,要列出群集的状态,请使用 status:
' L% ~" g$ C' g5 h0 @
' \4 n. j* M/ u+ |crm corosync status8 C. n3 U$ M" Y! I/ r6 H q
Printing ring status.
6 Z+ v } h) r# ]Local node ID 175704363
9 x4 t2 ]; j' e# E" ~RING ID 0
b+ V; @; Z' K( c3 @: Q; u6 O. L id = 10.121.9.43$ z J& Z: f$ y" g v- v
status = ring 0 active with no faults
` `( Y6 W3 S6 s) j4 ~" M) eQuorum information: \; D8 B E6 X
------------------
5 q/ j6 o. [/ n/ a) ~' _* x' JDate: Thu May 8 16:41:56 2014
$ _" R' U" c) R/ C0 W* `% F% O# W6 iQuorum provider: corosync_votequorum
+ w2 b* u3 b3 G! X1 W6 E" s+ O k& cNodes: 26 n0 C8 c+ B" E
Node ID: 175704363
! A% @* u# s( k; ^4 K1 NRing ID: 4032 O1 K' I, @5 F1 H
Quorate: Yes
: p0 g u8 i! b5 t7 N0 ^& R1 C* n& g
Votequorum information
+ h1 ~/ E$ H' l$ W9 b2 a8 U% Q----------------------7 Z) \; ?# {" l* i9 k
Expected votes: 2
+ f+ r) ` n5 W" }) P5 qHighest expected: 2, g o% _5 F& O5 p( y
Total votes: 2
7 _' N* w; T" U8 b, h( N2 iQuorum: 2
7 ]7 f& x) n- Q; x) R: y( hFlags: Quorate
1 X2 f& `" c* r2 ]. t. X, c8 V3 R1 J. K! M
Membership information( i: Q& p1 q1 m1 T- D+ r
----------------------4 h' x! d' K5 G: S
Nodeid Votes Name9 Y& Z, K' g4 H6 X' q) E1 b1 i# n8 z
175704363 1 alice.example.com (local)7 f6 O7 l2 J" P4 a& h! u
175704619 1 bob.example.com; _* d p1 {3 F4 h
COPY, F3 Y3 ^4 P3 x% }( E: u5 Y
diff 命令非常有用:它可以比较所有节点上的 Corosync 配置(如果未另行指定)并打印出各自的差异:4 o8 H* f! f- k2 _" l" s/ u
1 g' |! C- j. [3 H5 f9 ecrm corosync diff
& N& w7 W9 e+ T4 P3 q4 Z- t. g--- bob, n% P0 h1 i, `; r- [
+++ alice# u2 C* J' h0 W" x4 G B" q
@@ -46,2 +46,2 @@. v1 c' h4 b6 x" t7 F
- expected_votes: 2
# R2 i, t5 P4 F. u- two_node: 1
$ J# ^( P1 n+ a$ h/ N0 g( v$ s+ expected_votes: 10 P) f, n2 J6 t. f# n& \, R
+ two_node: 04 L. J5 E+ w; A- ]" t, \
COPY
. J2 J: n4 x( M" _. Q. l0 {7 o1 `有关细节,请参见 http://crmsh.nongnu.org/crm.8.html#cmdhelp_corosync。" o/ P& Y7 b. u# I9 }
: ~1 h @' R3 x/ G" ^- c5 u
8.3 配置群集资源 #
( `; {1 B: B# o5 d/ V作为群集管理员,您需要在群集中为服务器上运行的每个资源或应用程序创建群集资源。群集资源可以包括网站、电子邮件服务器、数据库、文件系统、虚拟机和任何其他基于服务器的应用程序或在任意时间对用户都可用的服务。
* o! u5 {2 d/ ?" i- x0 W* s
: t9 {' B3 J n有关可创建的资源类型的概述,请参见第 6.3.3 节 “资源类型”。+ h! h- h' f9 i; t& C& P; o
; A' y4 P0 s$ J1 `8.3.1 从文件装载群集资源 #9 ]' j7 [" \' G- |2 _; y
可从本地文件或网络 URL 装载部分或全部配置。可定义三种不同方法:& Y) y* Z3 F) d b7 `3 c
/ T0 u! m: H# Yreplace/ M* f! {. ~+ a \0 a: y
此选项会将当前配置替换为新的源配置。
' Q' l2 R; ^$ f) K3 }# j
& [9 I% Y, g }1 [8 \# xupdate
+ [9 }) h* d5 f5 N. n# M此选项会尝试导入源配置。它会向当前配置添加新项目或更新现有项目。
$ t0 X, X0 z5 b1 s& Y
" Q, k% P3 l" B. V! }) apush! b) U) v% h1 m: M. B/ b$ j6 k
此选项会将内容从来源导入到当前配置中(与 update 相同)。不过,它会去除在新配置中不可用的对象。
: I: W. ?5 v( |) x6 f
* P2 A2 G0 ^5 u) s- Z要从文件 mycluster-config.txt 装载新配置,请使用以下语法:2 o/ [# ?" [& u) e2 c5 G7 T
4 k4 j* q- y6 z; \0 g/ H( F5 xcrm configure load push mycluster-config.txt
X: t/ O& N6 A: Z8 s, B, wCOPY
' W7 l+ c( z: E5 s8.3.2 创建群集资源 #
. o9 x/ s2 w$ C: h9 w9 }- E3 d" Z有三种 RA(资源代理)类型可用于群集(有关背景信息,请参见第 6.3.2 节 “支持的资源代理类”)。要将新资源添加到群集,请按如下操作:2 F/ a; [$ V9 K* m9 Z
- A: j( u& z& i& g以 root 用户身份登录,然后启动 crm 工具:5 b9 v: s8 _, B& y
5 k% i. x! |( Q; _0 X. ~* x! i3 _crm configure
* h2 ^: }! N+ F) ?, RCOPY' _% a- d0 w- Y2 m" |3 U4 i& R
配置原始 IP 地址:
t Z2 d- b, x: A& k& M3 C) ]$ h1 Z: ?; N1 V l. a6 T; o
primitive myIP ocf:heartbeat:IPaddr \% F& x+ K! Q/ Q; S2 {/ j1 {7 x
params ip=127.0.0.99 op monitor interval=60s
9 r7 z9 s4 e/ O. h l8 m7 mCOPY' q% p/ @9 F+ [9 b8 d
上一命令配置了名称为 myIP 的“原始资源”。需要选择一个类(此处为 ocf)、提供程序 (heartbeat) 和类型 (IPaddr)。此外,此原始资源还需要其他参数,如 IP 地址。根据设置更改地址。( G: u( J4 t/ ~
+ ^0 E# e. a7 U
显示您所做的更改并进行复查:; P9 }$ V% I) q. h9 F! s
: B& T; w7 Q# _5 g, y5 ~* s% N6 a! u$ n
show
' ?8 y% g) f2 i# l, ]COPY
0 p3 r8 \5 \2 n提交更改使其生效:
3 n3 J" F: U) o
0 o* C+ b, @: ^commit; X4 ]4 j/ j" O' }
COPY
& V" y5 \/ l; l9 W. A8.3.3 创建资源模板 #
% X* J u! E' e& p9 A如果希望使用类似的配置创建多个资源,则资源模板可以简化此项任务。有关一些基本背景信息,另请参见第 6.5.3 节 “资源模板和约束”。不要将它们与第 8.1.6 节 “使用配置模板”中的“常规”模板相混淆。使用 rsc_template 命令可以熟悉其语法:
* i, T$ z& l, G1 k7 q: c9 l9 `. _1 e* u7 o! @( n% _3 Y8 r
crm configure rsc_template/ H, Y9 \7 A' ~/ k' O
usage: rsc_template <name> [<class>:[<provider>:]]<type>
# F5 ~# k$ M J5 u- m3 e [params <param>=<value> [<param>=<value>...]]
7 z5 z% y8 s; M: @$ E( h+ o [meta <attribute>=<value> [<attribute>=<value>...]]2 x# A5 S5 J9 w% o5 ?" v
[utilization <attribute>=<value> [<attribute>=<value>...]]
+ H% ~! n8 H5 Y/ X! K: X4 D- h [operations id_spec
w9 m, A5 u( t. ]4 M [op op_type [<attribute>=<value>...] ...]]9 Z, ]2 t( Q* n5 R5 u& v8 }0 Y& f
COPY
/ P% I$ o, \: C/ |: G例如,以下命令将会根据 ocf:heartbeat:Xen 资源和一些默认值及操作新建一个名称为 BigVM 的资源模板:3 [4 o7 P- z! E8 n1 x0 k9 y
: K7 q- e( N0 T% O9 w/ b, Mrsc_template BigVM ocf:heartbeat:Xen \
2 c* u- @$ n, k/ N z, r+ Z params allow_mem_management="true" \0 ?6 ~7 |3 T1 M* N( G9 B" C$ _3 E
op monitor timeout=60s interval=15s \
* u; M8 Z: Z% f7 Q5 m3 ? op stop timeout=10m \8 I( d5 n3 ]9 y( w
op start timeout=10m G7 Q- c6 ^+ T9 s2 Z
COPY+ ]" o2 r; b1 O# U1 B
定义了新的资源模板后,可以将其用作原始资源或在顺序、共置或 rsc_ticket 约束中引用。要引用资源模板,请使用 @ 符号:- o. `8 @5 P2 P0 \4 l( Y/ \( ~
( ?* |& x7 F, U8 ]$ N! dprimitive MyVM1 @BigVM \
" N: j& X: _8 j' ]: j' B6 [, |8 Q params xmfile="/etc/xen/shared-vm/MyVM1" name="MyVM1"$ H0 X V0 M8 e1 U6 n# V& Z9 }
COPY
) `5 B+ \6 K4 ^3 b: O$ t( t5 a4 R新的原始资源 MyVM1 将继承 BigVM 资源模板中的所有配置。例如,上述两者的等效配置有:
5 A+ {0 _$ {8 ]& a0 \% o
/ a+ [# B1 N# k+ P4 G7 K( ?primitive MyVM1 ocf:heartbeat:Xen \' V5 M! }9 Q- z9 A1 p) @$ X/ E
params xmfile="/etc/xen/shared-vm/MyVM1" name="MyVM1" \
' W, Q( n: Z7 j k, a params allow_mem_management="true" \
2 t4 ^ Y) F% A4 F3 g op monitor timeout=60s interval=15s \
, Y6 M) @( d+ \/ H op stop timeout=10m \
: i: P0 t: A1 V S, k+ Q5 a2 F op start timeout=10m
, ~5 F& q: r5 O+ lCOPY# n g4 f j& [& s* K8 N
如果希望重写一些选项或操作,只需将它们添加到您的(原始)定义中。例如,下面这个新的原始资源 MyVM2 会让监视操作的超时增加一倍,而其他值保持不变:4 b. i5 u( Y5 @+ `, K0 N
4 M6 |8 V7 D5 \primitive MyVM2 @BigVM \
! \& |' P2 w, v2 T# B/ l params xmfile="/etc/xen/shared-vm/MyVM2" name="MyVM2" \
4 Y) M7 [, w. y: o op monitor timeout=120s interval=30s
- l, y; _ ?! R/ C x) JCOPY4 X2 w% ^( Y/ ]0 d8 t0 e0 ~3 o
资源模板可以在约束中引用,以表示所有原始资源都派生自该模板。这有助于生成更加清晰明了的群集配置。除了位置约束外,允许在所有约束中进行资源模板引用。共置约束不能包含多次模板引用。
3 w, c3 h, \0 v3 i( T O
- Z8 H' E- g; z8 I$ {: O) D8.3.4 创建 STONITH 资源 #
5 s4 i8 Q4 J, m. ? O4 l就 crm 而言,STONITH 设备只是另一种资源。要创建 STONITH 资源,请执行以下操作:9 Z% t( a, k, g6 h
$ W x% @5 L3 B# R, B
以 root 用户身份登录,然后启动 crm 交互式外壳:
# W5 k/ F$ K1 N; d& i% c4 m6 v! Q+ h* N6 C' ~9 D) l( v
crm configure
1 z; _- F2 B+ m& ?* a3 T% g' VCOPY; g: A( z/ E" u& _. ?5 k7 R6 K
使用以下命令获取所有 STONITH 类型的列表:% X2 D% n. |" U+ C5 Q6 }2 A/ d
& H6 D* k6 }1 z+ m" Era list stonith5 g* G( S/ W- v- i9 {; Z% P
apcmaster apcmastersnmp apcsmart f- h; h) S' Y
baytech bladehpi cyclades
! o# g k7 \6 P$ F' ^# Gdrac3 external/drac5 external/dracmc-telnet* W2 [0 E$ K) ?4 _" h/ H; O6 m4 @
external/hetzner external/hmchttp external/ibmrsa
' ~1 k9 R; ^2 ^% m' A7 `: nexternal/ibmrsa-telnet external/ipmi external/ippower9258$ Y3 f; ]2 G9 h2 `6 A" h6 T
external/kdumpcheck external/libvirt external/nut
; V! W* }, U/ uexternal/rackpdu external/riloe external/sbd
! m# c6 U/ |* A9 Yexternal/vcenter external/vmware external/xen06 h/ N% Y3 N: f$ g
external/xen0-ha fence_legacy ibmhmc j2 p* S, `4 ?9 O! a \, t
ipmilan meatware nw_rpc100s
9 y' a1 |; t" w) e- w+ F# M* frcd_serial rps10 suicide
& [+ h4 U. n' ~8 L. awti_mpc wti_nps
" f" X; B% ?& Q, W' J; ICOPY2 U- v$ y& ]) Q& r: O. p3 M- I
从以上列表中选择 STONITH 类型并查看可用的选项列表。使用以下命令:
, _) m7 {- B/ U k7 o/ I' ?6 b% E& d2 b0 g' {/ D7 z/ N
ra info stonith:external/ipmi
" d% I1 u% s- n) j) @# ~IPMI STONITH external device (stonith:external/ipmi)
" a; ]; g+ a$ B6 l" u
( e6 }4 n) j, w* D* w2 Kipmitool based power management. Apparently, the power off7 s- c( S8 B* b3 s) R( y( C. z3 P
method of ipmitool is intercepted by ACPI which then makes2 `% z8 O3 L* N1 M) _
a regular shutdown. If case of a split brain on a two-node1 \. j" [0 t4 ^0 ]
it may happen that no node survives. For two-node clusters
4 M7 `, V; M* F, `. kuse only the reset method.
/ H- p& I4 @, S: d0 z0 }' N, ]) ^. J0 J
Parameters (* denotes required, [] the default):; Z- D: h) U, R$ ~' y
$ Z# M1 m; Z" K6 F$ F+ t+ mhostname (string): Hostname" `$ R& z, i- Y3 Y. V" N$ u
The name of the host to be managed by this STONITH device.
9 t0 }$ g8 S. u5 Z! m. ?0 c- p...2 A! v# H- n1 e! S( l
COPY
8 J! c+ q0 M! A- n+ P使用 stonith 类(您在步骤 3 中选择的类型)和相应的参数(如果需要)创建 STONITH 资源,例如:) u" S I4 f+ K9 F' L1 @
- A1 n9 B. q+ Z3 i; F/ W6 `% g V
configure
1 \0 H E2 @ Z5 zprimitive my-stonith stonith:external/ipmi \: B5 y B H* ~& \' K
params hostname="alice" \
+ I' G$ e( V. l" x3 I& u ipaddr="192.168.1.221" \
* N! G8 ?' w) j$ f& o4 ` userid="admin" passwd="secret" \
! i0 \5 j: I$ q _/ G' E op monitor interval=60m timeout=120s' B0 ?2 ]7 _( d, d5 a% Z
COPY
, a9 c9 ~" C9 D" k6 u4 J8.3.5 配置资源约束 #) `! u, Z& F9 u; M4 ~: Y0 W
配置所有资源只是任务的一部分。即使群集了解所有需要的资源,它仍然不能正确处理它们。例如,尽量不要在 DRBD 的从属节点上装入文件系统(事实上,这将导致 DRBD 出现故障)。定义约束以使这些信息可用于群集。" [2 y, N# K F$ J* j5 M
" t3 c; @# B! a3 }有关约束的更多信息,请参见第 6.5 节 “资源约束”。
8 L5 d( w( z9 I+ ]2 p* g3 U. s
s" Z6 Z. k' d( h1 L( L; L8.3.5.1 位置约束 #
]# f: {& q5 n0 ]4 Ylocation 命令定义资源可以、不可以或首选在哪些节点上运行。
1 s* O( V1 a7 z$ h! R& p- ^, O w/ x. o/ F$ O* Z5 a' i0 U
每个资源可多次添加此类约束。对于给定资源,将评估所有 location 约束。下面是个简单的示例,它将首选在名为 alice 的节点上运行资源 fs1 的值设置为 100:0 v, i7 k2 S1 K4 U, k9 C
" C6 Z6 o8 P1 \: Llocation loc-fs1 fs1 100: alice% {$ y" j5 \$ Z6 p$ u% c/ q- Y/ B
COPY' B n& B- z5 C# C/ e! B
另一个示例是使用 pingd 的位置:2 J2 m( U% Y4 h! W. l/ T5 X
& A# E; T# v( iprimitive pingd pingd \, y5 J( K. C6 U. E6 P" n
params name=pingd dampen=5s multiplier=100 host_list="r1 r2"
3 V7 d; R5 B0 {, Q0 i hlocation loc-node_pref internal_www \
9 B9 T4 r! b# B. Y" W rule 50: #uname eq alice \
5 `8 c8 y% D7 \3 B6 X* F, b" R rule pingd: defined pingd
7 W: n+ o# g: M. G; U, J1 o. c' ICOPY
8 s9 c7 f' e7 v位置约束的另一个用例是将基元资源分组为资源集。例如,如果多个资源依赖于 ping 属性来进行网络连接,则此功能会十分有用。以前,需要在配置中复制 -inf/ping 规则数次,因此不必要地增加了复杂性。
5 @7 k1 S) p( G4 ~8 k2 U8 W* s6 }
) n* }$ l4 k8 U+ o- z* E4 o8 X以下示例将创建资源集 loc-alice,该资源集引用虚拟 IP 地址 vip1 和 vip2:( |: }' S" Z+ b$ }# |! f
3 t9 E, w; N5 Tprimitive vip1 ocf:heartbeat:IPaddr2 params ip=192.168.1.5' ?% L3 P l4 T( w4 Q; Q
primitive vip2 ocf:heartbeat:IPaddr2 params ip=192.168.1.6
9 ~) P {* ~3 s8 Plocation loc-alice { vip1 vip2 } inf: alice; F2 e, s( L) U l- M/ b
COPY
- i& j5 U( v0 R& r在某些情况下,为 location 命令使用资源模式会有效且方便得多。资源模式是用两个斜杠括起的正则表达式。例如,可以使用以下命令全部匹配上述虚拟 IP 地址:
& S+ c1 |( I p
7 |! a9 Q0 e, J9 b1 }8 G3 Tlocation loc-alice /vip.*/ inf: alice
4 u+ O0 e9 R' g6 aCOPY
" F+ T# \ y# A( v: K; z8.3.5.2 共置约束 #
q: I& D1 h7 k. Acolocation 命令用于定义哪些资源应在相同主机上运行,哪些资源应在不同主机上运行。
3 d ^7 a1 b) x: X
1 ^% u, E" [, Z+ I- v, u3 J. R只能设置 +inf 或 -inf 的分数,定义必须始终或不得在相同节点上运行的资源。还可以使用有限分数。在这种情况下,共置将称为建议,群集可决定不遵循它们,从而在出现冲突时不停止其他资源。
# D7 u9 w$ n2 u2 f# X$ I
8 E2 M9 h/ R6 N2 h( n例如,要始终在同一个主机上运行 ID 为 filesystem_resource 和 nfs_group 的两个资源,可使用以下约束:% w& [6 c5 W4 C- i
) ]% A- v4 B8 y
colocation nfs_on_filesystem inf: nfs_group filesystem_resource
* ]( c( w$ V+ Q& @$ SCOPY
8 A+ T6 r; N3 W7 Z& @% y对于主从属配置,除在本地运行资源以外,还有必要了解当前节点是否为主节点。
p) M ^ B$ B1 L" @. |5 J0 C8 \
( b! v" i2 N3 D5 R3 x4 B' f# ?8.3.5.3 共置没有依赖性的资源集 #% L! U/ {: X: P7 C& H2 }* q) b: g
有时,将一组资源放置在同一个节点上(定义共置约束)会很有用,但前提是这些资源之间不存在硬依赖性。
# i2 b6 N5 p+ N/ K& q3 t4 V3 K8 ~- G% s$ M6 Q; S
如果您想要将多个资源放置在同一个节点上,但不想疲于应对每一个资源的故障,那么,您可以使用命令 weak-bond。5 o/ B9 b! U1 [
I2 O5 I/ G' i& @$ M" Ocrm configure assist weak-bond RES1 RES26 P" i# N6 Y' V/ Z' i
COPY% Z+ q& p* F* C, T: Q% Y# A
weak-bond 的实施将使用给定的资源自动创建虚设资源和共置约束。$ T& p& b7 n* b* [: F% ]
7 ^% X# o' ^' G, z# D! c( Y, H! A8.3.5.4 顺序约束 #' t! l H6 {; g* j
order 命令定义操作顺序。( J+ p0 }8 Y7 A6 z6 g7 V! a" m
# d5 K- G( X- `9 L
有时必需提供资源操作顺序。例如,在设备可用于系统之前,您不能装入文件系统。使用顺序约束可在另一个资源满足某个特殊条件之前或之后启动或停止某项服务,如已启动、已停止或已升级到主资源。
. A# f4 E' l1 y' H
# {6 ^0 a- e, \" _5 t在 crm 外壳中使用以下命令配置顺序约束:
$ f7 {* w7 K c* }
/ i2 N- [. b7 A+ c% C9 Corder nfs_after_filesystem mandatory: filesystem_resource nfs_group
" q; K6 F' @. g7 a' T7 M/ ]COPY$ |: G+ u: g; r' y
8.3.5.5 示例配置约束 #$ o k r3 A, l/ z$ m' K
本节中使用的示例必须与其他约束结合使用。其中最基本的就是让所有资源与 DRBD 资源的主资源在同一台计算机上运行。在启动其他资源前,DRBD 资源必须是主资源。在 DRBD 设备不是主资源时尝试装入 DRBD 只会失败。必须实现以下约束:8 a# n u+ L) t3 D! K& P
3 j# n9 h- h1 p0 n \+ L) t文件系统必须始终与 DRBD 资源的主资源位于同一节点上。' G6 X/ G5 m% b$ y/ X
9 Z! W# x1 W. P5 `colocation filesystem_on_master inf: \
$ Y& k1 ], M1 n) H1 j/ h* j filesystem_resource drbd_resource:Master$ k& D& |: e9 F- C3 `( q
COPY: l: a/ w5 S& d& |, s
NFS 服务器及 IP 地址必须与文件系统位于相同的节点上。
1 m) _# |4 G# s7 W+ E* h
( @3 w7 V# ~9 C4 f$ dcolocation nfs_with_fs inf: \
, O0 {' g& P, Z) f nfs_group filesystem_resource' `6 r- w# ?) L4 w; g" g' [
COPY' n6 ~* Y1 q1 E A
NFS 服务器及 IP 地址在装入文件系统后启动:: o: _" v2 q6 I) A7 U
, s+ h8 i4 Z) [order nfs_second mandatory: \: k& z7 M7 j5 a% ^7 j
filesystem_resource:start nfs_group/ [- e5 @% G) K# h; ]
COPY
- z5 v& u8 z/ F/ D必须在 DRBD 资源提升为节点上的主资源后才能在此节点上装入文件系统。 O. [# {; u/ q, t( P
0 {4 f9 N8 k( u+ T. F& J8 Yorder drbd_first inf: \; S1 S4 x# P p& w f1 }& b
drbd_resource:promote filesystem_resource:start
- c$ @# S9 O, z8 g: }: ECOPY" f. P1 N) `1 B$ f
8.3.6 指定资源故障转移节点 #
9 d/ O( p4 }& `& n要确定资源故障转移,可使用元属性 migration-threshold。如果所有节点上的故障计数超过 migration-threshold,资源将处于停止状态。例如:
* i9 i3 m; {3 P" Y( x+ b2 q0 P$ k7 G' ~: _
location rsc1-alice rsc1 100: alice6 k! z5 b, w- L8 a6 L
COPY8 d5 N, a) A! B5 y
通常,rsc1 首选在 alice 上运行。如果失败,将检查 migration-threshold 并与将它与故障计数进行比较。如果故障计数 >= migration-threshold,则会将该资源迁移到具有下一个最佳自选设置的节点。
1 e# e% f9 q* t) n- T5 r0 t5 @ G
8 E8 X- V: E6 g* \, K, c6 P根据 start-failure-is-fatal 选项,启动失败会将失败计数设置为 inf。停止故障可导致屏蔽。如果未定义 STONITH,将不会迁移资源。
% x0 T8 D- u7 W. Z, Q. ]5 y# ]. l% N
. O4 G1 `+ J; m* B有关概述,请参见第 6.5.4 节 “故障转移节点”。
5 u! L+ C8 N. O3 p' E! k( S4 n1 p! c$ m1 S) N
8.3.7 指定资源故障回复节点(资源粘性) #
" B8 R8 W. F4 r7 g: @2 Y当原始节点恢复联机并位于群集中时,资源可能会故障回复到该节点。为防止资源故障回复到之前运行它的节点,或者要指定让该资源故障回复到其他节点,请更改其资源粘性值。可以在创建资源时或之后指定资源粘性。
}9 L8 |9 R1 S8 R5 @ _3 `9 |8 m( H) _0 \& s; w" V
有关概述,请参见第 6.5.5 节 “故障回复节点”。
& u2 H* l, ?3 a
- {$ x. [+ _# ]9 z8.3.8 根据负载影响配置资源放置 #; S' H7 f* {4 T; V: d
某些资源可能具有特定的容量要求,如最低内存量。如果无法满足要求,资源可能无法完全启动或运行时性能下降。
9 r! C) s( [$ u( E7 s7 |9 V7 A' K- v" V6 h
要考虑此情况,可使用 High Availability Extension 指定以下参数:4 F' o3 @% b- r, q6 x' ?8 K' w
* ~* D9 m* c! M$ |9 o" _ h4 ^% A( \, K* h特定节点提供的容量。
1 R$ E( A% o: d1 L5 j
8 j( }. P) R' \. P2 m2 i! k+ P. F特定资源需要的容量。
0 D" Q1 [) [0 {) l. H. T X! V/ F4 [6 k D& W( @
资源放置整体策略。
; p9 Q% H2 i% b
9 @6 r3 h4 k. ~8 C! c1 }! i- N有关参数的详细背景信息和配置示例,请参见第 6.5.6 节 “根据资源负载影响放置资源”。
6 G9 J+ y* N8 e$ {6 ^2 S% ^
4 z7 } `/ L6 {. i要配置资源要求和节点提供的容量,请使用利用率属性。可根据个人喜好命名利用率属性,并根据配置需要定义多个名称/值对。在某些情况下,某些代理(例如 VirtualDomain)将自行更新利用率。
8 O8 p1 f5 A% r' _# R8 D. g: r
. c/ j" I6 T3 [/ L* @6 ]在下例中,我们假定您已有群集节点和资源的基本配置,现在想要配置特定节点提供的容量以及特定资源需要的容量。3 l% U0 B# c& d1 i0 m; ?. J4 |
; y y. F* d6 l% m4 y4 ]5 {- Y
过程 8.1︰ 使用 crm 添加或修改利用率属性 #
; S5 [8 [. m9 h w; @& ?' u以 root 用户身份登录,然后启动 crm 交互式外壳:
4 Y* \" C+ b! T c7 N" Q, [
5 h* Y) N# @ P; y& ]% Jcrm configure5 G3 ^! O& S. @- [' v c
COPY
8 F$ f( p8 b- ~# ]要指定节点提供的容量,请使用以下命令并将占位符 NODE_1 替换为节点名称:
7 i' W( [# G5 j' s! D. t% G h. [2 ]! g' @; o( X% G& p
node NODE_1 utilization memory=16384 cpu=8+ w5 { w/ F1 P3 G$ {: G
COPY
2 y' i& _ T5 z! q上例中的这些值将假定 NODE_1 向资源提供 16 GB 内存和 8 个 CPU 核心。) w3 E. F9 ?+ K( L
/ |0 k$ q4 x8 w* ~要指定资源需要的容量,请使用:
, ^ j- R. O5 P, y. k
. L, I, I; k9 h$ H! c3 iprimitive xen1 ocf:heartbeat:Xen ... \
* ?3 ]& y. D0 ^0 n u8 ^- R' T3 b6 x3 | utilization memory=4096 cpu=4
6 ^8 D- S/ e0 P6 T" kCOPY& f2 `: t# @5 x C+ S2 p( W# s$ G$ r
这会使资源消耗 NODE_1 的 4096 个内存单元以及 4 个 CPU 单元。
: ], ?1 ?7 k6 u
x- `3 C* H) ] _2 z+ ^使用 property 命令配置放置策略:
' P4 Y4 z* U' [$ q! ?( n8 I' p
9 a3 S* ]3 Y: g- G: c4 m( I/ Q3 Lproperty ...
! B# d& U- i1 Z2 l! q7 DCOPY
9 M" [( o/ u0 H& m可用值如下:
% L( w* }% ]* t6 P1 m7 c4 e3 |0 f0 C( _) W1 [7 B# T* Q
default(默认值)
" l7 k! p. y- K不考虑利用率值。根据位置得分分配资源。如果分数相等,资源将均匀分布在节点中。
: K; m# R& D9 O& e- G9 C' o6 O# j& q3 K$ U8 X
utilization! @4 O m9 Z1 b! i0 S6 c ~
在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。但仍会根据分配给节点的资源数执行负载平衡。4 D- {- I$ a* x* L* e! o! i
% B6 u. ?8 o! {2 [8 d- o
minimal% Q" [4 F( C9 m! |. V+ w" O; J
在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。尝试将资源集中到尽可能少的节点上(以节省其余节点上的能耗)。) y* w% V; G6 w
: q3 K# @5 k, G8 ^! rbalanced/ B, ]7 b( B* R6 v& b' n2 X7 _
在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。尝试均匀分布资源,从而优化资源性能。
$ C! ^/ P. E9 Y9 j# b( L5 h
, }0 Y m' _% G8 M: ^注意注意:配置资源优先级- Q9 L) \& k# i" Y% \0 G- I9 K
可用的放置策略是最佳方法 - 它们不使用复杂的启发式解析程序即可始终实现最佳分配结果。确保正确设置资源优先级,以便首选调度最重要的资源。
+ T1 M4 d4 b C5 [" Z
$ v& f2 s0 W: O1 l$ ]退出 crmsh 之前提交更改:! M8 J3 e& {: U
* N0 `4 x8 g: q% Y- s7 y7 Xcommit
+ k& J; ]3 W; _/ F# W' T1 R- nCOPY
6 Z0 q6 [8 q4 S. {+ s; o以下示例演示了配有四台虚拟机、节点数相等的三节点群集:$ R3 Z& V; e/ B1 r& c! K0 d% W
0 Q. _& i$ D- {( k6 f
node alice utilization memory="4000"% R- Y/ @( Q z
node bob utilization memory="4000"* x( P6 J' d2 ], r
node charlie utilization memory="4000"2 ~; \1 F% T- E4 ~
primitive xenA ocf:heartbeat:Xen \) x3 ^6 M3 [6 s2 g5 X& B: y
utilization hv_memory="3500" meta priority="10" \
' z" C0 x3 ] A params xmfile="/etc/xen/shared-vm/vm1"- P$ U6 g8 O7 O( R1 A
primitive xenB ocf:heartbeat:Xen \# Z4 x4 d, F1 p5 O
utilization hv_memory="2000" meta priority="1" \, E# h2 K8 L0 }4 b0 s! R" i: D- t! p
params xmfile="/etc/xen/shared-vm/vm2"
6 d/ X/ P( @0 I+ \0 n" T }0 cprimitive xenC ocf:heartbeat:Xen \$ N- G5 C0 R! k
utilization hv_memory="2000" meta priority="1" \
3 v+ b6 t- u* G& w, { params xmfile="/etc/xen/shared-vm/vm3"5 C3 }7 r( m1 ?9 J4 ]
primitive xenD ocf:heartbeat:Xen \
* \! |9 Y$ _) j( M6 V" Y t* ` utilization hv_memory="1000" meta priority="5" \
+ d. V0 c$ T! ?+ Z: O params xmfile="/etc/xen/shared-vm/vm4"8 B& J' j, G' ]8 H& h8 a7 V
property placement-strategy="minimal"
2 u8 P3 R+ h, a( d: f5 yCOPY8 C' c3 b2 E8 [/ Z
如果三个节点都处于正常状态,那么 xenA 将首先放置到一个节点上,然后是 xenD。xenB 和 xenC 将分配在一起或者其中一个与 xenD 分配在一起。
" i' q$ X: o9 A8 k b1 R( R6 s' ^( A
3 p7 o% p! E/ ]2 q. n! R如果一个节点出现故障,可用的总内存将不足以托管所有资源。将确保分配 xenA,xenD 也同样如此。但是,只能再分配 xenB 和 xenC 中的一个,由于它们的优先级相同,结果不确定。要解决这种不确定性,需要为其中一个资源设置更高的优先级。# u. ~2 H5 t7 k0 F0 u% x8 R9 i
6 p6 R& s1 i j) u; i( e% u
8.3.9 配置资源监视 #
7 ^' z1 A9 o- m [# i; W要监视资源,有两种可能性:使用 op 关键字或 monitor 命令定义监视操作。以下示例使用 op 关键字配置 Apache 资源并且每 60 分钟监视一次:& a7 I: {* u8 G8 O& G9 }
' \& @# e3 H# Q b; c
primitive apache apache \
, D; h6 V- O0 r2 u. G& f) `- ~- E4 o params ... \- [! K' z5 ?, i3 B
op monitor interval=60s timeout=30s
: ^. P O( f0 P1 y( A5 JCOPY
/ p3 y6 \) ]% _% L同样也可以使用以下方式来实现:
. R- _1 \ H% k$ f* G4 k" Q1 }
3 O! o; N) J' a$ x3 O( \& Sprimitive apache apache \
! W: w' G2 ]- W) [ params ..." p1 @# d4 M8 B6 E
monitor apache 60s:30s; P0 [* K# t7 u9 H' G7 U4 G+ W
COPY6 y d6 s$ f+ w1 i* g
有关概述,请参见第 6.4 节 “资源监视”。$ R; u x2 @, m2 c
9 r" X1 g& g4 R: k1 l+ r3 J8.3.10 配置群集资源组 #
+ T! }" p! q- H; S( ^群集的一个最常见元素是需要放置在一起的一组资源。按顺序启动,并按相反顺序停止。为了简化此配置,我们支持组的概念。以下示例创建了两个原始资源(一个 IP 地址和一个电子邮件资源):
/ b, D+ A+ F0 v! Y) D. T
# h3 Q w9 l% z5 R& X: M以系统管理员的身份运行 crm 命令。提示符更改为 crm(live)。
- Z) @# [6 e8 y `! s
/ h# Y- j# x1 p/ P \配置这两个原始资源:
q* F, A# h/ [' [; t) L
; p z$ D O9 j. Dconfigure; {5 d9 G( n$ g) f+ I
primitive Public-IP ocf:heartbeat:IPaddr \$ {+ w! Z5 J8 d
params ip=1.2.3.4 id= Public-IP
; D6 {8 i5 ~$ G" {: [5 p/ u, p3 D7 kprimitive Email systemd:postfix \
3 N4 {; y6 h" Y8 s% Z; W params id=Email
0 \. L: x5 ?5 BCOPY3 [! Q) n% `& P D+ n# c2 \
以正确顺序按其相关标识符对原始资源进行分组:! {9 W* p2 f. N9 w- h! w
$ x q# Z* _+ T! H7 {: k" a; ]8 r0 p5 zgroup g-mailsvc Public-IP Email) Z- I( n$ O: C5 L' s3 d
COPY* @) J8 c9 p' N- C
要更改组成员的顺序,请使用 configure 子命令中的 modgroup 命令。使用以下命令可将原来的 Email 移到 Public-IP 前面。(只供展示功能之用):
3 _" i" Z9 v2 U( N1 a3 V- Q0 r, a2 A2 l5 q4 j. A3 ]
modgroup g-mailsvc add Email before Public-IP2 s6 Q2 P" n5 j# V) W& i' U% z
COPY
* c. x; x, U3 @- M! V9 y9 c如果您要从某个组去除资源(例如 Email),则使用以下命令:
' Q8 |6 j2 V' J" ]9 |
% q& b! M) D2 m& [' ^+ A/ } mmodgroup g-mailsvc remove Email
9 p& b" ]/ }1 L. q! KCOPY
' n7 }% E- `3 t+ y$ y有关概述,请参见第 6.3.5.1 节 “组”。% S0 {8 d& p, l* [
. u+ _# M. J$ L8.3.11 配置克隆资源 #
( a( P! e0 t, }: O最初将克隆构想成便于启动一个 IP 地址的 N 个实例并使它们分布在群集各处以保持负载平衡的一种方法。事实证明,它们可用于多种用途,包括与 DLM 集成、屏蔽子系统和 OCFS2。您可以克隆资源代理支持的任何资源。" H9 r0 E" A. z P( S( p. _
: d7 U e: G7 j2 D$ _/ Q要了解有关克隆资源的更多信息,请参见第 6.3.5.2 节 “克隆资源”。
! }! L- \: U8 w" P
* F8 t3 H$ e; O. P8.3.11.1 创建匿名克隆资源 #/ B5 g) h5 M, i; T4 H- j/ H
要创建匿名克隆资源,首先要创建一个原始资源,然后使用 clone 命令来引用它。执行下列操作: U. @( S- N9 ~" v
: e) C# H4 h& G$ [
以 root 用户身份登录,然后启动 crm 交互式外壳:. {. \: m7 g: J: |* Y
! A: B6 ~- ~* p- q. z$ |" Bcrm configure1 c: Q" m& Q3 J6 Z, Q9 c; I+ |% t* z
COPY' d$ E' l& g' |1 I9 u: W) Y
配置原始资源,例如:2 H# m& R6 Q4 j
1 ?! D9 h% t% e! ?
primitive Apache ocf:heartbeat:apache- c; P6 N' Y6 ~9 W" @' d
COPY$ [: ]6 k+ }8 u2 {/ L9 f
克隆原始资源:+ w2 y6 a: S) `) F' {9 y1 u
! W9 D1 l0 U/ v$ d7 i. H4 Bclone cl-apache Apache5 \4 r3 `+ x# S# @) G5 f4 E, c
COPY
* g3 X* F' H6 e8.3.11.2 创建可升级克隆资源 #/ y( {! i1 E- e2 W
可升级克隆资源(以前称为多状态资源)是一种特殊的克隆。此类型允许实例处于两种运行模式中的其中一种,可以是主动/被动、主要/次要或主/从模式。" Z5 a, H( t9 s: y
" l; o7 v2 O& a! v$ m" R
要创建可升级克隆资源,首先要创建一个原始资源,然后再创建可升级克隆资源。可升级克隆资源必须至少支持升级和降级操作。9 R& H1 H9 v: t8 G+ f5 k
0 z& R9 E7 ?" ^7 O! i以 root 用户身份登录,然后启动 crm 交互式外壳:* F8 v' X; O; T4 t; j
, K7 l* [# l4 B' Q* l' }- Q7 d# D7 G" O
crm configure
+ z/ B( s' a7 C! q2 WCOPY
6 Y: q6 h" B8 ^0 s) P5 R' K配置原始资源。必要时更改时间间隔:& U" T7 e& q( e, y
' G0 t$ h% {1 f
primitive my-rsc ocf:myCorp:myAppl \
9 J+ z: w7 p( r- ]( g' R+ v op monitor interval=60 \5 ~8 a. k: N. `0 k/ y
op monitor interval=61 role=Master Q5 E7 |6 `. L$ S& I3 _8 p
COPY
# W% q7 p3 R U创建可升级克隆资源:
9 C5 f1 Q! A" {8 G+ L
, f d, H2 S6 z6 Wms ms-rsc my-rsc
+ T X7 m5 g, c5 A, ?COPY' @7 U" h! \$ }/ J/ E
8.4 管理群集资源 #2 L7 c% N2 ~( h1 ^) @! N
除可用于配置群集资源外,crm 工具还可用于管理现有资源。以下小节进行了概述。
% ?! S7 E- ^! E$ l k" s; f9 y' }' [% P, x0 k% A5 [
8.4.1 显示群集资源 #
$ E! F& T3 f! o: [* }当管理群集时,crm configure show 命令会列出诸如群集配置、全局选项、原始资源及其他的当前 CIB 对象:7 g) G5 R- a: [! `% p4 r( A0 ^
/ y, l8 k1 C7 J3 {crm configure show
* G, S# T. s/ W- O; }1 o. s+ `+ H. Znode 178326192: alice
4 `/ |- f1 q E# Q' enode 178326448: bob
8 r. A, n! `4 |8 rprimitive admin_addr IPaddr2 \
0 z; u: g2 t$ X* S+ ?8 l; _ params ip=192.168.2.1 \ q. B0 j5 J. Q+ o, U9 D0 T
op monitor interval=10 timeout=20
$ z. X0 m3 x* Q+ k7 Z# R# n6 w9 ^primitive stonith-sbd stonith:external/sbd \$ ]# x0 X- @7 N) q8 m1 f/ C1 h
params pcmk_delay_max=30
h) z- R, d0 l9 lproperty cib-bootstrap-options: \/ M- ^3 E; c7 e7 g9 i% Q" {
have-watchdog=true \( z2 s: ]5 i/ ^ ^% o; d
dc-version=1.1.15-17.1-e174ec8 \
; k% m! b9 l, Z cluster-infrastructure=corosync \
. p* P$ E* C! t) y. k cluster-name=hacluster \9 m% h1 d u6 H+ w! d8 k) }- r
stonith-enabled=true \
# P& `% d6 K0 q/ j9 b. u' y- o placement-strategy=balanced \
9 Q* S, O G2 ~, V5 I( H standby-mode=true0 S) W2 P. N2 T/ X6 d! E
rsc_defaults rsc-options: \
, O8 [9 M0 B4 R3 T- K5 d& t resource-stickiness=1 \/ }% _( z; G& d3 b' d
migration-threshold=3
5 T- o! w% ~! U8 o: W) rop_defaults op-options: \" P8 @ w- L! Q: ]9 i+ L! u7 ^- ~
timeout=600 \8 U, G4 m/ ~; C7 {* h0 X# @
record-pending=true _2 M6 J3 u, W2 U+ O
COPY' [$ f# l7 k9 {# Z
如果您有许多资源,show 的输出会十分冗长。为限制输出,请使用资源名称。例如,如果只想列出原始资源 admin_addr 的属性,请将资源名称追加到 show 后:
! ~8 V8 j; r. W5 d u( g. d! Y; }, R. [) s
crm configure show admin_addr
V3 @2 R5 A$ m# i# K% Bprimitive admin_addr IPaddr2 \- P5 N; p$ }6 h/ H/ g
params ip=192.168.2.1 \
3 n1 C+ z, s! c op monitor interval=10 timeout=20
. W; p$ i1 E9 vCOPY
. v- K' r7 a6 V1 Y但在某些情况下,您可能希望更精确地限制特定资源的输出。那么,您可以使用过滤器。过滤器可将输出限定到特定组件。例如,要想仅列出节点,可使用 type:node:
% r: S6 o+ C9 x! C, G
! h; V/ @. C0 Z1 T9 E ^crm configure show type:node4 U+ G, u0 k" [0 Y, J( L0 W
node 178326192: alice% N: R+ D8 D- s' a0 E) @% F
node 178326448: bob9 |: G9 F" F/ O1 Y# A/ T( p/ S
COPY
9 Q: N0 C' G: X- I g) K9 ?% t0 r如果您还对原始资源感兴趣,请使用 or 运算符:
; J% U* d" z+ E/ f o/ r0 ]6 r1 s( A9 h1 c
crm configure show type:node or type:primitive8 z K6 y! r# y
node 178326192: alice
& C3 W9 t; C6 g# |9 _0 n8 J+ C" o% Fnode 178326448: bob" E# C8 `" B7 F B. W
primitive admin_addr IPaddr2 \
7 i+ G: ~2 m5 G4 _, n* x3 F' v! w+ w params ip=192.168.2.1 \) g5 ?9 i7 ~/ Q9 y
op monitor interval=10 timeout=20
+ a% Q5 \0 c, Hprimitive stonith-sbd stonith:external/sbd \
3 _( O1 s" O6 j4 U params pcmk_delay_max=30; |9 q. f/ S m* o
COPY* b6 v, ~+ d1 w' {6 F5 S( z5 T
此外,要搜索以特定字符串开头的对象,请使用以下表示法:6 s2 J' F( U! s' J- n) a. i( r
) W7 w) P3 J) X# L& C
crm configure show type:primitive and and 'admin*'
& G3 l4 J: m1 m. u b3 O5 x" @primitive admin_addr IPaddr2 \
3 ?# E) M0 m: i& K) R6 P8 S% \ params ip=192.168.2.1 \
. G' u: A" |" K7 C op monitor interval=10 timeout=20, X% A1 e% N( d. n; ]
COPY# ^; a+ y' ~8 r7 r- j
要列出所有可用类型,请输入 crm configure show type: 并按 →| 键。Bash 补全会为您提供所有类型的列表。 u" [' V9 l7 C' N: ]3 x- c- c t1 i
: l! w8 E+ c- J, T* Z8.4.2 启动新的群集资源 #
, r N- ^. _) r( s9 C- @" s要启动新的群集资源,您需要相应的标识符。按如下所示继续:$ }8 A% f6 c, W9 |2 O( O
3 e1 C& F x% t V
以 root 用户身份登录,然后启动 crm 交互式外壳:
# y) n9 z! ^ b$ _. [
+ Y1 s" D0 ?& B8 ]# u1 _crm9 _, M: U* [( P6 O4 w. m% [
COPY- Q1 E- u1 @0 {% x4 y. }
切换到资源级别:
% G+ o: N2 P+ c1 P: f$ |! o+ P
. X6 P A/ ~' E0 \ t1 Qresource4 m) X* ^: }4 e( c2 l5 n
COPY' s1 ~( }# h3 i; o7 P
使用 start 启动资源,然后按 →| 键显示所有已知资源:
# p8 `: z3 S4 D0 ?
V% Z: D! Y0 rstart ID
" d- {" P; H0 X2 sCOPY
( z, {* v4 C% w7 a( T8.4.3 清理资源 #
4 @) G- n% c: E如果资源失败,它会自动重启动,但每次失败都会增加资源的失败计数。如果为资源设置了 migration-threshold,当故障计数达到该迁移阈值时,将不再允许节点运行该资源。
5 s$ r3 B$ f5 M" S
5 }3 r8 Z+ L! y* _ }# _打开外壳并以 root 用户身份登录。
; O5 ?& N7 _7 _6 p# _ K
% A' H# n- a4 z9 t1 p获取所有资源的列表。& o- o7 S f) Z, G) Y; f' |3 o* e+ R: D
6 U# J+ b# O7 W5 z+ B* ?+ ucrm resource list
+ ^3 M1 p$ G6 @( f+ g+ W; g ...4 P7 [8 B$ `1 [: d. g, f
Resource Group: dlm-clvm:1! g' w: B1 ?6 F4 c( ?8 d
dlm:1 (ocf:pacemaker:controld) Started
9 d! Q9 A) v: A- y clvm:1 (ocf:heartbeat:clvm) Started
2 t0 D8 a3 u" K3 \COPY1 Z: z% f* H! \6 O$ j8 n! h, q. C P
例如,要清理资源 dlm,请执行以下操作:, C, x; B& g0 M1 p
M9 y5 V9 l B( Y
crm resource cleanup dlm
3 ~: K$ i9 r- K6 i7 yCOPY( n( y1 x, }7 ?7 X5 M
8.4.4 删除群集资源 #. w+ y( o$ ]: K2 F
请按如下操作以删除群集资源:; Q. d, I+ L% r& E+ x5 n) }0 Y
, i- ^9 H) w r
以 root 用户身份登录,然后启动 crm 交互式外壳:' v/ a0 f* m# ~& Q( L' A% H0 {
: o: d* C0 F1 u
crm configure
. V+ ~' x; S- }1 y# p" a5 vCOPY: u, T+ [9 `0 ^8 y0 E$ {
运行以下命令来获取您的资源列表:" A6 m6 k* i5 T! T
2 ^ h' `& r+ m: W* N
resource status: m2 M9 R2 H. x+ a% j# Z
COPY
" X& f4 K! i* W% U6 g% @1 {例如,输出可能类似于以下内容(其中 myIP 是资源的相关标识符):
# k) B" a# Z& @" x" Q8 O c- J, @
3 ?7 ~# b8 j. x+ d% DmyIP (ocf:IPaddr:heartbeat) ...
& g, f1 R L; k1 k/ ^COPY% A. E N1 P \5 B% R+ l& c
删除具有相关标识符的资源(也暗指 commit):
2 Z# Z+ H: a7 n9 Z5 G2 Q, D3 `6 S$ I2 z" Q7 h
configure delete YOUR_ID
9 y* H. J, _' @! {. [' o+ |COPY& B0 r+ O8 @0 c( w% z2 P
提交更改:
2 k! V3 [! Q: l" k" o/ U- f/ e& ]
configure commit0 G3 R$ |" i @0 m
COPY
) C6 X; Q# @( m8.4.5 迁移群集资源 #0 \% Y+ v! b% s; B1 \& Z
虽然资源已配置为在发生硬件或软件故障时自动故障转移(或迁移)到群集的其他节点,但您也可以使用 Hawk2 或命令行将资源手动迁移到其他节点。
+ j0 G' V0 Q* W
3 h2 j2 R6 E. G# _! \7 Q8 o8 k对此任务使用 migrate 命令。例如,要将 ipaddress1 资源迁移到名为 bob 的群集节点,请使用以下命令:
, ^/ S5 a: `) [, }# J5 G) g0 o P( m0 }8 D% k
crm resource
; \) Q0 Q+ f! ]migrate ipaddress1 bob
5 s- k( `; k+ v0 x% f; B) }' MCOPY
: z+ C# g8 X( F* E/ i4 p# H6 ?8.4.6 分组/标记资源 #
8 s1 Q& d) \9 G) I5 H使用标记可以一次性引用多个资源,而无需在这些资源之间创建任何共置或顺序关系。此功能十分适用于对概念上相关的资源进行分组。例如,如果有多个资源与某个数据库相关,您可以创建一个名为 databases 的标记,并将与该数据库相关的所有资源都添加到此标记:& A4 G6 O6 u Q2 ^
" h+ g1 }7 `! \
crm configure tag databases: db1 db2 db31 C% l8 t7 `+ p! y2 z" T9 |% y
COPY# H! E) u6 k6 u! J! n+ b
这样,只需使用一条命令就能启动所有这些资源:' n% V; t3 W. Z9 e+ q3 w2 D- Q6 h
- }' I# w2 T; t. o
crm resource start databases% B5 \" w2 U1 `) U
COPY
. K; q6 i6 D5 ^2 L1 y* ^同样,也可以一次性停止所有这些资源:( Z5 e) R, J3 x% Q% L |8 ?
. B6 N7 M, `" v3 B
crm resource stop databases
6 r; n. V3 ^- P+ e# t% l6 t0 ^3 kCOPY
! U; D* P2 Z0 i8 j& l0 R# `: U+ X8.4.7 获取运行状态 ## c7 ~& d7 j) l Z4 Z. V
可以使用所谓的脚本来显示群集或节点的“运行”状态。脚本可以执行不同的任务,并不局限于显示运行状态。不过,本节重点介绍如何获取运行状态。" M1 O0 Y" g% p, E( `6 A/ \
6 v! h' Q! M9 p要获取有关 health 命令的所有细节,请使用 describe:
4 x1 A$ C9 _% y1 o; H7 {6 S& j$ ^1 s$ @8 |9 u7 o ~, ]# H
crm script describe health
) U7 i, u5 K" Y V2 wCOPY" b! A' Z) `- |% C+ W- V, t* N
该命令将显示所有参数及其默认值的说明和列表。要执行脚本,请使用 run:" A" c2 g) Z8 B' J
9 ?+ J! F& h# l) C
crm script run health
: E5 i& D8 ~! W1 SCOPY# r: _$ h0 n) ?: W2 ?3 |5 U$ h
如果您希望只运行整套命令中的一个步骤,可以使用 describe 命令列出步骤类别中的所有可用步骤。
+ r2 c7 C5 t2 p
; I( n4 y1 t, Y) j例如,以下命令将执行 health 命令的第一个步骤。将在 health.json 文件中储存输出以供做进一步调查:
: l5 H ]+ E! ^ W U. N! ]8 `$ E( `' c% h& p. a
crm script run health
; o4 R3 ]2 K( a statefile='health.json'2 ]# b; |- g2 s2 m6 b
COPY
7 |3 H1 o. ]0 I, X Y8 C您也可以使用 crm cluster health 运行以上命令。
! a) \) r# J; T! C
' {5 F- `/ t" {; Z有关脚本的更多信息,请参见 http://crmsh.github.io/scripts/。
8 x3 ?7 ]) ?) g" u
: g3 {5 d( V: P8 V2 ~ l0 x8.5 设置独立于 cib.xml 的密码 #
% O! [& ~' M- ~- S) K$ B# o如果群集配置包含密码之类的敏感信息,应将其储存在本地文件中。这样的话,这些参数将永远不会记录到或导入支持报告中。
T( Z" H# P0 W6 I0 h; P" \. m, c$ J' f% V/ ?5 v# q+ `
使用 secret 前,最好先运行 show 命令了解一下所有资源的概况:* t( X' {1 u$ o
" L: P* F9 @1 N
crm configure show
: U( b; V; P2 @! t: x6 I# J1 _8 pprimitive mydb ocf:heartbeat:mysql \
0 R% T' J* R T9 s# B params replication_user=admin ...
) B, d! V, j: C/ C ACOPY# L* Q3 g/ L5 N6 `
要为上面的 mydb 资源设置口令,请使用以下命令:
# _" B, ?) x7 O9 e+ ?9 G& h. \! {5 Q
crm resource secret mydb set passwd linux* D7 |9 ~& k: h( }- C( z
INFO: syncing /var/lib/heartbeat/lrm/secrets/mydb/passwd to [your node list]1 J3 ]1 G) T* m: J
COPY
& E: q( @7 W0 T5 n9 R i) R! D使用以下命令可以取回保存的密码:
0 c3 R% e$ d% \ i
. W5 ~; ]! x9 O% B- Ucrm resource secret mydb show passwd
$ S4 B% A% k* Wlinux
9 {8 h; J3 j6 \8 U5 m# u4 \COPY
. T* N' p! y1 U: I请注意,节点之间需要同步参数,使用 crm resource secret 命令可以帮助您处理好同步问题。强烈建议仅使用此命令管理机密参数。
6 Z; r6 l: G* [$ C' _) r$ R" [; y, R4 _7 ]& P. Z
8.6 检索历史记录信息 #% c" J6 Y# t0 ~- B. T- k) I
调查群集的历史记录是一项复杂的任务。为简化此任务,crmsh 包含了 history 命令及其子命令。假定已正确配置 SSH。
" A& A" N- Z, C, _
7 B: C& L1 W% ?+ H( d* W每个群集都会移动状态、迁移资源或启动重要进程。这些操作均可通过 history 子命令进行检索。
5 O% x! R3 T+ k; _' X4 b
6 U" k5 `; x: o3 T默认情况下,所有 history 命令会查看最近一小时的事件。要更改此时间段,请使用 limit 子命令。语法为:5 k6 p9 T0 g8 t# u
8 w2 x- i7 f/ y R9 k5 U2 l- ecrm history0 W1 [1 f5 N W
limit FROM_TIME [TO_TIME]
) z, P- s; d- z+ @5 qCOPY! o, P8 H/ A3 x$ `% T
有效示例如下所示:
4 u& f) ^# _; P$ Z& ~& K3 S
: I3 H+ d3 U0 e$ ?4 olimit4:00pm , limit16:00
5 x9 C+ |* X, L9 f# H! Y上述两个命令表达同一个意思:今天下午 4 点。# {2 R t( F# \- X1 r! |
6 ^& l- ^! t( ~) D! j( ]limit2012/01/12 6pm
& H+ x9 V+ \! q+ H2012 年 1 月 12 日下午 6 点
( c: h. J: w+ `& t4 k4 H
6 X: h. j" J. R! E1 flimit"Sun 5 20:46"
/ w$ c0 R* t, f# Z4 J6 y; V( C9 T4 |当年当月 5 日(星期日)晚上 8:46
( u. x/ u" r6 c/ \: z5 j/ p
% `. ?) T1 Q7 ~ _& b要查找更多示例以及如何创建时间段的信息,请访问 http://labix.org/python-dateutil。
5 v! A! W4 b8 z, x2 t, o6 t& q) l; i8 Q. [* j/ \' U& M
info 子命令显示 crm report 涵盖的所有参数:+ s* o k- l0 {3 `9 J. |' N( s
" T3 ^ F# }4 D7 R
info: f$ [, \/ w1 t. j3 U- m! o1 r
Source: live
( ]: s/ V0 @9 a) N5 MPeriod: 2012-01-12 14:10:56 - end' q0 O6 n. ]9 F7 a' s
Nodes: alice
0 N3 A5 f, e4 H; WGroups: 7 N& T6 K) @; ~' I4 \
Resources: [; f" L9 D* h5 e; F1 j" B
COPY9 U) f1 P a1 }8 }5 F6 ^
要将 crm report 限制为使用特定参数,请使用 help 子命令查看可用的选项。
5 _4 u' O' E# N4 c9 n( N3 X/ i6 E' g" @7 L8 F# _0 [) a
要降低细节级别,请使用 detail 子命令及级别:
/ p- j# s' V g/ E) ]: z: ~# c+ N2 p
detail 1
' f. c; P: P1 k8 h' x* CCOPY
, @& } j4 I3 R: [5 p* B5 u7 V级别数字越高,报告就越详细。默认值为 0(零)。$ q1 e* h* L9 L& o5 E9 l5 i( N
% F( p: I- I' Y! m% ` R
设置上述参数后,使用 log 显示日志消息。
7 m5 F$ e. y; P+ d& h, U3 q+ h/ }2 o" O p1 j. W
要显示上次转换操作,请使用以下命令:2 ^6 W' H, d' t% D) [9 T
5 Y7 J4 w8 V4 `- W2 |2 itransition -1
+ N: n# T; z( k$ v' o6 cINFO: fetching new logs, please wait ...
3 T+ |2 P( ~* x0 O' nCOPY$ U/ f; K* }# @; z# ]
此命令会提取日志并运行 dotty(从 graphviz 包)以显示转换图。外壳会打开日志文件,您在其中可以使用 ↓ 和 ↑ 光标键浏览内容。
5 B( |+ j8 q9 y* d9 p( E' x/ a$ G9 T9 V* x0 t
如果希望不要打开转换图,请使用 nograph 选项:
' P# E) ~3 O3 z( @ i& Z8 U6 h( D. k; i! }- P; N- C2 N1 Y
transition -1 nograph
6 M) B; ?! O4 i5 k+ z. T& L8 p7 g7 r9 F. g# }- B! D2 b9 K0 ?# T
|
|