|
|
二、安装CEPH分布式存储
; |( p+ F: k) a/ t; i: y. a1、ceph集群的安装方法
3 O8 O! X& D0 x7 W) i5 d% X(1)通过cephadmin安装部署ceph集群. Y& g* r' q' n. \$ C
(2)通过Rook部署和管理在Kubernetes中运行的Ceph集群1 L6 g6 J: g3 [
(3)通过ceph-deploy快速部署ceph集群/ C4 l3 m) [5 P
2、通过ceph-deploy快速部署ceph集群( M( z$ f1 w' J+ Z
主机名
" T/ v) I2 r) _# AIP地址
$ V! l7 k# ~. a, D作用: V B% A3 }- T5 M+ w5 b) u) X
存储盘' n+ L$ G3 d5 S- F! E4 v& t
CEPH017 ^4 Z0 p+ y5 T% K6 ?# A/ Y, \
192.168.16.171% E. j$ B! \- V! E/ h
Ceph-deploy osd mgr rgw) f# ^% ?3 o$ H1 R4 F9 a; T8 G6 u
/dev/sdb /dev/sdc2 Y5 l0 z- r2 l- ]9 ]% ?1 F
CEPH02, t# ?6 o- f, T! x/ p1 G
192.168.16.172
- G; }, H9 K9 T" Q$ B7 HOsd rgw. x. ?1 q0 z8 _: |' K
/dev/sdb /dev/sdc- `# |. ~, q7 a5 d* _, z' `+ J
CEPH03
& g+ o# L& c9 G192.168.16.173# E( B, s8 o5 J6 q6 q9 t
Osd rgw mds3 S" Y1 g% F% m8 ?
/dev/sdb /dev/sdc /dev/sdd
; a/ ]" U4 Y, e0 \' p }client& `$ s! a0 B6 `# H
192.168.16.1815 |7 z' d/ y! k: O) g4 g% W8 |6 v
7 w7 V9 b1 u( F U: R- y
' J; y5 Y) t, Y, @. K! }8 q(1)安装前准备工作(在ceph集群节点上都需要操作)& g! f: {% m! R7 w- k0 N
1)关闭防火墙和selinux(或配置防火墙策略)
* H1 p$ f3 i9 L/ K$ i- g* q~]# systemctl stop firewalld0 P7 W! R# s, h
~]# systemctl disable firewalld
$ a; m# N) w% b~]# setenforce 0% i% f! F" u% F
~]# sed -i "s#SELINUX=enforcing#SELINUX=disabled#g" /etc/selinux/config
6 m& H; a% T" N# \- q/ ^2)配置时间同步
7 C) s5 Y; m6 _ Y6 X" I) X4 P! J# 安装ntpdata及epel仓库
/ Y2 b/ H2 v' s3 \ d. o N" o~]# yum -y install ntpdate
+ G1 |, d% n* Z& i5 {! P* _# 添加时间同步定时任务,如果有内部时间服务器地址,建议配置为内部地址
- p1 k( X$ s0 y; v~]# crontab -l: _0 G8 i+ L2 G2 a5 L# ]" H
*/5 * * * * /usr/sbin/ntpdate ntp.aliyun.com >/dev/null 2&>1
2 z$ Y/ v9 v5 _; L0 m3)配置hosts解析* L1 x7 N% }4 s
~]# cat >>/etc/hosts<<EOF. _9 l0 T+ g( x
192.168.16.171 CEPH01
r; {# ?. w0 @8 r# l192.168.16.172 CEPH02
( T/ r0 T8 j P192.168.16.173 CEPH038 a6 S1 s$ o% p1 Q! v9 N
EOF
1 q3 Y8 o& {6 n z0 S4 _* m4)添加用户并配置sudo权限& l1 N1 x9 d$ w0 M9 S
~]# useradd cephadmin% p3 z' F! r+ d3 \2 o, J
~]# echo "dayi123"| passwd --stdin cephadmin
H4 \; L" V; `6 Z~]# echo "cephadmin ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephadmin6 @4 d% t) v* ^
~]# chmod 0440 /etc/sudoers.d/cephadmin
' }. ]3 E4 Y4 J( p3 ]5)配置cephadmin用户免秘钥登录, [ H: e( i# _3 d- C9 ~
~]# su - cephadmin5 f$ r% w: R. M, D# \& v3 |
~]$ ssh-keygen
# J3 Q) K6 u. ]) Q. ]. y1 {~]$ ssh-copy-id -i cephadmin@CEPH01' s2 q: Y/ ~, g: I
~]$ ssh-copy-id -i cephadmin@CEPH02
0 l! w- b6 u- u# V% {+ W~]$ ssh-copy-id -i cephadmin@CEPH037 r k- @3 w" q# [
6)配置ceph-deploy的仓库地址(使用root用户)
7 A2 S) ~* B1 k' G/ X1 {, C~]# cat << EOF > /etc/yum.repos.d/ceph.repo) M0 U; n; `/ O* J
[ceph-noarch]
0 s5 z. {8 @. s/ j" K% s# \8 Wname=Ceph noarch packages- ?4 W5 k& W! Q% D5 [
baseurl=https://mirrors.aliyun.com/ceph/rpm-15.2.4/el7/noarch/
! N( E& u0 o6 `' b/ b3 E1 c9 xenabled=1
2 X- f! p3 i1 b0 D dgpgcheck=1: T3 r2 n5 C) x0 T8 ]& X3 u
type=rpm-md
5 ?7 F3 J" D( Ugpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc! L n% h8 @, s8 ]' c: f
EOF
5 N& }: s$ S3 C- D7 o4 l, _: t% J(2)使用ceph-deploy 部署集群(在其中一台集群节点上操作即可)5 j% u& _. N( X. F9 C; \+ @ l
1)安装ceph-deploy" d2 j6 A$ O9 o) w1 R8 O& @
~]$ sudo yum install -y ceph-deploy. U9 d5 O# q4 ^
~]$ mkdir ceph-cluster/ H8 |7 X/ o( }' c9 e7 x5 o7 |3 ~
~]$ cd ceph-cluster/6 @/ a$ j/ B( b6 T* U
2)部署节点: g g' f. _% n1 F' q
ceph-cluster]$ ceph-deploy new CEPH01 CEPH02 CEPH03: ]2 M8 ^! w8 U# r1 L% e
Traceback (most recent call last):# D" D$ P2 n1 T" p+ H& R' |
File "/bin/ceph-deploy", line 18, in <module>
( a! H9 n/ r2 d, j U5 h- [ from ceph_deploy.cli import main
. D4 T( N( @# Y4 ?! n# 如果报上述错误,则需要安装python-setuptools
2 ?* C9 X6 v7 m, F1 z, O ~ceph-cluster]$ sudo yum install -y python-setuptools
- j9 {' _. H B4 n8 y% T2 U: y# 重新部署节点
/ k6 H, l, ~$ g: V) b5 V" c+ pceph-cluster]$ ceph-deploy new CEPH01 CEPH02 CEPH03
2 F) F/ p5 Q6 n6 A# 上述命令执行成功后会生成以下文件, N( b6 |% K4 c7 h
ceph-cluster]$ ls0 ?0 J$ q. h9 m3 U+ @, ~ `' N
ceph.conf ceph-deploy-ceph.log ceph.mon.keyring
& N5 {# N7 D$ Z, }, [2 O 3)编辑配置文件 o! w$ X" t/ C5 k, G2 }3 L: N# ^) c
在配置文件中添加与网络相关的配置,因为此处只有一个网络,所以public network和cluster network配置一样。
7 i5 @* E% k2 n0 }4 Y5 Eceph-cluster]$ cat ceph.conf" b( P1 ]( _" r; {9 i/ [
......+ _: Y% |5 |: J
public network = 192.168.16.0/24" e1 [# K8 `" U
cluster network = 192.168.16.0/24
e0 _; |" w0 ~% [, w# p5 C0 N; J4)在各节点上安装部署ceph9 F' u. U; E4 s' N
# 部署节点( _5 ^1 e+ d* \: _8 {3 u9 f
ceph-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
- D! r( I! Q% U/ U/ V C- q1 P# 配置初始 monitor(s)、并收集所有密钥; {1 J) J* i! j* o. Y; {0 j
ceph-cluster]$ ceph-deploy mon create-initial; W3 \7 E, o! n% ~7 R' G. X% q* K
ceph-cluster]$ ls -l *.keyring
2 L3 ~% Z6 Q9 o7 W) j-rw------- 1 cephadmin cephadmin 113 Jul 31 10:25 ceph.bootstrap-mds.keyring
( \! [% e. H8 C4 c6 q* p0 m- m-rw------- 1 cephadmin cephadmin 113 Jul 31 10:25 ceph.bootstrap-mgr.keyring
. ^* b S* Z" r8 G-rw------- 1 cephadmin cephadmin 113 Jul 31 10:25 ceph.bootstrap-osd.keyring: P& f) I3 j2 P7 D; u
-rw------- 1 cephadmin cephadmin 113 Jul 31 10:25 ceph.bootstrap-rgw.keyring
! `' ?: n5 R+ i; R+ r-rw------- 1 cephadmin cephadmin 151 Jul 31 10:25 ceph.client.admin.keyring
& D3 r- W8 ~+ _6 p8 d1 i-rw------- 1 cephadmin cephadmin 73 Jul 29 09:05 ceph.mon.keyring8 W: _" y, p+ i S" H
# 把配置信息拷贝至各节点! l9 G; a1 l; \. d& i* D6 u L
ceph-cluster]$ ceph-deploy admin CEPH01 CEPH02 CEPH03
# x8 l* k/ [& m! V( i5)配置osd
! ^8 i9 ^% f* H/ _]$ ceph-deploy disk zap CEPH01 /dev/sdb' ]5 u# z3 O6 l* v' {
]$ ceph-deploy osd create CEPH01 --data /dev/sdb; `' ]% i2 M9 ?* W* r0 Z; T
]$ ceph-deploy disk zap CEPH01 /dev/sdc, c8 M3 o- w' K
]$ ceph-deploy osd create CEPH01 --data /dev/sdc
: E: j8 ~! U) W3 Z]$ ceph-deploy disk zap CEPH02 /dev/sdb
3 w& U: C8 `$ N7 E4 ]4 h]$ ceph-deploy osd create CEPH02 --data /dev/sdb6 a" C% T% a0 G' h' z4 W/ D, c
]$ ceph-deploy disk zap CEPH02 /dev/sdc
2 _. w! T8 M5 y6 r( F3 {4 c1 F]$ ceph-deploy osd create CEPH02 --data /dev/sdc
0 j; m K! h* Z$ x) U! x0 v# @) a3 T]$ ceph-deploy disk zap CEPH03 /dev/sdb1 n: w1 ~3 ^# P, K
]$ ceph-deploy osd create CEPH03 --data /dev/sdb
" F0 z! `0 O5 ?( l]$ ceph-deploy disk zap CEPH03 /dev/sdc
5 V) l/ g8 u( } S]$ ceph-deploy osd create CEPH03 --data /dev/sdc9 l# _# j7 _3 R
]$ ceph-deploy disk zap CEPH03 /dev/sdd
: {. S! O5 m* @: M4 L, ^5 J1 H" k( P" G! ?]$ ceph-deploy osd create CEPH03 --data /dev/sdd$ o, B& o4 h2 D( i( o
2 q- O- r* G& X I8 Y
0 W* B2 }0 R) L" |( u- C三、CEPH块存储: L1 n. g2 {- ^( c' ]
1、安装ceph块存储客户端
0 ^1 y3 C+ q: G7 c Ceph块设备,也称为RADOS块设备,为客户机提供可靠的、分布式的和高性能的块存储磁盘。RADOS块设备利用 librbd库并以顺序的形式在Ceph集群中的多个osd上存储数据块。RBD是由Ceph的RADOS层支持的,因此每个块设备 都分布在多个Ceph节点上,提供了高性能和优异的可靠性。RBD有Linux内核的本地支持,这意味着RBD驱动程序从 过去几年就与Linux内核集成得很好。除了可靠性和性能之外,RBD还提供了企业特性,例如完整和增量快照、瘦配 置、写时复制克隆、动态调整大小等等。RBD还支持内存缓存,这大大提高了其性能。Ceph RBD支持已经添加到Linux主线内核中,从2.6.34和以后的版本开始。
: n9 X% k* Z! e0 B5 A0 ~+ J) |0 R$ |# 为ceph块客户端创建认证用户名和秘钥
; l$ z0 ?" K5 s2 C( }; f: Mceph-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.keyring8 l# y; ~/ }9 l& c8 `, w+ k
[client.rbd]! a, Y/ e' T+ \9 ?1 G) ^
key = AQAJ3yRfQy4AMxAA4dhmN/68/C+I6dPdGSDTew==0 k, p. d0 k* c$ P
# 把配置文件和秘钥文件拷贝至客户端3 y3 s" @" l3 N$ m/ x
ceph-cluster]$ scp ./ceph.client.rbd.keyring /etc/ceph/ceph.conf root@192.168.16.101:/etc/ceph/$ E% z" E% U4 o* n
# 将yum仓库文件拷贝至客户端
* g8 W; `2 o! P1 i, c]$ scp /etc/yum.repos.d/ceph.repo root@192.168.16.101:/etc/yum.repos.d/
7 N3 U: n4 w- @# 安装客户端(客户端操作)" Q4 `( l4 U! l5 B
~]# yum -y install epel-release N6 n+ D. V {
~]# yum -y install ceph; ]: w& N! x1 B3 n2 ]
# 查看对象存储. w! R$ z9 @: o4 R
~]# ceph -s --name client.rbd
: X. u6 Z+ u. f `; |( L# C& D1 s cluster:
# q( h( g* s) R5 m. r* w6 f) _ id: 6bec7eb7-3d58-47b6-93d5-4529169710027 f( X3 B2 S+ y& A6 b
health: HEALTH_WARN
2 H; p. d/ s0 R: f$ W7 o Module 'restful' has failed dependency: No module named 'pecan'" i8 p& d+ E) D
0 H- M' j- B) ^- o2 Z6 v: n
services:
/ O. h, w/ o" o; s' J mon: 3 daemons, quorum CEPH01,CEPH02,CEPH03 (age 14m)% T# w/ s2 D, V/ n# D: o
mgr: CEPH01(active, since 8h), standbys: CEPH02, CEPH03+ F! S7 t3 V9 }9 c% F
osd: 3 osds: 3 up (since 17m), 3 in (since 17m)
3 D; ~, @% w' U + n0 g+ H. x+ ^; Y! z
data:
' R$ z8 \( g6 }& K7 ?! q pools: 1 pools, 1 pgs$ g3 O M8 ?% x7 d* P! {9 A# d
objects: 0 objects, 0 B
! w" A+ `$ X1 a* G% w3 B2 V2 ^ usage: 3.0 GiB used, 27 GiB / 30 GiB avail
, R1 S' m" c u; y( R1 Z$ B pgs: 1 active+clean% Q7 g, M: G1 u. L% j
2、为客户端创建块设备
% _* U# f8 `( H2 u, n# 查看集群存储池(ceph集群上操作)
q( K$ R x6 E# p]$ # ceph osd lspools) [' i9 [2 s! O# v8 q& w6 y
1 device_health_metrics( d( x3 R8 u( \: l, h) K' e
# 创建存储池. i; o" u8 q) ]! {
]$ ceph osd pool create rbd 128, E7 l( x1 e1 q6 [/ A& a
pool 'rbd' created5 W8 ], |0 A$ x2 m/ A5 t
# 查看存储池里面pg和pgp大小5 y" \5 A4 y, R3 M' A
]$ ceph osd pool get rbd pg_num
& h) o2 u9 C. m3 Hpg_num: 128
{ R* d+ G T# O/ U6 k]$ ceph osd pool get rbd pgp_num
) y6 Q# N# }, [# o1 S/ @2 f' `& Apgp_num: 1285 B2 j8 y Q( T
50 为 place group 数量(即pg_num),pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值(官方文档地址:https://ceph.com/pgcalc/):' }. N w" H# i( g' Y
1)少于 5 个 OSD 时可把 pg_num 设置为 128
- I5 t# s! [" U. F5 { 2)OSD 数量在 5 到 10 个时,可把 pg_num 设置为 5120 w/ D& i" @8 s G" M0 b
3)OSD 数量在 10 到 50 个时,可把 pg_num 设置为 4096
6 W, a- @. y6 `/ i+ Y( ? 4)OSD 数量大于 50 时,你得理解权衡方法、以及如何自己计算 pg_num 取值
+ Z; u6 t6 j u9 R6 _" C: n; ?! q# 为客户端创建块设备(在客户端操作)
" ?' a( Y2 o. \$ `" d9 G~]# rbd create rbd1 --size 10240 --name client.rbd
* h! e" s; @+ s+ H, G, h# 查看创建的块设备
, `- @2 v- ]& i7 |) {' K* q, E" N+ j~]# rbd ls --name client.rbd5 _( k) q* X$ l$ `/ T) J
rbd1& N$ H$ O$ j3 P) I
~]# rbd ls -p rbd --name client.rbd, E9 M: y; j/ V, R. f3 ]
rbd1
: {1 w$ f5 N- F$ Z# c~]# rbd list --name client.rbd
b/ D3 X, n4 ^5 |0 J; Lrbd1
8 w+ }3 M* d/ P$ g% F& }3 a3 w/ b~]# rbd --image rbd1 info --name client.rbd
- o7 N. W% c( C4 l6 V7 @rbd image 'rbd1':# d1 B( W6 z+ \- \2 W
size 10 GiB in 2560 objects( H) ^$ H& K* T! E! P4 [8 X0 ~
order 22 (4 MiB objects)/ \4 P0 w% q+ @3 k7 W
snapshot_count: 0
i6 o& b# K% Z6 n' z# S/ xid: 10f5fac0a87e$ y ?% k- E) K! A- o3 M( p
block_name_prefix: rbd_data.10f5fac0a87e: P( q9 Z$ D( y; \: ?" N
format: 22 ]2 v' U+ R: o3 u( P3 h' ~% g( L
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
9 B' B9 j4 G4 o, {& C% Q3 top_features:
% [+ i4 N; z7 N+ z8 eflags:2 m5 z1 q& H$ ~ N; S) Y9 E5 x
create_timestamp: Sat Aug 1 21:06:42 2020+ j! m7 A1 [& t
access_timestamp: Sat Aug 1 21:06:42 20204 A' `! u5 ?" n; Q3 m
modify_timestamp: Sat Aug 1 21:06:42 2020
: L$ K- V& d, x6 U
. j% J; X$ b9 f( i, ~: X' }. n3、为客户端映射块设备 t( M4 D! J1 S0 d6 S$ i9 C
在客户机上使用块设备时需要对象映射,部分对象映射的功能只有在内核4.9中才引入支持,如: 排它锁定支持(exclusive-lock),对象映射支持(object-map),深平(deep-flatten)和快速diff(fast-diff)。所以在映射时先禁用这些功能。禁用方法有三:$ Z9 u, U+ I+ g. k; K
(1)动态禁用( z5 p" Q+ c6 `, Q0 ^3 |, r
rbd feature disable rbd1 exclusive-lock object-map deep-flatten fast-diff --name client.rbd
/ D! w& L9 I( C9 n6 c' [(2)创建RBD镜像时,只启用 分层特性。2 v( y7 Q- W0 M6 f' j4 i
rbd create rbd2 --size 10240 --image-feature layering --name client.rbd% G$ |; n% x9 l9 y
(3)ceph 配置文件中禁用
. q! O& y' |* N- {) V+ b rbd_default_features = 1- @8 E F: R8 N+ Q2 U9 W1 n
# 没有禁用前映射会报错
9 l5 w0 ~7 }6 ^1 Z2 G, ^~]# rbd map --image rbd1 --name client.rbd
3 a; [2 Q$ Q @# urbd: sysfs write failed# I5 I$ V: O& |' s
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable rbd1 object-map fast-diff deep-flatten".! `9 ]6 q) z7 L \# L5 T
In some cases useful info is found in syslog - try "dmesg | tail".
B) N$ @( @0 c# s0 u% ?rbd: map failed: (6) No such device or address' I) g% H% f0 x* s
# 动态禁用后再次映射,需要去cluster节点上操作(ceph集群上操作)
3 I4 A/ a D6 i) J* b2 Y~]$ rbd feature disable rbd1 exclusive-lock object-map deep-flatten fast-diff( _3 P' w ]7 p* b& M. F: U
# 再次在客户端上映射
* c+ b3 ]. l; Y2 t) R* d& `+ L5 Y~]# rbd map --image rbd1 --name client.rbd
# e% N2 k& s- [ `; Y/dev/rbd0% R3 L! f# J& S; }% z1 U q
# 查看映射的块设备
- U" s) ~% b0 j% {2 `; S4 o0 Y8 r8 i~]# rbd showmapped --name client.rbd' x9 l" R0 `* S& z( ^
id pool namespace image snap device
$ p0 z6 i: s6 @& d0 rbd rbd1 - /dev/rbd0
" f0 A$ F2 E' l0 \1 n- _& b 映射完成之后就可以挂载并使用。2 A$ e) Z; K& u, K/ K6 a8 z
# 查看
3 u. n: T; W5 e/ x~]# lsblk9 {' x, m, e$ e1 J8 K
......
" K! q% i! i% S+ m' }rbd0 252:0 0 10G 0 disk
' r4 A" O$ b S# 格式化并创建挂载点挂载
8 l& i/ _. I0 |9 T~]# mkfs.xfs /dev/rbd0
& [5 l, [0 C+ |& N! g) n0 |+ | ]~]# mkdir /mnt/test-rbd3 f. p% S8 U# Y+ ` X' I* ~
~]# mount /dev/rbd0 /mnt/test-rbd/! m B( c% t# x& e
~]# df -h3 F4 q" M! G# L( Y+ k. E6 X. T s n
......* `+ E9 A1 M L, A* o7 u
/dev/rbd0 10G 33M 10G 1% /mnt/test-rbd' n5 f6 b9 f& I2 Y* A
$ x5 t: A8 L: j3 x7 Q
. F, B: f- B7 F4 j& ^: K1 b四、CEPH对象存储
2 x/ ?) e2 g% d/ i1、部署Ceph 对象存储
) J1 e% V8 H5 @* ]) o* } 作为文件系统的磁盘,操作系统是不能直接访问对象存储,它只能通过应用程序级别的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对象存储还具有多站点功能,即为灾难恢复提供解决方案。
, L- l. \# ~8 w+ p# c3 c; C7 z: `1 D- \. u5 m, E# |; T: G Q" o) V6 i6 ^& b
- l2 Y1 j f2 I' r5 V- ?# 安装ceph-radosgw,默认在执行ceph-deploy时已经安装(以下在ceph集群上操作)
, t1 h! f1 U/ m]$ sudo yum -y install ceph-radosgw
& C/ t4 H# o* q P+ I L! N# 部署rgw9 Y- ^! I/ Z) X) `
ceph-cluster]$ ceph-deploy rgw create CEPH01 CEPH02 CEPH03 v, x. B6 q) y+ V" V$ o$ ]$ V( I! Y
# 下载创建池脚本9 B6 l- v, v0 R! A2 l* I' U
ceph-cluster]$ curl -o pool https://raw.githubusercontent.com/aishangwei/ceph-demo/master/ceph-deploy/rgw/pool
2 M( B$ Q3 `7 ?, s6 Lceph-cluster]$ curl -o create_pool.sh t https://raw.githubusercontent.com/aishangwei/ceph-demo/master/ceph-deploy/rgw/create_pool.sh
' O( C* ]' Q8 q7 K0 [# 根据自己需求修改相应参数
, |$ z* Z4 h( zceph-cluster]$ cat create_pool.sh
) t5 u# J( o R# C. e+ _#!/bin/bash: ?! U; a4 d/ _# b! v
PG_NUM=10
( o- s# U9 j* o7 ]9 X* O8 S5 |PGP_NUM=108 M' X7 M' r8 j# w$ L
SIZE=3
( Q/ I5 s, |2 q# h8 efor i in `cat /home/cephadmin/ceph-cluster/pool`
! q2 J4 a" L0 m/ O do
( F2 u- |" t1 \2 j ceph osd pool create $i $PG_NUM
+ s2 `% x4 [& \& E; a ceph osd pool set $i size $SIZE
- }8 }8 S+ j2 w7 Z2 z+ n done& J h4 s9 n- W+ q5 u
for i in `cat /home/cephadmin/ceph-cluster/pool`) d! M6 I. X+ q$ j8 n, g
do
7 B8 C6 Z& L4 S' U: s# b ceph osd pool set $i pgp_num $PGP_NUM+ m5 k+ y7 Z$ p
done
5 c7 j& b: f2 v) b# 创建池
) M4 o+ @& H' Q9 e: m0 Wceph-cluster]$ create_pool.sh
# P8 }0 |4 u; Z, L& P! r7 |+ n# 测试是否能够访问池
1 S3 B7 d" j5 ^- I L~]# ceph -s -k /var/lib/ceph/radosgw/ceph-rgw.CEPH01/keyring --name client.rgw.CEPH01/ y7 T1 t( C! S" R" i# k
cluster:2 g; E% ^9 C! Q9 u& y) m
id: 6bec7eb7-3d58-47b6-93d5-452916971002
* t9 b2 U4 H* F3 B health: HEALTH_WARN
; V. M9 U! j8 G5 C# S. C Module 'restful' has failed dependency: No module named 'pecan'& C* C- r5 q9 I$ f/ @+ A% P
1 pool(s) do not have an application enabled
/ m3 o2 C+ t3 O0 S9 y5 `$ W0 M 6 pool(s) have non-power-of-two pg_num
$ r7 }) X: H: [ 5 pools have pg_num > pgp_num Y6 e8 L/ n$ I E( D
services:
* j+ o5 K3 g" d K) r3 W5 a* U mon: 3 daemons, quorum CEPH01,CEPH02,CEPH03 (age 69m)
2 b8 _% b* \; Q) K: Q mgr: CEPH01(active, since 67m), standbys: CEPH03, CEPH02
- {! Q' \7 M$ f }0 z+ H! n+ _ osd: 3 osds: 3 up (since 47h), 3 in (since 2d)
$ }. D3 j1 s- c8 ?7 M" Z rgw: 3 daemons active (CEPH01, CEPH02, CEPH03)! m$ _$ b$ x8 [& N) l
task status:
- T8 r/ g" q, Y9 e. x data:
: y3 G3 Y. p# h- s2 X5 O- y pools: 11 pools, 245 pgs
0 U( \- r6 z+ c5 U objects: 211 objects, 14 MiB7 c* a/ y" F& p9 I# G6 c. u6 Z
usage: 3.1 GiB used, 27 GiB / 30 GiB avail. |6 q2 e/ q8 @! E* R3 _$ S
pgs: 245 active+clean+ X0 u" t+ N, @- t( i
2、使用 S3 API 访问 Ceph 对象存储
' Z: f4 X9 ~4 U# 创建用户,并记录access_key 和 secret_key (在ceph集群上操作)( s( I+ V% r, y/ ]" N; l" N
]$ radosgw-admin user create --uid=radosgw --display-name="radosgw"6 O# W3 D% x+ a. ]( |
# 安装客户端(客户端操作)
( e5 T, p8 _7 w% Z~]# yum install yum install s3cmd -y5 b/ K8 O& X4 e: c; x% @' `5 o
# 生成配置(客户端操作)
1 d0 r+ B3 M. A9 k8 s& y: U# D/ b~]# s3cmd --configure
3 Q4 N: h2 z, G) ~. K+ X" d# 修改配置(客户端操作)9 M- F* z2 d( E& L+ l
~]# vi /root/.s3cfg
) I& t" S5 ?0 `1 Fbucket_location = US1 w3 q( B8 L! W$ A" L( S! e- o
host_base = CEPH01.dayi123.com:74803 U+ u- ^* F# |' S. M
host_bucket = %(bucket).CEPH01.dayi123.com:7480
1 q7 M4 _) j3 m5 S& V' n) ^* Z# 添加hosts解析(客户端操作)' {5 k' a( b4 _$ c5 d
~]# echo "192.168.16.171 CEPH01 CEPH01.dayi123.com" >>/etc/hosts
$ R4 S8 t) u/ X3 r5 w# 创建桶(客户端操作)# U v& Q4 H- h2 a5 Z1 |" s' e
~]# s3cmd mb s3://dayi123! x9 c( B, F4 }, ^* V9 I
ERROR: S3 error: 416 (InvalidRange)
7 [% ?5 R9 @/ i5 F5 h6 M 如果创建桶时报如上错误,则需要将其他对象存储后台驻留程序(OSD)添加到群集或将“mon_max_pg_per_osd”的默认值增加到300以上。
5 G- M1 X) t4 q4 D& ^# 修改配置文件
_$ S, N5 o" V" l* Q$ d% z4 [my-cluster]$ vim ceph.conf
& t- q& O F& U2 g......
; s# M8 d) d6 x" ?( D[mon]
) b- ~% q( I8 G& u- k' h" Wmon allow pool delete = true4 h" Q+ K5 s6 o- |) L/ W
mon_max_pg_per_osd = 300
* \* ^; x5 y* K y* B. B2 B- W# 拷贝配置文件至各节点
/ p3 v. e; ?/ G$ j5 ]+ Nmy-cluster]$ ceph-deploy --overwrite-conf config push CEPH01 CEPH02 CEPH031 l% W1 G' f4 @
# 重新创建桶并将文件放入桶中
; W7 x3 f9 W3 L- C4 f~]# s3cmd mb s3://testbucket
9 U' W$ o4 ?" y2 OBucket 's3://testbucket/' created
* W% |6 I- Z2 |0 K~]# s3cmd put /etc/yum.repos.d/ceph.repo s3://testbucket, L$ q3 b; e* h3 t0 y. ]
upload: '/etc/yum.repos.d/ceph.repo' -> 's3://testbucket/ceph.repo' [1 of 1]
9 L C6 k2 Q6 W: c 674 of 674 100% in 0s 34.19 KB/s# r, Y: B, p# P9 h2 E" b
674 of 674 100% in 12s 52.87 B/s done! t+ r1 P8 z0 [" i6 r( X
# 查看桶中文件) J! J9 H5 k! r2 w2 O
~]# s3cmd ls s3://testbucket
P% p7 S( n+ @8 {% S3 k' S2020-08-04 13:26 674 s3://testbucket/ceph.repo
2 x3 X" C! S, \0 u6 p3、使用 Swift API 访问 对象存储1 C4 V9 d( ]/ `4 ~0 }+ P" `% w
# 在ceph集群上创建 swift api 子用户并记住secret_key
c. e* Q' }+ mceph-cluster]$ radosgw-admin subuser create --uid=radosgw --subuser=radosgw:swift --access=full
% N$ A' M' `8 q5 E0 E. h# 安装swift api客户端软件(客户端操作)( @+ Y/ T4 G6 a) ]' B# r
~]# pip install --upgrade python-swiftclient
4 F5 T" Y2 e2 {" G# 通过swift创建桶 n% D2 i6 G3 G; T+ g
~]# swift -A http://CEPH01.dayi123.com:7480/auth/1.0 -U radosgw:swift -K AKYbLdvWfccaVwto49sCT5nFlwo0QnYArQ8TIlBZ post testbucket2" h7 ?6 ~( D) @( y2 |5 a" h
# 查看桶, O. D A$ p7 O1 B
~]# swift -A http://CEPH01.dayi123.com:7480/auth/1.0 -U radosgw:swift -K AKYbLdvWfccaVwto49sCT5nFlwo0QnYArQ8TIlBZ list A4 @: ?+ T/ Q4 U4 K9 H
testbucket
; V7 [5 S, {2 X8 l3 c) ptestbucket2+ Y; P) a' R' p
' |9 E: |1 K* D6 K: i2 j
' ^+ a: s' \0 @3 B* V8 [5 g五、CEPH文件存储7 |) k- `* s5 z
1、安装. m5 U0 p0 a# S9 e/ T p
Ceph文件系统提供了任何大小的符合posix标准的分布式文件系统,它使用Ceph RADOS存储数据。要实现Ceph文件系统,需要一个正在运行的Ceph存储集群和至少一个Ceph元数据服务器(MDS)来管理其元数据并使其与数据分离,这有助于降低复杂性和提高可靠性。' R9 c/ f' D; g8 E" o2 B
8 T) |0 V6 E9 A
. ]* i7 w" \# T9 L6 N: L 只有Ceph FS才需要Ceph MDS;块和对象存储不需要MDS服务。libcephfs库在支持其多个客户机实现方面发挥着重要作用。它具有本机Linux内核驱动程序支持,因此客户机可以使用本机文件系统安装,例如,使用mount命令。它与SAMBA紧密集成,支持CIFS和SMB。Ceph FS使用cephfuse模块扩展到用户空间(FUSE)中的文件系统。它还允许使用libcephfs库与RADOS集群进行直接的应用程序交互。$ l7 P n; T7 E: F1 g0 J7 a
# 安装cephfs
1 [3 C0 x# _4 D- ^4 ^) N, B# L) Pceph-cluster]$ ceph-deploy mds create CEPH03
5 J& A0 s, x. K* v6 S# 创建存储池5 |- h, |% o! I# h
ceph-cluster]$ ceph osd pool create cephfs_data 64( ]1 u3 |' @8 D5 T* }# Z6 N5 v
pool 'cephfs_data' created
, s/ R+ z2 q# a2 F' ]; ]ceph-cluster]$ ceph osd pool create cephfs_metadata 32
9 a' W3 r; {5 G9 j) T/ |pool 'cephfs_metadata' created6 g, _( E( N4 X8 l. s3 D/ {
# 将存储池添加为fs存储
) _. ~0 X# {- ^7 d* iceph-cluster]$ ceph fs new cephfs cephfs_metadata cephfs_data! |5 {4 ]+ r5 S& ]# C
new fs with metadata pool 23 and data pool 22
3 R. D& w3 v* A7 H$ N# 启动mds
: v# @+ A/ \+ S2 Cceph-cluster]$ ceph mds stat
, D- I& ]/ T7 r l* Tcephfs:1 {0=CEPH03=up:active}
a( d- ? A ~# 查看存储池
7 } x0 g& I/ aceph-cluster]$ ceph osd pool ls
: W" a0 B: N1 S& a( z# 查看对象存储存储池
- `$ p6 x& w$ l' s$ `ceph-cluster]$ ceph fs ls
. U* F' s8 W6 W; j/ o; P0 i! f Iname: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]- `3 r5 H. v% {6 }
# 为文件存储创建用户及认证秘钥
8 C3 e7 ~; g1 x4 ?. X( L$ Wceph-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.keyring1 a" |/ Z. I* s( v
# 将秘钥拷贝至客户端
3 Z9 O+ Y+ t" k# x1 p, | ceph-cluster]$ scp ceph.client.cephfs.keyring root@192.168.16.101:/etc/ceph/4 _$ X$ I, r+ X& y- k5 v5 h
2、挂载
, I4 ?5 D. C* l4 Z 在Linux内核2.6.34和以后的版本中添加了对Ceph的本机支持,可通过通过内核驱动和FUSE客户端挂载Ceph FS。
v: _: W/ C5 H9 K# 在ceph集群上执性获取key& L. |+ g- B& Y2 Z* l$ M+ r$ I+ \( a
ceph-cluster]$ ceph auth get-key client.cephfs a8 v' x) G$ y/ S
AQDduCpfZ9fKKhAA7oGPEoQMCDgQ62TDluCiYg==
5 w6 K7 V! A2 r Q# G8 D7 R# 在客户端挂载,先创建挂载目录,在挂载* S' z; W6 a. A0 R
~]# mkdir /mnt/cephfs
) T+ e+ M6 U1 S. m$ S1 ^" b~]# mount -t ceph CEPH03:6789:/ /mnt/cephfs -o name=cephfs,secret=AQDduCpfZ9fKKhAA7oGPEoQMCDgQ62TDluCiYg==
# A( T+ w/ l( u/ p! Y~]# df -h /mnt/cephfs/$ e+ W" X7 H+ r3 A9 f h
Filesystem Size Used Avail Use% Mounted on3 }' _7 F4 M8 L. R9 l
192.168.16.173:6789:/ 14G 0 14G 0% /mnt/cephfs
+ Z2 w ], i3 H7 b4 }2 D# 也可将key保存至文件中,挂载时制定key文件
3 `7 u$ y4 l* j' l+ F0 I~]# echo AQDduCpfZ9fKKhAA7oGPEoQMCDgQ62TDluCiYg== >/etc/ceph/cephfskey
: r. h- f- v6 U- L) p; [~]# umount /mnt/cephfs/3 {6 V% l1 V6 _2 j0 _- c2 @: w
~]# mount -t ceph CEPH03:6789:/ /mnt/cephfs -o name=cephfs,secretfile=/etc/ceph/cephfskey
% Z6 S& E- k' Q0 B0 E! D~]# df -h /mnt/cephfs; w0 b+ @* n5 E# ]1 R5 H/ s9 z
Filesystem Size Used Avail Use% Mounted on0 {- f0 i% f n
192.168.16.173:6789:/ 14G 0 14G 0% /mnt/cephfs0 X. ?* c* R' x; U! [! V7 e
# 也可将配置写入fstab中,开机自动挂载,_netdev参数为网络启动后挂载
* t; L1 G& Q( x~]# echo "CEPH03:6789:/ /mnt/cephfs ceph name=cephfs,secretfile=/etc/ceph/cephfskey,_netdev,noatime 0 0" >>/etc/fstab) G2 c3 D9 v3 f @4 e# O
# 验证挂载
4 B" z8 C8 Y. P; ]; m~]# umount /mnt/cephfs& |( p8 \- g u* x3 J
~]# mount /mnt/cephfs# T7 v$ k( B j' C+ r4 X! M
~]# df -h /mnt/cephfs/
' o' f' T/ ^' sFilesystem Size Used Avail Use% Mounted on
( e [$ y8 Z, F2 s: Q: A192.168.16.173:6789:/ 14G 0 14G 0% /mnt/cephfs( X: |3 D0 V: K2 M* |
* U1 E4 n6 c( o# G: A- N5 J- L4 ?
1 n0 r1 A, B/ f1 C5 e
|
|