|
|
二、安装CEPH分布式存储
8 z! ?2 x' p, M4 v, P" S9 ]1、ceph集群的安装方法
6 ~/ x; a1 V' O4 A1 m1 {) D0 }(1)通过cephadmin安装部署ceph集群9 G6 b( p% d& N. t/ V- y
(2)通过Rook部署和管理在Kubernetes中运行的Ceph集群
1 v! B; I! D4 s0 I1 }7 E(3)通过ceph-deploy快速部署ceph集群
; u$ M& D/ N) ^5 b" i5 y2、通过ceph-deploy快速部署ceph集群" Q5 V. H' J$ g9 Q4 k, X
主机名; q8 s9 a! a8 a0 G2 Z/ p0 E
IP地址
/ Q+ N2 u2 w T5 `作用& u! J$ [0 Z* [: n8 M+ [
存储盘
+ g0 m/ `8 f. GCEPH01+ ]7 \. v! G! F" R- S
192.168.16.171
6 p2 r7 b% A a9 E2 ECeph-deploy osd mgr rgw$ H/ Y( m$ M' u5 E
/dev/sdb /dev/sdc' a0 X7 {! V; a+ t3 d
CEPH02
: y; V# {+ j$ O9 ]( h- D3 _192.168.16.172
$ l- v3 C- L# s5 ? |1 ZOsd rgw8 x0 X; b4 Q& u# v1 c- V( n
/dev/sdb /dev/sdc
3 S" s( s' `8 t4 k- HCEPH03
, }& B* F1 {6 v192.168.16.173* Z7 ]% |4 t* S+ t! s6 {, I
Osd rgw mds
: m& R: V6 \. |! n! Z E/dev/sdb /dev/sdc /dev/sdd
; m- L- {) `' m6 v1 u( t, w% Mclient5 }# a" v) c6 L* V q
192.168.16.181' ], ?& h9 Z [7 H/ b& v# e9 ?
" W- ^0 j5 E7 f* c6 c# @/ ?. i: w) S
(1)安装前准备工作(在ceph集群节点上都需要操作)- K/ r; Y: U9 A; h% x
1)关闭防火墙和selinux(或配置防火墙策略)
$ ^8 v9 X1 f# R3 a0 |) z# W~]# systemctl stop firewalld
u$ e, Q/ s; O _- d0 n~]# systemctl disable firewalld
2 l- m7 \9 F- |% W~]# setenforce 0
. H2 c8 I3 v8 l, d3 o- n- d~]# sed -i "s#SELINUX=enforcing#SELINUX=disabled#g" /etc/selinux/config' _; T" _; _& Y% j
2)配置时间同步
+ g2 q/ X5 Y6 d* k) O7 ?$ e# 安装ntpdata及epel仓库# C+ }! S |5 i+ f* [3 k; P5 y
~]# yum -y install ntpdate * ?; W _1 s. ?9 C0 H- U
# 添加时间同步定时任务,如果有内部时间服务器地址,建议配置为内部地址
0 Y- P1 y7 \' M+ V$ N4 r6 o~]# crontab -l
, S. n" r, Q5 k/ b5 c( u( s! A*/5 * * * * /usr/sbin/ntpdate ntp.aliyun.com >/dev/null 2&>1
; z* z& I6 @; J3 v4 a3)配置hosts解析
! z4 D" l3 @& H~]# cat >>/etc/hosts<<EOF
. X7 t" `$ ^; w4 _% |192.168.16.171 CEPH01* E2 r# Y3 q" T- U. o
192.168.16.172 CEPH02. ^5 V5 F; V4 v+ m. n0 [# Z
192.168.16.173 CEPH035 ?" q* l1 \) O. b U5 W; `0 V
EOF. n) v$ r. [# `' k' J) m0 D3 H8 U
4)添加用户并配置sudo权限
3 E* d# u) m" `$ N2 o+ M7 J~]# useradd cephadmin
2 M& j; {! j7 k4 g: p1 _~]# echo "dayi123"| passwd --stdin cephadmin
3 S, Z5 N1 D) K~]# echo "cephadmin ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephadmin3 [# S1 ]/ d( e& z' W8 S# a
~]# chmod 0440 /etc/sudoers.d/cephadmin
# \0 P( Y9 b! t6 r$ y5)配置cephadmin用户免秘钥登录# _4 T2 P7 l$ r
~]# su - cephadmin' m6 M0 M5 e2 ]7 s6 j; Q/ j, h
~]$ ssh-keygen3 O4 M. S! ~1 I$ e+ T8 x5 N. G
~]$ ssh-copy-id -i cephadmin@CEPH010 `0 v9 w+ B0 y! I5 D
~]$ ssh-copy-id -i cephadmin@CEPH02
, C' A" P" b/ x8 e~]$ ssh-copy-id -i cephadmin@CEPH03+ w$ } o, D9 z& k- p! x
6)配置ceph-deploy的仓库地址(使用root用户)
- o1 D4 e& o' k* |$ F7 t~]# cat << EOF > /etc/yum.repos.d/ceph.repo: B; j$ @+ L. D1 ~ A
[ceph-noarch]3 z7 d& a. q5 U2 t
name=Ceph noarch packages
7 b2 Y, G# F1 l* qbaseurl=https://mirrors.aliyun.com/ceph/rpm-15.2.4/el7/noarch/1 i ?. g- K1 ^' k6 Q- N
enabled=1
7 B. r, v3 G& _1 E( zgpgcheck=1 k+ p, p( {6 u# i# ^
type=rpm-md" p, M1 G2 T% o# ^% ~
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
* m4 ]2 _( @: N2 {# {) h% {! s' kEOF+ H+ O# B: O1 ^( J
(2)使用ceph-deploy 部署集群(在其中一台集群节点上操作即可)
3 i5 T+ P6 B4 S 1)安装ceph-deploy, V7 P$ w. Y( Y" w6 l
~]$ sudo yum install -y ceph-deploy
8 l3 v& }$ U8 m3 e* B* l~]$ mkdir ceph-cluster. A8 p6 T; {4 t# m) [, P% _* v
~]$ cd ceph-cluster/& e( d5 c& q# }
2)部署节点/ [1 q7 I0 _$ X- k r
ceph-cluster]$ ceph-deploy new CEPH01 CEPH02 CEPH03
' k1 p, x* F% |- mTraceback (most recent call last):
. \( _! R: J4 m% L File "/bin/ceph-deploy", line 18, in <module>* j/ ?- I' S+ k. I
from ceph_deploy.cli import main. p% `* X3 l8 `; M( J) M- S$ ~' a3 o
# 如果报上述错误,则需要安装python-setuptools# b0 F) v: N2 \9 q3 Z/ K# u' A8 o# x
ceph-cluster]$ sudo yum install -y python-setuptools) X7 p& u9 u) ^8 V+ E$ z% Y( L
# 重新部署节点
3 f/ R7 V+ U3 F- B- {ceph-cluster]$ ceph-deploy new CEPH01 CEPH02 CEPH03
j2 b, F, O3 ?: F5 M" q# 上述命令执行成功后会生成以下文件* h8 P8 ^) D0 W( V7 t3 |
ceph-cluster]$ ls
1 H, ~0 k4 R0 v' ^2 W; Rceph.conf ceph-deploy-ceph.log ceph.mon.keyring
- L6 c6 ^8 S$ I* { 3)编辑配置文件7 `9 M) E6 z) W3 H9 M8 G
在配置文件中添加与网络相关的配置,因为此处只有一个网络,所以public network和cluster network配置一样。
9 F0 B9 P3 @) Y: s& y& c3 Jceph-cluster]$ cat ceph.conf
; g- M* b$ v: f. F( B( _......8 ]9 k$ o; M) L+ v: ?" y3 i
public network = 192.168.16.0/241 a ^) Y$ j5 y, {: d6 i; R4 Q
cluster network = 192.168.16.0/24
3 F, {+ K7 z8 X! X$ {$ f4)在各节点上安装部署ceph
7 s9 O% v! n; Z. O* T# 部署节点
) P- s. t0 t2 Z; Xceph-cluster]$ ceph-deploy install --release jewel --repo-url https://mirrors.aliyun.com/ceph/rpm-15.2.4/el7/ --gpg-url https://mirrors.aliyun.com/ceph/keys/release.asc CEPH01 CEPH02 CEPH03
D6 a; _! f I5 O2 n& M' }# 配置初始 monitor(s)、并收集所有密钥
( Z1 t" i, c9 P/ }" Sceph-cluster]$ ceph-deploy mon create-initial
, B$ D6 n5 t7 n! ^7 vceph-cluster]$ ls -l *.keyring
' l+ k' L F3 N8 _. t/ m% v-rw------- 1 cephadmin cephadmin 113 Jul 31 10:25 ceph.bootstrap-mds.keyring
. Q" `! \' C- H3 E/ J9 {-rw------- 1 cephadmin cephadmin 113 Jul 31 10:25 ceph.bootstrap-mgr.keyring
0 x0 |( d( N+ Y5 C-rw------- 1 cephadmin cephadmin 113 Jul 31 10:25 ceph.bootstrap-osd.keyring$ X7 ?0 s$ v6 K9 U6 ~
-rw------- 1 cephadmin cephadmin 113 Jul 31 10:25 ceph.bootstrap-rgw.keyring3 R7 k2 `+ `6 S& y! \/ [/ d, e' u
-rw------- 1 cephadmin cephadmin 151 Jul 31 10:25 ceph.client.admin.keyring
/ L/ r! s7 O8 w" {-rw------- 1 cephadmin cephadmin 73 Jul 29 09:05 ceph.mon.keyring
0 U7 L' l: o" [. V( \6 \# 把配置信息拷贝至各节点
. v) H4 ~/ k/ N/ Y( iceph-cluster]$ ceph-deploy admin CEPH01 CEPH02 CEPH03- D, y, h: V3 B" J2 ]3 C
5)配置osd! g( a% T# \! s) p+ ^# z, n# a5 {8 @! L
]$ ceph-deploy disk zap CEPH01 /dev/sdb6 u4 v; x1 q, ^; T' y7 c9 i, O
]$ ceph-deploy osd create CEPH01 --data /dev/sdb
% c, r; I' Q0 r6 v7 j. C+ A]$ ceph-deploy disk zap CEPH01 /dev/sdc
3 a/ O/ L5 a9 c0 g5 y]$ ceph-deploy osd create CEPH01 --data /dev/sdc
5 G7 ~4 a' [8 U7 b, v( P z]$ ceph-deploy disk zap CEPH02 /dev/sdb
$ L# J. P3 y: z. Q& s1 y]$ ceph-deploy osd create CEPH02 --data /dev/sdb
& {4 h; Y" s$ w l' l) H]$ ceph-deploy disk zap CEPH02 /dev/sdc
P: c l; [8 _! H9 t+ {9 v% g]$ ceph-deploy osd create CEPH02 --data /dev/sdc' w, D' k" j- J& |0 h
]$ ceph-deploy disk zap CEPH03 /dev/sdb- k8 y1 H I: l7 n, q$ v& I
]$ ceph-deploy osd create CEPH03 --data /dev/sdb1 G: `: f% ] J' f' P; N
]$ ceph-deploy disk zap CEPH03 /dev/sdc
5 L) J' S; s4 N/ N]$ ceph-deploy osd create CEPH03 --data /dev/sdc
! E) N( j- z" C+ d' {/ R]$ ceph-deploy disk zap CEPH03 /dev/sdd; x/ A# K( O7 ]* h- P& N( I
]$ ceph-deploy osd create CEPH03 --data /dev/sdd
+ q& ^1 r0 i8 d9 T% A, z# k2 X* k# C% ~+ N2 I4 L
/ [% J6 y5 ]; B: W
三、CEPH块存储$ M( ?0 m# y; T# p$ h) f
1、安装ceph块存储客户端" M8 L5 ?/ b: U5 z/ s( ?5 ]
Ceph块设备,也称为RADOS块设备,为客户机提供可靠的、分布式的和高性能的块存储磁盘。RADOS块设备利用 librbd库并以顺序的形式在Ceph集群中的多个osd上存储数据块。RBD是由Ceph的RADOS层支持的,因此每个块设备 都分布在多个Ceph节点上,提供了高性能和优异的可靠性。RBD有Linux内核的本地支持,这意味着RBD驱动程序从 过去几年就与Linux内核集成得很好。除了可靠性和性能之外,RBD还提供了企业特性,例如完整和增量快照、瘦配 置、写时复制克隆、动态调整大小等等。RBD还支持内存缓存,这大大提高了其性能。Ceph RBD支持已经添加到Linux主线内核中,从2.6.34和以后的版本开始。2 r5 e9 p1 U# S) _* o& Y/ A) ^
# 为ceph块客户端创建认证用户名和秘钥. X `/ s$ w' r2 W
ceph-cluster]$ ceph auth get-or-create client.rbd mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=rbd'|tee ./ceph.client.rbd.keyring
+ R9 l$ Q9 a& `$ S4 X' x[client.rbd]
( y/ A, h' E, o7 K2 f" ~# R: [key = AQAJ3yRfQy4AMxAA4dhmN/68/C+I6dPdGSDTew==
: R# p4 B. K+ Q `# 把配置文件和秘钥文件拷贝至客户端% L: g( n" {0 |$ h# M) Y
ceph-cluster]$ scp ./ceph.client.rbd.keyring /etc/ceph/ceph.conf root@192.168.16.101:/etc/ceph/
3 A. c# @# Z; s+ E# 将yum仓库文件拷贝至客户端* g% i# l- K0 j
]$ scp /etc/yum.repos.d/ceph.repo root@192.168.16.101:/etc/yum.repos.d/( |; E% v" G1 i8 f4 ~$ D1 ^0 r
# 安装客户端(客户端操作)5 m9 O6 x0 F7 m8 k( k* U, o) J+ d
~]# yum -y install epel-release c/ k" M% U1 @ E1 y9 u9 n' @
~]# yum -y install ceph
7 T5 {4 ^! e- K* K6 |6 t8 g# 查看对象存储% V T' M7 W2 r
~]# ceph -s --name client.rbd
$ n. x/ V Q( w2 ^ cluster:4 B2 J8 r! a8 R b1 M$ T
id: 6bec7eb7-3d58-47b6-93d5-452916971002. K+ s$ u9 p2 Z' M: H1 n
health: HEALTH_WARN
2 E0 k; X8 ^( Z/ S* O0 e Module 'restful' has failed dependency: No module named 'pecan'+ ^( G& `5 ]( C2 L
. g5 q T; z9 L! m I0 Y5 A+ o1 v services:
. A' ^! \, {) l% G$ k+ _5 Y* t" O mon: 3 daemons, quorum CEPH01,CEPH02,CEPH03 (age 14m)
' w$ ^& C" U" g mgr: CEPH01(active, since 8h), standbys: CEPH02, CEPH03& Q& U0 f# t9 q( ~) I
osd: 3 osds: 3 up (since 17m), 3 in (since 17m)
6 ]" K( Y$ t, D: h7 `
" L( Z9 `' g" ?9 N2 ~ data:
, K4 s- w6 Z# d4 f) S' I7 V pools: 1 pools, 1 pgs
9 d- R5 w/ G$ j objects: 0 objects, 0 B
! |5 M# l, X" T usage: 3.0 GiB used, 27 GiB / 30 GiB avail1 K/ H. C, u/ }! ?* s5 z# j
pgs: 1 active+clean
- k0 P. d7 ?0 `5 p3 g8 |" Q- P/ R2、为客户端创建块设备1 B7 u: E" S. I- f A$ N$ f4 }
# 查看集群存储池(ceph集群上操作)0 h- N9 k( f% \! G7 a
]$ # ceph osd lspools+ }7 _1 u1 |0 p4 p) E: A
1 device_health_metrics; G$ [8 Z0 u1 i* N
# 创建存储池) r! b" r8 R& r' x4 H# Q
]$ ceph osd pool create rbd 128
0 Q2 D/ N& l2 P9 f5 Dpool 'rbd' created1 x8 j/ \; ^! b1 _6 [
# 查看存储池里面pg和pgp大小) Q( e5 h" G" H7 d
]$ ceph osd pool get rbd pg_num6 e( Y* N( [; q4 X ]
pg_num: 128
; D% w. x' S- I5 b' P]$ ceph osd pool get rbd pgp_num9 A" r: Z# L: l9 j2 X; b
pgp_num: 1285 C2 C& r) e! u; R1 G! h) j
50 为 place group 数量(即pg_num),pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值(官方文档地址:https://ceph.com/pgcalc/):; L6 Z# Z# ?# k, W/ u+ r: _
1)少于 5 个 OSD 时可把 pg_num 设置为 128
2 r% _3 [1 C3 g; f: A4 a( W 2)OSD 数量在 5 到 10 个时,可把 pg_num 设置为 512- _7 R" c; ~" n, P2 t7 O/ h0 h7 O
3)OSD 数量在 10 到 50 个时,可把 pg_num 设置为 4096
# e$ Z. A2 J# A; N 4)OSD 数量大于 50 时,你得理解权衡方法、以及如何自己计算 pg_num 取值0 x6 c; _5 J% t! V. D6 x. y
# 为客户端创建块设备(在客户端操作)
0 L! T: I+ W& W8 G! X3 k' Z~]# rbd create rbd1 --size 10240 --name client.rbd2 A2 i: _0 Y: _0 Y% y0 M2 W6 n
# 查看创建的块设备6 |6 Q' p" x3 L% e
~]# rbd ls --name client.rbd
+ Q1 p* y5 d9 j" brbd1% c3 ?. r) C. m; v
~]# rbd ls -p rbd --name client.rbd5 J1 e5 O2 Z) D" m) b
rbd1
# J) [ N3 o* L4 z- Z! u& Q~]# rbd list --name client.rbd9 d( R$ f: Y; ^5 |3 \0 n! \" `
rbd1
% l$ V: D- z |4 v% r6 h* D~]# rbd --image rbd1 info --name client.rbd
* p: ?) [2 u6 Z: i. _rbd image 'rbd1':- _; v6 ^. }* ^0 c8 d
size 10 GiB in 2560 objects
% k, x* L6 v4 q5 Q- `* worder 22 (4 MiB objects)
! e; C7 ^; l( P8 l. Asnapshot_count: 0
/ `! {- i" l+ t" hid: 10f5fac0a87e
9 y8 h* p/ S" p7 M) Iblock_name_prefix: rbd_data.10f5fac0a87e
4 R1 L" ?* _2 h2 t& `: c/ O( R* sformat: 2
& `+ z6 h& F- c' V/ [8 vfeatures: layering, exclusive-lock, object-map, fast-diff, deep-flatten
4 @4 s' n' T' i" z0 Dop_features:
}( x* J7 h- @; _) {2 K! cflags:5 }! s( w/ N+ x" A$ k9 p
create_timestamp: Sat Aug 1 21:06:42 2020
8 b6 C& H& ^3 P+ jaccess_timestamp: Sat Aug 1 21:06:42 2020
* l4 o8 J" x$ v: Ymodify_timestamp: Sat Aug 1 21:06:42 2020
: ~% `$ f3 S( _
6 P! K. |; i+ Z) N3、为客户端映射块设备
% r# g0 f7 q, E2 D6 k! J0 v% B! s 在客户机上使用块设备时需要对象映射,部分对象映射的功能只有在内核4.9中才引入支持,如: 排它锁定支持(exclusive-lock),对象映射支持(object-map),深平(deep-flatten)和快速diff(fast-diff)。所以在映射时先禁用这些功能。禁用方法有三:
' g3 Y8 ?- c5 l3 H3 v(1)动态禁用 L" D; O4 Z* n8 y% n
rbd feature disable rbd1 exclusive-lock object-map deep-flatten fast-diff --name client.rbd
, S+ R0 L/ D6 t6 t9 I2 W6 C V(2)创建RBD镜像时,只启用 分层特性。* C) U1 A- S: r, t' I9 ]( o6 u' Y
rbd create rbd2 --size 10240 --image-feature layering --name client.rbd
# \5 s! e& t! f( A; o+ A3 w# a) @(3)ceph 配置文件中禁用
4 x2 y/ R Z8 ? U% S9 l* _5 q) u' } rbd_default_features = 1
9 a( O7 x7 A, x7 |0 t# 没有禁用前映射会报错
" F' J' \0 U; O' P) [: o~]# rbd map --image rbd1 --name client.rbd
o; w+ `. W c8 t$ R7 _0 z" Orbd: sysfs write failed
7 B2 X1 V! ]9 oRBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable rbd1 object-map fast-diff deep-flatten".
" u5 i$ v j9 H: y4 \In some cases useful info is found in syslog - try "dmesg | tail".
& p1 p9 A7 T8 W* s- mrbd: map failed: (6) No such device or address
. @( A( U7 y( D" L/ ?# 动态禁用后再次映射,需要去cluster节点上操作(ceph集群上操作)
( E9 E4 ^3 L8 y( q# h~]$ rbd feature disable rbd1 exclusive-lock object-map deep-flatten fast-diff: N6 s9 [) {8 p* q8 @
# 再次在客户端上映射
$ b# R" F: ]: k y' C, m7 b0 o# P~]# rbd map --image rbd1 --name client.rbd
) M) |; T1 S8 W4 `' M/dev/rbd0
]) J4 S/ `; U% i; t+ R- R/ z# 查看映射的块设备$ J( v6 D5 H7 X( D
~]# rbd showmapped --name client.rbd
# }+ ^$ |# ~5 W2 r' r7 y' O+ n5 z/ [id pool namespace image snap device
4 S& d6 [% p, v$ r- m7 |0 rbd rbd1 - /dev/rbd09 X) ^, T+ l) w B& k) F
映射完成之后就可以挂载并使用。5 ^* c. \! l$ E& a( |( U8 U% U
# 查看
: A; C% |2 M. `1 c~]# lsblk, V) j; D% q7 }, R! Z: E9 g
......7 H5 t1 [7 n9 H9 e4 L- I1 \
rbd0 252:0 0 10G 0 disk4 p9 ?- @: L" Q9 m
# 格式化并创建挂载点挂载$ c( l' e1 y- L( ~! M# X
~]# mkfs.xfs /dev/rbd0
+ J' Z0 G% z. C~]# mkdir /mnt/test-rbd
# M+ z1 f+ S7 ]0 k4 k. m/ }~]# mount /dev/rbd0 /mnt/test-rbd/$ O8 ?1 w. `9 [6 t! S2 \
~]# df -h# Z9 P- w* a9 O f
......
9 V2 ~8 {8 o* U3 b3 P" a. w/dev/rbd0 10G 33M 10G 1% /mnt/test-rbd
0 M ~7 n7 n3 v+ `; n8 F1 \. p6 f0 y( W" T6 q7 X
% @- K7 Q5 _6 q8 _5 T" Y" X: Q
四、CEPH对象存储; m3 _! o' I. S: q
1、部署Ceph 对象存储. r+ j: R5 f, C! Q! w6 d5 E4 d) Q
作为文件系统的磁盘,操作系统是不能直接访问对象存储,它只能通过应用程序级别的API访问。Ceph是一种分布式对象存储系统,通过Ceph对象网关提供对象存储接口,也称为RADOS网关(RGW)接口,构建在Ceph RADOS层之上。RGW使用librgw (RADOS Gateway Library)和librados,允许应用程序与Ceph对象存储建立连接。RGW为应用程序提供了一个RESTful S3 / swift兼容的API接口,用于在Ceph集群中以对象的形式存储数据。Ceph还支持多租户对象存储,可以通过RESTful API访问。此外,RGW还支持Ceph管理API,可以使用本机API调用来管理Ceph存储集群。Ceph对象存储还具有多站点功能,即为灾难恢复提供解决方案。- |% V' f0 A% p% o; C; H
, U7 T' }5 I2 l: E4 Y
6 F) b' K0 [9 d# 安装ceph-radosgw,默认在执行ceph-deploy时已经安装(以下在ceph集群上操作)- Y) b$ A! H8 H& @
]$ sudo yum -y install ceph-radosgw
( O+ \. _* j2 m. @# M3 ]) g- \; T# 部署rgw
5 s. P1 l7 N+ @) K1 A: Iceph-cluster]$ ceph-deploy rgw create CEPH01 CEPH02 CEPH03# X/ M( u7 y) B5 j6 v
# 下载创建池脚本* k8 u2 @7 _* [
ceph-cluster]$ curl -o pool https://raw.githubusercontent.com/aishangwei/ceph-demo/master/ceph-deploy/rgw/pool
" s- ~: X- X0 t* I/ v' C Q6 [( fceph-cluster]$ curl -o create_pool.sh t https://raw.githubusercontent.com/aishangwei/ceph-demo/master/ceph-deploy/rgw/create_pool.sh
+ ]7 h$ S' J+ F! i% ^6 C0 G0 r# 根据自己需求修改相应参数
9 c' j, S3 }/ X/ G/ [% Wceph-cluster]$ cat create_pool.sh
- ?: e! }" S4 h/ a: L* }( C- W#!/bin/bash! n; f! n8 l7 a% W: C6 e
PG_NUM=10
% ?/ t Z7 @% }+ F4 }PGP_NUM=10
$ P4 w4 ~* m. Y5 G0 YSIZE=3- y/ ^9 _% [0 `7 k8 _
for i in `cat /home/cephadmin/ceph-cluster/pool`" S) S! B8 B+ A" A4 Y
do
# S+ P$ A' {& @, I ceph osd pool create $i $PG_NUM, f0 \6 Z# Y: X* f, a9 i ~5 J
ceph osd pool set $i size $SIZE+ l0 V& x+ D3 j
done- E! I' ~ e9 a8 s" ]. d
for i in `cat /home/cephadmin/ceph-cluster/pool`1 j N. O: q- g( C" z6 V# N
do
! L5 [; l$ o( a9 J& Z/ r ceph osd pool set $i pgp_num $PGP_NUM
1 H% ~ l1 \- D3 l' e6 U done! |8 Y) t1 ?9 N8 o2 q* c2 W
# 创建池" p: Z0 r( ~( B2 f# S7 {
ceph-cluster]$ create_pool.sh5 O) Q' i t; ]7 x/ Y5 |' D) t
# 测试是否能够访问池9 y# f Q* M' g6 W
~]# ceph -s -k /var/lib/ceph/radosgw/ceph-rgw.CEPH01/keyring --name client.rgw.CEPH01
; Y+ r! g7 y" _9 |5 l4 @8 D cluster:
. b. p- w8 ?. F( |; h id: 6bec7eb7-3d58-47b6-93d5-452916971002
6 C) q: h/ K$ c; I health: HEALTH_WARN6 e) b2 I/ G: [# y9 \
Module 'restful' has failed dependency: No module named 'pecan'
: s( B0 P" P' e% i( Y/ R! A I 1 pool(s) do not have an application enabled0 n- k8 u- _! M4 @+ [) R
6 pool(s) have non-power-of-two pg_num7 q+ @5 F, h# n
5 pools have pg_num > pgp_num
3 C2 F0 B- t/ ?. K" T% h O9 d services:( E- h3 O4 }) V2 I( ?/ ?7 N* T0 `- V
mon: 3 daemons, quorum CEPH01,CEPH02,CEPH03 (age 69m)* k9 V2 X2 `6 P5 m/ Z ]
mgr: CEPH01(active, since 67m), standbys: CEPH03, CEPH02+ u/ b2 e& \' N+ o! A
osd: 3 osds: 3 up (since 47h), 3 in (since 2d)
: E. R4 q f& Q9 V3 u/ h1 h* \' a rgw: 3 daemons active (CEPH01, CEPH02, CEPH03)
/ z, A2 _8 P" h$ N7 q! _; r; y task status:
`) c$ G. y! l4 P( j2 y* Z! t: F( u data:9 W1 V2 B- t+ q2 Y6 y' l9 ^9 M& }
pools: 11 pools, 245 pgs* @3 o8 F( i2 K. h! _
objects: 211 objects, 14 MiB
) y5 x. }) P+ o: ?& b usage: 3.1 GiB used, 27 GiB / 30 GiB avail1 O) f$ T7 p+ E6 v; t {5 q
pgs: 245 active+clean$ B/ I/ v4 U+ h% V6 }- J
2、使用 S3 API 访问 Ceph 对象存储+ Y2 c. m5 L+ r0 j# X& z$ k7 ~% x4 C
# 创建用户,并记录access_key 和 secret_key (在ceph集群上操作)% [# S' U( X# Q& [8 X
]$ radosgw-admin user create --uid=radosgw --display-name="radosgw"
3 f" n, } U7 A0 {# 安装客户端(客户端操作)% z, {& K- ~3 X Z
~]# yum install yum install s3cmd -y( |$ m& L5 y# D* [3 v) I
# 生成配置(客户端操作)
& T- V: r5 K) Y6 d4 k+ e5 _~]# s3cmd --configure3 P* `- e, {5 t# r* }. U
# 修改配置(客户端操作)( s' I' a! h Q+ i4 G
~]# vi /root/.s3cfg
# \; c7 c" b; A ^9 h5 obucket_location = US
5 J* m2 U1 M* J% V: Z1 f& Yhost_base = CEPH01.dayi123.com:7480
/ H: z2 r+ v# F5 b' yhost_bucket = %(bucket).CEPH01.dayi123.com:74807 L0 Z3 k1 j# a& X
# 添加hosts解析(客户端操作)
$ e: I- f! L, i% y' d~]# echo "192.168.16.171 CEPH01 CEPH01.dayi123.com" >>/etc/hosts
( F$ W+ d. i6 {# 创建桶(客户端操作)
6 U2 R1 N0 _! \& Q, \# y0 U~]# s3cmd mb s3://dayi123
$ g7 c& x7 l3 MERROR: S3 error: 416 (InvalidRange). m) U! L7 Y( z" ?9 Y- [
如果创建桶时报如上错误,则需要将其他对象存储后台驻留程序(OSD)添加到群集或将“mon_max_pg_per_osd”的默认值增加到300以上。1 g/ X9 _: D1 q- F4 @9 l
# 修改配置文件/ R/ p J/ h+ B9 e# F g
my-cluster]$ vim ceph.conf6 |; y9 w+ y2 z j n' i/ W% @
......+ [/ q% q, R# S' e \ L
[mon]
8 ~( `0 x9 l3 e1 ?1 a4 \- Dmon allow pool delete = true
4 Q# p8 Z6 A* B! x4 ^" ]# ^; ]5 pmon_max_pg_per_osd = 300
2 g' g# B* H9 Y$ @% A+ Z# 拷贝配置文件至各节点) H& f# b% i$ Z e7 A5 o; p
my-cluster]$ ceph-deploy --overwrite-conf config push CEPH01 CEPH02 CEPH033 E, g+ e. Z _( _
# 重新创建桶并将文件放入桶中$ W* q% N+ ]; A( `. o* g7 \
~]# s3cmd mb s3://testbucket
1 W: s$ Y( E- iBucket 's3://testbucket/' created4 l. Y8 H: l# K
~]# s3cmd put /etc/yum.repos.d/ceph.repo s3://testbucket6 }4 {' |5 v# a$ S) @
upload: '/etc/yum.repos.d/ceph.repo' -> 's3://testbucket/ceph.repo' [1 of 1]( |% h! J: E3 J+ x: X: N
674 of 674 100% in 0s 34.19 KB/s* v% f) L) i% D' q' k7 q
674 of 674 100% in 12s 52.87 B/s done
+ h9 }& Y* x6 K3 U. T# 查看桶中文件
; \( N* D% l; R% r9 R~]# s3cmd ls s3://testbucket8 L& l" d) I( K+ o/ y/ ^9 q
2020-08-04 13:26 674 s3://testbucket/ceph.repo
p# X+ f' T0 t7 J3 o+ _) ?3、使用 Swift API 访问 对象存储5 Z" Q. ?& s+ z0 }, ^
# 在ceph集群上创建 swift api 子用户并记住secret_key
4 X5 N F$ H$ `$ `' g1 oceph-cluster]$ radosgw-admin subuser create --uid=radosgw --subuser=radosgw:swift --access=full* ^9 J% K0 [* v" r1 z
# 安装swift api客户端软件(客户端操作)5 n% v) N! G6 N9 m, B. @
~]# pip install --upgrade python-swiftclient
3 ^6 y% e+ k8 G, ^- }% y0 T# 通过swift创建桶
- E) x# {4 n: H5 s# G: x~]# swift -A http://CEPH01.dayi123.com:7480/auth/1.0 -U radosgw:swift -K AKYbLdvWfccaVwto49sCT5nFlwo0QnYArQ8TIlBZ post testbucket2
# V4 D2 M7 o/ {* t# 查看桶: O4 H% h, G1 V
~]# swift -A http://CEPH01.dayi123.com:7480/auth/1.0 -U radosgw:swift -K AKYbLdvWfccaVwto49sCT5nFlwo0QnYArQ8TIlBZ list# @* {- B5 g- u9 H9 M
testbucket
( H7 \! n: n' N6 Z$ X/ ~6 g Rtestbucket29 Z- M8 X& i, K6 H. V
# A8 i1 {8 t( J( J5 o, ?) }
# |2 |& O! v4 o' f: g3 s2 G% A五、CEPH文件存储" m$ U2 Y) x( A, _5 D8 E1 b" x6 t: o
1、安装
+ {3 S1 n0 V! d8 X Ceph文件系统提供了任何大小的符合posix标准的分布式文件系统,它使用Ceph RADOS存储数据。要实现Ceph文件系统,需要一个正在运行的Ceph存储集群和至少一个Ceph元数据服务器(MDS)来管理其元数据并使其与数据分离,这有助于降低复杂性和提高可靠性。! u4 b: y/ q& y/ c2 Y( [
; X) N5 V( F2 z; i, I+ i
h6 ^$ G0 a& l2 l
只有Ceph FS才需要Ceph MDS;块和对象存储不需要MDS服务。libcephfs库在支持其多个客户机实现方面发挥着重要作用。它具有本机Linux内核驱动程序支持,因此客户机可以使用本机文件系统安装,例如,使用mount命令。它与SAMBA紧密集成,支持CIFS和SMB。Ceph FS使用cephfuse模块扩展到用户空间(FUSE)中的文件系统。它还允许使用libcephfs库与RADOS集群进行直接的应用程序交互。
8 Z, z3 F' L# n/ _# 安装cephfs" r- C+ P5 x/ u; r: Y9 \: \
ceph-cluster]$ ceph-deploy mds create CEPH03
8 V% c" _# [3 ?+ @# 创建存储池. l* D* F4 ?# ]* K: }# @
ceph-cluster]$ ceph osd pool create cephfs_data 64* }$ q' f H, o4 W( Y
pool 'cephfs_data' created
; N+ ?2 s$ O6 }; J" r; [6 Q' rceph-cluster]$ ceph osd pool create cephfs_metadata 32
5 k# e l" u5 z$ R+ y2 ypool 'cephfs_metadata' created% }) p* v% i3 o& f; t5 O8 v) Y
# 将存储池添加为fs存储
^; u b) W `% aceph-cluster]$ ceph fs new cephfs cephfs_metadata cephfs_data
2 k% }1 c/ z8 J. Znew fs with metadata pool 23 and data pool 22$ j' k3 _1 l5 p0 f& j% t3 c! l+ t
# 启动mds/ @9 y, `8 i' Z* j- [8 i
ceph-cluster]$ ceph mds stat4 n' D3 y) `7 ^8 N/ l4 V1 t7 f
cephfs:1 {0=CEPH03=up:active}7 I/ H3 |0 {: y+ t1 C o- }+ @
# 查看存储池1 [; f, R/ m9 `+ M. \9 ]# M
ceph-cluster]$ ceph osd pool ls
% l! V/ `7 y8 M$ P# 查看对象存储存储池
/ |1 g/ i3 d9 i. u; B, O1 [ceph-cluster]$ ceph fs ls" A% q$ Q+ f i: J A0 }4 A* E
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]3 ^- }+ J8 e& E. J1 [
# 为文件存储创建用户及认证秘钥
6 t" C) J( Z ^ceph-cluster]$ ceph auth get-or-create client.cephfs mon 'allow r' mds 'allow r, allow rw path=/' osd 'allow rw pool=cephfs_data' -o ceph.client.cephfs.keyring
$ ~9 j# s; p& h0 C5 I# 将秘钥拷贝至客户端
2 ^8 z+ w. e% F ceph-cluster]$ scp ceph.client.cephfs.keyring root@192.168.16.101:/etc/ceph/
) x+ _ L! q5 B. v/ E2、挂载
- l5 ^3 C0 z; \" k1 k, ?7 a; d" x 在Linux内核2.6.34和以后的版本中添加了对Ceph的本机支持,可通过通过内核驱动和FUSE客户端挂载Ceph FS。
5 @) b; v( K7 S" `, u- }( G$ b# 在ceph集群上执性获取key1 ?, l$ i/ o$ ?: v
ceph-cluster]$ ceph auth get-key client.cephfs
( D/ a3 T' h& n0 g% AAQDduCpfZ9fKKhAA7oGPEoQMCDgQ62TDluCiYg==
' [: g0 ~: B1 S! G9 S# 在客户端挂载,先创建挂载目录,在挂载8 k4 s3 L% l) j) i( O! v1 t
~]# mkdir /mnt/cephfs8 m$ U# R1 f7 Z; O# C) v: v
~]# mount -t ceph CEPH03:6789:/ /mnt/cephfs -o name=cephfs,secret=AQDduCpfZ9fKKhAA7oGPEoQMCDgQ62TDluCiYg==# g1 W8 v% v6 W7 ]& J6 a
~]# df -h /mnt/cephfs/' m, G6 _& ]: J- X7 D7 o
Filesystem Size Used Avail Use% Mounted on
+ U" B- ]1 J- Q+ W192.168.16.173:6789:/ 14G 0 14G 0% /mnt/cephfs
9 a' e% p1 V( r7 |" M4 H# 也可将key保存至文件中,挂载时制定key文件2 Z2 i. {* t% {9 R$ r) i
~]# echo AQDduCpfZ9fKKhAA7oGPEoQMCDgQ62TDluCiYg== >/etc/ceph/cephfskey
, f" c2 V6 f$ G6 g% g8 y~]# umount /mnt/cephfs/
+ ~3 x7 m# h; {8 x~]# mount -t ceph CEPH03:6789:/ /mnt/cephfs -o name=cephfs,secretfile=/etc/ceph/cephfskey' A: x/ q) k! E. A% l$ L+ n
~]# df -h /mnt/cephfs
U( I/ \% C, m, ?5 U- U: E# `Filesystem Size Used Avail Use% Mounted on
" r9 {. `7 J( U7 {192.168.16.173:6789:/ 14G 0 14G 0% /mnt/cephfs
' J5 J4 y$ W% S* a4 i: E# |5 Y# 也可将配置写入fstab中,开机自动挂载,_netdev参数为网络启动后挂载( o- }- S) b# N( I, ~- {$ m
~]# echo "CEPH03:6789:/ /mnt/cephfs ceph name=cephfs,secretfile=/etc/ceph/cephfskey,_netdev,noatime 0 0" >>/etc/fstab0 m* @( t/ x) p( A2 z/ ?
# 验证挂载3 Y. T! g, u! O
~]# umount /mnt/cephfs3 L6 `, ?( C% s+ ~, Y; q) y! l
~]# mount /mnt/cephfs
$ Z* e* L, E" v1 t1 B C. ^~]# df -h /mnt/cephfs/3 M& O4 Y6 \; I8 r6 z% I; h- Q
Filesystem Size Used Avail Use% Mounted on
# o0 J; ^& L) z" V192.168.16.173:6789:/ 14G 0 14G 0% /mnt/cephfs
* G& v2 g! I1 n
& h% c9 R9 z4 [* ~. `4 u& v! s
6 J* w# a4 {+ R) ]2 S4 A8 N# d |
|