|
|
|
临时调整osd full的阈值,然后删除不需要的rbd磁盘 ceph tell osd.* injectargs '--mon-osd-full-ratio 0.98'( P1 O) y: ?$ ~( q( P
- r) {% R- c6 k2 r$ x E
调整每个osd的weigh值,使数据重新分布# ceph osd crush reweight osd.10 1.05
% r' j; ^4 c% C& u/ b/ L' J/ `& n4 z; [9 [. o
# N$ v6 [5 v) T4 W7 ireweighted item id 10 name 'osd.10' to 1.05 in crush map, g: }$ C) Y% J9 h% J& g$ h6 ^+ D! I5 Y
* X+ v8 V7 t* |1 R5 p7 Y* j+ P. o& g6 _, b/ W8 E
osd缺省的weight值为1,调整以后数据会向weigh值高的osd上重新分布,把一些比较空闲的osd weight值调高,接收数据,使用率高的osd weight调低,释放数据$ y+ v5 [* F: G4 d
& R5 O. \) D0 U: b- l# X! u( W, o
9 ]7 b0 d1 c# Z n- S
ceph中各osd的pg数量是近似均匀的,可以认为各pg下的数据容量大致相等,因此从原理上来说保证各osd pg相等,则各osd上的磁盘使用量也差不多相同,但是由于算法做不到绝对均匀的原因某些osd上的pg数会相差比较大,这样某些osd上的空间使用量就会比较多。建议是ceph部署完成,各pool也创建完成后,主动手工观察,通过命令调整osd的权重来调整osd上的pg数;
8 e& s8 A+ Q4 ]. E
3 v2 M- U C5 I! W统计各osd上所有pg数:9 z3 H/ u, d9 l! e3 `' M
ceph pg dump | awk '
# U+ h s7 H4 m7 c8 P /^pg_stat/ { col=1; while($col!="up") {col++}; col++ }% {; P: p8 R \
/^[0-9a-f]+\.[0-9a-f]+/ { match($0,/^[0-9a-f]+/); pool=substr($0, RSTART, RLENGTH); poollist[pool]=0;+ `# s$ j: H6 ^
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) }5 U, y" \! W: F9 V4 t+ y- F
for(i in osds) {array[osds,pool]++; osdlist[osds];}
2 d! h- J$ c2 _+ T! B9 K" Z}6 I7 |+ H4 r1 |9 E" V6 @
END {7 H; g0 R' \/ i& l$ w; I
printf("\n");4 H; \7 P" j) _6 `6 q
printf("pool :\t"); for (i in poollist) printf("%s\t",i); printf("| SUM \n");
7 `8 K2 i6 U3 Y. X for (i in poollist) printf("--------"); printf("----------------\n");: p9 k6 c1 N& C7 r4 s' S, A
for (i in osdlist) { printf("osd.%i\t", i); sum=0;
' I8 Y+ ?3 a# k9 A for (j in poollist) { printf("%i\t", array[i,j]); sum+=array[i,j]; poollist[j]+=array[i,j] }; printf("| %i\n",sum) }; S' H+ @# _4 R: j3 T
for (i in poollist) printf("--------"); printf("----------------\n");
4 _3 h8 r$ r( N' v& z) W printf("SUM :\t"); for (i in poollist) printf("%s\t",poollist); printf("|\n");7 H W4 v8 }+ h2 b
}'
+ `9 N: d2 z1 ]+ N
! p/ \/ R% s3 g% [
0 l' E' c( E* u; K. @4 Z上面这个是获取各osd所有pool的pg数,其实我们只关注default.rgw.buckets.data这个pool,其他pool数据很少,我们通过ceph df知道default.rgw.buckets.data的pool id是23,通过一个更简单命令得到23号pool在各osd上的pg数排序:2 G3 R0 P: W: D/ P$ T, L
- ~. _, J0 X0 J! L: Q) K: pceph pg dump|grep '^23\.'|awk -F ' ' '{print $1, $15}'|awk -F "[ ]|[[]|[,]|[]]" '{print $3, $4}'|tr -s ' ' '\n'|sort|uniq -c|sort -n
" q ^; ^. ^/ C+ T7 h9 B
4 h W- p* ~5 `3 ?( S输出如下:2 M1 T; }8 u0 [0 C2 h3 F! ?! L
" y4 Y2 u' F* i/ ?" ]: p8 D3 M0 B
95 15 r, f, H3 N' I5 y; C ?& P
95 312
5 k M! G2 ]4 |% L' l3 { 96 252
2 ~6 O: Y1 e* V9 I/ c( G 99 177/ y- \ }% G( b0 {; t7 R
99 265% ~- q: o/ M7 u
99 627 w3 G' i& B0 Q! a1 Q: t, W
101 121& J$ [( l9 P3 t9 Y" r8 p* P. \
101 261* Q9 G3 i- o3 k
( I3 v6 O8 [) v2 j+ K......- N( g6 ^4 a) G, G4 N% v* ~% L
" f. i+ S( [" t 132 102
5 z0 j4 i' _2 u3 B1 A1 a8 w 132 1054 I! L2 c7 @* U |4 }& {$ u* Y
132 1794 E4 I+ Y* M/ U8 W
132 253% Z- h- D( n3 z# n
132 256
8 W9 O2 T# }2 `! A- b6 \: A+ o0 v 133 111( v" \, N+ L9 x: R ]. c
133 1152 w. O& S% E2 s6 x$ w7 @
133 151# O+ \: v1 S5 R) g) \
133 203, B1 R. v( W* w6 H. P2 K' ^$ Y
133 2595 K. ]' c) `* p9 s: h {1 z! X
133 271
! C. ^) H, K# v7 O 133 292. {/ @+ r. O* k( w7 n
134 257
( Y. C& C6 y0 z* e$ l8 ]4 A5 b 134 302
/ q) M( e. S) ~' m 134 61, Q8 W) g( y8 B
135 220
' s c+ e3 h) W" r8 b# I+ v+ l8 @3 @* o& V
可以看到最少的osd.1上面只有95个pg,最多的osd.220上有135个pg,调整pg的命令:$ N! w; H* [& p
% b# `6 D6 t" ?8 R; Z9 X Z
ceph osd reweight-by-pg 105 default.rgw.buckets.data+ \6 d$ K; q: C9 B& o
; q% L$ }% Y' S w
注:105这个数字貌似不起作用,ceph内部会自己调整6 S6 Q9 ?8 [2 ^, q, k: x
, ^1 o: }! C3 i _4 d4 p/ ]. i, U4 F8 I8 W' P$ c: Y7 p
6 Y+ I* h( U a0 ?9 h( I0 S. h
由于每次手动观察比较麻烦,可以通过计算每次调整后的个osd上pg数的方差来判断效果,如果每次反差在减小,说明分布相对更均匀一些:
" |. D( A# r7 D
* a1 d v) U. W0 C3 C7 D6 Oceph 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}'% Q$ V. L% Q3 r8 W# N9 F' W8 q
dumped all in format plain
/ a- h* H& _, p, T( R0 F0 qSD = 8.71607- F0 Y0 w, S1 b% L- G) F
( g8 x/ j+ O6 g$ u9 h/ y) Q
: x: Q; l/ u; M8 o4 T+ [) z9 f2 g0 [, N4 P! T/ H, h2 b6 \8 P k
L7 q) ~5 o! \5 C; \7 H$ O4 N5 V% l1 V; ?9 O9 R. T
9 a" O3 Z3 n' ~/ E* E
CEPH 数据不一致时,需要对ceph pg的数据进行平衡" S3 r4 Z0 O% X5 ~; ?1 Z9 U+ z
+ T. }5 h" O4 V) |9 s7 o$ j# C
1:检查数据分布是否均衡8 ]) G! X4 y9 ?7 }. ? q- S& P
6 F3 z. Y% h* k8 _#查看osd使用情况
4 a. L) i8 M! v' G: }0 Z0 Q& i O
, |4 s1 W) m! R( `& I3 g# ]# ceph osd df tree
7 ]* Z, ?- ~0 ^* x! K3 c. v7 q, d9 a4 h0 M- K2 `1 K
#查看osd_num,PGS, %USE( |2 }& O! l S7 s/ D) i: \
& D; A3 u& X$ \ i1 R" r( @4 k
# ceph osd df tree | awk '/osd\./{print $NF" "$(NF-1)" "$(NF-3) }'
" E( R \1 b. x" y+ i# H, R" ` O& _
osd.0 up 0.92
* T, c1 N ^) m: n; @# C+ I& {+ g A
# M4 e4 a# a- Aosd.3 up 1.02
' a4 U* M1 P! x" K; U9 X( b U, s h
/ C w) j& J8 T8 R* n6 Z6 i. T6 iosd.1 up 0.90
x( M% n& W$ j$ I$ P, G2 F- N6 B4 k9 w- y! e
osd.4 up 1.231 G8 E0 K2 Z% M: C% ^* k) ]. y
! H& s2 T! H9 p' X
osd.2 up 0.956 A! r2 o% C! c
_: B( B$ i3 o7 g; Y) g
osd.5 up 1.03
; \6 X$ f' |! Z! c P4 A: e6 e8 @* w. {0 G) n' g4 Z: j
#
. ?7 x/ }; P# N6 Q8 F1 f
5 R3 X0 {0 d0 m( j# y- p2:reweight-by-pg 按归置组分布情况调整 OSD 的权重6 Y% w0 I8 Q" t6 Z1 y, ~/ t
; C; d D6 |! g1 |5 h& }% [7 X
# ceph osd reweight-by-pg
8 I5 k* z( I6 |6 n( q+ P* h$ Y5 r$ s$ {4 l( O K6 K. ?
5 z( W9 k! W; x6 @. {. G" [) x5 @! O
EX:& K ~5 b) l5 ?( g4 q# Y
6 j% ? |) {: |/ T& W$ Z1 R( w8 `
$ceph osd reweight-by-pg% t& K$ u, u6 H+ h8 h, Q. ^
moved 35 / 4032 (0.868056%) #35个PG发送迁移
0 u8 x' w+ u% ~# m# j5 {8 o avg 115.2 #每个OSD承载的平均PG数目为115.2
7 ]& r/ X% p4 `( h Y9 D1 F stddev 10.378 -> 9.47418 (expected baseline 10.5787) #执行本次调整后, 标准方差将由10.378变为9.47418
# R/ g( A0 O; G0 H$ E2 @! ~; g min osd.15 with 93 -> 92 pgs (0.807292 -> 0.798611 * mean) #当前负载最轻的OSD为osd.15,只承载了93个PG, 执行本次调整后,将承载92个PG
. Q$ f# C) _: `( T max osd.6 with 141 -> 132 pgs (1.22396 -> 1.14583 * mean) #当前负载最重的OSD为osd.6, 承载了141个PG, 执行本次调整后,讲承载132个PG6 Z; W- G$ R+ l8 i& p
oload 120
: u( F+ ]% J i9 f" X% N5 ? max_change 0.05
2 u1 |0 w, L. D, U6 P5 s7 ~/ V max_change_osds 4
7 D7 f0 f) e8 `/ G$ r) G9 X average_utilization 21.1365! F6 u: O9 C5 e5 J
overload_utilization 25.3638/ p$ N% G+ ~) k! [( k6 }
osd.6 weight 1.0000 -> 0.9500 #执行本次调整后,对osd.6,osd.23,osd.7,osd.27的reweight进行调整* O, j* Z0 @/ X; l6 \
osd.23 weight 0.8500 -> 0.9000$ i1 W9 D$ P* i. A
osd.7 weight 0.9000 -> 0.9500
& _! a4 ?( W( N2 h$ n; z osd.27 weight 0.8500 -> 0.9000
( ?* K0 V1 A: X
. w9 T+ H; C/ S% k4 p& i! X0 m. ^- M4 O2 T0 `% Y
1 j6 X5 f7 ^/ O8 ^7 n; i7 L
3: reweight-by-utilization 按利用率调整 OSD 的权重
( {. n) k+ E4 R2 {
$ T. g. p* k( [
) D3 Y: L! h7 Y# O( L
2 N8 p0 X! h6 Q! @2 C) I# ceph osd reweight-by-utilization9 K& I: G& g* p+ x
6 o: h9 Y+ y/ I# v6 e# q* x5 s" X
moved 10 / 843 (1.18624%) #10个PG发送迁移
9 @* ?7 I( ?7 q$ Q6 f4 |" s$ Q6 m: v1 ~& ^6 B6 C9 G
avg 140.5 #每个OSD承载的平均PG数目为140.5
! U) g* C1 e; ]3 {' o: Z
/ a; q- u$ d+ [+ [; |( t7 \' g* \: ustddev 8.69387 -> 12.339 (expected baseline 10.8205) #执行本次调整后, 标准方差将由8.69387 变为12.339
) ` B) c$ i. K: `3 l3 M/ [, y3 o" o; A7 v
min osd.3 with 127 -> 127 pgs (0.903915 -> 0.903915 * mean) #负载最轻的OSD为osd.3,只承载了127个PG, 执行本次调整后,将承载1278 }, Z$ M& N. r! q5 @
6 c% D& T" g7 R! P; T) s
max osd.0 with 154 -> 154 pgs (1.09609 -> 1.09609 * mean) #负载最重的OSD为osd.0, 承载了154个PG, 执行本次调整后,讲承载154个PG
, ^( p8 S2 ~: I5 ~! ~1 r1 o6 T- ?) B/ R* p& f# z8 s! @
# k% k: A% S0 A, F
E& b7 n# Q( O) X- Hoload 1202 L. c" Q9 |+ k
4 V ?. v. o7 r8 E% wmax_change 0.05! T9 ^, p+ q0 M: k3 E7 E6 Y
$ d6 I( d+ c9 V6 G0 _( k
max_change_osds 4$ ]' `( s, n$ `2 v- O# U: d7 p5 t
. j3 b+ |5 B5 m/ i
average_utilization 0.09044 p$ [. P+ [- {# m0 Y! L2 B* a
1 ]( h! E# F3 Y/ K8 w; S
overload_utilization 0.1084
) @ Y1 J7 X! M3 L1 C( p
, m, A9 n. E9 B0 r/ x2 o) Fosd.4 weight 0.9500 -> 0.9000+ G& t' }4 k; ?1 S9 c; u& ^4 Q
4 L# L: E- C3 e$ L检查数据的平衡状态:
& U/ t2 f$ j, A2 t; v4 e8 t; n- g c- \6 S( r
# ceph -s7 w7 [- U2 q& m
0 C0 y7 C2 q" R0 v$ h" p& J
, q1 M) n. b, n5 W/ r
. R1 n1 _! x! {8 C
4: 数据均衡后还原权重
1 [; r0 p8 A" C( M0 v& f9 z. ]* L. P q$ Q! @: f2 s2 L
#统计osd_num, REWEIGHT* ^6 [! S. z( }9 L
8 Q; n, G% Q: x9 Q[root@node-10 ~]# ceph osd df tree | awk '/osd\./{print $NF" "$4 }'6 b5 n6 Y7 w* }8 \
# {0 V! r& Z( A. ?* ?; f8 {
osd.0 1.00000
# M& e( q# s; A9 H4 z' `2 P
3 w! R* U/ ~6 C9 q4 n7 ~4 @osd.3 1.00000, ]& y. s0 Y4 c+ W# t1 Z9 T0 p
% T" h' J) u& o2 Sosd.1 1.000007 V; ]& l9 }+ Y
6 b- f/ [+ i) p0 j% @% P7 @6 [osd.4 0.90002 E7 n: u1 ?0 b: Z9 S- C" \
* A' X3 V- P: h8 o% S
osd.2 1.00000
1 q# ~7 ~- Y K7 z3 ?) _* g0 c
; r( R4 A* ~5 v" Kosd.5 1.00000" S; j! D4 x4 E' U7 g9 f+ k
' q/ n+ V$ V# ]" f: _3 Q& J7 `[root@node-10 ~]#
9 o/ g$ c/ k6 n+ E7 q; U } w7 V2 x" x$ Z V- I( k
6 p* b6 \5 G9 S/ _; {. U+ u8 ^( S
) F2 r$ ~' D: x! y/ U2 W
#依次设置osd权重为默认值,1.0* g: ~2 D2 g* i+ b9 \ t1 a& G3 ?
9 I/ R8 k' T( F" }$ o#ceph osd reweight {id} {weight}
2 _* n/ d5 L9 Q) G( t: d; w |! \- x6 b8 @9 Z" y$ O7 q; w* a
#说明:osd weight的取值为0~1& t8 u6 h. _0 a" k5 u2 n, ~7 S
& H- N, h9 g" z3 T. @" n
* c! H* _; F- [8 o
, Z- D8 t- s# ^$ ceph osd reweight 5 1.0
$ d. h, h; x8 x; `6 z. F
# V: f- e/ X c, c
" ?8 w! w, B8 O/ `) F& ]通过ceph osd tree 可以查看到 weight 和reweight的值 b, z7 i1 N8 f+ i/ G5 `* E
$ a9 \/ ^1 P3 G7 o
1 b. {- d" A# {! x1 o. }5 e: _7 Q7 X }* \* \( Z
|
|