|
|
楼主 |
发表于 2023-2-3 17:26:18
|
显示全部楼层
开始% i- B( E5 j; u q2 @
此前,博客有更新一篇关于cephfs的文章 - 小试牛刀,主要是cephfs的一些基本的使用,版本也是比较早期的12版本1 \3 {7 N8 ^ h! d
{( E$ @' V* `, \3 V
此后不少读者和我探讨过cephfs的情况,我给出的建议一律是:cephfs不建议上生产,不稳定# [" B1 z8 K% I# h5 g
0 Q- R$ M( R% F1 O* C; I# i
时至今日,cephfs经过了多个版本的迭代开发,据说可以上生产了,这里我们对其进行一些列的测试& u$ a$ R$ ~% U( e W
5 [6 z( O" f4 Y- p测试是这样,先使用了13.2.10版本进行测试,然后使用14.2.20进行相同的测试,测试环境:
7 X& _! h; j; \) p( t, S' \2 i7 L; E
data pool 使用ec 4+2. N& t, e8 z( K/ n5 k% g4 M
1 D, L# X, q/ N1 p. l4 E. `: y写入大文件(64GiB)
6 ]8 M& W- T) E6 g' D, |$ Q: g5 x9 S+ x$ Q+ Q) x
写入大量较小小文件(4MiB+1MiB): [8 V6 o0 d/ e+ h2 `3 \
' x/ F- O3 W: Q& ]4 H$ I
写满pool后进行纯粹的读取
; U! ~* M/ r! m5 g% X' Y4 F
$ r* R* Y% r! A% N8 A写入时重启某个rank
; g( l6 A: X6 v- _2 p# d& b3 t* g; I, i3 u% D1 D
13版本的情况
1 _0 v' G/ Y# ]1 i q写入大文件(64GiB)写满pool,这个没有问题,写满pool也不用多少个文件,读取也顺利
8 K- j3 V/ s. R4 P$ S
$ Q: D+ Q8 b+ E' l: ]9 x( [' i写入大量较小的文件就不行了,读取也不能正常进行: y- l1 W" ]8 B6 b. B) H: h
' A/ k) {& q! l: Y. { \默认配置下,cephfs的根目录下创建10个目录,写入大量的文件9 [8 z# Z9 p4 ]: Z4 j
/ p* {% I, O& I1 A9 u
[twj@R03-MTEST-DN-017.xx.cn ~]$ sudo ceph fs status
; K/ w' o1 C3 I x8 Xfilecephfs - 3 clients9 r0 q5 R! z2 A6 R
==========5 {7 F2 R( x9 x& D) A& N
+------+--------+------------------------+---------------+-------+-------+
7 I. @- b1 z, W/ ?! v# X6 N) L. z| Rank | State | MDS | Activity | dns | inos |! A8 A4 V+ f6 _; J- H; R( J
+------+--------+------------------------+---------------+-------+-------+6 H9 J) R: W. q# e) j
| 0 | active | R03-MTEST-MN-002.xx.cn | Reqs: 0 s | 19.8M | 19.8M |
: y8 x8 Z& h) z0 T( }& W1 z: Z+------+--------+------------------------+---------------+-------+-------+" Y5 u$ m: g' `. C$ o( L( P
+----------------------+----------+-------+-------+
. B1 B u1 G/ z6 J0 [/ Q' N* r| Pool | type | used | avail |& k' O! Q2 ~% l0 h
+----------------------+----------+-------+-------+/ j( V7 ?/ } N
| cephfs-metadata-pool | metadata | 155M | 794G | ~$ H9 v# f$ N) ]( [
| cephfs-data-pool | data | 957T | 0 |2 D/ j" V V# M" l0 T
+----------------------+----------+-------+-------+1 t; g+ s, [; Q$ O O6 C
+------------------------+5 `+ q+ k; H: C# Z& b% X
| Standby MDS |+ a- y! i! x" ^2 o
+------------------------+% o; ], J% a- ~
| R03-MTEST-MN-001.xx.cn |
4 Y" S5 l* O3 ^! G* t5 t5 M9 C& F+------------------------+9 a, `2 K$ y* A2 E/ s! K
MDS version: ceph version 13.2.10 (564bdc4ae87418a232fc901524470e1a0f76d641) mimic (stable)$ U2 F. b* j T
[twj@R03-MTEST-MN-001.xx.cn ~]$ sudo ceph df1 b) k5 h0 Y. D% K) I: A
GLOBAL: h% O7 f( ^# _% ~ y
SIZE AVAIL RAW USED %RAW USED
: t, h/ } v" d5 i, m 1.5 PiB 91 TiB 1.4 PiB 94.08
8 X5 F1 n! n/ w* ? t6 c& ]6 f; jPOOLS:
p' a% F- u) ]' \. M NAME ID USED %USED MAX AVAIL OBJECTS0 M* }! I& [& }! z4 R* z, g! N, M0 D
cephfs-data-pool 15 957 TiB 100.00 0 B 5612865785 a. k" g( c1 o- B
cephfs-metadata-pool 17 155 MiB 0.02 795 GiB 983688 n2 j/ A1 Y3 u7 D3 g/ q8 X' p# P
. s! x+ L& ^- C/ H4 @8 r7 V
此时,mds的内存占用达到了55g
; w1 p! u' P9 g
6 T% s2 C) ]% v2 S: |' x2 {+ _% j PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6 b- O! B* b q9 I! N3 G4 F; J 47740 ceph 20 0 55.4g 55.0g 10356 S 6.6 21.9 11905:23 ceph-mds
& c0 K% P; h5 O( f8 z* s; h1 o0 x" i: m3 b% H: d! u1 `7 p
尝试重启这个mds,直接导致fs瘫痪,mds状态一直都是replay,接着mon好几天都起不来,集群也直接没法用了。。。3 l& z% Z" H* K, Q
: T8 W6 W4 ?9 H1 M
2021-06-17 10:10:36.352 7f9039544700 1 heartbeat_map is_healthy 'Monitor::cpu_tp thread 0x7f9034ccc700' had timed out after 03 [" Y- ]8 i2 `+ Z
% v7 d0 y+ P# R1 ]; y. i6 Qperf top -p 3563473
! e3 }% O0 o [. j; u% PSamples: 63K of event 'cycles:ppp', Event count (approx.): 49402841395& u. g+ O" {9 P5 A) t; s* ~$ `0 f# f
Overhead Shared Object Symbol7 m& K5 B2 p( b; x
48.92% libceph-common.so.0 [.] crush_hash32_36 Z0 f. i/ g; ~' M' H' E
24.28% libceph-common.so.0 [.] 0x0000000000647f801 P: H9 ?* S' c
4.35% libceph-common.so.0 [.] 0x0000000000647f599 |% d7 ]4 p9 b
0 P) L5 @( z/ n
第二次测试,写入一段时间后,集群报错,mds处于rejoin状态3 i# ` H% s# {! Y
4 k% f8 s4 e, k2 k4 H J
cluster:
) X8 K- v/ `( y( Z1 T id: 8418d616-979b-46f9-ab95-b8fb20093d1b, y9 C7 P f! g% s
health: HEALTH_WARN& b) g# X' U, N# f. _
1 filesystem is degraded# U: w: W( d9 g9 y o
1 MDSs report oversized cache1 U7 `# J- t6 A9 M" `
1 MDSs report slow metadata IOs' q6 D, b2 V# Q* U1 E0 w* m
+------+--------+----------------------+----------+-------+-------+! _* }, J: G+ \5 I% l
| Rank | State | MDS | Activity | dns | inos |
/ [ X1 N; h! \& I# e9 Q+------+--------+----------------------+----------+-------+-------+
' c6 W* ^; q5 ]5 C! K G, C| 0 | rejoin |R03-MTEST-MN-001.xx.cn| | 59.5M | 59.5M |
) a4 s, L H3 ~! c h+------+--------+----------------------+----------+-------+-------+- `3 d: A" e! G) s8 c
* c; K; t7 f: q+ Z
此时mds的内存消耗非常大
( M4 Q5 ^# s% R
. y2 E; {9 B4 ^6 ]- m PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
0 E1 `7 b. y; O7 F! Q; X" V5 L 150540 ceph 20 0 224.9g 223.5g 11704 S 100.0 89.0 196:15.69 ceph-mds
! k1 d: w q' q
9 j. u$ t+ v$ G/ |, E P使用命令ceph daemon run/ceph/ceph-mds.R03-MTEST-MN-001.xx.cn.asok flush journal
! C. Y6 c9 z' V% g, q后,降低了一些,但很快又上到了223G
. @ |; S: H! H R; L" `% V# x; \/ e! e5 J) K& O$ J2 O
从结果上看,该版本的mds主要是没有解决内存的问题,没写多少文件,内存就直线飙升,而且居高不下,妄想重启mds,那就直接玩完9 I% M8 ]$ R9 `' g* p3 [
6 @% F2 X: d7 |0 ?% U这里直接给出13.2.10的建议:不行!事实上,14.2.x之前的版本都不建议使用cephfs上生产环境
3 [- Y" s. b( p2 Z; ]. x
# p1 \+ [. B, ? }( d14版本的表现
0 D! Q B I1 v3 s9 q0 Y) a$ Y在这个版本的测试用,我加入了额外的data pool,并使用了多活mds,直接测试的小文件写入
3 L$ _! [4 k K+ p8 l: r* A, P: ]0 D, K2 E4 O. M
[twj@R03-MTEST-MN-001.xx.cn test-cephfs]$ sudo ceph fs status
% D) m+ r/ [" d0 m% rcephfs - 40 clients. C2 F: |' L) L& _ w, B( s# X
======
1 y) [0 B- n8 W. M" e# E2 h+------+--------+------------------------+---------------+-------+-------+" u# G) z `- A& D6 F- s3 Z. B( r
| Rank | State | MDS | Activity | dns | inos |
) P% g' _. i7 k# P( i( Y+------+--------+------------------------+---------------+-------+-------+% w0 e" x$ l) C) a2 g) O
| 0 | active | R03-MTEST-MN-003.xx.cn | Reqs: 10.3k/s | 391k | 391k |3 W9 t% A1 c/ }- R9 v3 S4 r
| 1 | active | R03-MTEST-MN-002.xx.cn | Reqs: 10.5k/s | 385k | 385k |4 o- a# |8 m2 V' o; P% |6 N
+------+--------+------------------------+---------------+-------+-------+
& ?+ E& v6 B9 W' ], T+----------------------+----------+-------+-------+4 Z8 w. v" a" ~% U
| Pool | type | used | avail |
# @% f# d" {* Y$ A1 w+----------------------+----------+-------+-------+
8 q) R. o. E6 ~+ S0 U) h| cephfs.metadata.pool | metadata | 3378M | 797G |/ S+ {4 U4 {' h; ?
| cephfs.data.pool1 | data | 6085G | 1234T |
# h }, A" O4 L. a7 Q| cephfs.data.pool2 | data | 2257G | 1241T |" \, G) E1 A* e
+----------------------+----------+-------+-------+. `/ I& d1 C5 b4 [$ v$ P0 R N
+------------------------+1 j m2 Q! L- L% w- l
| Standby MDS |3 m# X/ }0 V4 K5 l5 M
+------------------------+ Q* [% ?- _8 ?
| R03-MTEST-MN-001.xx.cn |
4 ~/ y0 `; w9 C: p. L8 q, T0 j/ ]+------------------------+
. t/ L% o7 C) ?8 |" U8 k6 YMDS version: ceph version 14.2.20 (36274af6eb7f2a5055f2d53ad448f2694e9046a0) nautilus (stable)
( s% b4 L8 q7 F0 [, i5 C2 _: {4 C
" N2 ~1 Z6 ?+ `! u! c) u: B' h& T其中每个data pool都创建了20个目录,并pin到不同的mds上,性能看还算均衡,连续快速写入,会有告警2 MDSs behind on trimming
- i$ x8 s, h) k# t# k' w8 W4 z但没有什么影响,就没管
" H$ ~9 e- e8 L# [- p
' D$ w8 L0 D2 {. r- i2 @6 U随着数据的大量写入,集群开始出现slow! ^0 Q! s1 [ H1 J% K
, i- ?) Z" P; N& N, @' Z[twj@R03-MTEST-MN-001.xx.cn ~]$ sudo ceph df1 u6 u: \; z0 _5 W
RAW STORAGE:1 X5 G, r* c( ~8 _; F# W* ~
CLASS SIZE AVAIL USED RAW USED %RAW USED8 M! \- }. G" l9 F4 B& ^
hdd 3.9 PiB 3.1 PiB 823 TiB 823 TiB 20.791 a0 S0 ^/ b' K/ V* w) C' i
ssd 16 TiB 3.0 TiB 13 TiB 13 TiB 80.72
" O& S6 ]1 C5 Q u# W TOTAL 3.9 PiB 3.1 PiB 835 TiB 836 TiB 21.03, s9 H3 ^) O7 z- [
* d+ ^+ s3 H9 _5 P E" Q) ?
POOLS:. e; I7 I' F0 V
POOL ID PGS twjD OBJECTS USED %USED MAX AVAIL
. k0 m) {" v) M5 e) j% a cephfs.data.pool1 2 8192 275 TiB 217.81M 413 TiB 23.20 911 TiB$ |! V' O# \9 P( @6 M0 c
cephfs.data.pool2 3 8192 244 TiB 102.44M 366 TiB 20.53 946 TiB
( t: V# |( r2 H4 ]3 k; [ cephfs.metadata.pool 4 256 127 GiB 115.39k 191 GiB 7.74 760 GiB
" r- L2 q0 [. Y) O " F0 J7 U3 H8 `
[twj@R03-MTEST-MN-001.xx.cn ~]$ sudo ceph health detail
) _- [+ A/ ?( w [HEALTH_WARN 1 MDSs report slow metadata IOs; 1 MDSs report slow requests8 L% W+ W, b( c: w+ J
MDS_SLOW_METADATA_IO 1 MDSs report slow metadata IOs- |/ z; E! j" D# ~. ]
mds.R03-MTEST-MN-002.xx.cn(mds.1): 100+ slow metadata IOs are blocked > 30 secs, oldest blocked for 87 secs3 W$ O* d& t: H; d4 h
MDS_SLOW_REQUEST 1 MDSs report slow requests
: o# U0 H5 g. w% G. u6 J6 z mds.R03-MTEST-MN-002.xx.cn(mds.1): 11 slow requests are blocked > 30 secs
% L7 I! V' r3 P0 @- L B2 }: \ y# D& J" `/ s
查看mds的op处理流程' i2 g2 D# X5 Y8 [
3 ?9 j6 ` m- x7 {6 y6 W
[twj@R03-MTEST-MN-002.xx.cn ~]$ sudo ceph daemon mds.`hostname` dump_historic_ops_by_duration|grep duration* }& l+ W9 b9 z' D: D4 P7 e' i
"duration": 600,
" o6 I. e! U- Y" E" ]5 W3 x "duration": 427.63886984499999,- d2 ]/ h( ?3 K- C( C
"duration": 427.62001601499998,
J# i; V2 q# R9 ^ "duration": 409.772382456,
$ v, b6 i- A" _/ l3 j( s+ A8 ]5 O "duration": 409.75990740399999,
( J! U: F2 D+ X. ]6 H "duration": 215.47288510800001,' q& Y% w" t; r; |- n& {
"duration": 214.47418489699999,# L# Y" d0 h* F. R
"duration": 203.97045117499999,
9 j) n; I6 z8 {. f "duration": 203.51505527899999,
- D4 g+ m) C' q) E3 d# i& ~# P ...
. v+ `7 {, I) P9 ^9 [. ^5 T6 j& q! Q0 M2 t l, n5 e
时间都非常久,继续排查,发现大量的op都是卡在failed to rdlock, waiting
3 w# x4 S) z Z6 Y# h这个步骤,关于这种情况的调查和优化,还在努力。。。
7 J* L& q0 W$ k5 M4 g% G( f E* ]; K; U& _# Q4 ~
看了一眼内存,没有明显的飙升 u6 ^2 e8 X9 o
" ]: N% o4 h1 K- V" x
[twj@R03-MTEST-MN-003.xx.cn ~]$ top) n, r C# G* y9 V# G. }" x
top - 15:34:57 up 9 days, 4:36, 1 user, load average: 0.95, 1.22, 1.28
# o3 y \9 ^) Z C- j5 DTasks: 650 total, 1 running, 649 sleeping, 0 stopped, 0 zombie5 @+ ]! l9 R& v0 R: D; X/ b
%Cpu(s): 1.9 us, 0.1 sy, 0.0 ni, 98.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st- G' v- a" q; H
KiB Mem : 26353089+total, 25013656+free, 11907872 used, 1486464 buff/cache
% w' u+ f$ l8 F# lKiB Swap: 16777212 total, 16777212 free, 0 used. 24535932+avail Mem
) f4 x, C" u0 ?
5 a O2 y- Y! W) K6 x d3 Q PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND7 B* w9 Q- H. d) A% j8 `# f+ T
29657 ceph 20 0 7878864 2.5g 14288 S 100.7 1.0 4616:55 ceph-mds
7 ?; c1 W6 G: o: i% b% d: O4 Q6 ~& i+ g1 r- i
大量数据写入后,先测试一下mds的重启,直接reboot节点,观察集群的情况6 v/ L; m& R$ X5 w2 C
) p( e# |3 ~9 N6 q[twj@R03-MTEST-MN-002.xx.cn ~]$ sudo ceph fs status
0 w+ @5 m% E4 o1 ycephfs - 40 clients3 T' I0 F- B. C: [* A
======6 T: x, @7 E6 x8 C5 K" K4 T
+------+--------+------------------------+---------------+-------+-------+3 x7 x% D/ V1 n$ U
| Rank | State | MDS | Activity | dns | inos |+ n: y! u9 b7 p( q2 |9 o0 F
+------+--------+------------------------+---------------+-------+-------+' p; Z* M% W$ N
| 0 | active | R03-MTEST-MN-001.xx.cn | Reqs: 869 s | 445k | 445k |
* P0 x n' C X3 d$ W8 ]| 1 | active | R03-MTEST-MN-002.xx.cn | Reqs: 0 s | 365k | 365k |* }, q! @+ D! D, t& I- G4 B- `: j: ?
+------+--------+------------------------+---------------+-------+-------+1 n/ m1 S4 E" L( [
+----------------------+----------+-------+-------+7 [; C3 T5 N5 `% j: @' A
| Pool | type | used | avail |
9 \6 \9 S5 h4 Q2 Z. L$ F/ v* w+----------------------+----------+-------+-------+/ o& P- e# e# F9 o, {
| cephfs.metadata.pool | metadata | 186G | 762G |
) a% T, u. i: v. m8 q6 m$ @| cephfs.data.pool1 | data | 412T | 910T |$ T* F* d. t+ d4 }' u
| cephfs.data.pool2 | data | 366T | 945T |! F; M# b; R, r2 ?1 y. _
+----------------------+----------+-------+-------+
5 Z$ T' d! }# h2 B/ O+------------------------+( z. ^& Z! L& k( G# Q- V
| Standby MDS |
- X: D0 F8 u0 u$ @. T/ p+------------------------+
* F: }. U8 a! ] k( Z6 m" I| R03-MTEST-MN-003.xx.cn |6 c# \" U2 d% K& s _: [
+------------------------+ M. H C3 Q# Y v1 G
MDS version: ceph version 14.2.20 (36274af6eb7f2a5055f2d53ad448f2694e9046a0) nautilus (stable)! O+ V, Q9 Z; f( @7 I$ B! C1 q
0 E; V% ` M7 Z8 W ^
看是备是直接顶上了,mds重启后自动做备,业务侧暂时没有发现有问题,不过,发现写入的流量都打到了同一个mds,不知道是不是因为rank序号变化导致的; l" k! ^" N5 O7 r8 b
$ F* ]- Z2 H$ Q3 j0 J1 ~* M
测试发现,当单个目录对象数达到千万级时,cephfs的目录出现明显的卡顿,测试读,读取偶尔会有问题,流量不稳定,最大可到1GiB/s,最小只有几百M
) ]- F0 L, `1 y3 K0 m' k, p, s$ w
io:
1 |% x& w/ N0 g* V" y% c( o client: 240 MiB/s rd, 559 KiB/s wr, 102 op/s rd, 0 op/s wr
, D' m) `3 D) q2 Z! Z# x ^' O' Y; q4 y
结论1 E& @6 F5 s# e: P! m" I, q
cephfs 14.2.20测试结果来看,稳定性可靠性还是可以的,至少内存的问题看来是解决了,没有出现持续大量数据写入时产生的高内存占用问题,同时,重启其中一个rank,备用的mds会自动顶上,业务没有太大影响,而且,目录内的文件数量只要不是太大,小于百万级的话,性能也没有太大的问题,因此,14.2.20及后续版本的cephfs应该是可以上生产的了) d5 a$ E6 t- |
1 c( j* @4 q# I: x' o, @0 h8 A
反观此前的版本,12、13都比较拉垮,mds不太靠谱,如果client有故障,读写卡住,mds分分钟给你瘫痪,极具危险性,还是不建议上,如果已经有在线的fs,还是强烈建议迁移到14.2.20+的版本5 C; o% O2 l8 D* f
& ?, O6 t/ L; S- H8 H
下一步,将继续测试cephfs的其他异常情况和大规模数据写入后slow req的问题,并对代码逻辑方面进行一些分析,敬请期待^_^) u) k2 X/ P6 l3 m0 L9 k n
9 R4 g$ H Y/ D/ f) u |
|