找回密码
 注册
查看: 534|回复: 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 文件系统挂载节点
' I- f# G- F2 a# a/ W- t' \5 P1 B自动驱逐客户端¶- i; @0 ?! I. `- P  @4 P
在三种情况下,客户端会被自动驱逐:! ]) r9 U5 d2 u- `

5 F$ R' d8 w0 d% J- O/ c4 j7 t9 c7 ~在一个活跃的 MDS 守护进程上,如果一个客户端在限定的时间 session_autoclose (一个文件系统变量)秒数(默认 300 秒)内没有与 MDS 通讯,它就会被自动驱逐。- `, `6 B6 K5 B$ L* u
, ]0 I5 ~3 e, a1 g: V8 X& k
在一个活跃的 MDS 守护进程上,如果一个客户端在限定的时间 mds_cap_revoke_eviction_timeout (配置变量)秒数(默认 300 秒)内没有回应 cap 撤销消息。默认已禁用。
4 f9 \& P( G# A6 o+ T! y2 v
% K7 V; E% t& f$ T2 V在 MDS 启动(包括故障恢复)期间,它要途径一个名为 reconnect 的状态,在这个状态下,它会等待所有客户端连接到这个新 MDS 守护进程。如果有客户端在限期( mds_reconnect_timeout ,默认 45 秒 )内未能连上,它们就会被驱逐。
6 n9 ?8 j' ^8 o7 x8 |! q3 E8 f1 V" n8 G& a/ g9 ^
以上任何一种情况产生,就会向集群日志发送一条警告消息。
. i* }7 B# I( ]+ ]0 C2 _8 T" _# Q: T% d  B# X. n7 b/ s
手动驱逐客户端¶0 v& X: |$ |: L, c+ W7 T' N; K
有时候,管理员可能得手动驱逐某个客户端。比如说,一个客户端已死,管理员不想等它的会话超时;或者有个客户端行为异常,管理员又无法登录客户端节点卸载它。7 U: M, [1 i/ \6 i1 D1 l: Y: J

8 P. o, Z) a/ q0 G  i9 q一般要先检查下客户端列表:
" W" B9 R* D. f1 y0 |3 A: g" F) L# U. g
ceph tell mds.0 client ls
; C2 g# y% L( u8 C$ I  ^5 u) k. j* L* q) a
[
) c  L. d; {5 w% p' `" h! O4 y    {
0 d; L% @+ x3 o) v. ^; ^        "id": 4305,
  \$ b1 c5 t5 S3 u        "num_leases": 0,
# _9 U" m6 Y& F; C  ^        "num_caps": 3,9 {9 ?2 L5 {- F/ t# Q
        "state": "open",
; W; t$ F7 V0 E7 E5 d        "replay_requests": 0,, ~$ M3 f2 T2 o& ^; V. h; O" X+ T
        "completed_requests": 0,
# e& N7 ?) j( P. d0 }& _        "reconnecting": false,$ \5 s) \1 H; D1 |
        "inst": "client.4305 172.21.9.34:0/422650892",+ q$ o: X1 g# e) {
        "client_metadata": {: d1 ?! r/ x+ ~! u8 P2 O8 [& o
            "ceph_sha1": "ae81e49d369875ac8b569ff3e3c456a31b8f3af5",# E' h5 B) |' @
            "ceph_version": "ceph version 12.0.0-1934-gae81e49 (ae81e49d369875ac8b569ff3e3c456a31b8f3af5)",
7 l3 k, d9 C* N2 G# H! a6 q8 L            "entity_id": "0",5 I+ \2 r6 }: n- j
            "hostname": "senta04",( I" Q! T, h( Q; S; R
            "mount_point": "/tmp/tmpcMpF1b/mnt.0",( L6 r+ C) X- z. A) w- T. @& W
            "pid": "29377",4 }0 |! K+ ~% ^  z2 b
            "root": "/"
/ [4 v2 u  \' j; z9 q. Y0 C; U        }
2 w" Y- e; \( X' F7 y0 B" [    }' }. x$ {6 b. {' n  G3 a, ~
]
1 `9 F( E: F  [/ D; e/ u5 r找到想要驱逐的客户端后,就可以用它的唯一 ID 、或者其它属性来标识它:- q. E' Y& |( ~* d
% \3 V* V; n. ^
# 这些都可以* |' u  O% N8 L, V: _4 x9 H
ceph tell mds.0 client evict id=4305
" w8 V/ K! I( E3 F9 Qceph tell mds.0 client evict client_metadata.=4305
. L4 i# m7 x( g' ~% s高级话题:从黑名单踢出客户端¶4 h& |$ h; L* V
通常,进了黑名单的客户端就不能再重新连接服务器了:它必须被卸载、然后再重新挂载。
  e! A* m3 Z" z! x& T' W- ?  f) q) o' _0 E) u) X
然而,在某些情况下,还是得允许被驱逐后、又想重连的客户端。9 @) _, i8 v) A0 f

9 V- N& F' ]4 z" M. bCephFS 是用 RADOS OSD 黑名单来控制客户端驱逐的,所以只要把它们从黑名单删除,就是允许这些 CephFS 客户端重连了:" |" \% t+ L% \4 u# ~

* o* u' a$ l0 a$ ceph osd blacklist ls% V8 z( o3 }9 z% X; |- w
listed 1 entries
8 ^4 U2 x' a7 J" N- ~127.0.0.1:0/3710147553 2018-03-19 11:32:24.716146+ Q0 k8 _; g) y5 ^& B: i+ v# e- ]( _
$ ceph osd blacklist rm 127.0.0.1:0/37101475538 R/ k! g4 U! y) o, x6 V
un-blacklisting 127.0.0.1:0/3710147553% v4 d$ a7 R) z% l$ r
假如被拉黑的客户端对缓冲 IO 做了操作,而其它客户端访问了这些文件,这样做就可能会破坏数据完整性。而且也不能确定客户端功能会完全恢复——要想挽回一个完全健康的被驱逐客户端,最好的方法是把它卸载掉,然后再干净地挂载。
! @1 E* F0 {& n  Y$ s( U) k* m/ k! F4 {' P
如果你想这样重连客户端,可以在 FUSE 客户端上设置 client_reconnect_stale 为 true ,以此为客户端重连提速。, h/ j, I9 P& e8 O$ g
/ P# r4 ?% ~% ]: H. s, m9 U/ G
高级话题:配置黑名单功能¶/ a$ X8 @7 D6 D& H+ L8 K( Q1 h0 l
如果由于客户端主机慢或者网络不可靠,频繁遇到客户端驱逐,这些底层问题还解决不了,你可以让 MDS 别那么严格。; e# t! u0 ]! g9 V% |* k/ c
4 j: r5 |- C0 ^* n- G6 {+ E& V
对于响应缓慢的客户端,可以简单地丢弃它们的 MDS 会话,却允许它们重新开启会话并且允许它们继续与 OSD 通讯。要打开这种模式,可以在 MDS 节点上把 mds_session_blacklist_on_timeout 设置为 false 。# f+ ]4 k* |' |& V3 x5 P( f

8 t! i, j" f+ F* o+ V4 w: \% N对于手动驱逐时的类似情形,可以把 mds_session_blacklist_on_evict 设置为 false 。
, \( I$ H2 Q% f( Q# Y
# Z7 {' l( z1 I% v# i7 k* |注意,如果禁用了黑名单功能,那么驱逐客户端只会在收到了命令的 MDS 上生效。在一个多活 MDS 系统上,你得向所有活跃的 MDS 守护进程发送驱逐命令。黑名单功能启用时(默认如此),只要把驱逐命令发给一个 MDS 就足够了,因为黑名单会自动扩散到其余守护进程。9 b, g# a' o7 |$ Y1 w: _
: Z+ W+ e' J$ n: V1 P: B/ K3 M2 R9 F
背景: 黑名单和 OSD 元图屏蔽¶
: F# t$ t9 x5 H; |4 S一个客户端被加入黑名单后,有必要确保其它客户端和 MDS 守护进程能收到最新的 OSDMap (新增了这条黑名单的),以免有人再访问那些进了黑名单的客户端访问过的数据对象。
4 u( W8 N, i. ?8 f8 `) r# @7 V1 ?3 {- B/ z% |; Z: {( |# J
这是通过名为 “osdmap epoch barrier” 的内部机制保证的。
$ J& I  i  H& |& U4 W) v) S5 ?/ g- H  h( \9 ]: B6 {% ]) q& b. I( O
此屏蔽的目的是为了确保当我们分配出这些能力后,别的客户端就有可能触碰同样的 RADOS 对象,接受分配能力的客户端们必须有足够新的 OSD 图,这样它们才不会与取消的操作(来自 ENOSPC )或进了黑名单的客户端(来自驱逐过程)竞争。9 l3 j, A7 {3 j: v; {: f

4 V. [/ v. e/ p( U; s  K2 X* w1 M更具体些,我们设置元图屏蔽的情形有:( C) b& e& k# F9 e' P2 F% I: _

, o( Q. K' i! l; X客户端驱逐(此客户端被加入黑名单了、且其它客户端必须等到有加黑之后的元图出现才能触碰同一批对象);2 n  `# _' ]1 P

) T  Y& V' h1 q$ d# g6 M! [客户端正在处理 OSD 图的完整标识(此客户端可能会在快完整的元图中取消一些 OSD 操作,这样其它客户端都必须等着,直到元图完整或周期达到才能触碰同样的对象);
: A; f" s" J* h7 B4 `: E$ E/ ~7 q" l7 [7 H2 j4 F+ V9 Z3 {
MDS 启动,因为我们不会永久存储屏蔽图元,所以必须假设重启后总是需要最新的 OSD 图。
4 Q" w  g$ p) j0 s- w3 Q- y+ K# \
+ a9 [* [/ x$ r! H4 {注意,为保持简洁性这是个全局值,其实我们可以做到按每索引节点维护此值,但我们没有这么做,因为:
; G. k  f+ T8 u$ H+ n* n; b! y$ A+ P% J, }) z( c6 L/ c
它会复杂得多;
  o+ H# a. o/ e/ O: \, A' J4 z/ ?6 j, r4 Q9 v( B! h) t
每索引节点需额外多占 4 字节的内存;2 W, ?- p/ i3 Q4 ~/ n1 l$ o# d

0 J" q  Y4 y$ k; x无论如何它都不会比大家一直都拥有最新的 OSD 图更有效。而且,大多数情况下,大家都能轻松地越过这个屏障而不是等着它。# V0 Z1 F/ K) B: d  n$ I

" k. ~/ T) Y1 V" {  N我们仅在极少数情形下使用这种屏蔽,所以每索引节点这样细粒度的实现带来的好处也很少见。1 B% }5 P8 N: h, h

5 p* L0 z# ^% f0 }8 |. g元图屏蔽随其它能力消息一起传递,并且可指示消息接收器在看到这个 OSD 元图前、别再向那些 OSD 发送 RADOS 操作。主要是面向客户端(它们直接向文件写入数据)的,也适用于 MDS ,因为像文件尺寸探测和文件删除这样的操作都是直接在 MDS 上进行的。! k& a& l7 q2 J, ~& @; T. Z1 X: K
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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