|
|
Ceph 对象网关主要是由 radosgw 接受用户请求,然后与后端librados交互;它主要起到承上启下的功能,对外它能兼容两种接口,一种是S3,另一种是Openstack Swift 接口,这两种接口,都有各自的用户认证机制,所以 Ceph 也提供了一套独立的用户管理机制,这套用户管理机制能同时兼容S3和Swift接口,最终数据会落在 OSD 上面,无论使用 S3 还是 Swift ,它们落到 OSD 上面,都是相同的名称空间;所以你使用 S3 存储的,也可以使用 Swift 进行访问。这是对象存储的一个基本架构,所以如果要使用它,我们需要部署radosgw,才能访问到集群,默认是没有安装的。
+ `$ H- g) b# X y4 w+ M$ ]1 p6 l' x0 [% }5 L
bucket 是什么?可以理解为装载对象的容器,它的后端是无限可扩展的存储空间,并且具备安全可靠性。Ceph 对象存储它后端是借助 ceph rados 实现数据容灾的机制,那么他能提供哪些功能呢?
# ~; _# O: i6 Y/ B t; N
* D6 Q& ]: {9 E; T& W( }基本功能
- j* a" V. G2 m" F" VRESTful Interface # RESTful风格的接口,实现上传下载及管理功能; x4 s$ D3 O5 l4 i3 d
S3- and Swift-compliant APIs # 提供两种风格的 API 接口,兼容 S3 和 Swift;
$ s5 n' k" v% h# f, bS3-style subdomains
/ K) [/ @' F7 ?$ s7 M/ MUnified S3/Swift namespace # 扁平化、统一的的S3/Swift的名称空间;- q( {' P- z6 o
User management # 为了安全性,也提供用户管理,可以限制对象是可以公共访问,还是授权访问;8 k. z2 S5 q8 T6 d! Z8 U6 T
Usage tracking # 追踪用户使用情况 rados df
. x: H& q; p, GStriped objects # 支持分片上传+ y" x, b7 v2 v) |) c
Cloud solution integration # 支持云解决方案集成
& w0 }2 R; B5 s1 k' r* sMulti-site deployment # 支持多站点部署/ d ` t0 V& d9 `
Multi-site replication # 支持多站点复制
0 y; ^: P3 Y" u+ @安装 RGW
4 P& O# U8 L1 w- _) H1. 软件安装6 X: y6 d9 ^: s% F/ r0 \+ Q# W
复制
5 Z1 b4 D6 c+ v[root@ceph-node01 ~]# rpm -qa |grep ceph
/ Z# |/ i' ?6 h: N$ Aceph-base-14.2.11-0.el7.x86_64
; K; P; S; ^8 l6 N9 H. f9 f) l/ uceph-mon-14.2.11-0.el7.x86_64 8 Y6 g1 n) n% I' u" `2 v
ceph-deploy-2.0.1-0.noarch O6 Y3 |; `: ~8 `, x/ I
python-ceph-argparse-14.2.11-0.el7.x86_64
2 P, L. y2 N8 flibcephfs2-14.2.11-0.el7.x86_64 8 N4 D% G2 i$ B, Z+ j
ceph-common-14.2.11-0.el7.x86_64
3 H' ~2 B0 r f( Lceph-selinux-14.2.11-0.el7.x86_64
% j# H8 r9 V- a- l9 Fceph-mds-14.2.11-0.el7.x86_64 $ L' p* q, a3 N; I2 h" g
ceph-14.2.11-0.el7.x86_64
; v7 T( f, u, ]: j) Lpython-cephfs-14.2.11-0.el7.x86_64 ( t$ Z. u, K/ @' i
ceph-osd-14.2.11-0.el7.x86_64
, W2 f2 ~4 q! q1 yceph-mgr-14.2.11-0.el7.x86_64
% }" i* x5 `: o' U5 b7 ^ceph-radosgw-14.2.11-0.el7.x86_64 # 直接使用 yum 安装即可 0 D, g E; E5 C! i4 _
[root@ceph-node01 ~]# 7 q/ \5 _0 i$ Y" y: U N
% @& x& D2 W9 g. }( R% b2 j% V# r; [
3 F2 d* c& F$ v6 c. r2. 启动服务,默认启动在7480端口
7 R0 Y! c' |0 H" U) L复制, u. s' }% b7 a4 q5 y7 `
[root@ compute01 ceph-deploy]# ceph-deploy rgw create compute01
0 w2 n6 Y8 z2 y2 N4 _5 U9 B# Y* W
3. 服务检测; K$ [# L! L3 D8 a
复制
5 ], H C0 I9 v) n[root@ compute01 ceph-deploy]# systemctl status ceph-radosgw@rgw.compute01
5 [" K" y7 l; Y$ z5 |4 I● ceph-radosgw@rgw. compute01.service - Ceph rados gateway 4 t* X: E! _1 R9 p
Loaded: loaded (/usr/lib/systemd/system/ceph-radosgw@.service; enabled; vendor preset: disabled)
7 R% J" p1 H: D8 k! w Active: active (running) since 一 2020-10-05 20:34:36 EDT; 14s ago 7 O: v2 `! L9 B/ A8 x- t' Q
Main PID: 33574 (radosgw)
0 a0 \& ~, e$ M* V/ ^7 | CGroup: /system.slice/system-ceph\x2dradosgw.slice/ceph-radosgw@rgw.compute01.service ; V' t7 u) s4 }; E* @% I
└─33574 /usr/bin/radosgw -f --cluster ceph --name client.rgw.ceph-node01 --setuser ceph --setgroup ceph
' P% @( G$ f% v9 y& l" D( \9 m0 ]' P% s! I1 w, {3 K
10月 05 20:34:36 compute01 systemd[1]: Started Ceph rados gateway.
3 `' p' ?! S n U10月 05 20:34:36 compute01 systemd[1]: [/usr/lib/systemd/system/ceph-radosgw@.service:13] Unknown lvalue 'LockPersonality' in section 'Service' 0 T3 G( d+ g* C6 h8 q @
10月 05 20:34:36 compute01 systemd[1]: [/usr/lib/systemd/system/ceph-radosgw@.service:14] Unknown lvalue 'MemoryDenyWriteExecute' in ...Service'
0 N; Y! }: z$ Z0 ^& H& e7 [% h6 y10月 05 20:34:36 compute01 systemd[1]: [/usr/lib/systemd/system/ceph-radosgw@.service:17] Unknown lvalue 'ProtectControlGroups' in se...Service'
; Z- w' d! k; _+ T10月 05 20:34:36 compute01 systemd[1]: [/usr/lib/systemd/system/ceph-radosgw@.service:19] Unknown lvalue 'ProtectKernelModules' in se...Service'
: B8 ]$ D& O. Y- m10月 05 20:34:36 compute01 systemd[1]: [/usr/lib/systemd/system/ceph-radosgw@.service:20] Unknown lvalue 'ProtectKernelTunables' in s...Service'
/ C. d9 s% W% n( RHint: Some lines were ellipsized, use -l to show in full.
* D5 K3 k, {2 i: E[root@ceph-node01 ceph-deploy]# netstat -antp |grep 7480 5 Z8 ^" K4 r! w' w7 W
tcp 0 0 0.0.0.0:7480 0.0.0.0:* LISTEN 33574/radosgw
/ C/ r/ F5 A m1 R9 i6 ] x6 V; X[root@ceph-node01 ceph-deploy]# ceph -s
1 }1 M! I5 Q) t cluster:8 g: p) J3 E; h
id: a6d0359e-8295-4e62-8620-54273462e79f/ j/ i9 l$ U: d% x" q6 y( G% U
health: HEALTH_OK7 \1 C: M, J+ V, g4 e: d' {+ p+ g
1 V. e L+ ]8 t1 A
services:
8 F0 q3 G8 h+ ?1 e mon: 3 daemons, quorum compute01,compute02,compute03 (age 12d)
) K& s+ l* d& u6 R+ E8 k: z0 F mgr: compute03(active, since 4w), standbys: compute01, compute02
6 j# |* G# J* Q+ z* h osd: 6 osds: 6 up (since 12d), 6 in (since 3w)
- @6 v# [! y' R* ` D! S1 M" ]$ c rgw: 3 daemons active (compute01, compute02, compute03)5 y: ~4 s1 u$ x6 D/ ?, m
4 ]0 j2 C5 z4 ?3 _$ h m% \ task status:7 S8 J# d! Q8 O5 o( Q/ H
5 `8 f% l ]8 S9 R) T0 g data:, l& X, e3 w! y: @- H; |5 Y
pools: 10 pools, 1568 pgs
- f& o! m, V, s' b$ V# B6 Z) V" w objects: 65.20k objects, 258 GiB8 S* u3 o& i+ y2 @$ ?; X
usage: 754 GiB used, 4.5 TiB / 5.2 TiB avail
5 w6 }5 U2 U8 N8 i3 v pgs: 1568 active+clean3 n% f' ~5 ?4 E
3 K; j3 h' S( X: e$ e io:
: R) d1 j' z; y" z: q% ?& q1 p client: 0 B/s rd, 15 MiB/s wr, 10 op/s rd, 51 op/s wr) A8 U; j4 ]4 F+ @9 m8 p
' Y$ a6 w, {6 ^; E/ P: D' s2 {! i9 v t/ f' t8 L5 n V
2 ~5 L! Q' V( E! n
; q5 B$ T3 Z3 }+ r7 F( C4. 首次访问服务
7 d3 A+ D' ~4 B复制1 G3 Y, p5 c& T! l
[root@compute01 ~]# curl http://compute01:9000// v3 H6 P: y! h) i% F) U
<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>
- H# }" h9 k* C8 X7 o1 e[root@compute01 ~]# 2 O$ U) A; e1 |/ ^
) p. E3 j+ K5 w
提示错误,使用了 anonymous 匿名用户请求所有列表,到这里说明安装完毕了;# K4 Z* |8 Y' b7 a) P# O- x; N+ W8 C
% s, Z4 T2 r1 s& C4 ?+ D! E# N5. 修改 RGW 的 默认端口 7480 到 9000$ E3 I- ^# Y) \% z2 t
复制, D1 k$ D; a! k$ t1 L W' K9 r
[root@ceph-node01 ceph-deploy]# vim ceph.conf 3 u, m9 s9 F Q
。。。
. C+ u% ^& P( a
5 s+ ?$ I P5 @$ O3 Y[client.rgw.compute01], T/ F2 z# p! h
host = compute014 l- G5 e! r: \5 {6 a0 F+ I
keyring = /var/lib/ceph/radosgw/ceph-rgw.compute01/keyring% W& F3 k1 r7 t0 Y' { }
rgw frontends = "civetweb port=9000"
; `! N; ~. u- I0 y1 rrgw print continue = false$ I8 g5 G% o5 l8 H& F# z- c, V. z% e6 g5 @
* S2 F# h4 P; {5 J/ M' q[client.rgw.compute02]) D" s( l/ E# p. ?2 c& f
host = compute02# F. @! T1 |/ P; ?" P* r
rgw frontends = "civetweb port=9000"# w$ `) }) ]/ T0 }3 U
keyring = /var/lib/ceph/radosgw/ceph-rgw.compute02/keyring
% B4 V. o2 y) x- rrgw print continue = false
: E/ P2 b8 J5 @5 B" e/ `- O+ ~) {5 V* ]7 G P
[client.rgw.compute03] ~8 L/ Y4 G4 d
host = compute038 U: p2 F: C5 O6 a3 N# t
rgw frontends = "civetweb port=9000"" ~ F6 R, n+ q, a3 S0 l0 O( B
keyring = /var/lib/ceph/radosgw/ceph-rgw.compute03/keyring
+ Y+ Q( K- B' frgw print continue = false* r7 }; O+ H$ J; \6 ^( z
: ]& N3 v. U9 O" H0 \ v, T
% {, {- D) q& c, I# r% w! \修改配置文件ceph.conf,为什么修改这个文件呢?因为后面添加节点时,默认是copy的这个配置文件,修改这个配置文件,可以确保集群的唯一性,下面推送配置文件到所有节点;, ~# s; O* b0 ?0 x& z9 w# ]6 y. B6 R
; o: e; q& |6 r$ j复制
: z" c) ?8 F3 t8 I6 f[root@ceph-node01 ceph-deploy]# ceph-deploy --overwrite-conf config push compute01 compute02 compute03 $ n+ R5 |& e# L6 y
/ z0 y7 {; D4 N Q
--overwrite-conf 注意需要使用这个选项,否则提示无法覆盖;4 B( l [5 E' V1 V7 W1 ~
`( N# b. d. O2 p5 w1 u* J; G6. 重启服务
3 L' S$ V7 L" t" V* M* K复制
; \' {9 o# J' N* Z[root@compute01 ~]# systemctl restart ceph-radosgw@rgw.compute01.service/ @8 ^# D$ x+ N2 x6 ?
[root@compute01 ~]# netstat -antp |grep 9000|grep radosgw
" J( K- r: o4 M. T0 {7 ftcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN 2758818/radosgw
2 w- [5 K. A3 K' V[root@compute01 ~]# . ]9 n8 ^5 l& n/ @+ S7 J2 _
7. 验证 80 端口
5 L) ?7 p! Y) V9 {8 N复制
; \3 z( v" r Y; z9 I5 @5 w+ t[root@ceph-node01 ceph-deploy]# curl http://ceph-node01/ % h2 ~7 o' x1 c" a" v3 L, _0 }
<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>[root@ceph-node01 ceph-deploy]#
4 o" b2 s6 M7 y2 X) c; s5 a D8 [% K* a" A: V7 S4 t3 |; b* y* t6 G
/ s1 p; o/ F( L, {& z
直此,RGW 服务部署完成;3 s y' M5 X9 C3 \1 Y% W0 |. a
5 x5 h- m+ T D使用 S3 访问 RGW/ T& ~- o. e6 O, u+ F; @
1. 创建 s3 的兼容用户) M. @ O$ P: f3 t2 q- c6 E' H
复制5 O& _8 J- `6 w& [
[root@ceph-node01 ceph-deploy]# radosgw-admin user create --uid ceph-s3-user --display-name "Ceph S3 User Demo" 4 F4 N. a' g; C* V8 a4 G
{
+ |$ Z0 r6 U8 j: G/ }: m "user_id": "ceph-s3-user",
0 l& s3 ^7 U* K3 `2 Z U "display_name": "Ceph S3 User Demo",
% U B! |3 z" I6 |3 U "email": "", 7 i/ b2 _8 j7 @, w( P
"suspended": 0,
1 p" x' v# ^7 J% Q9 g5 P# e6 f; a "max_buckets": 1000,
3 H, H/ ^2 D# H) Q( m1 Q "subusers": [],
m, z* M0 W+ q0 [7 V "keys": [
. n S" g6 {# w4 k3 g7 a1 x4 n { ' O: t) x& P5 r4 ~% d5 X$ u! g
"user": "ceph-s3-user", ! U- ?1 C3 ?! J
"access_key": "V3J9L4M1WKV5O5ECAKPU", 0 F% U7 Q' |$ m8 a) Q
"secret_key": "f5LqLVYOVNu38cuQwi0jXC2ZTboCSJDmdvB8oeYw"
! r3 O3 }, ?1 Q } ) }' I- l4 }' \% o2 Z4 Y
], 8 P% U0 A3 \' [8 H5 R8 b, }: f, X
"swift_keys": [], " t% q$ b- Q, g$ [7 k% K- K
"caps": [], ( z6 |9 y# g8 U( U$ J1 ~9 u
"op_mask": "read, write, delete", 8 G4 X1 d* {! _+ [+ [ N" I1 r6 B
"default_placement": "",
- w/ e$ f8 c$ i" K3 I' F: l "default_storage_class": "", 1 \/ k3 Z; h9 i7 g2 g, j
"placement_tags": [],
T1 Y$ q4 N( G* U) C "bucket_quota": {
1 u4 S/ x6 J: y D5 c' J "enabled": false,
( J' z; i& i% G. q# v1 |) B "check_on_raw": false, ; q2 Q8 \% V( k' k
"max_size": -1,
4 k7 E9 o8 ~" V "max_size_kb": 0, 6 y' p* T- d3 A1 i
"max_objects": -1
+ V& j, T' U, e6 T3 _! A },
, m/ r# V& u, _5 f$ | "user_quota": {
/ o! f$ [- b! c "enabled": false, & \+ h) D- f4 W
"check_on_raw": false, - y9 |: \1 l' n# F
"max_size": -1, 1 S8 q3 V6 U+ }- X" D' T
"max_size_kb": 0,
+ R( i8 ?" x1 c+ V& j "max_objects": -1
5 h$ Y$ @3 |9 N% S f+ q0 p }, 3 z% F, _ \: v* t
"temp_url_keys": [],
; s, V8 n2 {/ y! m) R "type": "rgw", 8 b- C( v# k! i' G& y9 u2 {
"mfa_ids": [] 1 Q: c) t, A. v2 |
} " `8 D; ]& M7 H2 u
# }' R5 I8 n7 {) o3 ?7 S; U[root@ceph-node01 ceph-deploy]#
; N2 E2 L+ X8 b# T2 ^# n
: C6 [8 A2 _3 `
9 A6 I- B% z r注意上面的 access_key 与 secret_key 很重要,要记下来,以备后用; 不记录也没有关系,我们可以使用以下命令查看;0 \+ `, M6 L2 t" q- D
5 q5 t! U1 H" t9 J3 X
复制
+ N) J+ d7 T6 d( U* @0 }[root@ceph-node01 ceph-deploy]# radosgw-admin user info --uid ceph-s3-user
, H5 d+ \9 E9 y1 z; Y3 R1.; c$ a2 |; c# E# X; q, z/ O2 Z
2. 使用 Ceph SDK 访问 Ceph 集群5 G9 [ }7 V$ k$ h2 m! g# o
官方SDK 使用说明:https://docs.ceph.com/en/latest/ ... g-s3-api-extensions+ Z6 ~: ~: f" `6 r- K# ~2 t
. m9 C) v) j @; A9 H
复制
' v* P' L: g' X" n) V5 {2 x[root@compute01 ~]# cat s3client.py 5 @+ T1 T4 b. o) l3 u) p
import boto
! S% e6 w: o# H2 c- T3 C6 p6 uimport boto.s3.connection
6 k5 _% v" u5 J2 K; aaccess_key = '8Y28X33O2YJKI3H6B1WJ' ' e7 i# f* S- j- Q9 @
secret_key = 'ghRR17Zxs2mZrhG8DGwJqTxeTQh64wofOsGB6C5Y'
5 c0 q7 _1 |! C1 x# F! Q) k4 M# r* N* f! c
conn = boto.connect_s3( 2 \, |7 n" f- r
aws_access_key_id = access_key, 5 b1 `* z( k2 z
aws_secret_access_key = secret_key,
+ j7 F% w& v9 x0 @( t host = 'compute01', port = 9000, : q# j6 L. Y* B) r! y* g- g+ e6 a5 e2 o" E
is_secure=False, # uncomment if you are not using ssl
0 ]. g0 k0 v5 e$ o0 \' F! ] calling_format = boto.s3.connection.OrdinaryCallingFormat(),
4 K* h( b* }& @4 {! J/ t9 x2 C" h )
7 m* n5 g# f$ Q M8 qbucket = conn.create_bucket("ceph-s3-bucket")
1 L. _6 f3 n: n& K% u/ ffor bucket in conn.get_all_buckets():
4 m! n2 t( W! S, } print "{name}\t{created}".format( + ~( ~1 b0 G+ q( R$ ^7 f
name = bucket.name, g& [( r4 ?( k1 O8 P) F8 U
created = bucket.creation_date, 1 k5 ~, p6 Z4 v( l; |7 O& g
) 1 Q/ Y0 E' |4 e6 ]) D) E2 W! f1 `
. N) C% @+ B% Y4 Z4 @; Q
[root@compute01 ~]# python s3client.py
/ n& {/ u5 k* [ceph-s3-bucket 2022-02-09T06:35:13.546Z* w8 r: [& i6 F
安装完rgw后,会自动创建3个pool,一个是rgw.control、rgw.meta、rgw.log,当我们创建bucket后,还会创建一个rgw.buckets.index pool池;* ]. y4 h0 ]- h! k5 ?
3 u+ v: K5 W) c复制
+ @' G" j8 ^- R8 F! n4 T E3 @7 N& s* a[root@compute01 ~]# ceph osd lspools * C2 d* h& s" f, }
5 images
* X* o9 b' a1 f" `( E: F4 T# X6 volumes
4 y' |( f' F7 x( M0 y* ^- [7 backups
8 T/ g: G5 V& D8 vms& p/ {$ F c# Y# T5 E( W
9 ceph-test
9 W1 ^1 Q: E$ c' o10 .rgw.root, W* Q. K' P8 U5 L: U
11 default.rgw.control; A# W' ~/ T! N! s9 _# V
12 default.rgw.meta/ ]" r4 f1 U1 {3 U
13 default.rgw.log9 G; [! T$ a7 U3 N- {$ I
14 default.rgw.buckets.index
/ l8 D1 ~! {3 z
" m+ \% W: X0 P0 s0 y, \9 m) [3 O/ ?, n$ T( G8 F q+ `
3. 使用命令行方式操作 rgw
# E+ O: `, w* _9 Q2 V% Y安装命令行工具
: Z7 P8 n$ o& m! H, X, i' T7 ~! c4 c2 I$ [& R
复制7 g V/ S% l" D. i! \6 b
[root@compute01 ~]# yum install s3cmd -y6 ]' o; |, K1 U4 B/ [& C7 l$ y" C
1.8 v/ z' n) Y$ }3 ]6 H6 k
配置命令行工具
% ?' e: ~$ m6 m& Q5 U4 g: l6 q6 j+ l M5 ?1 H' Z! P: |
[root@compute01 ~]# s3cmd --configure * Y* P d+ X" e7 p! ]7 B
1 m. D, z' j/ n! z! oEnter new values or accept defaults in brackets with Enter.
! ?( J$ Z# H( s( CRefer to user manual for detailed description of all options.& l; e& }% f7 [' F" l8 O; @& t
& v: S0 g8 m& r% E3 U/ |
Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.
) K3 Q/ ~! z/ ?& j3 i3 wAccess Key: 8Y28X33O2YJKI3H6B1WJ& W, J( {/ z/ w+ H% e( w
Secret Key: ghRR17Zxs2mZrhG8DGwJqTxeTQh64wofOsGB6C5Y3 {' T R" r& O5 c/ i) H% D
Default Region [US]: , `9 c1 J& h7 w( X9 b
% O8 J. J8 h5 Y% L, r
Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3.* ?$ X% `6 n R% m
S3 Endpoint [s3.amazonaws.com]: 192.168.0.75:9000
3 e" {' Q: ?9 v: c9 e
! b/ Y3 _6 a% g% k9 }Use "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars can be used. u5 g6 m# r' f# H8 K7 C
if the target S3 system supports dns based buckets.: w* H: W$ [% Z; W
DNS-style bucket+hostname:port template for accessing a bucket [%(bucket)s.s3.amazonaws.com]: 192.168.0.75:9000/%(bucket)s
- l M+ p4 P# X- [) S1 E: f# u
( v5 Q# F+ \$ f5 t" `% |Encryption password is used to protect your files from reading
- |' c: ^; B$ t/ tby unauthorized persons while in transfer to S3
! h6 B+ o c+ V7 j. YEncryption password:
z7 d3 `! p) S4 EPath to GPG program [/usr/bin/gpg]: L, R* p# g9 M1 i. K) Q; d$ J: @
# A9 M1 d$ c# m6 K. A1 w
When using secure HTTPS protocol all communication with Amazon S3
' V2 M' R$ ~2 q n, e% ^servers is protected from 3rd party eavesdropping. This method is1 ^3 Q; N! j6 b. m' ~' ^
slower than plain HTTP, and can only be proxied with Python 2.7 or newer+ p" n8 E$ q; @5 C
Use HTTPS protocol [Yes]: no
; Q7 \: ^* J! F( [/ I g T* I j% O) h- G; `4 ~ i8 F5 i
On some networks all internet access must go through a HTTP proxy.: Y) a9 W) |( H2 l
Try setting it here if you can't connect to S3 directly
6 I+ S; w# _! i7 `' G8 L+ bHTTP Proxy server name: : e1 t0 t E F) B. h5 u
& ~5 |- R- B* L- W5 i+ e' e- Z$ \7 PNew settings:
5 I5 T, g" s# l Access Key: 8Y28X33O2YJKI3H6B1WJ
- G3 M7 b# ]! t# Y Secret Key: ghRR17Zxs2mZrhG8DGwJqTxeTQh64wofOsGB6C5Y! t9 f4 ?- i( j& b% o; B
Default Region: US
5 `1 F3 d# R0 {2 o5 j: a6 t! ~8 t" r5 } S3 Endpoint: 192.168.0.75:9000
( `3 U+ H9 I/ E, Q- o DNS-style bucket+hostname:port template for accessing a bucket: 192.168.0.75:9000/%(bucket)s
/ N/ Y O4 t. u. N5 C4 _% z5 h# M Encryption password:
8 c2 `8 T; S/ c5 c& F0 o6 x Path to GPG program: /usr/bin/gpg
( @4 A4 c/ p, [ Use HTTPS protocol: False
, @6 C4 p3 r- y {6 g: z HTTP Proxy server name: 8 d, n- p" k# R |! o" g
HTTP Proxy server port: 0
- X1 R( Q7 P. q6 t- _% |5 R" [, J3 {. p$ m
Test access with supplied credentials? [Y/n] y
4 ]- L9 G% Q( r+ x+ J# e3 e VPlease wait, attempting to list all buckets...0 y, `; ?% X7 S9 ^
Success. Your access key and secret key worked fine :-): T8 ?$ [1 G/ |! I
R: M7 R" ~3 D0 m% jNow verifying that encryption works...
& V/ \) L, d# U; hNot configured. Never mind.
$ r Y" \/ a8 R1 Q3 U! i
! g( r* V3 i( i( ^Save settings? [y/N] y$ d0 a7 n& n b! K: ^+ Y2 ^" D
Configuration saved to '/root/.s3cfg'
, Z! a' Z6 v% X5 A, s4 Y7 K% e4 O; S$ o1 C, b. P( \8 B9 }
, j0 |. x. D5 [- f" E" B8 Z- O7 B( a& H
简单使用命令行工具
% t r4 } q- T2 \4 _ ]8 t$ v6 f9 ?. v0 J
[root@compute01 ~]# s3cmd ls
$ J2 M1 z% i4 f# E7 ~( `0 N2022-02-09 06:35 s3://ceph-s3-bucket& {+ F0 k9 y. n3 {$ M, d a; ~
/ A9 O3 c0 M3 G[root@ceph-node01 ~]# s3cmd mb s3://s3cmd-demo + X3 N. B, m$ M; j7 _6 B6 V. c
ERROR: S3 error: 403 (SignatureDoesNotMatch) & Q; e7 `& X* K' ^
[root@compute01 ~]# s3cmd mb s3://s3cmd-demo7 @4 B( ^. h1 R+ V) q7 G. [+ T8 m
ERROR: S3 error: 403 (SignatureDoesNotMatch)& s/ g$ L$ n& j5 [2 g
4 f3 ~0 C: d) d! F0 s.这是需要修改版本,启用v2版本即可
1 ?, i8 {0 U% W: {8 t4 m! H8 V, W0 L8 K# c& r
复制
- y& C$ L2 v2 t2 j[root@compute01 ~]# sed -i '/signature_v2/s/False/True/g' /root/.s3cfg
& A0 u4 v" `* Z: l: ~* k& M( j ~- z! c$ i3 ^
9 W" L- c8 c6 w H再次创建1 r2 A. l6 ]0 d( B
! {6 z. c3 r0 }7 q3 ~. T! U! d7 d[root@compute01 ~]# s3cmd mb s3://s3cmd-demo
% t9 A" B* j1 zBucket 's3://s3cmd-demo/' created m1 |& ? t3 T2 O4 N
1 |" m$ ?6 \, } q+ M
O5 [* }6 d0 F; e6 z# g9 I
上传单个文件: ]* \& P5 ]% F; r; p. L
" f/ s( b U1 F
- p' y( ~: _0 Y& `) [9 `[root@compute01 ~]# s3cmd put /etc/fstab s3://s3cmd-demo/fatab-demo
. a/ L* }: m3 M, G+ e, }7 q% @' o& cupload: '/etc/fstab' -> 's3://s3cmd-demo/fatab-demo' [1 of 1]
2 p6 [1 a. l! ` g* O9 g& A 465 of 465 100% in 0s 67.71 KB/s
# w$ e4 _6 t8 r; w- m6 ]: n 465 of 465 100% in 0s 67.71 KB/s failed
5 ^4 n- z$ ~, } N/ y0 V0 Y- D) LWARNING: Upload failed: /fatab-demo (timed out)1 r$ _2 B# t7 n6 _0 H
WARNING: Waiting 3 sec...1 {7 m8 p& J7 z5 _* u" S! ^) ~
upload: '/etc/fstab' -> 's3://s3cmd-demo/fatab-demo' [1 of 1]9 Q/ k5 M9 I- ~1 d' I
465 of 465 100% in 0s 361.83 KB/s8 s& K# t/ K( l: s
9 k+ {/ n0 `" x5 @' A) e出现错误 ERROR: S3 error: 416 (InvalidRange),原因是上传object对象的时候,需要创建 pool 存储数据,创建 pool 是需要 pg,当 pg 数量不够的情况下,可以将现有的 pg 数量调小,或者修改配置文件调整参数,然后重启 mon 进程,调整方法有三种:& P4 G; A$ s0 u$ j& J3 E) U
3 i+ ^6 b% u8 v' R* V. j
调整 pg_num 和 pgp_num ,默认参数值均为8;$ X2 F% u4 |* Q, G1 N/ }
调整 mon_max_pg_per_osd 参数,默认是 300,适当增大;当每个 OSD 中的 PG数量超过这个参数值时,就会报错;https://www.suse.com/support/kb/doc/?id=0000194028 L' F; w/ B4 ]3 e' I% r4 R
增加更多的 OSD 进来;
3 p) I, X; ^% q* J& b; u/ A我们采用第2种方法:1 s4 B( G3 I; ]0 {$ ]% \
% Y* s' b, }" M1 U, V* V[root@compute01 ~]# cat /etc/ceph/ceph.conf
' v* n1 S7 d: g& Y8 `[global]1 p, F( q+ ^& h
fsid = a6d0359e-8295-4e62-8620-54273462e79f
7 k% s1 n) O# Emon_initial_members = compute01,compute02,compute03; ]/ y, q- d" h, d4 S8 A
mon_host = 192.168.0.75,192.168.0.77,192.168.0.79
8 H# m; b+ s' D1 f. v+ C# bauth_cluster_required = cephx
) J+ h0 x# d( [; Y% e' j nauth_service_required = cephx9 f6 @6 [: b U& ]9 V
auth_client_required = cephx% ~- \7 _8 @4 B$ Q
public_network = 192.168.0.0/24 " p7 U+ \7 K; ~4 o
cluster_network = 10.10.10.0/24
2 M, n: W& }8 v- [8 P6 e6 frbd_default_features = 3) K1 V! n6 p" Q M5 `
mon_clock_drift_allowed = 2
, w7 e9 f' G% ]9 l6 i: [$ zmon_clock_drift_warn_backoff = 30$ P& @( l5 J4 G1 J# r5 v. C8 ?
osd_pool_default_size = 3$ L9 r7 t0 e( k, P/ t/ c2 B
osd_pool_default_min_size = 2
. }/ |4 r- D& W; T! ]5 mmon_allow_pool_delete = true d9 T1 Z# M. J& |, L, A: O5 V
mon_max_pg_per_osd = 1000
1 o3 C* t4 O/ e5 Y6 y* o6 m0 S1 _osd_crush_update_on_start = false
L. z! A9 q$ z! X Ymon_pg_warn_max_object_skew = 50* ?! B' t5 A1 k7 v
0 O+ V0 P! Q& _, T% M+ b. F0 L' F. ?[osd]
9 v4 v- e$ e# z1 P' L0 i4 kosd_heartbeat_grace = 20
4 ]! h: b" I$ `' j, d# H/ qosd_heartbeat_interval = 5
* m* L$ q! \7 `1 j' o1 A$ f! m- w# N9 u$ C0 n
[client.rgw.compute01]
2 P) I5 U( I: R& N; R4 nhost = compute010 `7 \2 C: E7 h: ?& }( u. ^) z
keyring = /var/lib/ceph/radosgw/ceph-rgw.compute01/keyring# y1 W( Q8 l) c V, z+ I
rgw frontends = "civetweb port=9000": y) J5 \8 G9 ~8 Y# @
rgw print continue = false' { H, y8 S# F/ `* {: s
, F- o; S) R$ d+ z
[client.rgw.compute02]
8 X) T- V$ ^/ r4 J) [2 W1 X0 r9 U. Mhost = compute02
: X6 K* \- M0 u1 y* rrgw frontends = "civetweb port=9000"
) H# k9 y% F5 d0 T" @( Hkeyring = /var/lib/ceph/radosgw/ceph-rgw.compute02/keyring" q0 ]$ o1 g* O3 j
rgw print continue = false
+ Z8 c" C$ o/ Q7 o* p2 c) q" L6 V% O1 K" O5 Z+ R
[client.rgw.compute03]% Z! h% H# }+ E- f, w7 T
host = compute03
( D9 W% ]" \- P, M- \: J/ u$ H7 T: trgw frontends = "civetweb port=9000"7 z$ y1 S6 P1 _0 A; z" ^9 T9 [
keyring = /var/lib/ceph/radosgw/ceph-rgw.compute03/keyring3 t; l3 j2 ~8 P, [
rgw print continue = false# t8 p0 E4 A+ f! ~% e2 ]
) r: u; I( g) `( H% J2 ?重启下 monitor daemon 进程& {* e* p0 W1 B' k( @/ j$ ^& r
4 O* v6 }- {* @/ P
复制
; @, J* e0 R; M5 S[root@compute01 ~]# systemctl restart ceph-mon@compute01.service % u/ T, M# U" J! \+ p
[root@compute02 ~]# systemctl restart ceph-mon@compute02.service
4 |4 v% y/ |/ O- t, q. z- N[root@compute03 radosgw]# systemctl restart ceph-mon@compute03.service
3 \. d9 X. V- Y* Q' a
l6 b+ \* T& {! H8 h
8 n- d" c) n. l5 T7 J: F* S再次上传文件测试
1 k( J' y4 g* w2 j7 A, C. D7 X6 W' ^3 t* \9 b7 u
[root@compute01 ~]# s3cmd put /etc/fstab s3://s3cmd-demo/( F! Y: Q- i( k5 c }% l0 ^) ?
upload: '/etc/fstab' -> 's3://s3cmd-demo/fstab' [1 of 1]
% J) T- H% ?; V" j! f/ K 465 of 465 100% in 0s 66.26 KB/s
' Y9 d9 \' t5 s" n7 h9 m
/ d& l8 W* z- [6 b0 d) g, x一直卡住,应该是哪里有问题:
$ W- a* q9 r& c1 a% v检查过程:' S0 @9 l8 m4 V& X( a }) A
[root@compute02 ~]# ceph -s
1 n) {' X! s' Q! I5 B, Z cluster:
# j& d C; {: ?3 |# a4 l) q id: a6d0359e-8295-4e62-8620-54273462e79f0 [8 u4 c4 [( S# a$ M4 i O
health: HEALTH_WARN% q2 | v6 L2 l! B% Y3 Z
Reduced data availability: 32 pgs inactive7 o' s8 l7 s# U/ t
/ f* V2 [# I H6 x+ R services:
7 v" k3 R1 @/ F0 S mon: 3 daemons, quorum compute01,compute02,compute03 (age 3m)
8 z. _3 d! W6 { mgr: compute03(active, since 4w), standbys: compute01, compute02
+ h# z1 v9 }& ^& f3 n! w osd: 6 osds: 6 up (since 12d), 6 in (since 3w)
5 ~; C" ^8 P& Q- {) s rgw: 3 daemons active (compute01, compute02, compute03)2 o1 h- n2 p5 O4 E$ U) Z6 V
1 U* x! T' L$ F" Z& w2 S task status:; E8 L* F( N9 B; x! o, P
5 C) {$ W8 R6 m [6 D/ ~ data:
4 v' q% g% ~- i. X( r pools: 11 pools, 1600 pgs
( ]3 V6 |" {; T objects: 65.22k objects, 258 GiB; i3 X$ O" m+ o( f
usage: 754 GiB used, 4.5 TiB / 5.2 TiB avail
" D& }2 m. D S( w pgs: 2.000% pgs unknown4 C" B# T% w- _8 q: ~
1568 active+clean
# i L- s7 f( h, i 32 unknown
' M' d9 a: R2 a; b
' j( A2 g4 H0 {5 t$ A" C io:
/ k7 T# ]3 `& x i3 k- p client: 114 KiB/s rd, 9.3 MiB/s wr, 144 op/s rd, 53 op/s wr6 j+ T* M5 t& M
2 @- P# Q) c4 r8 s! ~ x8 C n
[root@compute02 ~]# ceph osd pool ls
# v2 a% u% L. s# k& j- H' c1 G. I# Gimages9 D+ {* J0 i5 x9 a8 l1 }8 M
volumes
1 T- d6 _8 J6 h& K! R: G7 ibackups
# [( G! `, I6 B- |$ g3 u7 ]; Zvms
6 J. T! c! K; Q' T6 v C" j$ Z1 jceph-test6 z! a2 U* S2 d4 l, M
.rgw.root( T/ J) ?% f% e/ G7 }( _9 p
default.rgw.control
) G2 @8 u. M# o) Gdefault.rgw.meta
' t0 Z! y9 D. Ydefault.rgw.log
# K3 {- q+ ^% Z3 n% ddefault.rgw.buckets.index) D0 ^* l* y3 a4 k }1 M% B
default.rgw.buckets.data
1 _3 p0 b! O; p2 g$ {[root@compute02 ~]# ceph osd pool set default.rgw.buckets.data crush_rule ssd_rule
* w( q; J( t" Aset pool 15 crush_rule to ssd_rule" L& T/ {/ T, Z7 b
* ?# o; U6 n" T
4 a% U3 l. O+ _1 d7 E完成之后,直接显示成功了: 如下done' [3 ~3 n" g5 p" i4 k1 e/ d
+ {6 Q1 H$ I: `2 M[root@compute01 ~]# s3cmd put /etc/fstab s3://s3cmd-demo/fatab-demo
- y* x7 D+ @( [- ~upload: '/etc/fstab' -> 's3://s3cmd-demo/fatab-demo' [1 of 1]
# P& O5 u. w8 i" B$ Q5 K* Z 465 of 465 100% in 0s 71.34 KB/s
- ~7 y: a: i! |% K- G& O& ~) I
4 I. ?3 s6 O1 q: R/ n1 p4 s: z- V$ F4 v
465 of 465 100% in 81s 5.72 B/s done; E G" N4 X% J) K; a: Y
4. 常用操作
6 [6 a' q! Y. j3 y: U- Z复制/ T d8 R8 y+ a4 P
# 1. 列出所有 bucket
8 a) n0 Z& p: Q; M" A# z[root@compute01 ~]# s3cmd ls " v1 o4 R# {. A3 d. G, {' d! Y
2022-02-09 06:35 s3://ceph-s3-bucket
7 w/ z. A2 _" b' h1 e8 p- i7 G2022-02-09 07:45 s3://s3cmd-demo
/ f5 M+ s* r* k5 V$ ~7 n3 ?
$ I( ~* F0 V2 h9 e# 2. 创建 bucket - D. I! h# Q8 ^# D+ N; R ~5 M& \2 J
[root@compute01 ~]# s3cmd mb s3://gwj-demo/
2 c L2 j5 W, h1 PBucket 's3://gwj-demo/' created# q' c% R( h5 a- I/ G; i2 |
, j9 a1 C7 |; a5 Q0 Z[root@compute01 ~]# s3cmd ls2 r- u' y/ c) I* c- \, z
2022-02-09 06:35 s3://ceph-s3-bucket" n# z5 f" ~; Z+ O4 ~3 o
2022-02-09 08:01 s3://gwj-demo
3 H3 i9 B; }7 x6 w, w2022-02-09 07:45 s3://s3cmd-demo
/ d' c' e) Z% A" E6 R5 w
( ^; z6 {2 V, f! _/ b) W' z
9 V$ R" U7 @ ~& F3 [- H9 W# 3. 删除空的bucket : N( ^$ D: E, A/ o
[root@compute01 ~]# s3cmd rb s3://gwj-demo- T& B# V6 k( i7 Y$ m' A, L/ x
Bucket 's3://gwj-demo/' removed; m1 o1 c4 p7 e
! W' E0 t. ?3 K8 N& z; c
[root@compute01 ~]# s3cmd ls
+ }. V( a S U+ L' ~% l2022-02-09 06:35 s3://ceph-s3-bucket7 k; y0 u* `( E" S( ~; _
2022-02-09 07:45 s3://s3cmd-demo
$ ?& x( [3 D3 U% ~$ Y/ ], E' \2 H) c) T3 q8 {: {. J \. v! ]* s* X
# 4. 上传文件到bucket
3 C3 q( h" l& L[root@compute01 ~]# s3cmd put ip s3://s3cmd-demo
: T! a) f7 I; R1 d; [; j: |( q: uupload: 'ip' -> 's3://s3cmd-demo/ip' [1 of 1] C2 |/ R3 d* Y8 H) }) @: `
5 of 5 100% in 0s 296.75 B/s done% q: {$ W) K0 q. M1 b8 T# k
9 U/ e) W* K. {
# 5. 上传目录到 bucket
9 Z4 T% C x. R$ X+ z0 o6 B[root@compute01 ~]# s3cmd put ./ s3://s3cmd-demo/
8 [! o6 _$ H% J' R4 B lERROR: Parameter problem: Use --recursive to upload a directory: ./
" ~/ p$ t% l) ?8 d1 j) g% a- {/ W
/ O# c, X e# c" M& F[root@compute01 ~]# s3cmd put ./ s3://s3cmd-demo/ --recursive4 |( f( t+ N! \- w' K# i6 c# @7 q
upload: './.ansible/tmp/ansible-tmp-1638530173.61-8631-41487900105782/AnsiballZ_command.py' -> 's3://s3cmd-demo/.ansible/tmp/ansible-tmp-1638530173.61-8631-41487900105782/AnsiballZ_command.py' [1 of 177]* s" C. Q4 W" U4 N$ i
106754 of 106754 100% in 0s 2.29 MB/s done
0 X* ~6 O$ U t. b# w7 T2 Zupload: './.ansible/tmp/ansible-tmp-1638539832.68-4173-41041061132542/AnsiballZ_copy.py' -> 's3://s3cmd-demo/.ansible/tmp/ansible-tmp-1638539832.68-4173-41041061132542/AnsiballZ_copy.py' [2 of 177]" |( U: M1 h' p) V, N* e
111789 of 111789 100% in 0s 2.13 MB/s done8 {" s2 g4 K/ B6 v' v0 i, j4 f( G
upload: './.ansible/tmp/ansible-tmp-1638539833.48-4173-36283133816628/AnsiballZ_copy.py' -> 's3://s3cmd-demo/.ansible/tmp/ansible-tmp-1638539833.48-4173-36283133816628/AnsiballZ_copy.py' [3 of 177]
$ R- z: t7 l) ^4 _- G5 x5 k- o. l% u 111789 of 111789 100% in 0s 1485.51 KB/s done
. e4 d- Z2 L: Y% P" F6 Y/ ~& W+ Z1 x. p7 v% Y
. i' o9 s8 C, q3 v
又卡住了:1 N% G* o3 J" e5 g4 w
检查:
8 Q8 d5 X" ]1 \$ d( w4 z& a$ C[root@compute01 ~]# ceph -s
2 a' } C) e N4 k* R: I, k cluster:
& I( L, J' A/ H$ H id: a6d0359e-8295-4e62-8620-54273462e79f
% b! F" ^' q' E health: HEALTH_WARN. \. G3 x6 f, W' F" ^
Reduced data availability: 32 pgs inactive
1 ]2 F1 b8 N k8 X4 o. U3 u% b5 e, Q5 x) d% D6 N9 x
services: r" X5 f9 h% t8 X
mon: 3 daemons, quorum compute01,compute02,compute03 (age 15m)
_1 L4 z. \6 l% ]1 Z) f. k- D mgr: compute03(active, since 4w), standbys: compute01, compute02* j6 h, d' e0 ?
osd: 6 osds: 6 up (since 12d), 6 in (since 3w)
1 Z$ Q9 h9 ?+ y! G6 I, m rgw: 3 daemons active (compute01, compute02, compute03)
. L d2 b# H; B$ e4 v/ W& k$ X+ d3 D+ ~$ } f
task status:
6 o6 Q1 Q- q2 S* A+ i5 O ~+ d3 T+ c0 A8 r* E
data: c$ b! s1 n: j+ |" F Q# g# O1 H
pools: 12 pools, 1632 pgs
7 w! z; ~3 t8 \+ ?# h1 ~6 m$ t9 S/ A objects: 65.40k objects, 258 GiB9 C5 ^* Y' A2 D$ r9 U: A* d* ^
usage: 754 GiB used, 4.5 TiB / 5.2 TiB avail6 r( A" U' _5 X' N: r
pgs: 1.961% pgs unknown" I4 U0 [4 A; m. A i/ ?8 ^
1600 active+clean4 N# f) x+ o, Q
32 unknown: v" g% e' |: S/ D% {
- j& ~/ H8 G9 W, A9 K9 v io:5 g" ^1 P& R0 U* J x: w
client: 117 KiB/s rd, 11 MiB/s wr, 145 op/s rd, 50 op/s wr
9 b8 ^; u2 o$ G r$ ~+ v" {8 K% o2 S2 p- a- u' _; H, c) M
[root@compute01 ~]# ceph osd pool ls
# t: u' o8 O3 V `images
0 ` o: e+ ^, }/ `1 pvolumes- Z1 v: c% N8 J+ S0 Q6 k4 b* I3 T
backups
4 M8 K( E- p7 b$ L7 u2 |) Y% Mvms
?3 g# G0 v2 ?7 [; W! [ceph-test
& m( L# _8 T) b) ?# Y.rgw.root9 T, ?" {6 k8 _3 V; R6 R
default.rgw.control
% v1 h# w" Y, ?1 s0 @default.rgw.meta, b7 R! e( \8 \/ T1 Q
default.rgw.log( D7 } E7 a' D0 k C) e- Q8 S: A# K
default.rgw.buckets.index' ?" ~8 S, z3 D. P6 \& u1 x" [% t
default.rgw.buckets.data6 A% N6 N4 o" O
default.rgw.buckets.non-ec6 H! K2 ~$ [6 d T: Q
[root@compute01 ~]# ceph osd pool set default.rgw.buckets.non-ec crush_rule ssd_rule9 M+ g. G( v, X3 _8 r* ^4 {! X
set pool 16 crush_rule to ssd_rule
( r- d* S, @, P$ o" V) S- Q5 c( t
4 K) v' n* j2 ^" O6 d! Z* W+ W0 a
9 J7 [0 J& L2 G) \- B. G设置完成,上传完成:
/ K F& w1 g7 d+ ]" t0 |) Tupload: './monitor/telegraf' -> 's3://s3cmd-demo/monitor/telegraf' [part 1 of 6, 15MB] [174 of 177]
- D* S- }; l4 e) W 15728640 of 15728640 100% in 2s 5.38 MB/s done9 D* s; L7 Q5 W7 O' U* u
upload: './monitor/telegraf' -> 's3://s3cmd-demo/monitor/telegraf' [part 2 of 6, 15MB] [174 of 177]6 \. }$ k; V5 |- M* M; Y% a
15728640 of 15728640 100% in 0s 38.25 MB/s done
( {+ g2 h7 s5 M3 o7 H6 i( Mupload: './monitor/telegraf' -> 's3://s3cmd-demo/monitor/telegraf' [part 3 of 6, 15MB] [174 of 177]% l* r8 m! e! J; L3 c
15728640 of 15728640 100% in 0s 22.08 MB/s done3 L I0 n; g# X
upload: './monitor/telegraf' -> 's3://s3cmd-demo/monitor/telegraf' [part 4 of 6, 15MB] [174 of 177]6 R1 q; @ _8 C, Q8 X* H; n
15728640 of 15728640 100% in 0s 15.15 MB/s done
, ~2 P* n; k: Z4 Nupload: './monitor/telegraf' -> 's3://s3cmd-demo/monitor/telegraf' [part 5 of 6, 15MB] [174 of 177]
/ ` l* h* O' N7 f, _2 U. S 15728640 of 15728640 100% in 1s 11.45 MB/s done& D" X7 ?, e1 L3 k
upload: './monitor/telegraf' -> 's3://s3cmd-demo/monitor/telegraf' [part 6 of 6, 11MB] [174 of 177]
; r) t3 ^& ~7 \) ?5 Q, M1 s* s3 ~ 11599872 of 11599872 100% in 0s 21.31 MB/s done4 l7 r, K9 g! G$ c$ S9 j2 A) D7 T: L
upload: './monitor/telegraf_system.conf' -> 's3://s3cmd-demo/monitor/telegraf_system.conf' [175 of 177]
& k3 X7 ^) q) ~% ^' T! V- ]6 \7 y6 B 4322 of 4322 100% in 0s 87.82 KB/s done
2 b" p: S( W' _( }$ k. Pupload: './osds.map' -> 's3://s3cmd-demo/osds.map' [176 of 177]3 ?2 H2 S% J' Z$ w4 `0 I
5895 of 5895 100% in 0s 120.84 KB/s done
2 f8 ]; W. G; l* uupload: './s3client.py' -> 's3://s3cmd-demo/s3client.py' [177 of 177]! k* Q3 K% s& Z& G. z7 C7 a
659 of 659 100% in 0s 13.74 KB/s done+ w A% J7 ^$ u) j& L+ l$ Y
; n8 N$ R/ V/ C( u! i4 s
* _. d5 _: a# ?& |- w& w- P3 q; l6 j8 n; H7 f/ O
# 6. 列举 bucket 中的内容 : B7 g2 n$ X4 r+ t
[root@compute01 ~]# s3cmd ls s3://s3cmd-demo/% M1 C. f3 `7 }2 r
DIR s3://s3cmd-demo/.ansible/1 ? O) u0 v. [, |1 v1 W
DIR s3://s3cmd-demo/.cache/! I( W1 `6 W- a1 s: X6 p' O. Q3 ^
DIR s3://s3cmd-demo/.gnupg/
; @: {& [- Q/ u; X" |/ i! s DIR s3://s3cmd-demo/.ssh/
+ ~& P! n* ?. H* y+ w+ H) C DIR s3://s3cmd-demo/monitor/
* Z7 q: [1 u1 r6 z! E2022-02-09 08:08 25196 s3://s3cmd-demo/.bash_history
) J, c3 b- R+ Q: h4 s2022-02-09 08:08 18 s3://s3cmd-demo/.bash_logout
, q5 M$ x* y1 R2022-02-09 08:08 176 s3://s3cmd-demo/.bash_profile
' ]! A& f8 Q0 w2 H8 S% `' E- \2022-02-09 08:08 176 s3://s3cmd-demo/.bashrc! L, S1 H _% c8 q8 g+ f# m' {
2022-02-09 08:08 1077 s3://s3cmd-demo/.cephdeploy.conf/ k- f p/ M, ~/ ]0 z. ]
2022-02-09 08:08 100 s3://s3cmd-demo/.cshrc5 d5 j3 }: g& w# h# k0 B7 z
2022-02-09 08:08 42 s3://s3cmd-demo/.lesshst6 m7 \, F& N9 D9 D# o+ K* B
2022-02-09 08:08 2248 s3://s3cmd-demo/.s3cfg) |+ \5 V* i4 q7 f1 D
2022-02-09 08:08 129 s3://s3cmd-demo/.tcshrc: t& Q# m2 h( W
2022-02-09 08:08 6490 s3://s3cmd-demo/.viminfo
! @. w' f- y: d3 Y9 _- m1 z1 H" U2022-02-09 08:08 34064 s3://s3cmd-demo/1111
1 Z$ w ]9 `- f6 j; o1 M2022-02-09 08:08 1797 s3://s3cmd-demo/anaconda-ks.cfg
3 b# M6 A) A2 X0 x: b% b E2022-02-09 08:08 86604 s3://s3cmd-demo/ceph-grafana-dashboards-14.2.8-111.el7cp.noarch.rpm
8 O9 o0 J4 D& L2022-02-09 08:08 9625568 s3://s3cmd-demo/ceph-mgr-dashboard-14.2.8-111.el7cp.noarch.rpm! W! W% d1 T: N; d
2022-02-09 07:52 465 s3://s3cmd-demo/fatab-demo# z. z8 T* u! I) p
2022-02-09 07:58 465 s3://s3cmd-demo/fstab
/ x7 Q5 g4 Y$ q: ^5 f2022-02-09 08:08 5 s3://s3cmd-demo/ip+ j4 M: K) `2 r/ N! o X, V
2022-02-09 08:11 5895 s3://s3cmd-demo/osds.map. [) r6 R& C ] e: f
2022-02-09 08:11 659 s3://s3cmd-demo/s3client.py
+ u* ]* t; P+ S' Q2 [/ v
6 ~* }+ g2 c$ F. z9 w# 7. 下载单个文件 9 L+ r+ L) x, U3 i1 d
[root@compute01 tmp]# s3cmd get s3://s3cmd-demo/ip+ R' y: y* v3 z5 L, c1 ~
download: 's3://s3cmd-demo/ip' -> './ip' [1 of 1]3 b% I+ ~1 G, q; @9 F
5 of 5 100% in 0s 396.17 B/s done
, E: v7 C' m& i
5 p& C' o/ O/ B/ t/ H4 g. j[root@compute01 tmp]# ls
( O- Q: ~+ N8 p- x. P7 pip
3 z" T; a6 R& }) ]& N+ X( F9 m! s' A6 o9 P S% N& {4 v% \! Y
# 8. 删除 bucket 中的内容
1 @. i3 R( h# i: l; K- \7 G[root@compute01 tmp]# s3cmd del s3://s3cmd-demo/ip
: B1 B6 e" b9 g; s3 ^" U8 \8 @6 jdelete: 's3://s3cmd-demo/ip'
- M: C& a& h! }, z9 v3 {& [7 E. I0 \3 I, M
[root@compute01 tmp]# s3cmd get s3://s3cmd-demo/ip( C' ], f) p( Q, a# P9 e8 h( N
ERROR: Parameter problem: File ./ip already exists. Use either of --force / --continue / --skip-existing or give it a new name.; D0 P$ h7 ?1 u
[root@compute01 tmp]# " X- p0 V' u5 h0 _% {4 b
3 H) w/ x. l/ L0 G+ U \2 @
# 9. 获取对应的bucket所占用的空间大小
1 b) b" h2 }& `% O. h- D[root@compute01 tmp]# s3cmd du -H s3://s3cmd-demo/1 F6 _0 G; R3 l8 d
104M 178 objects s3://s3cmd-demo/
8 x; ?" V5 V' o& M[root@compute01 tmp]# s3cmd du -H s3://s3cmd-demo/.ssh
$ z0 @; j; ^( R. X. J 4K 4 objects s3://s3cmd-demo/.ssh
- V. u4 w; K8 _1 \: n
( D6 C6 m) ^/ `& \- z/ C H- g) |/ Y# 10. 查看bucket文件信息
4 \: g7 d& c# q[root@compute01 tmp]# s3cmd info s3://s3cmd-demo/fstab
2 ]; F. q9 f* p9 R g; Ls3://s3cmd-demo/fstab (object):
) ], v7 u6 v- M4 t C File size: 4659 p: f/ f+ o, y+ a
Last mod: Wed, 09 Feb 2022 07:58:45 GMT
* _; G, W" t Q/ e1 y! ` MIME type: text/plain+ z# P) G6 `. w3 P
Storage: STANDARD" o2 C. {/ o3 C, \- C0 X0 l9 |
MD5 sum: b3b65116db83a743d6e80ae6c31896ef% I* w, }+ @4 v6 j5 I: Y; U
SSE: none0 e4 k: m' z: d# F; ?
Policy: none
0 N3 Q- j3 W1 J8 }( m: R CORS: none
8 `) z% c1 g; r$ I5 l& t ACL: Ceph S3 User Demo: FULL_CONTROL) x; Q* u( u5 t% e
x-amz-meta-s3cmd-attrs: atime:1644387423/ctime:1638501772/gid:0/gname:root/md5:b3b65116db83a743d6e80ae6c31896ef/mode:33188/mtime:1638501362/uid:0/uname:root
! W' o# c7 Y- r3 j' h! C: C8 u' ~0 _& A8 R) H! A4 c4 J
# 11. 两个bucket之间相互cp + _6 |$ h; a4 V
[root@compute01 gwj]# s3cmd cp s3://s3cmd-demo/ip s3://test-demo/
" p& N7 t3 l# N# C7 N1 cremote copy: 's3://s3cmd-demo/ip' -> 's3://test-demo/ip' 5 c0 ^5 i2 w# B6 n2 a0 U
[root@compute01 gwj]# s3cmd cp --recursive s3://s3cmd-demo/.ssh s3://test-demo/ " J+ `3 i2 y- H! A- \& I& c* ]* Q
remote copy: 's3://s3cmd-demo/.ssh/authorized_keys' -> 's3://test-demo/.ssh/authorized_keys'
: c" u3 r4 `2 @3 n9 {. lremote copy: 's3://s3cmd-demo/.ssh/id_rsa' -> 's3://test-demo/.ssh/id_rsa'
0 e6 N& n8 F3 W4 }6 n" Nremote copy: 's3://s3cmd-demo/.ssh/id_rsa.pub' -> 's3://test-demo/.ssh/id_rsa.pub'
0 q5 f, h. L$ n4 Z0 oremote copy: 's3://s3cmd-demo/.ssh/known_hosts' -> 's3://test-demo/.ssh/known_hosts'
2 u Z s, T( H; z7 m[root@compute01 gwj]# # c0 o, l5 ~5 g3 i* v, U
- O: W$ o/ w0 c% u0 F# 12. 两个bucket之间进行mv操作 ; m8 f0 S; B' B! i1 X
[root@compute01 gwj]# s3cmd ls s3://s3cmd-demo/.swp ( h, Y% I! G; P4 P$ ]1 g
2020-10-06 10:24 12288 s3://s3cmd-demo/.swp % A! _" ]" v; A$ {
[root@compute01 gwj]# s3cmd mv s3://s3cmd-demo/.swp s3://test-demo/ ( w) K! c P8 ]3 [/ a) J5 v$ T
move: 's3://s3cmd-demo/.swp' -> 's3://test-demo/.swp'
$ M4 ? @3 W0 H) R; S[root@compute01 gwj]# s3cmd ls s3://test-demo/.swp , F! N; ~+ o7 _$ M j4 I$ o
2020-10-06 10:36 12288 s3://test-demo/.swp
8 C) l& Y3 w0 H+ V[root@compute01 gwj]# s3cmd ls s3://s3cmd-demo/.swp
1 y& S9 x+ A' G+ k[root@compute01 gwj]#
! j+ g( P% [& B5 E1 V+ Q. C+ ]" }9 b% @: |" D0 v3 I
# 13. 列出需要同步的文件和目录,但不进行同步
# |2 e: E0 g1 D d# e[root@compute01 ~]# s3cmd sync --dry-run ./ s3://s3cmd-demo , J& L: U. @4 U& }/ g0 k
upload: './.swp' -> 's3://s3cmd-demo/.swp'
0 _- h* {; P6 A, D2 e' [7 ?7 ^5 kupload: './ip' -> 's3://s3cmd-demo/ip'
# Y/ ]! U! t! L' \. T, W( ~0 [" [upload: './.cache/abrt/lastnotification' -> 's3://s3cmd-demo/.cache/abrt/lastnotification' 2 J. {' T) s/ O6 T) F- W0 P
remote copy: 'size.log' -> 'gwj/size.log' * q2 u" e* F5 _: d/ N- P" a
WARNING: Exiting now because of --dry-run
9 i8 v; I; A" q3 s6 X4 B" T[root@compute01 ~]# 8 z# _, F& U7 e& I: b) \* K
% z* a: @& B9 R3 g8 @7 ?0 y; t5 y# 14. 在bucket中删除本地不存在的文件
n4 U1 V2 A% D, r/ ?, W[root@compute01 a]# ls
) S! @7 v2 ?4 A t- q10.txt 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
& w+ |8 v7 Y4 r, r# L5 `$ G[root@ceph-node01 a]# 9 i- l" U. o: y3 J& G1 `
[root@ceph-node01 a]# s3cmd ls s3://test2-demo/
/ G) g M2 z. Z8 n0 e. W" `6 ?6 k
[root@compute01 a]# rm -rf 10.txt
# b7 k2 y4 _' P2 O9 l) E( E[root@compute01 a]# s3cmd sync --delete-removed ./ s3://test2-demo/ ' Q; D- Z! e; _, h6 o
delete: 's3://test2-demo/10.txt' 4 ?2 r* t2 a5 U
[root@ceph-node01 a]# s3cmd ls s3://test2-demo/ / B u& A3 w }7 i* d7 N% ~) \) j
) ]* ?% z3 a: Z" q2 ?8 n; ?[root@compute01 a]#
) u& M6 k8 w D' |* ]. L$ m8 T% q
( J& y5 C& Z' M
% {0 }: M& i, z# ^使用 swift 访问 RGW
: n2 W" H7 ^; Y' [. T/ f1. 创建 swift 用户4 u$ _4 a! g$ {. d( O& n* j1 K O
复制1 V c f K7 B* e
[root@compute01 ceph-deploy]# radosgw-admin subuser create --uid ceph-s3-user --subuser=ceph-s3-user:swift --access=full
# ~) ? t- K, ?* }{
v/ u- z9 V2 L) w: p! O9 f& C- D "user_id": "ceph-s3-user",
4 h) P( f) z5 P2 N T "display_name": "Ceph S3 User Demo", , a6 q! }( G/ h1 n# t$ D! f! n
"email": "", . ~8 q6 K0 P9 e- O. J4 O
"suspended": 0, ' `3 g9 P, L* K" _" E/ {2 h( s6 Q) g
"max_buckets": 1000,
1 F! k- l% r5 Q+ J1 s+ X "subusers": [ % r5 J( j, A8 K, ?' ^
{
5 b ]0 E+ M. U( c$ e ~ "id": "ceph-s3-user:swift",
9 S9 i7 A8 J; f1 q "permissions": "full-control"
# {! k0 c' z: W" C. w0 e }
6 y; F6 `! D+ t4 q# S ],
" u7 T' {0 \. j" T "keys": [
" Z: h7 W: Y+ K; N; Z { L/ d5 S6 y* \ @4 s+ z% Y- D/ J
"user": "ceph-s3-user",
! p& t6 k3 o4 p6 x- V" e, M "access_key": "V3J9L4M1WKV5O5ECAKPU",
4 x5 k8 K/ F8 x3 q7 d! f& @" M "secret_key": "f5LqLVYOVNu38cuQwi0jXC2ZTboCSJDmdvB8oeYw"
$ \4 P4 K; Z: Q# M$ l }
9 ]* _" i Q; p# P ],
/ X" a8 |' ~/ h "swift_keys": [
0 D2 H5 h# S, T N4 p9 c {
& c! i4 {+ Q. D) O "user": "ceph-s3-user:swift",
: h; _* y% |5 O' Y" w0 \ "secret_key": "ZIOOU8Xcfe3m6ZZapK5P2rU0GGPaiS31chy9yvMW" & _- @; `. p+ `! E' r( @+ @& u
}
+ \- r' r- N( l8 g ], 8 Q* `2 o( |6 Y8 \) n$ |" L
"caps": [], ( z) i8 b/ e! R2 W' s
"op_mask": "read, write, delete",
) x; \: o4 K+ v+ P' y4 b. g "default_placement": "",
% w- j9 r" ^7 S' n% S0 U "default_storage_class": "", 1 O$ \- u' R: y/ S: O2 X# Y* {
"placement_tags": [], + H' W& s! l: r- S$ S* W
"bucket_quota": { 0 U; Q' s8 ^1 G9 ]8 q
"enabled": false,
# |4 |+ ~! u% w! h4 K "check_on_raw": false, 1 ? `, B0 v' {( u' l% F5 k; [
"max_size": -1,
* r1 S0 u! x8 c0 P, \# [ "max_size_kb": 0, 5 E9 e6 v3 i( J2 }: Y5 Q+ `( O
"max_objects": -1 5 w. u* E" p5 R/ m8 O4 X) R0 h
}, & L2 \9 Y& ^# j' ]3 ~3 d; l+ I' _
"user_quota": {
6 E e& G0 B+ y1 J% [2 H "enabled": false, , l# x) D" q7 _/ T
"check_on_raw": false,
: ?7 F, J9 @: Z/ H0 G$ Z "max_size": -1, $ p- p$ D8 U: L/ [1 K7 Z
"max_size_kb": 0, ! Q" J2 _6 v' O4 v
"max_objects": -1
3 W* H i% O0 J9 D },
, R$ d! c6 I+ b8 S# t "temp_url_keys": [],
! K/ d/ {9 Q0 A+ {4 l& G: X "type": "rgw",
2 A0 p2 D2 m# Y! e/ u "mfa_ids": []
; N S) w2 `! ~} 4 O5 P* I( I( w+ Z+ [
% { Z8 l! x1 [1 u
[root@compute01 ceph-deploy]#
. f3 Y1 x1 y! v X' z- R0 p1 U. p: p: j9 G% q) @: i* O; Z
0 a! i. h. Z# _- o# O/ T2. 创建 swift 用户的secret& i) ?* ?& G2 c9 B$ U
复制+ W( r. w1 S( C# e1 \. h) x
[root@compute01 ceph-deploy]# radosgw-admin key create --subuser=ceph-s3-user:swift --key-type=swift --gen-secret
- u, k3 Y: h5 E; Z' U) }{ ; C% y" ~' o8 N" b1 E
"user_id": "ceph-s3-user", - I. ^4 R. \7 `$ f7 ?
"display_name": "Ceph S3 User Demo", * D* m) @& n0 e( i' [
"email": "", 1 m# W$ }3 j$ Z- d# w ~3 l3 F
"suspended": 0,
+ B6 h+ r3 R0 q+ x# ] "max_buckets": 1000, 3 O) O- T, Q+ n# ~6 s( }
"subusers": [ 0 V( Q1 I* E; S) y% h+ n! ^& M" P
{ . Q( N" S( I2 L! [2 t1 h" ~" S
"id": "ceph-s3-user:swift",
* O; g. p8 |0 r3 X/ O( v "permissions": "full-control" 2 I$ I$ T8 O/ v' V& K0 D! y1 K! p
}
D" B2 j6 G; E$ k$ T: K, q ],
& f1 Q4 |# T6 x4 t3 {7 j; q3 g "keys": [ 1 u$ @; {/ X: p- x0 P- H
{ + L) u2 L& M: t
"user": "ceph-s3-user", * _: [8 q! i( d$ X; O/ q6 |, }8 G4 B
"access_key": "V3J9L4M1WKV5O5ECAKPU", 0 Q9 ?3 S6 E1 i2 M0 n
"secret_key": "f5LqLVYOVNu38cuQwi0jXC2ZTboCSJDmdvB8oeYw"
. z. x9 z9 ~% l6 w1 d7 }2 H } ) V% b$ k2 Y; E& ?; B
],
' c4 C% o6 K k7 p "swift_keys": [
6 x6 k# |* C3 o! p7 Q7 c) V { 6 D9 k$ F! s" k g4 p: [
"user": "ceph-s3-user:swift",
( G- d2 `2 v1 R7 R "secret_key": "0M1GdRTvMSU3fToOxEVXrBjItKLBKtu8xhn3DcEE"
' B& Y, x5 N! s( c6 B* v }
3 x4 q. t [; W% O& }( d; o+ s ], ! N6 L' W/ z6 J: _
"caps": [], 6 }) q- O4 f- f; d% ^+ V# s$ ^6 A
"op_mask": "read, write, delete",
" L; i2 m; J. f7 D' s- _) K% k "default_placement": "", / t1 ~6 `6 J |0 s3 E6 w$ @
"default_storage_class": "",
2 j8 J- S+ G5 `, J1 r# H "placement_tags": [], ( R3 C \0 |2 o* G0 I
"bucket_quota": {
/ k2 z5 g- |& h "enabled": false,
. v; n6 E: J9 L2 Y* v1 q "check_on_raw": false, : h$ A- q1 K( E/ G
"max_size": -1, 7 l @, N* r3 B$ i
"max_size_kb": 0,
" x# Y% j: B& y4 S: H2 n( D "max_objects": -1 6 ~, r' E3 y% B: ^5 P% x( y
},
! W, O2 e E- g "user_quota": {
1 O) V) d+ N5 v7 _- ~ "enabled": false, ; j% y% E* t, d- m; {6 ?
"check_on_raw": false, . {3 U. u# v, ]: h: G
"max_size": -1,
; Q7 c& f$ t* d! P "max_size_kb": 0, 9 F! y* P9 H0 e+ @, ^
"max_objects": -1 & N$ M$ Q: e* r4 N, d9 [8 C
},
/ ]& v+ C% [# \- ?9 s1 V. b! O; p1 l "temp_url_keys": [], % M0 P( a9 [! K
"type": "rgw",
6 Y' V( {* ^! Z; g1 E: J+ A "mfa_ids": [] 9 g; ?4 I; ^) u; d
} % |4 j4 C3 ^( d8 L, x4 f0 I
j, _+ K4 H& A& d& m" ~
[root@ceph-node01 ceph-deploy]#
8 [9 p, ?9 n ]% z
1 O) J: ^( t0 e
2 j/ Z; j3 Y7 j) F8 o. C3. 需要使用 pip 安装 swift 客户端工具
- `9 S, ^ q5 T* [4 }复制
, \* o( P; U8 ^" l: K! _% V. t% ]# 注意如果有pip的话,就不需要再安装了 / _# r# s4 l. Y; ]6 W) {
[root@compute01 ceph-deploy]# curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py - r' [$ j. _6 ?
。。。 2 v- U) B1 Q' @4 I/ v
[root@compute01 ceph-deploy]# python get-pip.py
4 M( i! O$ w: ?( g/ C。。。
) V# a2 V- R/ Z* l3 N+ L[root@compute01 ceph-deploy]# pip install python-swiftclient b, Z5 e' a% k* J- z
。。。 & k6 b. |4 M/ U4 l9 o5 c& W
) g& L7 j+ R8 v
: H7 `! n( l! d+ R& x4. 使用 swift 命令行工具
/ Z0 s( `5 G" K9 b* q, d5 l复制- m1 `; u" U! K7 T' @
[root@compute01 ceph-deploy]# swift -A http://100.73.18.152/auth -U ceph-s3-user:swift -K 0M1GdRTvMSU3fToOxEVXrBjItKLBKtu8xhn3DcEE list
9 y) G4 X; t1 ]! X! Fceph-s3-bucket - u5 R! z$ f( o+ w2 _
s3cmd-demo 7 F/ e- K, \3 Y( e% _
[root@compute01 ceph-deploy]#
) T5 M# F8 K$ I7 j
( k( h& i' F2 S. j/ f) T" d: x
{7 H" X; U$ l( U5. 配置成环境变量的形式
) R6 Z6 U$ u& {' m+ J复制- k( l( o5 j3 p
[root@compute01 ceph-deploy]# cat /etc/profile $ O% C/ t8 W# X! ~2 Q/ _' ~+ \
。。。 6 X. t/ ~8 g" q, R' S
export ST_AUTH=http://100.73.18.152/auth
; r$ q6 o, R9 c4 B3 uexport ST_USER=ceph-s3-user:swift
$ R/ R$ m- X1 u3 v$ [export ST_KEY=0M1GdRTvMSU3fToOxEVXrBjItKLBKtu8xhn3DcEE
8 o! N6 J9 {6 P C6 v l; r[root@ceph-node01 ceph-deploy]# source /etc/profile ) u1 G, [ R8 a z% y+ W, P4 e
[root@ceph-node01 ceph-deploy]# swift list
6 M. l1 V5 t3 `! Z4 Eceph-s3-bucket
9 ^, r2 d0 {7 |8 `9 A6 S6 {s3cmd-demo * {. W$ b: w" v6 @0 `
[root@compute01 ceph-deploy]#
; ^ b. _5 l5 k' f+ ~
9 l$ G& }+ [: |; d- y/ W$ _7 U! k. `5 \: n
6. 创建bucket( s8 ^2 R$ j4 F. ]3 Y
复制" T" k$ M" C7 ?: X& M
[root@compute01 ceph-deploy]# swift post swift-demo - Z5 s! I7 V2 W& e' U0 V
[root@compute01 ceph-deploy]# swift list * l% l1 d# ]# k0 L
ceph-s3-bucket
4 G0 }* E% |; v* | x0 Y1 C2 is3cmd-demo
* Z, E4 }( q) j7 hswift-demo
3 h9 ~' q# F) a% H[root@compute01 ceph-deploy]#
7 x1 ?2 m0 J' m4 ^# A* v7 d& }6 H' o1 a8 ]
, X: h3 n" v2 I" l
7. 上传单个文件测试. g6 |0 q/ M4 @# C7 `8 r0 h$ C" }
复制6 i. |/ d9 }6 @ ~- }
[root@compute01 ceph-deploy]# swift upload swift-demo /etc/fstab
$ G& O3 e: |1 e" ^; zObject HEAD failed: http://100.73.18.152/swift/v1/swift-demo/etc/fstab 416 Requested Range Not Satisfiable
% K, I- r+ j8 Q[root@compute01 ceph-deploy]#
- t2 U6 @& p% c% ^0 ~' c" ^3 G
$ D) d; d$ S9 k% r4 q/ }8. 上传目录测试# Q' R( g* G _1 i" y
复制
; c1 D* y0 B1 ]& N: G' j% p[root@compute01 a]# swift upload swift-demo /etc/fstab & U: q, W9 H% ^, j5 C! ]2 c
etc/fstab
9 z. v2 e9 [; i: O+ |3 R$ V[root@compute01 a]# ! m4 s' D5 {) z) L5 ~( x& Q
; a* v7 [0 {. V+ h3 g( _9. 常用操作* ~$ M$ x; M, p
复制
4 `! G f/ O' K# 1. 列举所有 bucket
! j/ z' l" r' h% x, f4 C[root@compute01 a]# swift list
+ H9 Q5 n4 a2 t$ G$ X. l* Dceph-s3-bucket 1 g! ?" I7 }& \
s3cmd-demo
: f$ ~- \0 H: z9 sswift-demo ' V0 v6 D3 Z% n Z; _
test-demo
7 x7 o* m, z1 {% l# @test2-demo
7 n! Z% {1 c) l# K' ]" w[root@compute01 a]#
9 y1 l: b) m: j6 h% b6 p$ p. D! l7 L& U- e& J! Z' e. U4 e8 l
# 2. 列举所有 bucket # W6 C) `4 d( n8 {$ x7 w2 }3 C
[root@compute01 a]# swift list --lh
7 ], F" q) ~+ j& R+ M 0 0 2020-10-06 04:13:10 ceph-s3-bucket
. h3 L2 p, _0 {( @) P v 37 3.6M 2020-10-06 04:34:49 s3cmd-demo ( r3 z) p9 t- z4 G7 l6 d
2360 33M 2020-10-06 08:07:55 swift-demo : ]+ m* M2 e L" K; j; j
7 16K 2020-10-06 10:32:02 test-demo
9 ]$ u) L1 ~+ S/ ^ Z) u 9 387 2020-10-06 11:17:00 test2-demo
0 U: b( F5 x) h% F* v* O 2.4K 36M 4 C5 \# i* a# O
[root@compute01 a]#
. ~/ C* [! R5 @8 t: e: \0 u+ R$ h( l- u: k9 f9 C
# 3. 列举单个 bucket 3 Z# `6 j4 [8 e8 B' z
[root@compute01 a]# swift list swift-demo # i8 _( f5 G% q& A2 x3 K0 V8 O$ Q3 l
9 O) K; U( U v) R) X, X" v( i# 4. 上传单个文件到bucket 6 }5 w3 D4 p/ }
[root@compute01 a]# swift upload swift-demo /etc/fstab 6 O. y1 g) j3 V. I( ^
etc/fstab " c4 P( O- v3 |3 l% U6 z/ l
[root@compute01 a]# ) h, x3 ?0 C0 B
7 }5 n- J/ U7 L' U$ w, \# 5. 上传目录到指定的bucket . D. Y7 a+ W7 Z: b6 o, ~
[root@compute01 a]# swift upload swift-demo /etc/
& t. [) Z, J5 k, X& I6 k% c5 x) @" ?% b
# 6. swift 状态信息 ) \! u5 m" C, r6 W; l& v; ^
[root@compute01 a]# swift stat
/ u% X2 `/ L1 @6 A3 ] Account: v1 2 N7 Q/ d7 T% {/ l6 k v
Containers: 5
2 h- p+ t$ F! A' N" F+ R Objects: 2413
/ Q- Y+ |+ m( u$ s ^& x Bytes: 38701415
9 e9 W* M; ~! \Objects in policy "default-placement-bytes": 0
; g; Z( o# Y8 }+ @) P: V) T Bytes in policy "default-placement-bytes": 0 - G4 E8 F' P) z) v2 x* ~9 v
Containers in policy "default-placement": 5
# u! x' v) ~1 W0 K4 b Objects in policy "default-placement": 2413 6 f, A. c% F6 ~6 |
Bytes in policy "default-placement": 38701415
5 U2 | l1 B7 i' q1 w9 Y6 D3 h7 p X-Openstack-Request-Id: tx000000000000000001302-005f7c5afd-a638-default
9 C4 W' q( c' e" Z. a* P* i X-Account-Bytes-Used-Actual: 45948928 ; W3 d1 f* V6 K- R1 }0 d
X-Trans-Id: tx000000000000000001302-005f7c5afd-a638-default
& c) |) i- H$ h z" H; K X-Timestamp: 1601985277.38095 2 T( ]! s( m6 ]" ~8 E3 p( S, X& o" q- I
Content-Type: text/plain; charset=utf-8
# b; L* d. ^5 D Accept-Ranges: bytes 2 T# ^( G) k& ?+ ~3 Y/ F) d3 F) z( h
[root@compute01 a]#
4 |. O+ T5 T t
9 `/ ?. F4 q8 S# b# 7. 创建 bucket - }& ]1 e+ a5 y
[root@compute01 a]# swift post swift-test : P) p) U- L% z1 @# Z
[root@compute01 a]# swift list
6 l( l' V0 e; _* c9 b/ Rceph-s3-bucket
, R( T* E3 X) ~; E; s& J$ ^$ cs3cmd-demo 4 Q M2 X( o8 y' V. L4 B6 o9 E. @# J
swift-demo
0 v- Q) H4 o' T5 x/ I3 i5 iswift-test + S" y2 p! I! U5 `8 G- I* X
test-demo ) z! _# z1 ^& |( ?8 m. {
test2-demo
' W) |8 E% P$ D/ `8 n) x V[root@compute01 a]#
5 u8 d4 M0 U; l+ S5 G/ b% P) T* c* H. X) n8 }9 E8 o
# 8. 删除 bucket
" m! N+ h# d" Y }- F8 U[root@compute01 a]# swift delete swift-demo - t" d, O* J7 h/ [8 X
2 A3 R* z: ]* ?( w. ?
# 9. 删除指定 object
! w: q/ a3 O. a) o" j/ W7 a8 [[root@compute01 a]# swift delete swift-test root/a/1.txt
, t( n% R. ^ sroot/a/1.txt
# Y; m2 g2 g, p; d- I[root@compute01 a]#
u% ]0 M- }* K2 L) X& m
# `6 v2 t# |7 q" y! t7 x) a# l. {# 10. 上传大文件时可以使用-S指定分片大小
: f, }& m- N5 E8 v[root@compute01 a]# swift upload swift-test /home/log.txt 6 ~- i: i( _, O U0 C% T
home/log.txt
! e9 ^) Z- A: e& G8 _[root@compute01 a]# swift upload swift-test -S 102400000 /home/log2.txt ' z% `% p& }3 k/ o/ c
home/log2.txt segment 5
" u g& Q+ J; U0 F# Nhome/log2.txt segment 3
6 k. i6 `7 V% l" khome/log2.txt segment 1 + \+ N: `5 k9 Q+ w+ u# g" e ^2 U
home/log2.txt segment 0
' h, r. t* [1 u; T ohome/log2.txt segment 2
1 G5 T% c0 E; }* g( zhome/log2.txt segment 4 ! |% L# U' z/ E# v/ X
home/log2.txt / B) w& _: X3 y7 `0 O
[root@ceph-node01 a]# 1 \( F8 o$ R* G8 N6 G/ o( I
+ s& n! f; |! [) l7 Q& V总结# m) {( V& U! x. p
从概念、安装、到实践使用,简单介绍了对象存储命令行工具。$ H& w9 i- l+ g5 s
# m' n3 N& R D: d
% t. }, U; {8 T5 C+ V0 \" f, G$ j: W
6 [* r, w s& e, c |
|