找回密码
 注册
查看: 533|回复: 0

ceph tell mds.monxx client ls 检查ceph 文件系统挂载和驱逐

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2022-8-19 17:35:49 | 显示全部楼层 |阅读模式
ceph tell mds.monxx client ls 检查ceph 文件系统挂载节点
& {) [4 A$ L3 w/ {3 G自动驱逐客户端¶
. ?4 j7 T& s8 K' t0 g在三种情况下,客户端会被自动驱逐:* a7 I: v3 ^! A- Z/ @$ F) e
3 y2 M8 e5 V0 M) P
在一个活跃的 MDS 守护进程上,如果一个客户端在限定的时间 session_autoclose (一个文件系统变量)秒数(默认 300 秒)内没有与 MDS 通讯,它就会被自动驱逐。
7 n4 ^, [# _: Q3 e, s
, v+ K$ d2 N, w在一个活跃的 MDS 守护进程上,如果一个客户端在限定的时间 mds_cap_revoke_eviction_timeout (配置变量)秒数(默认 300 秒)内没有回应 cap 撤销消息。默认已禁用。
" u+ |" `: h& I' z. a9 w. i$ |0 F* k4 k  T& W& t0 l
在 MDS 启动(包括故障恢复)期间,它要途径一个名为 reconnect 的状态,在这个状态下,它会等待所有客户端连接到这个新 MDS 守护进程。如果有客户端在限期( mds_reconnect_timeout ,默认 45 秒 )内未能连上,它们就会被驱逐。
9 i' f9 n5 ?8 p8 ]6 w# N; W3 ^/ A7 m7 m5 `- f
以上任何一种情况产生,就会向集群日志发送一条警告消息。: d  E$ R8 ?/ T. Z4 h  H) V$ V
, Q) o- x0 S5 f6 F
手动驱逐客户端¶" r5 u6 a% Q1 G6 U% q4 [' ~  s
有时候,管理员可能得手动驱逐某个客户端。比如说,一个客户端已死,管理员不想等它的会话超时;或者有个客户端行为异常,管理员又无法登录客户端节点卸载它。
, D  T2 T& Z* c* h2 |# h' j+ A6 r, b. Y: A, I  ^, A2 n
一般要先检查下客户端列表:
! m* O: ?7 f, h3 ?7 ?0 e* h) Y0 k; n* |: y& M: _, f8 E
ceph tell mds.0 client ls+ W2 o5 O! y/ j# \! U  Q8 h
* z) F" [. Z& l: K) M
[3 N1 ~" a( N: I  l
    {
1 H, h0 |' D( ]& G        "id": 4305,  [% Z/ I/ ], P) s1 b  `/ c) b
        "num_leases": 0,
$ y: V) s$ ~! h9 Y6 m) U) K        "num_caps": 3,7 E3 J6 P1 B0 c$ C/ K3 [- B
        "state": "open",
! i( q/ t2 o* P. O( r        "replay_requests": 0,% D0 g8 B( Z  g* ]
        "completed_requests": 0,( D* O- U/ w7 i) ?/ g
        "reconnecting": false,
. S! ?1 l( W3 n( C1 c) X4 k        "inst": "client.4305 172.21.9.34:0/422650892",5 y/ N! a* l  h! w+ V) X3 \
        "client_metadata": {
* p4 D7 ^( O: J            "ceph_sha1": "ae81e49d369875ac8b569ff3e3c456a31b8f3af5",+ g  p, v( ~3 ?, J
            "ceph_version": "ceph version 12.0.0-1934-gae81e49 (ae81e49d369875ac8b569ff3e3c456a31b8f3af5)",, c5 s6 s$ f$ b2 [7 N, d
            "entity_id": "0",
8 e7 g" a# R8 T0 V            "hostname": "senta04",* B; y) m! d& U% e/ H' v2 G
            "mount_point": "/tmp/tmpcMpF1b/mnt.0",
4 Z4 i" X. X4 N7 W* b            "pid": "29377",
5 [3 K  d& \1 X3 e& ~7 R            "root": "/"1 Y( Z) y  T3 N8 Q. L; Q
        }
: e2 t  z5 W4 M; u" u    }0 a, d* ?' F7 y2 g  J
]
4 R8 S" }6 x# \0 I* B4 C, x找到想要驱逐的客户端后,就可以用它的唯一 ID 、或者其它属性来标识它:
# C. G+ ~7 V; O% O, c7 b2 v3 X5 \
3 r- B6 e8 U; p0 [# 这些都可以
6 }: l7 A1 W0 ?3 [, K, s; iceph tell mds.0 client evict id=4305: T2 x* ?+ k: b
ceph tell mds.0 client evict client_metadata.=43059 M  |' Q8 T$ U/ n+ J' g
高级话题:从黑名单踢出客户端¶/ u( V9 k6 e' Y, _& p! z
通常,进了黑名单的客户端就不能再重新连接服务器了:它必须被卸载、然后再重新挂载。8 A& k* x' I; K: @6 S2 m2 P' g
  ^. l+ o, x: `- {6 f7 W
然而,在某些情况下,还是得允许被驱逐后、又想重连的客户端。3 ]4 R0 J9 X" O! n8 h# K  t" w

6 s' I* M. b+ B) B2 wCephFS 是用 RADOS OSD 黑名单来控制客户端驱逐的,所以只要把它们从黑名单删除,就是允许这些 CephFS 客户端重连了:
( W9 a# _. I' q5 U8 m6 J5 R6 O( |# `7 r) Q+ N- M8 O
$ ceph osd blacklist ls& W' ?; ]: Z8 \- `
listed 1 entries
+ H8 x8 H0 e8 ^% g/ J127.0.0.1:0/3710147553 2018-03-19 11:32:24.716146
" J# [) X' ?$ R4 A$ d( `( T8 J" X$ ceph osd blacklist rm 127.0.0.1:0/37101475530 K! X5 }/ s2 |' w# R/ a( o, m
un-blacklisting 127.0.0.1:0/3710147553
( p' a# _2 b* f4 E) b6 _假如被拉黑的客户端对缓冲 IO 做了操作,而其它客户端访问了这些文件,这样做就可能会破坏数据完整性。而且也不能确定客户端功能会完全恢复——要想挽回一个完全健康的被驱逐客户端,最好的方法是把它卸载掉,然后再干净地挂载。
, H; k  J" @* z% e& o9 {) _" }  \; L& A- f1 q5 ^5 {  @7 d: p
如果你想这样重连客户端,可以在 FUSE 客户端上设置 client_reconnect_stale 为 true ,以此为客户端重连提速。7 \, q% S2 K- M$ v6 F
+ V7 Y, ]4 r/ ~6 F8 x
高级话题:配置黑名单功能¶& j! I8 X8 Q, `% V  l+ n4 `
如果由于客户端主机慢或者网络不可靠,频繁遇到客户端驱逐,这些底层问题还解决不了,你可以让 MDS 别那么严格。; w& {( X% |8 _6 K$ d; O4 ~8 G9 R9 T

) S1 \% W1 j  O, a5 C- f# ]& P对于响应缓慢的客户端,可以简单地丢弃它们的 MDS 会话,却允许它们重新开启会话并且允许它们继续与 OSD 通讯。要打开这种模式,可以在 MDS 节点上把 mds_session_blacklist_on_timeout 设置为 false 。% i. c! O6 p. _7 y0 A
' e7 m, F9 j6 w3 m: H
对于手动驱逐时的类似情形,可以把 mds_session_blacklist_on_evict 设置为 false 。) J* T% d5 s6 j$ n- I" }! \

* h4 W% C& E8 e) f, u  y注意,如果禁用了黑名单功能,那么驱逐客户端只会在收到了命令的 MDS 上生效。在一个多活 MDS 系统上,你得向所有活跃的 MDS 守护进程发送驱逐命令。黑名单功能启用时(默认如此),只要把驱逐命令发给一个 MDS 就足够了,因为黑名单会自动扩散到其余守护进程。
2 q9 z6 F* Q% N8 s. c! t9 `2 ?$ Q$ P
5 v2 L8 E; t: r; i1 B% g背景: 黑名单和 OSD 元图屏蔽¶
: z% a9 c3 j7 P4 X% p9 h一个客户端被加入黑名单后,有必要确保其它客户端和 MDS 守护进程能收到最新的 OSDMap (新增了这条黑名单的),以免有人再访问那些进了黑名单的客户端访问过的数据对象。
3 y% ~! U* P$ @, L9 F
+ p! x0 m9 z% t这是通过名为 “osdmap epoch barrier” 的内部机制保证的。: X' g0 k4 F8 ~8 ]3 j& ~1 ]

# n$ k4 \3 ^7 X, S& I+ b* m' i: T此屏蔽的目的是为了确保当我们分配出这些能力后,别的客户端就有可能触碰同样的 RADOS 对象,接受分配能力的客户端们必须有足够新的 OSD 图,这样它们才不会与取消的操作(来自 ENOSPC )或进了黑名单的客户端(来自驱逐过程)竞争。8 c, Y4 _: {: B4 l

) g) G4 Q" t9 A) X+ i更具体些,我们设置元图屏蔽的情形有:/ J! k% I2 [8 d% Z/ P6 j. b
$ u8 r" U: I( q5 m! @0 R( e2 i' r
客户端驱逐(此客户端被加入黑名单了、且其它客户端必须等到有加黑之后的元图出现才能触碰同一批对象);
6 X; g) w4 F5 ?1 K+ D3 y$ G6 k2 A7 Z4 ]  ]6 L
客户端正在处理 OSD 图的完整标识(此客户端可能会在快完整的元图中取消一些 OSD 操作,这样其它客户端都必须等着,直到元图完整或周期达到才能触碰同样的对象);
% k5 q9 D2 O, j
- Y* B& M: u* _3 IMDS 启动,因为我们不会永久存储屏蔽图元,所以必须假设重启后总是需要最新的 OSD 图。
: r2 h" ?1 f( ~; w% R8 w* m" z; L* ^- }+ O% C* h7 n/ u
注意,为保持简洁性这是个全局值,其实我们可以做到按每索引节点维护此值,但我们没有这么做,因为:
1 \$ _$ h, z0 Z! F9 y
% v" E$ U# K, u- y它会复杂得多;# e( u1 L) x% \4 z- |$ J
3 A6 r" }- p  F
每索引节点需额外多占 4 字节的内存;7 f( C' r( u1 v: R
0 G5 {/ ?7 c3 d/ x7 _
无论如何它都不会比大家一直都拥有最新的 OSD 图更有效。而且,大多数情况下,大家都能轻松地越过这个屏障而不是等着它。
3 [+ V! B3 P# c) o: ]- S* n2 R- @0 s2 q* `( E! V$ u
我们仅在极少数情形下使用这种屏蔽,所以每索引节点这样细粒度的实现带来的好处也很少见。
3 p6 i3 S% A9 N# D+ ]' C1 r  U# X" |* M1 o% ]
元图屏蔽随其它能力消息一起传递,并且可指示消息接收器在看到这个 OSD 元图前、别再向那些 OSD 发送 RADOS 操作。主要是面向客户端(它们直接向文件写入数据)的,也适用于 MDS ,因为像文件尺寸探测和文件删除这样的操作都是直接在 MDS 上进行的。
3 ^4 K( {% y" ?. M# b" `
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 00:01 , Processed in 0.015111 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表