找回密码
 注册
查看: 1419|回复: 1

Centos 7.9 部署Ceph L版整理

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2021-12-8 15:36:38 | 显示全部楼层 |阅读模式
ceph L版已经发布很久了,官方说默认使用BlueStore作为OSD的存储后端,在Cephalocon APAC 2018上也是讨论的焦点之一。
提到BlueStore,不得不说一说Ceph的STORAGE DEVICES。
STORAGE DEVICES
Ceph守护进程将数据存储在磁盘上:
1
) {5 J  I! E) E6 C* U$ Y# o; M2
: [% b- S  G6 u, ]. J7 I; R0 J* y3+ g# T! g7 ~5 {# O
4. n# t; y0 J  r
59 ~+ X4 O) E  n4 F5 S6 E
6
; m0 U& e, C+ _' z
Ceph OSDs ( Object Storage Daemons )  ?; p" J: R& ^7 s% t. s
    Client端的大多数数据写入Ceph后被存储的地方,一般而言,每个OSD都由单一存储设备支持,如传统硬盘(HDD)或固态硬盘(SSD)。
; V2 N9 N# N0 `: c% D/ Q4 l# |; E    OSD还可以由多种设备组合,如存储数据的HDD和存储某些元数据的SSD(或SSD的分区)。+ e; B  S( u  H' h/ j( d
    群集中OSD的数量通常取决于你要存储的数据量,还需要考虑每个存储设备的容量以及冗余级别和存储类型(replication或erasure coding)。
& L/ R: _$ n! @* \$ W/ Q. C1 jCeph Monitor
9 J: W. T$ @# @0 ]# ~4 {    管理关键群集状态,如cluster membership和authentication信息。对于较小的集群,需要几千兆字节(几个GB),然而对于较大的集群,monitor的数据库可以达到几十甚至几百千兆(几十个GB甚至几百个GB)。
" Z+ u' c8 }' W  o
( N5 Z$ x, Z1 L7 }/ H
OSD BACKENDS
OSD可以通过两种方式管理存储的数据。从Luminous 12.2.z发行版开始,新的默认(推荐)后端是 BlueStore。在Luminous之前,默认(也是唯一的选择)是 FileStore。
BLUESTORE
BlueStore是专门用于Ceph OSD管理磁盘上的数据的专用存储后端。在过去十年间,受到了FileStore管理OSD经验的启发.5 V% j3 \# b9 v+ J, W
BlueStore的主要功能包括:
1- D7 D4 E# e! n- \3 h1 T
2* }- t$ E% H/ L4 i  |
3
6 L  r' L: ]& L/ r4 W- H1 F40 A& V0 L, {' D3 o$ n& D" j
5
' K. N3 U! w, q& I1 l2 Z6
3 `/ @- w) [4 h8 t" X) ^76 Z8 n: l) c4 W7 g2 g( j
8% o3 @6 z, t1 j& U' W5 N% W1 {
9
0 M# p2 b  p  \+ K10( i) ?' \( r7 |8 u! d2 T: b
11! _9 K0 U; ?* c! w+ Q
12
; o/ v8 C8 y  K; Z  C9 w8 H( d% K13# }7 t7 W+ ^; ]# g
144 K1 j& T1 t/ I  Q& \1 E0 t& C
15% d$ R2 L, V% w0 t! C$ i
16
: h0 v# m2 a' u! j9 r  \8 ^0 C17+ b# p; B: L/ ]% N4 X2 b6 i; M9 s' w
18
4 X! I3 t, }" P3 c  ~$ _4 L" R19+ Y' `# x; V+ V- `
直接管理存储设备 ( Direct management of storage devices )
/ q8 E( B6 L4 Z3 O! L( U# t    BlueStore使用原始块设备或分区。这避免了任何可能限制性能或增加复杂性的抽象层(如像XFS这样的本地文件系统)。
6 j& s2 w" z( }2 q& a
! t. _, c- ]$ `9 ]1 k* t使用RocksDB进行元数据管理 ( Metadata management with RocksDB )" w4 J  g: c/ x  V6 o' d5 V+ c
    为了管理内部元数据,我们嵌入了RocksDB的key/value数据库。例如在磁盘上,从object names到block locations的映射。2 x& \& j* j7 U
: r) \7 `0 s/ `; @: u, S% u
完整的数据和元数据校验 ( Full data and metadata checksumming )0 Y( M7 V9 N3 `7 a1 G
    默认情况下,写入BlueStore的所有数据和元数据都受到一个或多个校验和的保护。没有数据或元数据在未经过验证的情况下,就从磁盘读取或返回给用户。
% S! [, f  Z- E/ j  e! {, U2 r' s2 y* h  H  R& P; R
内置压缩 ( Inline compression )
' k- `, r/ M. s+ u1 P+ f4 `, {" l    写入的数据在写入磁盘之前可以选择压缩。) V# `$ a3 v% E: O2 O/ f6 e6 U

) d. F. u" N; G( b6 p多设备元数据分层 ( Multi-device metadata tiering )
: g6 j- ~1 e  H% r" K    BlueStore允许将其内部journal(预写日志,write-ahead log)写入单独的高速设备(如SSD,NVMe或NVDIMM)以提高性能。/ ~( J0 j: ]3 r0 }1 j. Y
    如果有大量更快速的存储可用,则内部元数据也可以存储在更快的设备上。
4 R, x% g3 D0 t" d4 }; r* X8 o5 f: a8 f0 M
高效的写时复制 ( Efficient copy-on-write )
7 r2 U: J+ C5 d4 ]. Z! g  T    RBD和CephFS快照依赖于copy-on-write clone机制,也在BlueStore中得到了有效的实现。这将为常规快照和erasure coded池提供高效的IO(依靠clone实现高效的two-phase commits)
: B, f( G7 ^# y, M6 x+ |
& ?  Q& w7 H4 X

# M2 K. T9 ^0 w  `. l; k3 lFILESTORE
FileStore是在Ceph中存储objects的传统方法。它依赖于标准文件系统(通常是XFS)和某个元数据的key/value数据库(传统上是LevelDB,现在是RocksDB)结合使用。, ?" g5 o% {$ P* F
FileStore经过良好测试并广泛用于生产,但由于其整体设计和对传统文件系统存储object数据的依赖性,因此存在许多性能缺陷。, |9 r' U4 o* J" F2 u0 K9 ~+ Q9 A* z
尽管FileStore通常能够在大多数与POSIX兼容的文件系统(包括btrfs和ext4)上运行,但我们只建议使用XFS。# a( t, [+ g; z) I" N
btrfs和ext4都有已知的bug和缺陷,使用它们可能会导致数据丢失。默认情况下,所有的Ceph提供的工具都将使用XFS。
在ceph L版代码结构改动比较大,增加了CEPH-MGR向外部监测和管理系统提供额外的监测接口,今天就用虚拟机搭建实验环境玩一玩。
环境信息
18 [  s' u5 I' o' C' T1 q2 v
2
( ^$ X$ L9 p; g3
2 e5 `- c8 \8 H! u9 J; E47 Q( u1 k8 `, j) ]% q5 D
52 z% L& c: i  D% q
6" C  M& A4 p' d3 ~5 h2 \
76 E6 h! i* z/ Q9 ^
8
! a7 S( J9 c  s4 ^7 B' l  z+ r9
  C5 c6 D, |! O, r10
4 N6 o, `% Z/ O3 \, x; B11( C: {  M1 A9 K# }
12. D3 N1 D; ^" _7 E, s5 M7 ~: T) `
13
% d0 T7 C: A+ g# g% w14
  D8 k: N5 @8 a# c; F; O( D6 [, Q15
+ K  B3 {7 T. E: K$ T0 }7 _# f! U163 ]: v/ @6 T/ J6 F
17
) A( X; c7 Z& g6 d* Z18* `, G& c5 N0 C1 G' t( R/ `& c
[root@cephL ~]# yum install -y redhat-lsb
7 ?6 X% o9 `) D2 V  Z[root@cephL ~]# lsb_release -a
3 G3 \; G/ p9 Y3 M9 G* LLSB Version:        :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch  q, _7 M% E0 w2 L4 l! C! z
Distributor ID:        CentOS# D. E& ^6 s# f- i9 j$ w
Description:        CentOS Linux release 7.4.1708 (Core)
# \/ q3 j9 w0 L* @6 \Release:        7.4.1708
" v" {% m* v/ X) P% G0 UCodename:        Core
- i6 k" I" c8 [9 y& Z( q  a. w: d' [& v! [5 a& J* y4 P4 M
[root@cephL ~]# lsblk, U0 V, u" |2 |5 L$ o# F
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
# J& O1 ]# r' R: b: k+ @. o! Fsda               8:0    0   40G  0 disk
: \$ |, N: q  O) y" u0 Q  `1 U├─sda1            8:1    0    1G  0 part /boot
) a% m6 C3 ^7 O└─sda2            8:2    0   39G  0 part, m9 o! r( W$ h$ e
  ├─centos-root 253:0    0   36G  0 lvm  /4 _! L2 G. Z) S% h; u$ F* a/ F) k
  └─centos-swap 253:1    0    3G  0 lvm  [SWAP]* q5 S: w% P# g% U, j! z
sdb               8:16   0   30G  0 disk, l. H2 T! s; a& b" I8 N) P. x
sdc               8:32   0   30G  0 disk
1 a! M" n6 f. b" T9 E. h9 qsr0              11:0    1 1024M  0 rom
, ]8 @2 K: C0 j3 R9 v' w. p; g

( s$ }; V( h3 u安装安装pip和ceph-deploy
1
' `8 ?$ P3 R- ]0 \4 r2 |9 [28 d$ U% R; R8 n4 B
3+ M% v3 t, ~) r+ V) l& c+ e9 G" T& s
4
8 D% v+ }& K* Q, ~: I5. J4 C9 I8 P1 P
6) w1 R6 P4 a, m4 e9 {" A
7
- L2 f9 L5 J9 ~% ^7 ~
[root@cephL ~]# curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"7 N0 R0 b/ h7 b7 r- D; H
[root@cephL ~]# python get-pip.py
7 J7 `6 c$ c' Z9 v: _[root@cephL ~]# python -m pip install -U pip
  o$ {/ g- W  M[root@cephL ~]# pip install --upgrade setuptools6 P# I3 X  D1 L& U6 N; m6 B
[root@cephL ~]# pip install ceph-deploy
' \* J0 N3 o% N9 ?8 @, Z$ `7 u[root@cephL ~]# ceph-deploy --version( s; F' s# j( e* \2 A+ Q
2.0.0. b2 x7 R9 {1 u2 Y5 v# @8 _
; c! n; U: W; X- A7 \: f
安装ceph软件包
1# F' v& @1 e# z
24 j0 I; c* P! E% d& \* L: q" s/ k
[root@cephL ~]# mkdir ceph-deploy && cd ceph-deploy
* s9 [( M# t3 H; W5 }[root@cephL ceph-deploy]# ceph-deploy install cephL --release luminous. {0 T+ s8 }$ V

- C( T& q/ `) m  ?# G开始部署一个新的集群,然后为它写一个CLUSTER.conf和keyring
1' s/ z- z( f" K
[root@cephL ceph-deploy]# ceph-deploy new --public-network 192.168.56.101/24  --cluster-network 192.168.56.101/24 cephL1 o% _: ~" m+ G. m' \" R
! s+ p. ^, a+ _4 x2 D
部署MON
1
2 i5 u; ]0 D$ U( H. v2 j/ s4 |2
1 l0 h- @- v* |1 c: k3
9 w) Q3 C6 g* l9 H
[root@cephL ceph-deploy]# ceph-deploy mon create-initial9 }' z; _2 B6 p! J& N7 K; V
[root@cephL ceph-deploy]# ceph-deploy mon create cephL
; A: ?# ]7 g! a; x2 |# yceph        1110       1  0 12:57 ?        00:00:01 /usr/bin/ceph-mon -f --cluster ceph --id cephL --setuser ceph --setgroup ceph$ W6 J# D0 f' P+ R! c5 |

) [, m# |6 Y' T# M) _0 Q# m部署OSD
bluestore方法
1" O, ^3 d7 W# \+ Y
2
0 ^5 E" _3 q/ i. [3
5 d: H2 O+ j" j7 K* O& Q4 W4
* j, x4 C' S' u0 m, f6 G, H' c/ u8 `56 j, k7 p0 _6 A  l
# 在创建osd时,L版默认是bluestore- U( L- Y) s3 O! n! k3 w
[root@cephL ceph-deploy]# ceph-deploy osd create --data /dev/sdb cephL3 j  E. T/ F  C: \
ceph        1514       1  0 12:57 ?        00:00:01 /usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph0 S4 A* t( P) M( _/ c
[root@cephL ceph-deploy]# ceph-deploy osd create --data /dev/sdc cephL0 O, w& M: E. d, ]! K3 C
ceph        1518       1  0 12:57 ?        00:00:01 /usr/bin/ceph-osd -f --cluster ceph --id 1 --setuser ceph --setgroup ceph  \; n- P% U" {) E

$ F, Z( Z& F& b! U1 ^* _) `- A
遇到问题
1+ E% l4 k  v4 E& R% V) D
2
8 p3 v* G7 e6 F( A, U7 n' o3! w5 _! n4 J4 z- v9 }
4
5 S5 Q! p) r3 K( }% p5/ n" j' i  h9 c* B+ M2 p1 h3 Z" L
6
1 {+ R6 C3 l$ r( o70 q' t8 K3 U: b4 ?, h- j" x
84 |8 [) `8 b. x% i0 Z) R
92 K. I# n- t6 h/ l: k
10* b- V3 l5 G' U
11
* c. M) h4 d0 e: L. z0 b12: a- q2 B0 N9 }3 K( y
13
, T: O2 f$ _. @  j4 V14
7 a8 n0 U$ o, e; h1 ?1 a, Y15" P! G2 V( _* k2 G4 R1 P2 A% a
16
# \- l- i& p9 \7 K! v, L. b( D178 Y3 Z  Q$ n7 P$ z# D! h
183 }/ d4 d, L! ~+ W" h
19' {" J7 p4 B1 L4 H; r* k
20# @* h% @) A8 v9 b
21
% `: @) i& [$ P- c6 z3 }22" ], R4 e3 f! l$ q. l
23
7 n4 u4 k3 U  O7 d7 A/ m4 z" P0 D2 y24) m: a! A! s4 u1 M
[root@cephL ceph-deploy]# ceph -s& A6 {' m) U; B  ]( E% r  R* m
2018-04-10 12:00:19.660298 7fd1fe0ae700 -1 auth: unable to find a keyring on /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin,: (2) No such file or directory
1 l2 H/ n  \$ Y0 p9 d2018-04-10 12:00:19.660310 7fd1fe0ae700 -1 monclient: ERROR: missing keyring, cannot use cephx for authentication
& I& U: z, Y8 G: N$ Z2 M$ K2018-04-10 12:00:19.660312 7fd1fe0ae700  0 librados: client.admin initialization error (2) No such file or directory  \3 N( H4 H, C
[errno 2] error connecting to the cluster3 g9 R3 S9 X- J1 g

! J% P6 Q- K. D[root@cephL ceph-deploy]# chmod +r *
1 t" w8 T8 X( r: g2 c  N[root@cephL ceph-deploy]# cp ceph.client.admin.keyring /etc/ceph/
8 Z, M0 X9 z3 k- [[root@cephL ceph-deploy]# ceph -s
5 K8 V% r' X. e1 s1 Z: A" r  cluster:
2 a6 y' o1 N' p    id:     765752b7-1f77-4d0d-bc18-936b8ad409fd' m0 C5 ~5 `7 v  C" L# X- _* z
    health: HEALTH_WARN
8 I+ A8 l# {- P9 b            no active mgr; ^0 K( M; c1 J; h: \
( I* G0 v" j+ R' X& [, o( ^
  services:
9 z& N' n% g+ [$ m0 d+ @    mon: 1 daemons, quorum cephL* Y/ l) |4 m5 V. C) y
    mgr: no daemons active
: l6 S1 S& O6 e; N    osd: 2 osds: 2 up, 2 in
1 x  W4 Z4 a! z: o; s; y$ k
1 s% y5 q" g9 u8 M) _' R' ~& d  data:
( t1 A) H' o: b( Z! z    pools:   0 pools, 0 pgs' E5 M* w8 n; u6 n& ?! x) R3 n
    objects: 0 objects, 0 bytes. A' Z' D4 i3 z: h
    usage:   0 kB used, 0 kB / 0 kB avail- ^5 D2 r2 T  S; l
    pgs:) Z# |7 x/ k) W

  K) M! U1 \/ p/ [% W3 }+ w. X4 g1 Y
filestore方法
11 h% l1 S! n$ v% G
2( o4 ^( M4 k2 @* D8 h3 d& j
3  ]/ V% f, x  E! U" w# m; a0 A7 f! i
4/ J3 @3 I+ n  }5 C. w6 z4 a4 R
5
: p; h& x* X1 o8 F0 E6
  b+ J9 J0 g! j. G2 ]" G8 ~' q, ~$ c7
2 Q+ C# u. Z. y: `3 w) k8
: S" _- a0 l3 j5 T3 M  l9
+ q! A  o: r3 M/ O10
$ y' {4 g* j3 _. a; L6 w1 q11
' S( P+ u- Q/ ^8 e0 R$ c. f12
7 ~$ a; R. V# c) Z13
! z- S  l" \9 e14! a1 h! x& U& C! H7 n
15
+ `3 |- [; N; f5 b- Q16& g0 Q/ L) C# u
17, M% U3 a6 V7 N5 j
18
4 r- R" C" g( }/ F19
- G* h0 w( T0 N" |7 G  v20
7 [) [! c+ ~- S! F3 E210 R: U' J6 ?- g4 ?' ~, ~' \
22
; j' C/ ]9 t- Y2 w6 N23
: l+ ]; @3 l6 a6 E3 N$ C24
! f; R& M* Y, d- K) i$ H( C25
3 y2 v3 h, c; |  @3 e5 p2 _26; D, T. L1 E; o4 K
27
$ h+ k- l' D- P9 i9 U28; c% h' R0 G' W0 U
29) L' |8 T0 ]; d
30' h$ |' `2 J/ E9 g5 J$ O
31
5 W( c& O0 M1 ], R# t; Q0 J  Q/ H32
& r/ A8 G8 c& ^9 b( h3 Q2 k  [6 i33
* M8 {$ [4 E0 I7 A6 L" y2 B  D34. W6 p1 u% [8 }6 l. F
35
* [/ Z5 G) N2 w6 q0 ]: k7 m366 `" _4 H0 k% p3 p! X
37
# \: W) R6 s1 L7 i/ K38
$ p. h/ [6 n2 P; |" k39
1 s# y3 M$ m  S2 D( x40
: l* c" u  q, d( ?41
$ S( W* v* q. j3 g! A6 o5 U42
  L: G' F) W2 ~! k. e. R' n43
* X1 q1 e; c3 j9 }& N- w; K) K. E7 {44
* r' E+ x( o- o: w# G5 ~4 f45
+ W+ W6 l+ ]- D; l+ `1 z46& r& D# s( J3 \
47
% T0 i3 D  Z# Q) I! M0 @48/ J3 @0 j& G6 F% s+ p( L! G
494 m1 I8 D. ?3 N( d! y  ~  k
50
5 }% P+ h* `( V* u) S2 G) @. ^% ^4 R51
- c/ q5 `( k! K! v& K7 K2 t- q52
4 ~3 M8 N' [$ [  e/ ?53
- ~! Z, B8 b' b' c54+ e! n& R* @. _. I1 C9 I! w
55: W& ^8 t2 e4 t. N& g% Z0 S
56
  w" p& r. Y9 k9 C57
0 b) H& y) o2 j581 w4 I: I! K9 B: H+ `8 k* E
59; `& S6 o8 t& }9 I
60
0 S- A" F6 i+ P; i4 `61
# T* V3 G: g* v* y62
- d" M' z/ M2 g# E) q- _7 o63
9 N- v! f/ o, V8 g64
5 h- o* B# s; Z) k: Q0 M65
+ g7 l1 n! R0 m. {8 F$ p* G66" q' M4 f7 c" i; R
67
, [& @8 s2 r1 ]: c' F! w: r68
2 J- ?# v: ~7 \. X69
: x3 b8 z; P4 F% e- s  f70
& f+ C  S# n% a' I- |! X# J; ]71
$ @3 C! [. w* i6 F9 \72) F; j+ h5 f- s7 q+ O/ L
733 d$ X" f/ A; K6 ^7 P
740 G; ~2 W( y* A) |% x& h0 j6 P3 d
75
# a* G' o2 C! u* a$ g9 N0 `76
( `" E+ X, K, W. s$ o7 d77
+ A0 }) K) u, m2 R& J3 M78
( j% n- L/ q$ \- u) L, q79! f2 a: y4 |- o: Y9 G
80
& p9 o8 ]  _) w. Z: k# D81
% {; w. i- u) U% y+ f+ N82* f: m$ D8 f* w2 X1 Z
830 ]8 V5 d, I1 l* `7 b" N' h
84$ k7 P8 S! l* w5 e5 f1 n
85- l! v, R) S/ c3 J$ f$ O  p
86
+ O6 c/ {" t) _874 O5 o& h1 @, x* r% K
88
% x: K8 H* L& k0 O: _+ f0 v& s1 P895 s/ F* }" Y/ N  ?
901 J9 \+ u- V" v
91( o3 `! W# t/ X( V, z8 H2 [
92% q. U8 H8 T0 I7 r* Z) U
93# I- Q& [1 l: l
94
9 I/ ^. s- U# @0 n95' v: Q. ~" ]) P# N+ e/ }
967 |3 c; V* O3 I
978 b5 k9 ]3 y' G' ~% ~$ w* y1 h, \
98
6 [3 A" R* a4 [- t  ]% j5 k; P6 g996 f" b* K6 k8 y  {# [
100! D" W+ E! ]2 V8 w
101
6 [6 @  A2 I  x  s1028 {5 V, o/ M1 g- i. \/ @/ C
1032 W/ y9 i: {1 E3 ~% }' P
104% O; Z  B0 j& F
105& s& W  U2 F4 E4 t
1067 L) F- h+ [# y8 N( I. b3 l4 m! S
107
0 c1 ^1 k5 p. b8 L8 b1 `. s* T108" ~$ S/ J8 ^7 r8 W) d  \
109
( D& u/ c; s# F3 D110
2 P9 k) M# C% j' V2 l$ f111
8 o9 z. k8 K, Q$ P1 k112: Y9 C2 }0 `7 J; R9 n
1135 r- N# w' K" q
114# P" N, @. w5 T" b& D( @
115/ P* O/ Q/ P  C. U/ [$ l
116
3 ]' l4 f# s5 F, J117
" [8 |: H& |# s+ G0 A118
" K. N+ W0 c- u. d7 ~119
" A6 S5 z% W) \120
8 m" {8 c" P; n3 `) ]) Y121
% A/ ~. }8 a# Y5 n122
, N% U; W0 U$ Z6 [5 u5 C/ f1235 a2 E8 s# s$ _$ f, \" H" ~
124
7 N7 ~1 |  g" o9 N9 a( `! @9 g125
& o3 G, V" X! t6 n; t+ `! I1268 p5 t+ P; x6 J$ z. I
127
0 ?" I9 s/ J9 E/ A, ?6 s1285 x3 e5 x) [) [
129
: k+ m1 F0 X# o4 {130
1 B1 [0 n0 b1 d! a! N1314 n% G" F" ~) S/ b9 C% z
132. W( t$ a+ Y. ^* Q' _
133
1 B; u, M  L5 X- i$ t& w! D" w6 u134
- H3 u' {$ N1 T5 c
# 如果是filestore则需要对data device和journal device先做GPT partition3 ~- }' ?! P0 m5 ^$ |; r, @% ~
--data DATA           The OSD data logical volume (vg/lv) or absolute path to device5 \1 W- {1 S7 f4 d6 A6 M6 u; m
--journal JOURNAL     Logical Volume (vg/lv) or path to GPT partition$ e$ k) Z6 V) T5 V

2 U& ~9 B) ^4 Q2 J[root@cephL ceph-deploy]# fdisk /dev/sdb
/ {+ ^2 [) x+ u2 x9 BWARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
& N  `) ~$ Q4 g* `. l2 \  a欢迎使用 fdisk (util-linux 2.23.2)。
$ f2 v" Z3 D- x) o( U更改将停留在内存中,直到您决定将更改写入磁盘。
' z) ]) Q6 j  V使用写入命令前请三思。5 o  {" d% F; Q8 Y6 P
命令(输入 m 获取帮助):g
7 G3 H# a9 W6 C% xBuilding a new GPT disklabel (GUID: 80097CEF-475B-4161-ACC7-7164F6A39DD2)& b, N  f6 }7 n
命令(输入 m 获取帮助):n
( q) w, d/ v3 p7 ~$ M3 f# k. A4 G  {" u分区号 (1-128,默认 1):, W7 ^3 b9 E* v8 }
第一个扇区 (2048-62914526,默认 2048):
8 y- q" y* e8 R% uLast sector, +sectors or +size{K,M,G,T,P} (2048-62914526,默认 62914526):! e9 X( v, s; g% ~
已创建分区 1
& O5 k; _) E& S" C# u; \& i4 G命令(输入 m 获取帮助):w  K" p+ V9 N3 [# D5 D: R# ]. s' O
The partition table has been altered!% k! D6 M  Z3 ?" t. h
Calling ioctl() to re-read partition table.
4 Y; m3 C) q3 B$ B正在同步磁盘。* l  B3 {0 R$ s3 l; U* G3 X+ r

7 I6 s, W6 w! l[root@cephL ceph-deploy]# fdisk /dev/sdc
8 ^. F, ~' T" @) t8 ZWARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
" D' b7 z0 k6 Q1 w9 I( ?7 c0 K欢迎使用 fdisk (util-linux 2.23.2)。
2 j7 Q) T+ d3 d/ C$ u- ?更改将停留在内存中,直到您决定将更改写入磁盘。3 m3 }4 @  D  k4 ^
使用写入命令前请三思。
1 [) L& S9 |" a, I! Q* K命令(输入 m 获取帮助):g5 x7 \' x: T! _. I2 N
Building a new GPT disklabel (GUID: 21DFA98C-5BCF-40E7-A120-3DEDEA6600ED)
6 X& g% }0 e9 ~命令(输入 m 获取帮助):n4 @; O/ d8 }- y
分区号 (1-128,默认 1):
1 N. C) a! j! w; Q第一个扇区 (2048-62914526,默认 2048):
6 \" s, k6 Z( j4 B2 v( }( ~) `. JLast sector, +sectors or +size{K,M,G,T,P} (2048-62914526,默认 62914526):
& d3 X6 k; G( j! s! O$ {已创建分区 1! z6 R7 ?) d- t9 u6 Z
命令(输入 m 获取帮助):w
4 K; Q, l8 N. s2 }The partition table has been altered!/ `# Y. m) N7 o( E* |
Calling ioctl() to re-read partition table.3 f/ X' ~+ l* z5 p5 V
正在同步磁盘。
. ]1 Z, S2 ]6 @6 B/ U9 _/ Z0 K/ R$ m! y( m3 @& `* T6 q5 n
[root@cephL ceph-deploy]# lsblk* i5 h* M) v6 r9 _9 [- f' }$ A
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT8 M3 M1 R# `( ~. F" o, p# z+ f$ s
sda               8:0    0   40G  0 disk 6 i! b, O: k  w3 D! e0 H
├─sda1            8:1    0    1G  0 part /boot
9 d+ {  L& ]( k0 R1 Z4 t└─sda2            8:2    0   39G  0 part 5 V7 z% u7 Q+ j/ G
  ├─centos-root 253:0    0   36G  0 lvm  /& z6 l- y5 q& J, O( M9 c
  └─centos-swap 253:1    0    3G  0 lvm  [SWAP]. ], Q' c$ U$ h# Q' G
sdb               8:16   0   30G  0 disk
+ _1 G% X; K$ ^" }3 h) w2 r2 H7 K, L└─sdb1            8:17   0   30G  0 part
9 D! ~6 T; w; ?. Ysdc               8:32   0   30G  0 disk 0 r" u( p$ g" B( m% @- K& t  Q
└─sdc1            8:33   0   30G  0 part
+ R9 f: y4 z/ x6 l3 ?, ^sr0              11:0    1 1024M  0 rom  
( y" o8 b$ T2 }" n1 |7 B, v) S" L+ D3 }1 b
[root@cephL ceph-deploy]# ceph-deploy osd create --filestore --fs-type xfs --data /dev/sdb1 --journal /dev/sdc1 cephL
; o2 {2 d! }! L8 Q[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf* ~" M' N0 r% X& z8 ~
[ceph_deploy.cli][INFO  ] Invoked (2.0.0): /usr/bin/ceph-deploy osd create --filestore --fs-type xfs --data /dev/sdb1 --journal /dev/sdc1 cephL! m" H& w& x, J( i% s
[ceph_deploy.cli][INFO  ] ceph-deploy options:
: o& ^$ v! B( f/ J) W/ G" X8 T3 |0 ?[ceph_deploy.cli][INFO  ]  verbose                       : False
  Z( v$ b. s6 \; ^8 E( t1 M[ceph_deploy.cli][INFO  ]  bluestore                     : None/ F* D3 L" q+ Q# H3 M
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x22c7320># S9 D- K& P8 M" U1 D, x
[ceph_deploy.cli][INFO  ]  cluster                       : ceph3 P3 m2 W$ ~3 D' _# p2 i
[ceph_deploy.cli][INFO  ]  fs_type                       : xfs
7 `- Q' p( w5 N/ j; F4 G. v9 f[ceph_deploy.cli][INFO  ]  block_wal                     : None
' A# A$ J: G8 B$ i+ z- ~( m' M[ceph_deploy.cli][INFO  ]  default_release               : False4 _$ i/ i9 r; |. z  ?' F6 E
[ceph_deploy.cli][INFO  ]  username                      : None* ]& y3 S8 h0 H' R" J
[ceph_deploy.cli][INFO  ]  journal                       : /dev/sdc1/ @  `3 S* L1 ]5 n
[ceph_deploy.cli][INFO  ]  subcommand                    : create
1 _! u$ I' t! w2 B- t[ceph_deploy.cli][INFO  ]  host                          : cephL  P. I! Q5 r& P$ J* q. L
[ceph_deploy.cli][INFO  ]  filestore                     : True
) w' K6 t! a2 ~/ ]7 B( x[ceph_deploy.cli][INFO  ]  func                          : <function osd at 0x225ae60>: v7 I" q" v: p. q
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
+ H/ [" \0 {% W& X& D4 c% \( `9 v[ceph_deploy.cli][INFO  ]  zap_disk                      : False9 L, U5 v3 d1 T4 K" r! a
[ceph_deploy.cli][INFO  ]  data                          : /dev/sdb1
5 S1 {$ F) B2 s- G4 Y[ceph_deploy.cli][INFO  ]  block_db                      : None
' ]% A/ `' m9 x  Z: `4 f0 K& x( @[ceph_deploy.cli][INFO  ]  dmcrypt                       : False8 A4 F' s6 B& Q4 k+ q0 g
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
# C, Q! b, ^* Y' l[ceph_deploy.cli][INFO  ]  dmcrypt_key_dir               : /etc/ceph/dmcrypt-keys; i) r% j  E. T$ q8 y! h
[ceph_deploy.cli][INFO  ]  quiet                         : False9 R" A4 M& f3 j0 n/ D  D5 ?4 F
[ceph_deploy.cli][INFO  ]  debug                         : False
3 b/ B; [' w( p; q2 |, w% F[ceph_deploy.osd][DEBUG ] Creating OSD on cluster ceph with data device /dev/sdb1+ L! d- K- j0 u5 J5 t
[cephL][DEBUG ] connected to host: cephL
" `/ G8 L0 x2 K$ X( y4 v$ u" c5 K7 h[cephL][DEBUG ] detect platform information from remote host) Z$ g  P* n3 B
[cephL][DEBUG ] detect machine type
+ L5 m& h, e; [5 g! I[cephL][DEBUG ] find the location of an executable
" [* p: b2 @1 y7 z8 ^% i3 @[ceph_deploy.osd][INFO  ] Distro info: CentOS Linux 7.4.1708 Core
0 q# i: T. g8 K9 n+ p6 D[ceph_deploy.osd][DEBUG ] Deploying osd to cephL
7 m; U# v8 v; I[cephL][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
! x% v8 I, J- ^6 a  U2 _[cephL][DEBUG ] find the location of an executable. @& f7 c" O. ^/ T0 d) l8 k( l+ I
[cephL][INFO  ] Running command: /usr/sbin/ceph-volume --cluster ceph lvm create --filestore --data /dev/sdb1 --journal /dev/sdc1
! g2 J0 i# f1 N; l$ \* O2 {[cephL][DEBUG ] Running command: /bin/ceph-authtool --gen-print-key
% Z( F; t' p: |5 h0 n2 w# r- t[cephL][DEBUG ] Running command: /bin/ceph --cluster ceph --name client.bootstrap-osd --keyring /var/lib/ceph/bootstrap-osd/ceph.keyring -i - osd new 8b7be4a6-b563-434e-b030-132880a10d31
. h# V' p+ k. x+ {. B- R: U[cephL][DEBUG ] Running command: vgcreate --force --yes ceph-8e2515c1-6170-4299-b82c-a5a47681f946 /dev/sdb1
. a1 Y- z# c) y8 h, c, m& {[cephL][DEBUG ]  stdout: Physical volume "/dev/sdb1" successfully created.0 F) R! X! T5 P( k  G
[cephL][DEBUG ]  stdout: Volume group "ceph-8e2515c1-6170-4299-b82c-a5a47681f946" successfully created
* R7 Y7 u9 ~& F0 \[cephL][DEBUG ] Running command: lvcreate --yes -l 100%FREE -n osd-data-8b7be4a6-b563-434e-b030-132880a10d31 ceph-8e2515c1-6170-4299-b82c-a5a47681f946! k% ]7 b8 y% Y- h* G
[cephL][DEBUG ]  stdout: Logical volume "osd-data-8b7be4a6-b563-434e-b030-132880a10d31" created.- T0 A8 l/ L; j$ _9 G
[cephL][DEBUG ] Running command: /bin/ceph-authtool --gen-print-key
6 `4 ]( v* w2 `* p2 ?. S[cephL][DEBUG ] Running command: mkfs -t xfs -f -i size=2048 /dev/ceph-8e2515c1-6170-4299-b82c-a5a47681f946/osd-data-8b7be4a6-b563-434e-b030-132880a10d311 d! }; Y( Z; n* D1 w' t
[cephL][DEBUG ]  stdout: meta-data=/dev/ceph-8e2515c1-6170-4299-b82c-a5a47681f946/osd-data-8b7be4a6-b563-434e-b030-132880a10d31 isize=2048   agcount=4, agsize=1965824 blks
3 H: R1 e& n. q9 M, a7 K% q5 U[cephL][DEBUG ]          =                       sectsz=512   attr=2, projid32bit=1! d- j  f, {2 d  x8 D) s+ Z
[cephL][DEBUG ]          =                       crc=1        finobt=0, sparse=0& Q5 I+ B7 r7 c7 B8 y3 C
[cephL][DEBUG ] data     =                       bsize=4096   blocks=7863296, imaxpct=251 ?. T+ B0 d2 }8 @# ?
[cephL][DEBUG ]          =                       sunit=0      swidth=0 blks* L8 h$ X* l. D* ~6 P9 T$ P
[cephL][DEBUG ] naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
: m, Q! _0 V0 O" ][cephL][DEBUG ] log      =internal log           bsize=4096   blocks=3839, version=2
$ m8 w0 D: L( p[cephL][DEBUG ]          =                       sectsz=512   sunit=0 blks, lazy-count=1- d* ~' w; U6 ]& {4 e+ Z9 c+ g
[cephL][DEBUG ] realtime =none                   extsz=4096   blocks=0, rtextents=0
* R/ {4 M# o. V' w[cephL][DEBUG ] Running command: mount -t xfs -o rw,noatime,inode64 /dev/ceph-8e2515c1-6170-4299-b82c-a5a47681f946/osd-data-8b7be4a6-b563-434e-b030-132880a10d31 /var/lib/ceph/osd/ceph-0
) M3 @" U$ O0 ^+ O[cephL][DEBUG ] Running command: chown -R ceph:ceph /dev/sdc1* a, x/ x* k  I3 @, A& M
[cephL][DEBUG ] Running command: ln -s /dev/sdc1 /var/lib/ceph/osd/ceph-0/journal
8 R: H+ N/ R! Q! M[cephL][DEBUG ] Running command: ceph --cluster ceph --name client.bootstrap-osd --keyring /var/lib/ceph/bootstrap-osd/ceph.keyring mon getmap -o /var/lib/ceph/osd/ceph-0/activate.monmap3 o4 M+ \& V( r  f0 V1 i
[cephL][DEBUG ]  stderr: got monmap epoch 1
, P. d( W6 E6 D. s' s9 n[cephL][DEBUG ] Running command: chown -R ceph:ceph /dev/sdc1; @* C5 j. \" l% v! j" `
[cephL][DEBUG ] Running command: chown -R ceph:ceph /var/lib/ceph/osd/ceph-0/
2 S' Z- U+ q# O4 F5 I0 t; S[cephL][DEBUG ] Running command: ceph-osd --cluster ceph --osd-objectstore filestore --mkfs -i 0 --monmap /var/lib/ceph/osd/ceph-0/activate.monmap --osd-data /var/lib/ceph/osd/ceph-0/ --osd-journal /var/lib/ceph/osd/ceph-0/journal --osd-uuid 8b7be4a6-b563-434e-b030-132880a10d31 --setuser ceph --setgroup ceph
2 r- y1 }( N7 U, c- |2 j& H% E0 z[cephL][DEBUG ]  stderr: 2018-05-07 23:01:34.834993 7f315e466d00 -1 journal check: ondisk fsid 00000000-0000-0000-0000-000000000000 doesn't match expected 8b7be4a6-b563-434e-b030-132880a10d31, invalid (someone else's?) journal
3 T1 e) E- R* E( [0 i[cephL][DEBUG ]  stderr: 2018-05-07 23:01:34.865621 7f315e466d00 -1 journal do_read_entry(4096): bad header magic& I9 b' w, d6 [  |+ t5 o
[cephL][DEBUG ] 2018-05-07 23:01:34.865667 7f315e466d00 -1 journal do_read_entry(4096): bad header magic: k, F! R/ f/ Z( N. k1 m( E: M
[cephL][DEBUG ] 2018-05-07 23:01:34.865988 7f315e466d00 -1 read_settings error reading settings: (2) No such file or directory9 O2 x% I" z0 {, I: S
[cephL][DEBUG ]  stderr: 2018-05-07 23:01:34.916284 7f315e466d00 -1 created object store /var/lib/ceph/osd/ceph-0/ for osd.0 fsid 39f3b85e-ee3c-4d8d-93c2-7f7c8aa47121
5 U1 z; i. ~' Q( [( B" [7 O3 z% A9 l[cephL][DEBUG ] Running command: ceph-authtool /var/lib/ceph/osd/ceph-0/keyring --create-keyring --name osd.0 --add-key AQBDavBa0IPpIBAAlQxlaWxNrnTX/uaOMdZEQw==
2 Z0 Y- Z$ ]0 o, D; ?" |0 W. ~! C" X[cephL][DEBUG ]  stdout: creating /var/lib/ceph/osd/ceph-0/keyring
* Z0 a* W8 ?0 {; X* J  C[cephL][DEBUG ] added entity osd.0 auth auth(auid = 18446744073709551615 key=AQBDavBa0IPpIBAAlQxlaWxNrnTX/uaOMdZEQw== with 0 caps)
* d, x! L" R/ V0 I2 z3 f5 U1 k[cephL][DEBUG ] Running command: chown -R ceph:ceph /var/lib/ceph/osd/ceph-0/keyring
9 B2 S: T7 f( g[cephL][DEBUG ] --> ceph-volume lvm prepare successful for: /dev/sdb1
8 r1 a" ?  C0 h9 o[cephL][DEBUG ] Running command: ln -snf /dev/sdc1 /var/lib/ceph/osd/ceph-0/journal
% d0 X( c7 ?/ B1 {[cephL][DEBUG ] Running command: chown -R ceph:ceph /dev/sdc1+ W9 I: G4 @, U" q
[cephL][DEBUG ] Running command: systemctl enable ceph-volume@lvm-0-8b7be4a6-b563-434e-b030-132880a10d31
! o4 l) g3 B+ d+ k2 I[cephL][DEBUG ]  stderr: Created symlink from /etc/systemd/system/multi-user.target.wants/ceph-volume@lvm-0-8b7be4a6-b563-434e-b030-132880a10d31.service to /usr/lib/systemd/system/ceph-volume@.service.
: N) ~, N3 B- P. p( u7 U[cephL][DEBUG ] Running command: systemctl start ceph-osd@0
$ Z3 ?) M5 L2 {[cephL][DEBUG ] --> ceph-volume lvm activate successful for osd ID: 03 p3 z+ Q& c1 w  v& \
[cephL][DEBUG ] --> ceph-volume lvm create successful for: /dev/sdb1* Q: h1 b# q/ u; E
[cephL][INFO  ] checking OSD status...
$ d* Q5 |& T. Z* @( H/ p; y$ I[cephL][DEBUG ] find the location of an executable
9 [% ~- Y/ u( i+ g5 C2 A, O+ M) o# b[cephL][INFO  ] Running command: /bin/ceph --cluster=ceph osd stat --format=json
' `" P7 Y8 ?( O: T[ceph_deploy.osd][DEBUG ] Host cephL is now ready for osd use.1 P9 Y" k( H2 J+ z& [. ~

$ M& x) y; W0 r/ ^# g: ?) l$ H3 B移除OSD
1
. F& E( S5 S& s21 M- n/ U9 {4 H* S# M4 C4 y
3. _# q- M7 o6 L% x
4
$ j8 Y8 t& l  Z5. q, x; G, z: o$ I' n
65 U7 J- p* M/ F5 E' |& ?/ C$ H  z
7
) R" e. e: ?* v, D3 L/ y80 ^! F  H+ X( @$ g. @% e! }+ B
9" v( y2 M: V* |% A% L
10% g+ M/ n: E  ~
11
' t- \# k! W0 T) l12' Q  L% E1 N% Z9 u) b- Y- Q
# 使OSD进入out状态
; S: b6 o+ @! c: d- n$ w' N[root@cephL ceph-deploy]# ceph osd out 0
* W& v. P' f# V* {, ^! smarked out osd.0.
$ w/ [, _; I# Y6 V' a1 i4 m# 观察数据迁移
9 U$ \, r3 F* u* u: U[root@cephL ceph-deploy]# ceph -w) Z& L' D! J( y% W$ Q, X3 K# H/ F
# 停止对应的OSD进程
) B2 n+ Q& A1 t  Y" r% f. c' d3 q[root@cephL ceph-deploy]# sudo systemctl stop ceph-osd@0
8 p) M; g: o/ A4 g) @  W# 清除数据6 A3 }. v4 B, k3 Z) c
[root@cephL ceph-deploy]# ceph osd purge 0 --yes-i-really-mean-it
  }* l' j& z/ h6 ]/ N+ A& Jpurged osd.0
/ E5 f% F! c% c, P0 a! h# 在ceph.conf中移除osd配置
0 I4 E6 \- Z7 I[root@cephL ceph-deploy]# vi /etc/ceph/ceph.conf
3 v; O; ~+ f' l* |4 G- p

, X  b! E2 ]2 I5 B, o4 Z部署CEPH-MGR
1
( D; x  n7 Q" c  W% Y- R" i2' @1 v$ K9 Z6 ]5 ^; F, r
3
% V) U6 p* _& J* B9 S0 R8 E$ G44 I: Y" D9 E$ s: w+ X" @9 e2 |
5
6 A' T- v! }3 o6 u, b1 a6
, [, }8 ~  j) n, p% {( Z7. D, r' o2 J4 w, c: O# P
8) a" S4 k, J7 [& i8 Z4 n* z. E' L+ ?
9
* p8 l$ U/ X, i3 i10
" f' K! b& c/ }' Q+ ?' H. Y9 F# U
install netstat tool' e! Q% e& |2 E: O6 R  }
[root@cephL ~]# yum -y install net-tools( q' ]: ?$ d9 L+ i$ ^

3 ?, \0 s% a6 ]/ f! c[root@cephL ceph-deploy]# ceph-deploy mgr create cephL:cephLMGR
, Q6 x; `3 |) }1 V2 R# ^1 e- T4 pceph        1111       1  0 12:57 ?        00:00:08 /usr/bin/ceph-mgr -f --cluster ceph --id cephLMGR --setuser ceph --setgroup ceph) c; e4 T. T/ L9 z2 I$ b3 R
[root@cephL ceph-deploy]# ceph mgr module enable dashboard6 i9 D3 l# Y2 M$ |/ V4 f2 \- W! g- s
" E: Q8 d& T3 {- K
open 7000 port
: E1 x; w% Z$ S3 ^- f8 O* E[root@cephL ceph-deploy]# sudo firewall-cmd --zone=public --add-port=7000/tcp --permanent
* a" `' N7 n; Y# E& p6 L" z7 N[root@cephL ceph-deploy]# sudo firewall-cmd --reload
+ w6 P# b/ |3 }& `

, K6 ~. L; Q- X. I9 r
相关命令
19 `' u, k( Z4 Y* X4 U) V
2
& y# M2 @/ X4 ]" |+ L- @( D3 s3 o3
: q( a8 {1 w2 }3 D/ K8 r1 I
[root@cephL ceph-deploy]# ceph mgr module ls: T3 i, g& e- Z% `) \; k6 C
[root@cephL ceph-deploy]# ceph mgr services7 y, \7 N8 g) u9 c/ p# J) x; c
[root@cephL ceph-deploy]# ceph tell mgr help2 s/ K& x$ K5 `

: ], \: Y- R' G$ K0 [部署MDS并创建CEPH FS
1$ _9 ~+ Q. y& _; P9 L0 b" s& {
2
: x$ _8 q- u) v8 A, A# L3 l8 D! G
[root@cephL ceph-deploy]# ceph-deploy mds create cephL" P2 G+ ?) A: t
ceph        2150       1  0 13:00 ?        00:00:00 /usr/bin/ceph-mds -f --cluster ceph --id cephL --setuser ceph --setgroup ceph$ b' R7 A' S/ C5 R
' P5 y# l5 J  u/ u/ M* j2 [
Ceph文件系统至少需要两个RADOS pool,一个用于存储数据,一个用于存储元数据。
配置这些pool时,可以考虑:
​ 对元数据pool使用更多的replication数量,因为该pool中的任何数据丢失都可能导致整个文件系统无法访问。
​ 为元数据pool使用SSD等较低延迟的存储设备,因为这将直接影响客户端上文件系统操作的延迟。
1
% M6 S! J2 I- C3 r; I9 s2
; I9 b- h# O/ I0 g3% u  m# }6 O, _( [1 u
4
3 s/ q8 p0 I" C  B5
+ J0 _4 P9 T' _3 b, s, N+ p
ceph osd pool create cephfs_data <pg_num>( _8 y/ S5 u0 R
ceph osd pool create cephfs_metadata <pg_num>" L6 \% C8 g: P8 o
例如:
$ n0 n, d5 b+ ~: b2 ~4 H0 ?1 \% b/ n[root@cephL ceph-deploy]# ceph osd pool create cephfs_data 32# a" X- Y! m: D# R1 |- Q
[root@cephL ceph-deploy]# ceph osd pool create cephfs_metadata 32
( Q8 y8 f! n. |. i* F9 J: {

9 A& s. m# I* m
更改pool的副本数
1* |. \# C! q; u; f) b- Y5 B
2( L! v  ^% f- F2 W9 K+ R5 u
3
3 u2 b. G9 T' s' l43 F" |' d1 d: x; }. w5 `
ceph osd pool set {poolname} size {num-replicas}7 {5 C: D5 h0 T: Z# G
例如:
! l+ B( P4 y  L2 ]8 `[root@cephL ceph-deploy]# ceph osd pool set cephfs_data size 16 H: E% o% a/ W: c2 i9 h
[root@cephL ceph-deploy]# ceph osd pool set cephfs_data size 1
# R* I8 }1 q" a1 _6 Y) Z7 A

8 r. D/ C7 U. V: g/ W# e
一旦创建了pool,就可以使用fs new命令启用文件系统:
15 v$ S; E! P1 R6 N* ?6 K) P: {
2
9 @* L  E) [% F% B$ ], g3; I; w- \* V0 a7 d9 S
ceph fs new <fs_name> <metadata> <data>' K/ K" k- A$ \3 O( o9 [) a8 j
例如:  ~% {4 L7 b5 \) V  F) e
ceph fs new cephFS cephfs_metadata cephfs_data
7 q( o. U4 X4 E9 _  F7 F% H0 r* C
- u& h! u" T5 F4 c) p" i0 s. B9 G
一旦创建了文件系统,您的MDS将能够进入active状态。例如,在single MDS system中:
1% V3 V3 {+ ~& u" }( c
24 I# m4 J+ E3 {' o8 m( c$ j9 e" U" V
[root@cephL ceph-deploy]# ceph mds stat
1 l3 H. x2 |! g3 ]: s9 ]cephFS-1/1/1 up  {0=cephL=up:active}( ~" }) O' T" s4 X  y: A

0 `- u  V, h  u& a& B
一旦创建了文件系统并且MDS处于active状态,你就可以挂载文件系统了。如果您创建了多个文件系统,在挂载文件系统时,选择使用哪一个。
如果创建了多个文件系统,并且client在挂载时没有指定挂载哪个文件系统,你可以使用ceph fs set-default命令来设置client默认看到的文件系统。
挂载CEPH FS ( File System ) 有两种方式:
KERNEL DRIVER
要挂载Ceph文件系统,您可以在知道monitor主机IP地址的情况下使用mount命令,或使用mount.ceph utility将monitor主机名解析为IP地址。例如:
13 a, j( r+ N# ?* a+ L4 j
2
7 S5 `, x# }) c. f3+ B7 j% Z6 B- v0 @& [
4! ^0 B* n6 M# x. r
5
& M2 U4 C( L% d* j6. P. C! Z% S0 s) r( v: c- M
75 c/ ~5 c3 L5 l% \# i
sudo mkdir /mnt/mycephfs
$ Q2 `9 W8 u3 [+ p. N+ [* A' \  isudo mount -t ceph 192.168.0.1:6789:/ /mnt/mycephfs
2 T8 a4 s, `0 n+ k" ^例如:
+ \& y4 [6 X" ]3 Z, y( ?[root@cephL ceph-deploy]# sudo mount -t ceph 192.168.56.101:6789:/ /mnt/mycephfs# G- _& C6 M8 ?+ z3 P, U. U
mount error 22 = Invalid argument
. ^" z: \: L2 i/ {Ceph 10.x (Jewel)版本开始,如果使用kernel方式(无论是krbd还是cephFS)官方推荐至少使用4.x的kernel。" N. N3 x; f+ C4 ^. h
如果无法升级linux kernel,那么映射rbd请使用librbd方式,cephFS请使用fuse方式。: B" p& O1 x% a# |- D

! A7 h  K  v. L+ ~- }( |6 F; H# Z
如果挂载Ceph文件系统时开启了cephx authentication,您必须指定user和secret。
11 u3 [1 A8 U1 z: e
sudo mount -t ceph 192.168.0.1:6789:/ /mnt/mycephfs -o name=admin,secret=AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==" u/ W4 l; u& o5 {- w8 E" w

% c& H3 r1 ^4 O* c4 f
上述用法在Bash history中留下了secret。更安全的方法是从文件中读取secret。 例如:
1
/ f; ~3 [, ?) I# U5 N" d3 _
sudo mount -t ceph 192.168.0.1:6789:/ /mnt/mycephfs -o name=admin,secretfile=/etc/ceph/admin.secret" ^( j# ]1 H3 \8 i7 }  m! x' c1 Y
. v( l' c7 I, M' e! A
如果您有多个文件系统,请使用mds_namespace选项指定要挂载的文件系统,例如-o mds_namespace=myfs
要卸载Ceph文件系统,可以使用umount命令。 例如:
1
$ k0 F0 M* m6 ^8 I- _2
: R2 \. ]/ ?9 O% t
sudo umount /mnt/mycephfs
# v3 z% ^! @' z% W提示:在执行此命令之前,请确保您不在挂载的目录中。
! c; a: |0 J/ r) M/ c
- t% _8 P# B; a0 v% I1 R+ t
FUSE
在用户空间(FUSE)中挂载Ceph文件系统之前,请确保客户端主机具有Ceph配置文件的副本以及Ceph元数据服务器的CAPS keyring。
在您的客户端主机上,将Ceph配置文件从monitor主机复制到/etc/ceph目录。
1
- }+ ?. b6 u! @* z9 ]! f2
/ p  C" J6 ^8 `* z
sudo mkdir -p /etc/ceph$ I8 N6 [/ B& e5 ~7 g
sudo scp {user}@{server-machine}:/etc/ceph/ceph.conf /etc/ceph/ceph.conf
. L* i# V6 I" i
0 O, L/ b* Z+ w: l1 L& C
在您的客户端主机上,将monitor主机的Ceph keyring复制到/etc/ceph目录。
19 q! d, I, l3 c8 `$ a
sudo scp {user}@{server-machine}:/etc/ceph/ceph.keyring /etc/ceph/ceph.keyring2 r  l+ V5 p9 m$ V
5 l' E6 g/ E; {8 t" o/ l0 K
确保Ceph配置文件和keyring在您的客户端机器上设置了适当的权限(例如,chmod 644)。
要将Ceph文件系统挂在为FUSE,可以使用ceph-fuse命令。 例如:
1
  l2 o3 s% {' b( E% ?6 I2
5 P8 O/ G! j( v: B2 T; v
sudo mkdir /home/usernname/cephfs
3 N/ V5 `4 F( Ksudo ceph-fuse -m 192.168.0.1:6789 /home/username/cephfs( @3 I$ L8 a% ?4 b1 y

, H+ }) w& j+ G# ~( C" \
如果您拥有多个文件系统,请使用 –client_mds_namespace 命令行参数指定要挂载哪一个文件系统,或者向ceph.conf中添加client_mds_namespace设置。
要自动挂载ceph-fuse,您可以在system fstab中添加一个条目。此外还可以使用ceph-fuse@.service和ceph-fuse.target systemd units。通常这些unit文件为ceph-fuse描述默认的dependencies和推荐的execution context。例如使用ceph-fuse挂载到/mnt:
1! D8 \7 R) ~$ N* T9 G; A: x
sudo systemctl start ceph-fuse@/mnt.service8 v+ U1 d" \9 _; W. ^

) u* r0 ~/ m* |. l
持久化挂载点可通过以下方式进行设置:
1; B# {  {0 h0 r! ?" m
sudo systemctl enable ceph-fuse@/mnt.service
4 ~) ^% s( C) V+ _4 Y/ u* u6 Z2 b
2 `* w- b! V# c3 O9 ]8 z. {
部署RGW
Ceph Object Gateway原来叫RADOS Gateway,它是构建在librados之上的对象存储接口,为应用程序提供了一个RESTful gateway,用户可以通过HTTP协议访问Ceph存储集群。
Ceph Object Storage支持两个接口:
  • S3-compatible:与Amazon S3 RESTful API中一些子集兼容的接口,提供对象存储功能。
  • Swift-compatible:与OpenStack Swift API中一些子集兼容的接口,提供对象存储功能。
      G  `' V- C" _* U$ ~8 y
Ceph Object Storage使用Ceph Object Gateway daemon (radosgw),它是一个HTTP server,用于与Ceph存储集群进行交互。由于它提供了与OpenStack Swift和Amazon S3兼容的接口,因此Ceph Object Gateway具有自己的用户管理。Ceph Object Gateway可以将数据存储在与Ceph Filesystem和Ceph Block Device相同的Ceph存储集群中。但是我相信在生产环境中不会这么做,如果数据量大的话会影响Ceph Filesystem和Ceph Block Device的性能,个人一般会独立出一个Ceph Object Gateway集群。S3和Swift API共享一个通用的namespace,因此您可以使用一个API编写数据并使用另一个API检索它。
1
% Z- l1 B3 I1 a$ b5 Y" Y
Note:Ceph Object Storage 不使用 Ceph Metadata Server
, Q; y8 m! Z, Y& m1 V5 P
# _4 T* H; E6 P0 v3 Z3 U
18 n* P' w6 x: {- D0 V
2* K+ s; l/ p: `8 }" l( S( Y1 ~
3
, u- s! p8 E' W% k0 \' Z4# K* C2 ~8 M" T9 T* v' K+ j
5
6 p  r7 S4 o" q3 W: f4 e4 r/ t1 `6; t: r/ `. J3 e+ K. c  M5 O& O% r
72 ]+ O+ y; |# M
8
+ p( {1 B$ P+ F' I* N9. U) R) D4 C5 ^5 [
102 q/ m3 M) E1 S% n! @# \
11
0 H' M- m0 Q% r2 z2 _! B9 n12
5 u% W; j  H" L13
$ t% E* R% @. r0 i" @14# s: S9 D& V8 k  P5 P1 Z" @' S
15& x4 x2 ^7 j7 `! p
16  q7 |( p* r8 k3 r  o% j) n
17
# f7 T% k" n& R1 q4 b2 F1 z1 Y18
4 A/ ^5 Q3 [1 ~! D- I7 r" M195 b  U4 a% _4 R+ R9 ^! N
202 g' q$ {% X0 H! ?6 D
21$ Q1 i0 ^( w  v* b' t& k
22- H6 D. K; e+ q- Y4 Y
23
2 v( N" j1 F3 Z  V5 D24
; T, L3 A" K, ]1 L- g6 p
# 必须部署MGR,才能部署RGW
2 ^% _2 p; w5 t# N: ~' K( l5 p" |+ A: K
[root@cephL ceph-deploy]# ceph-deploy rgw create cephL:RGW- N7 b7 Q' f( f( I# \* ~' U9 m
root        2799       1  0 13:13 ?        00:00:00 /usr/bin/radosgw -f --cluster ceph --name client.rgw.RGW --setuser ceph --setgroup ceph
8 a8 I0 N" \; h3 T- ~. i: p* v) v6 ^1 q, c! M: I1 B
# 重启RGW9 G4 n$ j5 i  w: N7 x( Z. Z
[root@cephL ~]# systemctl restart ceph-radosgw@rgw.cephL.service
! `, X* ^4 K* I; x6 Y) F[root@cephL ~]# systemctl restart ceph-radosgw@rgw$ {& q0 w, n3 O8 t2 e/ h6 p. M6 ?

6 H+ y: v3 K# i- C' x# g3 E问题一,这难道是ceph-deploy 2.0.0的坑?$ F$ Z2 @) p$ |0 z
[root@cephL ~]# tailf /var/log/ceph/ceph-client.rgw.log" ^& @# ?8 X& I
2018-05-11 22:30:31.999421 7f537c31fe00  0 ceph version 12.2.4 (52085d5249a80c5f5121a76d6288429f35e4e77b) luminous (stable), process (unknown), pid 3450
1 a: V) ]  ^; E4 C2018-05-11 22:30:32.021546 7f537c31fe00 -1 auth: unable to find a keyring on /var/lib/ceph/radosgw/ceph-rgw/keyring: (2) No such file or directory* a1 m$ Q1 c" r2 [
2018-05-11 22:30:32.021561 7f537c31fe00 -1 monclient: ERROR: missing keyring, cannot use cephx for authentication
3 O" j0 l) i1 Y' P8 Q& N2018-05-11 22:30:32.021563 7f537c31fe00  0 librados: client.rgw initialization error (2) No such file or directory/ a: o: f' K* F& `$ T2 c
2018-05-11 22:30:32.022900 7f537c31fe00 -1 Couldn't init storage provider (RADOS)
4 ?* ?" p% k* F2 v/ [0 J# i* Y' y
[root@cephL radosgw]# pwd7 @6 b/ ~% C+ |2 z% j; M( W: M
/var/lib/ceph/radosgw! t4 e* f& `2 r! W/ {( d7 @
[root@cephL radosgw]# ls- N; e" x$ h# k: s
ceph-rgw.RGW
' e4 x9 [6 w" M5 _& `[root@cephL radosgw]# mv ceph-rgw.RGW  ceph-rgw
  l  C  q$ s6 R6 P1 o' i4 [
) u' r! ?3 w. ~4 _* R, i
- M- d% d2 U; s, C- l
% H) P5 `5 ]# `$ K4 h: O4 m8 t
配置变动
在L版中,删除pool的操作做了强制限制。需要在/etc/ceph/ceph.conf中加入相关参数才允许删除pool。
1; ~- |( Z4 O0 M* l) @% `5 C
22 L: U/ z1 ^8 D6 p
# 允许删除pool,需要添加. X8 l; H) K0 ]2 s8 c$ ?
mon allow pool delete = true
9 U6 O; p7 @4 D3 X

* P0 |' N) P/ j) B) o6 A

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2021-12-8 15:42:50 | 显示全部楼层
实践步骤" X4 {# j5 c' n& z) Z! L5 e
获取代码并安装2 U3 q/ W( N0 d6 W5 p- n! k
git clone https://github.com/ceph/ceph.git
* f$ I+ R; O% q( Q3 X: Icd ceph4 g) h, B8 e: b7 T, F3 ~
git submodule update --init --recursive) O4 L% q( y9 ]7 j) e6 G; h9 j
./make-dist5 k3 @; u% G" Z& C4 m/ ~8 k
rpm -bb ceph.spec
; X9 ?$ H  b, W- c生成rpm安装包后进行安装,这个过程就不讲太多,根据各种文档安装上最新的版本即可,这个代码合进去时间并不久,大概是上个月才合进去的
2 i+ ]" T# Z8 _$ y6 ~* Y
配置集群
* n* d) h+ m6 a$ ]  A; B首先配置一个filestore的集群,这个也是很简单的,我的环境配置一个单主机三个OSD的集群

1 ]9 k+ T+ Q4 A  U[root@lab8106 ceph]# ceph -s6 ~, v" g1 L4 c
    cluster 3daaf51a-eeba-43a6-9f58-c26c5796f928
. @3 F, B+ L* I" V; k! h; w     health HEALTH_WARN
2 w% B6 m( [% [0 |! w            mon.lab8106 low disk space5 R* Z/ d) X& [0 ]. g
     monmap e2: 1 mons at {lab8106=192.168.8.106:6789/0}
# b5 e( N) G" B* u5 N            election epoch 4, quorum 0 lab8106
1 U* Q5 F3 z) p. f. p        mgr active: lab8106
. K$ T! L) D; g, d0 o     osdmap e16: 3 osds: 3 up, 3 in* j# H+ w, J8 Y# a+ |) C7 h
      pgmap v34: 64 pgs, 1 pools, 0 bytes data, 0 objects
; Z4 n) p# E3 X! H( H: b1 d            323 MB used, 822 GB / 822 GB avail
& d. Y1 n" ?" x+ n) Z, M( P                  64 active+clean- t8 s/ W; U: F8 y- k: X- L' R# [3 x
[root@lab8106 ceph]# ceph osd tree, d! H/ l& U' _. R6 F1 }
ID WEIGHT  TYPE NAME        UP/DOWN REWEIGHT PRIMARY-AFFINITY 3 X- K2 P1 ?1 I0 }0 _
-1 0.80338 root default                                       
* v( Z' L. m0 n3 B* E8 J-2 0.80338     host lab8106                                     ?4 q0 Q' I. z! q. A( a
0 0.26779         osd.0         up  1.00000          1.00000
# b9 t' O& Y/ f; {0 w/ D! C( v 1 0.26779         osd.1         up  1.00000          1.00000 8 Y1 L& s$ Y+ z, _5 H
2 0.26779         osd.2         up  1.00000          1.00000
7 X2 ~* m5 C: l+ |  ]6 x写入少量数据9 ]2 x$ `4 T# V6 F9 |" j# f
[root@lab8106 ~]# rados -p rbd bench 10 write --no-cleanup  k- ^4 ~# Q- z" L8 X4 W7 b4 p3 B' e
设置noout# q: I$ `/ t0 R  }+ q
[root@lab8106 ~]# ceph osd set noout
+ }) Q- q2 t; P/ y5 \# w) J: rnoout is set
; U6 Z, H" g7 N& m停止OSD.0
  k7 e5 K5 F9 C* W  H: B) A[root@lab8106 ~]# systemctl stop ceph-osd@01 P: K" g! l8 J
[root@lab8106 ~]# ceph osd down 0, [+ Z& k, M1 f2 _9 y; C# L
osd.0 is already down.
, U; d6 A) y0 T( H, m将数据换个目录挂载,换个新盘挂载到原路径
/ }3 T# k3 I: E, q6 U0 E8 h
[root@lab8106 ~]# mkdir /var/lib/ceph/osd/ceph-0.old/
0 q9 m' r' ]0 L: N8 ^[root@lab8106 ~]# umount /var/lib/ceph/osd/ceph-0/ }6 h5 M' P3 G3 {% E! l3 W
[root@lab8106 ~]# mount /dev/sdb1 /var/lib/ceph/osd/ceph-0.old/
4 V$ z" `+ d. r0 V# \[root@lab8106 ~]# mount /dev/sde1 /var/lib/ceph/osd/ceph-0/
- v" `4 K6 M1 Q& |  n
[root@lab8106 ~]# df -h|grep osd. h4 l" d3 n5 }4 z
/dev/sdc1       275G  833M  274G   1% /var/lib/ceph/osd/ceph-1
3 A% P  ~: L+ V; Y# v/dev/sdd1       275G  833M  274G   1% /var/lib/ceph/osd/ceph-2
, o- _7 g- r1 C% h/dev/sdb1       275G  759M  274G   1% /var/lib/ceph/osd/ceph-0.old  Z, S. @. l( A  b! x! }
/dev/sde1       280G   33M  280G   1% /var/lib/ceph/osd/ceph-0
. T8 Y. M" u6 M! x在配置文件/etc/ceph/ceph.conf中添加

; w9 d7 d+ E6 h9 Senable_experimental_unrecoverable_data_corrupting_features = bluestore7 z- x3 u; o; D+ M- J9 V
如果需要指定osd的block的路径需要写配置文件

% m! w& m! L& J# {# ?( O在做 ceph-objectstore-tool --type bluestore --data-path --op mkfs 这个操作之前,在配置文件的全局里面添加上
7 _) j6 A! s3 Vbluestore_block_path = /dev/sde2
0 R4 ~' U0 r( Y/ R9 X% z) @然后再创建的时候就可以是链接到设备了,这个地方写全局变量,然后创建完了后就删除掉这项配置文件,写单独的配置文件的时候发现没读取成功,生成后应该是这样的
, i+ s" ]" Y1 Q[root@lab8106 ceph]# ll /var/lib/ceph/osd/ceph-04 D1 Z4 z+ N" H. V+ R
total 20
7 C* y2 N% \, W# N9 plrwxrwxrwx 1 root root  9 May  3 17:40 block -> /dev/sde26 U. V# }& V1 A
-rw-r--r-- 1 root root  2 May  3 17:40 bluefs
, t3 e7 e5 v" ^; s1 u-rw-r--r-- 1 root root 37 May  3 17:40 fsid: C; q& r& e7 m; M) K3 [
-rw-r--r-- 1 root root  8 May  3 17:40 kv_backend
! K: _3 v: t) N7 s4 _9 {2 W-rw-r--r-- 1 root root  4 May  3 17:40 mkfs_done
6 I0 x- C: i8 f. Y) R  `4 ]6 g  J-rw-r--r-- 1 root root 10 May  3 17:40 type
! |+ ?; B$ y, Q) J  g& L2 [如果不增加这个就是以文件形式的存在
7 t3 T& e. S( R5 W2 }, u; Y4 z! E
获取osd.0的fsid# S4 @# ^7 ]8 Z1 r( q9 \, p
[root@lab8106 ~]# cat /var/lib/ceph/osd/ceph-0.old/fsid
0 X# `; I) z& }6 D8 L. nb2f73450-5c4a-45fb-9c24-8218a5803434
1 e" o0 w1 E# h3 X# C  y创建一个bluestore的osd.0
; d3 w* W2 Y. F+ A) F1 A# S4 X[root@lab8106 ~]# ceph-objectstore-tool --type bluestore --data-path /var/lib/ceph/osd/ceph-0 --fsid b2f73450-5c4a-45fb-9c24-8218a5803434 --op mkfs
3 I. z, P# z6 y9 C$ E转移数据
( ~: r+ v" t9 a1 |  x[root@lab8106 ~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0.old --target-data-path /var/lib/ceph/osd/ceph-0 --op dup
- L0 K* s: m. j$ _9 ^5 W  q[root@lab8106 ~]# chown -R ceph:ceph /var/lib/ceph/osd/ceph-0
$ g7 F. z) A5 T* h这个操作是将之前的filestore的数据转移到新的bluestore上了
, o. c; O  r) v. j
启动OSD.0$ y1 `- b" O( |7 L7 `
[root@lab8106 osd]# systemctl restart ceph-osd@0
# e  i' a% Y6 C. p# ]3 j检查状态

( X% U7 I. }) B5 ~[root@lab8106 osd]# ceph -s
+ ]/ G: C% M# |/ m0 g3 x2017-05-03 17:05:13.119492 7f20a501b700 -1 WARNING: the following dangerous and experimental features are enabled: bluestore
1 E: M' `- Z) M1 i9 q$ v5 d2017-05-03 17:05:13.150181 7f20a501b700 -1 WARNING: the following dangerous and experimental features are enabled: bluestore
" h) Y. u* w0 m5 ]. M    cluster 3daaf51a-eeba-43a6-9f58-c26c5796f928
% ^% }# I) X. t% {* J     health HEALTH_WARN& q7 X& h# u( y1 f+ i2 C
            noout flag(s) set5 E1 ~$ x$ Y2 D3 q
            mon.lab8106 low disk space
$ B$ q' L0 q, b! _     monmap e2: 1 mons at {lab8106=192.168.8.106:6789/0}
5 S# R2 e- x. ^! U. Y" D$ F" q            election epoch 4, quorum 0 lab8106+ f( j" l+ ~  x
        mgr active: lab8106
4 E3 P# |) {2 v) o     osdmap e25: 3 osds: 3 up, 3 in
9 o2 ]6 V: k4 `( q, C, I: Y9 r            flags noout
0 o7 A4 O% L/ L1 F5 [9 `0 H# n      pgmap v80: 64 pgs, 1 pools, 724 MB data, 182 objects
9 C6 b+ N) J4 u# m" l& d$ a            3431 MB used, 555 GB / 558 GB avail, C0 h1 t3 O2 a. D$ Q
                  64 active+clean1 @% u* G. V, v8 g' O# [
成功转移

+ U2 O, }" d, y" Z不同的block方式
/ O9 Q8 M# B; ^; i4 C[root@lab8106 ceph]# ll /var/lib/ceph/osd/ceph-0/ -al|grep block2 n! ~+ k8 _7 L$ o
-rw-r--r--  1 ceph ceph 10737418240 May  3 17:32 block
3 Z$ ?, U4 i2 p+ V& [[root@lab8106 ceph]# ll /var/lib/ceph/osd/ceph-4/ -al|grep block( u& d2 N2 G4 x8 d
lrwxrwxrwx  1 ceph ceph  58 May  3 17:16 block -> /dev/disk/by-partuuid/846e93a2-0f6d-47d4-8a90-85ab3cf4ec4e. S% d6 f# q3 L0 Z+ h# a+ j# i# J" Q
-rw-r--r--  1 ceph ceph  37 May  3 17:16 block_uuid2 M; S7 y6 K9 i/ [8 _
可以看到直接创建的时候的block是以链接的方式链接到一个分区的,而不改配置文件的转移的方式里面是一个文件的形式,根据需要进行选择
8 b2 H, y+ l$ v' n* h
总结) u& i& L7 y$ Q1 Y9 J
转移 工具 的出现方便了以后从filestore到bluestore的转移,可以采取一个个osd的转移方式将整个集群进行转移,而免去了剔除osd,再添加的方式,减少了迁移量,可以一个个的离线进行操作
  b8 w+ T/ w- K" v" k0 U2 D- c) @0 ]
ceph的工具集越来越完整了
) O# G4 x7 N7 n9 S, P4 i7 _; T$ f
4 ~. j$ e7 `% G: E( i% V$ d0 N
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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