|
|
|
临时调整osd full的阈值,然后删除不需要的rbd磁盘 ceph tell osd.* injectargs '--mon-osd-full-ratio 0.98'
, A8 \" e- `3 P& ^ B& L ^$ F7 W) P5 L" L7 K
调整每个osd的weigh值,使数据重新分布# ceph osd crush reweight osd.10 1.05 ( F" Z1 \8 t# t. R; N; o+ K+ V
& y. q# ]) ^/ @
5 @- v" @* W m1 X6 D1 T0 @
reweighted item id 10 name 'osd.10' to 1.05 in crush map
* j$ x' x+ ?+ [" u1 ^
# K; U, o, T: G" ] t# z5 z/ E r( u% @* v0 S* y
osd缺省的weight值为1,调整以后数据会向weigh值高的osd上重新分布,把一些比较空闲的osd weight值调高,接收数据,使用率高的osd weight调低,释放数据
( q$ U& L$ W# n* Y9 }5 G. n* T
5 [( i' ~! P1 p2 J9 u. V
7 ?3 |* h3 }, t( Q# q8 oceph中各osd的pg数量是近似均匀的,可以认为各pg下的数据容量大致相等,因此从原理上来说保证各osd pg相等,则各osd上的磁盘使用量也差不多相同,但是由于算法做不到绝对均匀的原因某些osd上的pg数会相差比较大,这样某些osd上的空间使用量就会比较多。建议是ceph部署完成,各pool也创建完成后,主动手工观察,通过命令调整osd的权重来调整osd上的pg数;1 G- _; l2 d* M/ U+ m4 l P
( L8 ]+ I# I f: J- Y
统计各osd上所有pg数:! f" [$ E2 v/ _ P" u
ceph pg dump | awk '% ~4 c; G( k; e8 i5 ^/ P& t
/^pg_stat/ { col=1; while($col!="up") {col++}; col++ }
& P5 F- }2 o1 X3 S /^[0-9a-f]+\.[0-9a-f]+/ { match($0,/^[0-9a-f]+/); pool=substr($0, RSTART, RLENGTH); poollist[pool]=0;
+ s; `! ~ b$ P6 @7 ?/ M up=$col; i=0; RSTART=0; RLENGTH=0; delete osds; while(match(up,/[0-9]+/)>0) { osds[++i]=substr(up,RSTART,RLENGTH); up = substr(up, RSTART+RLENGTH) }
: _! |6 D! b$ C( l7 p& t for(i in osds) {array[osds,pool]++; osdlist[osds];}$ t; J) s& _6 R5 I
}
4 J; s B2 r& `+ Q; m/ pEND {
* u6 Y3 [/ O* w4 _9 m- j printf("\n");
" S7 V8 T! C3 m: @9 @ }* G1 l printf("pool :\t"); for (i in poollist) printf("%s\t",i); printf("| SUM \n");+ v- i& o! ^3 ?. N5 i4 t2 k3 u
for (i in poollist) printf("--------"); printf("----------------\n");* Z8 l5 f/ ]: {. u. _2 |* q
for (i in osdlist) { printf("osd.%i\t", i); sum=0;
# {( `) C ^1 n3 u% Y9 [ for (j in poollist) { printf("%i\t", array[i,j]); sum+=array[i,j]; poollist[j]+=array[i,j] }; printf("| %i\n",sum) }. T1 R' {! U8 o- z' M
for (i in poollist) printf("--------"); printf("----------------\n");
# }! E2 a2 B* g) \3 W! p& X6 [' A printf("SUM :\t"); for (i in poollist) printf("%s\t",poollist); printf("|\n");
% Q& L9 [& p8 m6 ^; B}') c3 }9 G* G* T3 W: k- B
$ Y2 ]: A. i6 R: T. a% ~9 Z
0 O; H( b. F* W6 y/ j# {0 }1 K/ W) }
上面这个是获取各osd所有pool的pg数,其实我们只关注default.rgw.buckets.data这个pool,其他pool数据很少,我们通过ceph df知道default.rgw.buckets.data的pool id是23,通过一个更简单命令得到23号pool在各osd上的pg数排序: z- \( M- S5 H) a2 O6 B
( t/ T9 q2 G/ p+ f7 m3 @ceph pg dump|grep '^23\.'|awk -F ' ' '{print $1, $15}'|awk -F "[ ]|[[]|[,]|[]]" '{print $3, $4}'|tr -s ' ' '\n'|sort|uniq -c|sort -n
( ?% J* T, L6 ?( Z! E) R6 J( g- y, P2 Q( M
输出如下:! A n" V" e/ O$ g. S" }9 _0 |
9 b: F2 P. I' r* `
95 1 S. N0 V& P7 z( N& X9 U
95 312
1 d+ S" e# f {$ | 96 252
1 z6 E6 L& \% }2 V# b 99 1774 M' [5 l' m c! Y* Z
99 265
8 V7 M9 j; [9 P* V! r6 U 99 62
9 M6 e& d. N7 i! l6 l# [) p- R- K 101 121
0 ~8 @" B. W& z+ t, E 101 261, _$ V' _- Z( J$ i5 A2 P
2 z) o: I+ h$ D# }......
# u, u0 e: w8 n- S% C8 I) f8 m! n3 F7 x0 w1 P
132 102
1 G _" U$ H" G9 o) s 132 105" Z, m; w- O3 P! {) i9 S
132 179 F+ ^$ ~4 \( S$ o4 I$ N9 {
132 253
. ]! ?8 m+ @5 E7 M% r$ c6 k9 E; k( K 132 256( ~! y8 ?5 m7 e4 @/ i, R& m
133 1111 A4 I4 a6 ?/ c5 ~8 v7 v
133 115/ a$ `" E, z2 w7 r% w* {8 Y- x- \
133 151# n/ W4 o' I8 W0 ~; ?* p6 j- ]( Q
133 203
+ l2 x: N: m4 l8 Z* D3 g. o) T- u 133 259. ]( G; {, f& W1 R
133 271( S3 a4 P: m3 v: w- w
133 292" t1 U% W! Y& d: _' R1 O
134 257
) I4 P6 [. O" y' r3 K) J; [ 134 3021 D/ A) A4 y8 \
134 61
, r1 h3 i8 t6 k1 n6 m6 u' U# L 135 220, Z/ z( t+ D3 p, h7 |
$ Y' I" q0 C. m3 u$ }& z$ o. Z
可以看到最少的osd.1上面只有95个pg,最多的osd.220上有135个pg,调整pg的命令:
6 G! h. a9 q# Z u) y8 B9 Q( g7 e: Z
ceph osd reweight-by-pg 105 default.rgw.buckets.data, K6 |: R1 ?9 U K1 b- u* @
4 m( k3 s* \" W
注:105这个数字貌似不起作用,ceph内部会自己调整. H: F) B" e. {9 L
: x2 i8 a, ]$ b9 ?) T: v
6 l& X9 i& b- x
) l- s9 Q ]+ r7 M2 w& _( r由于每次手动观察比较麻烦,可以通过计算每次调整后的个osd上pg数的方差来判断效果,如果每次反差在减小,说明分布相对更均匀一些:
, o+ o1 }, B0 c, y! @5 G1 y2 c2 s1 ?
1 X' v+ z( \( x# y9 Iceph pg dump|grep '^23\.'|awk -F ' ' '{print $1, $15}'|awk -F "[ ]|[[]|[,]|[]]" '{print $3, $4}'|tr -s ' ' '\n'|sort|uniq -c|sort -r|awk '{printf("%s\n", $1)}'|awk '{x[NR]=$0;s+=$0;n++} END{a=s/n;for(i in x) {ss += (x-a)^2} sd = sqrt(ss/n); print "SD = "sd}'
c' H0 Q& k. udumped all in format plain
* b, k/ Q& s$ G j5 K# Y- pSD = 8.71607! v [# N/ O N
( k, |; a n! \0 d. M1 u
' J, \2 P1 x/ i/ o, b: n" Z4 C3 {% ?1 }( ]" V" I
! Q' P% {; n# b" q8 B( e
/ \6 B9 ]: b' }+ S( H7 ^8 m# X* l' Q0 V' z
CEPH 数据不一致时,需要对ceph pg的数据进行平衡
; q& @2 k& S1 o, [) K: w0 p/ K- ?' r' @! M
1:检查数据分布是否均衡
/ O. N7 X1 o, X/ Z1 p( h
, f1 v J+ q5 }#查看osd使用情况* v+ S6 w, J4 D
# f; l2 L+ `4 B' S# p( E, N# K/ w$ c# ceph osd df tree7 H; s; L6 m3 [7 F5 D
# }1 r s- n( [ m' J
#查看osd_num,PGS, %USE
/ F& q; x8 f, s1 {9 B! ~* Z; v* `1 |+ ] J
# ceph osd df tree | awk '/osd\./{print $NF" "$(NF-1)" "$(NF-3) }'
4 L! ]! y. J: y$ e9 }( ?' H
. c' k' K9 B/ \osd.0 up 0.92
4 R6 Q: L" Y( G4 ]3 x' p$ h O! d# j2 x9 R) ~3 ~
osd.3 up 1.026 S3 {" Q M1 E" A Z, I$ @
9 k3 J2 z3 J# F& Y
osd.1 up 0.90: ?9 P* k2 O. x2 }( R! H" t% v
5 ^( y( ]: T$ A4 e" _4 y5 {osd.4 up 1.23/ y# h9 e- y1 \1 p/ B, \1 e
C- ~0 J0 E0 S# _8 a9 x
osd.2 up 0.95
: A) t/ Q) ~/ a% B$ k7 w g7 O4 Z" r, ^! x2 |( C
osd.5 up 1.03
9 E6 @$ G% [9 I- W- U" O& y
- ]2 [; ]- G! k' A$ `0 f( r; n#
) [; I/ {/ v5 X# G8 ~9 ]$ s+ L. u! t* [% r: N6 }9 A2 @, {4 B
2:reweight-by-pg 按归置组分布情况调整 OSD 的权重
* U' z: i' L0 x) ^" E+ |( w1 u; f: F; j( o+ p* D
# ceph osd reweight-by-pg7 Q3 e, q* d- u
) ?6 M+ \$ h6 L; k$ T W) a. M
, s0 w9 R' B5 z6 y/ d1 q8 n- q
% r! w) Y+ i/ @, o0 E ]* C- T4 }* rEX:7 o5 _* J: t0 L' P B
; I( @/ ^6 v# `, w
$ceph osd reweight-by-pg' \! j" I8 `7 i' _1 c
moved 35 / 4032 (0.868056%) #35个PG发送迁移
" z) V& k/ n+ j( D9 i avg 115.2 #每个OSD承载的平均PG数目为115.25 p0 B4 n( C; o# h0 u
stddev 10.378 -> 9.47418 (expected baseline 10.5787) #执行本次调整后, 标准方差将由10.378变为9.47418
8 G' j) C; J5 ^( t* P6 V min osd.15 with 93 -> 92 pgs (0.807292 -> 0.798611 * mean) #当前负载最轻的OSD为osd.15,只承载了93个PG, 执行本次调整后,将承载92个PG& P$ [2 i0 G O L
max osd.6 with 141 -> 132 pgs (1.22396 -> 1.14583 * mean) #当前负载最重的OSD为osd.6, 承载了141个PG, 执行本次调整后,讲承载132个PG {. w' m( k6 G) X: _8 p
oload 120
+ e- P: ~6 }5 N% e max_change 0.05/ S7 I5 B% m0 L" }" I
max_change_osds 4
; K1 t0 C$ ?! s, U- b: K% P average_utilization 21.1365; s0 O4 d7 W n
overload_utilization 25.3638. K0 Y! B1 N4 z; p& ]
osd.6 weight 1.0000 -> 0.9500 #执行本次调整后,对osd.6,osd.23,osd.7,osd.27的reweight进行调整6 k5 q( } G# k. M
osd.23 weight 0.8500 -> 0.9000
3 @/ E/ C# }6 a3 Q# n7 n" y osd.7 weight 0.9000 -> 0.9500
" r O$ C& d6 j0 {% x: [# L osd.27 weight 0.8500 -> 0.9000" v$ X9 A i8 T) |, u
3 w) l, v# q# i. R) {) [# T' n+ v/ C# @
' }; b) q% w3 Y- ]$ o) p
3: reweight-by-utilization 按利用率调整 OSD 的权重* ]/ p+ \5 ]! C' [# @; X3 ^. }- F
+ k9 n0 E2 l9 g- k2 F$ D& w& F- [
: O+ Y3 M | t& v0 O' D5 J: N: H+ L$ x6 M1 |# U B
# ceph osd reweight-by-utilization
6 e6 h; C/ E( ?3 m! K3 _7 i$ g* M, I6 O( E! ^: W# u4 p) j
moved 10 / 843 (1.18624%) #10个PG发送迁移( N7 z2 L. {* v# h7 l0 D" K
- {4 r2 o) k0 x) I3 H7 \- U9 ^
avg 140.5 #每个OSD承载的平均PG数目为140.5
: c% g3 k, ^6 b: _" {( l9 ?# B k" \' L! k( O! S. D
stddev 8.69387 -> 12.339 (expected baseline 10.8205) #执行本次调整后, 标准方差将由8.69387 变为12.339. C1 _2 Q1 x' q/ H7 ?
$ q' k0 H' z; w, L/ y3 }& G g qmin osd.3 with 127 -> 127 pgs (0.903915 -> 0.903915 * mean) #负载最轻的OSD为osd.3,只承载了127个PG, 执行本次调整后,将承载127
3 l1 t# T/ e8 q' o
9 \! _( D$ u- L, H5 N0 M3 wmax osd.0 with 154 -> 154 pgs (1.09609 -> 1.09609 * mean) #负载最重的OSD为osd.0, 承载了154个PG, 执行本次调整后,讲承载154个PG
: p, ]# m# I1 O0 u7 C# l
* s! e5 l# L- }
2 A$ w; u$ R. j
6 }& T9 w1 E; @" [oload 1202 ?' ~1 c8 W, G- I: x" e
& u0 q3 T: A4 I4 d5 V( x4 mmax_change 0.05+ N# U; v& ]2 [( |+ E; e& g# b' X
0 x, y$ j9 P7 U+ K: \max_change_osds 40 t4 v9 l: b, d6 L: a
; o% X! I- B- a7 U# x( d- y
average_utilization 0.0904
, O& G3 p. s8 Q, @# Z) T
& F4 C! [' x6 ?overload_utilization 0.10847 P$ _, o a `5 B1 ~: `: `2 `
- Z0 ?4 M, J# }5 ~1 ]( U8 |
osd.4 weight 0.9500 -> 0.9000
8 X+ h! a, }2 x0 E# I P* a& m- ?* e
检查数据的平衡状态:4 @% q3 @/ L" ?0 y) k5 C+ ]; Z
$ ^' k7 H9 o7 J4 L' }2 T' z. \6 J2 g* S8 e
# ceph -s
9 ^) u) L: r+ ^5 P4 U* q1 w2 k* n }8 w. A& i
' e/ [# Z) A# v) ]4 M% |9 q
! F( F! h. I }7 O, R2 ~ 4: 数据均衡后还原权重& W0 J F" A& h6 a1 }- [/ |
7 z o R5 J S. p6 X. H4 k# T! j5 _#统计osd_num, REWEIGHT/ j( N' U" Y: ~ {) d
2 {1 J* U+ L6 t S/ V$ u9 @[root@node-10 ~]# ceph osd df tree | awk '/osd\./{print $NF" "$4 }'
* _$ c3 @+ [6 F* P% W" q' S& h. |' {7 b# k% W
osd.0 1.00000
" Q# q5 ]5 I' K3 ]. c
9 r( u: F& \5 gosd.3 1.00000+ J5 U4 M% ?# T2 C
1 g9 c, Z/ v- F" q- W0 Dosd.1 1.000004 K/ H' P$ V5 I& j( o
* h3 p8 [/ m& g5 k6 R. dosd.4 0.90002
. G- [9 r6 \, F5 i B% J3 h9 r; ]: h7 {
osd.2 1.00000
6 C, I5 O# D0 [2 c
3 a m$ u/ s, O7 s+ cosd.5 1.00000 p) P* G3 _( T2 m( D
5 h6 j6 C8 k4 J' U
[root@node-10 ~]#
8 ^7 m! n. O0 e$ H( o6 N# U0 v
8 A- S) P- k6 d2 l" E# P. ~ k. `. K- J" h U0 j
$ {1 _, w, ^; e, r, z" b#依次设置osd权重为默认值,1.0
, L4 m9 N5 i. V' b- p
T; U) l) C7 j7 [, G& F% v' x#ceph osd reweight {id} {weight}
. }+ g6 J+ ~3 V+ B) m2 v0 F- C
5 Y9 O: q, i9 X! p# s#说明:osd weight的取值为0~1
- L6 Y/ j$ z4 u: y
1 t+ m5 Z. Y. N$ a- B( j$ R( E
+ |# T. P/ C& l; G' C6 M: `* [: M* R9 h8 ^8 h, B. S
$ ceph osd reweight 5 1.0
5 ?1 z, i; B7 I4 I8 i+ k8 _, o
+ N$ m% |2 z! D: E
* D5 g3 J7 Y" Z; i( f5 {通过ceph osd tree 可以查看到 weight 和reweight的值9 T7 n0 b- c3 `& w' X3 g. h/ J
1 ?% D# |) @$ o% L7 S/ N# \4 H
6 j" d3 W6 B( i q9 B
; W9 M. _+ z4 T" [! q |
|