|
|
楼主 |
发表于 2022-2-9 10:04:03
|
显示全部楼层
ceph对象存储
6 c$ a+ Z: I' T9 D- N顾名思义,对象存储以对象方式管理数据。每一个对象存储数据、元数据以及一个唯一的标识符。对象存储不能直接被操作系统当成本地或者远程文件系统访问。它只能在应用程序级别通过API访问。ceph提供的对象存储接口是RADOS网关,它建立在ceph RADOS层之上。RADOS网关为应用程序提供兼容S3或者Swift的RESTful API接口,以便将数据以对象方式存储到ceph集群中。
! N) N8 B! r) F2 R5 y) \0 F5 w在生产环境中,如果你在ceph对象存储上有大量的工作负载,则你应该使用专用的物理服务器来配置RADOS网关,另外你可以考虑将所有的monitor节点配置成RADOS网关。( j9 j6 ]+ U$ p' F; R# D& d3 M
% `3 ^# I* r* W2 n. B) I$ ?$ D; o& [安装radosgw相关包1 E" a: B9 h: S0 w7 K
yum -y install ceph-radosgw ceph; Y4 M5 S' y( [; I
1' w4 K( @* u) s0 ]. }9 V* S% ~
创建用户4 w- U2 b/ k1 U- }' m
为ceph创建rados网关用户及密钥环,登录任意一台ceph monitor节点上,并执行下列命令
7 ~3 `, k. N8 i3 u3 ?9 B. C! l创建密钥环
! y: h3 `7 ] O1 X3 B$ N4 y! q6 Q
ceph-authtool --create-keyring /etc/ceph/ceph.client.radosgw.keyring
: d/ `$ ]1 e' \1 N! S: d输出1 S4 p9 f. x8 R
creating /etc/ceph/ceph.client.radosgw.keyring3 t* U. E; ^& a$ B4 {
1: e9 K c& @! M) b$ h
2
7 A3 k5 @, ?4 v$ O3
3 ]7 @ ~+ m4 ]8 uchmod +r /etc/ceph/ceph.client.radosgw.keyring
5 G/ w$ X9 B# t3 x: A1
7 I) [' x: ^+ p8 A2 n这时候/etc/ceph/ceph.client.radosgw.keyring 文件还是空的# m: o3 W4 b/ I3 o
为RADOS网关实例生成网关用户以及密钥,这里的RADOS网关实例名是gateway1 \, o) D2 K2 [, m- x# X
! ?" h4 B( l! a$ I6 Z' r0 p* Q' rceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client.radosgw.gateway --gen-key- v: u. P9 f5 x) N9 X) ]) `
14 E8 n: Z- G% K; y% D: a2 N; }! i
cat /etc/ceph/ceph.client.radosgw.keyring
) q7 p+ z5 J" ~+ x" d3 J[client.radosgw.gateway]
: c8 N: r' l! V3 @ u' e key = AQBWuqBf5apFDxAAAbqsG0NTx8lehGoNpcPVJQ==0 V1 ^$ l: P& l: B0 W5 m& L4 F
1" u* z4 L1 m6 n3 E/ Q' t2 {
2
$ F: |* O W! {8 ?0 Q3
) H: A# z2 y' x3 i4 A/ d为密钥增加功能
* {' f8 p. g* Q S% D/ W3 \2 O. I6 `9 O5 h( A, J
ceph-authtool -n client.radosgw.gateway --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring6 W6 p( ?6 I q, \ {- N3 r0 V; f
16 h% z$ R% ? J
cat /etc/ceph/ceph.client.radosgw.keyring 6 [8 p$ P% k3 A# n( _4 g
[client.radosgw.gateway]# M7 _9 Q1 B. K8 A% B: x
key = AQBWuqBf5apFDxAAAbqsG0NTx8lehGoNpcPVJQ==
- G- V, y: _4 y) G% p caps mon = "allow rw"- n! q. w9 W) |8 M0 D
caps osd = "allow rwx"! P( y" M* U9 I' f4 \& n
1
( p* ~9 a% u7 ?" ?: \0 D. N2( ]2 q8 |. } l
3% U {% U6 F3 h; u% @( p3 g( |
40 [. ?+ M& b% Q, L" ~0 ?9 V H- P
5
+ A: ~4 Y. y) ?" m2 g. ~将密钥添加到ceph集群中; O$ `2 B. _2 M' q; C$ \
7 X$ z- |7 B1 X/ D2 nceph -k /etc/ceph/ceph.client.admin.keyring auth add client.radosgw.gateway -i /etc/ceph/ceph.client.radosgw.keyring 6 Y9 a5 O8 o# w+ ]. U6 y) J+ k% {
输出
3 E8 o0 C4 }4 P1 Ladded key for client.radosgw.gateway
6 s; V! E. y5 `+ G' v% G12 A, D( ?0 s$ e& X( r; e& S
2/ R) q# q: q x. C
3
: H- _# q- J8 I4 H L3 B! C分发密钥到ceph rados网关节点上/ V7 P: w2 I& z8 a9 r
& t2 E8 m6 n: b& P
scp /etc/ceph/ceph.client.radosgw.keyring radosgw节点的hostname:/etc/ceph/ceph.client.radosgw.keyring 6 d; j! h8 V8 q& Q$ u8 b6 c! n
1
" {4 I3 {8 I$ v9 S由于这里的rados网关节点和monitor节点在一台机器上,所以不必分发。
! \+ o% M* S8 n) ]- F! x+ r
$ m& n2 G& z7 t/ Q2 t' D2 w为rados网关创建池4 k: c$ N+ E2 E/ ?. A6 r# l, a
ceph osd pool create .rgw 128 128: Q, H: n( U& \5 z2 Y) `, r+ y
1
$ k9 ~" L! Z7 t4 X( Q. W创建radosgw网关数据目录) s5 P! Q/ s# n- v
mkdir -p /var/lib/ceph/radosgw/ceph-ceph01.gateway
9 i( [: ?: L' l+ ]1
1 I( j& e* I' F) A; ?Civetweb方式配置rgw
' X/ U3 ^' }$ U增加配置
3 l: B$ j1 R* l+ O" i1 s3 c给ceph添加一个网关配置,添加如下配置到ceph monitor节点的ceph.conf文件中, 并将该文件移动到RADOS网关节点。确保主机名是RADOS网关的主机名。2 f9 w+ N1 X5 Y
& Z: m* o8 x" p$ t[client.radosgw.gateway]7 I* M% |! I9 e) \. N9 E9 n2 C
host=ceph01; P) U$ }& U7 E2 @. ]6 m
keyring=/etc/ceph/ceph.client.radosgw.keyring( y' h( p$ q) G. w Q g
log file=/var/log/ceph/client.radosgw.gateway.log) A0 Z' G1 \2 ~4 |
rgw_frontends = civetweb port=80
8 h& d6 y% s1 L- x/ ]0 N1* E* G6 I1 z* J
2$ w- A2 T2 ^' i# L+ w* P" t6 ~
34 S8 I& @8 A: p' O- n7 I- B' L
4- p, l; m. D: n; G8 F
5
3 X3 S8 o( C) qcivetweb默认监听在7480端口,上述的配置中显示指定监听端口为80(port=80)4 h+ \# [ b* |! a
复制配置文件到rgw节点,这里rgw节点在ceph节点上,不必复制。% d. {: {0 {# h8 z
5 _3 R [9 c6 L* {' A. C( }: @
scp /etc/ceph/ceph.conf radosgw节点的hostname:/etc/ceph/ceph.conf
X/ t& Q$ F) c0 W- O3 P1
/ [% L- w" ]& s8 L0 W启动rgw实例! u( s: I6 s% t/ `3 V: a* T* U2 d
systemctl start ceph-radosgw@radosgw.gateway.service% [7 k& l" q3 \! `$ u# A( u6 h
1( e. x! o7 F. M# J& d
说明:ceph-radosgw@radosgw.gateway.service中gateway为具体的实例名,这个实例名要和ceph.conf中配置的一致。! T ^+ q& S! v2 C7 c0 G; j+ V
$ {: \# Q0 z8 Q6 @+ E8 r9 Q2 t, K5 j验证. N& j9 l% W' r- h
rgw节点curl1 E5 H$ h" W# } r9 L
* y6 N+ \1 l2 v3 }: U0 s/ n$ r& G
curl localhost:80
( ^* ^2 n3 |0 x6 \; O* C0 y正确输出
3 x5 U9 e+ G8 Q1 h' ], P<?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@ceph01 ceph]# ) B5 q+ c/ K2 D) S. u$ Z
1
6 [! ]4 ?: |3 g `+ ^1 v2
4 v# d& C0 |6 W2 i& t+ X2 n34 L J8 a! Z4 b4 E( }- D a7 k
或者浏览器输入rgw节点ip
1 j7 j8 w* y4 w+ l) h i8 L( K正确输出如下7 n+ O2 N0 _* y/ B6 c* r9 k
7 P) ^ `8 \) J2 N9 i3 Q
! H/ D, B. z6 U) A. Wapache fastcgi方式配置rgw(方法1简单)! a- D% ^3 }% p6 ?% x t# e
安装httpd
: ~9 ^' ]4 T+ m% I3 A9 yyum -y install httpd0 h# M) }# Q6 h n6 M
1
" a) w" B4 \/ T+ |4 n' y配置httpd+ }+ R8 u$ g1 S7 ^& i1 ~, Z; C
cat > /etc/httpd/conf.d/rgw.conf << EOF
0 Z1 S3 R5 z1 A+ A, J# ]<VirtualHost *:80>" s1 o7 E/ G) X2 K- n
ServerName localhost
! q* T y- Z) H5 v# N$ QDocumentRoot /var/www/html5 X2 u4 h- }+ s/ L% m9 N
8 F: X. l+ F- |9 u; g" ?' C/ j4 u* EErrorLog /var/log/httpd/rgw_error.log
) n$ n( V5 B; C4 [: QCustomLog /var/log/httpd/rgw_access.log combined
$ S4 t, l0 c7 Q2 b& m7 H. v; g
0 c% N9 I( s5 y7 a$ J3 K# LogLevel debug
; R2 U" w* Y0 J$ m# u& G5 {: B, O. C0 g3 _8 P$ K O, P
RewriteEngine On4 o9 b4 A2 `- B; {
! P. d1 K; I+ B+ H& b2 f
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
* b% D, c5 S% \ @ V: B1 z9 g3 F% P
) A& G( w/ L% P$ G# zSetEnv proxy-nokeepalive 13 g4 K4 i" Y9 P
& U: i. v2 B) L! e m/ s$ [
ProxyPass / fcgi://localhost:9000/
# ^& c( q2 u/ X% V0 k- w& [' r, t0 {7 x% b7 N* |6 ]
</VirtualHost>
. [1 C; h* r* u3 G L/ bEOF: v) j1 j. r) d; c8 P( Q2 n+ K
13 j. k7 @0 e! I) Q- ?
2
2 o" s, z; l% P9 g/ p3. J; }, G- c4 R
4
7 ]- I" f% P! M- n5
M3 T$ W( G N% B6
; i! F( P k( V, b; S0 K1 ]7
2 [" s; m& Y5 h8
+ Q% ~' Y/ x u2 S6 q9 y9( M8 `: |+ w: r3 A! h; O+ B
10- \' S7 x' i1 K' N. A* S4 m2 l
11
, C; r; ~2 J' ? _" ~& e12
( @( ?* ~ [; C9 {- J131 K: ]" T2 E% G$ @! U8 L
14
! P6 O7 ?6 {6 t' O8 m2 k' I15; |1 o# k2 k2 f$ G6 \ s, c3 l
16
L# N- q6 c9 ]3 g3 P17
* w7 s _' [- H g% Z0 `18: R5 A4 v6 ~1 r- B D
19. w3 \9 f- p$ c, k( j- A9 ~9 c: o
20
# B; N8 v Q4 {" S! p) V配置ceph
' i: w: F$ x0 x( e* s& R[client.radosgw.gateway]. C% I/ ~# J8 ~8 f5 q( T5 K
host=ceph01
3 }! v0 A: I" e4 w9 N: Ikeyring=/etc/ceph/ceph.client.radosgw.keyring
6 y0 D1 W' f% s3 h9 ]* E+ a Y. Wrgw_socket_path=/var/run/ceph/ceph.radosgw.gateway.fastcgi.sock
$ g$ Q1 B0 w$ T3 s+ h6 }4 |log file=/var/log/ceph/client.radosgw.gateway.log
8 ~' t( a* |# y/ _* |/ e: _1 M) jrgw frontends = fastcgi socket_port=9000 socket_host=0.0.0.0
- x9 V0 B2 u5 `* p- I( T$ u#rgw dns name = ceph-rgw.objectstore.com" H# D3 J4 i5 F+ R/ r$ E
rgw print continue=false
% [- t0 p) z \( e5 J' p1" p' H6 u2 C& V6 ~2 w' C F
2& }( J+ M6 L- B9 z- _- F
3
f- E& p, u- W& Y2 K1 R4
, Z" d9 I5 Y2 @* v* [ m5
& I% l& w& T! x' I. |6
% I$ `" |5 Y: U; r7
5 N4 g G: l9 d1 L8
% _, T$ ^/ K5 ]& W7 A. j+ ^启动httpd
# G1 w0 U) C" p+ P, `' u* a/ ~4 ?systemctl start httpd9 Z; j* N$ Q1 `- i7 z1 E) R; c3 k
1* ^* }# r4 u9 }9 q& Z" s; w
启动ceph-radosgw.target服务
( o/ [: J2 m! I7 Y% R- ?$ usystemctl start ceph-radosgw@radosgw.gateway.service$ x% W" i+ |, B0 K
1
" d6 z8 _7 n' D, F+ H验证$ {' s9 Z0 \, K3 ~0 M6 X
curl http://ceph01
! K' e! v5 w. J% ?* p<?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@ceph01 yum.repos.d]#
+ z t( b+ F* A& D) y, w1
$ ^' {1 E% }- ?; ?/ Q" n# s# F$ |& U2
! v/ c. x4 C0 q或者浏览器输入rgw节点ip
. o8 a0 I j' ~: D正确输出如下
" o, c: w. B% v' D2 p* w$ O. n1 a' B0 q$ k) G
8 Q& [4 v/ ~( a8 e# a/ _; x7 Iapache fastcgi方式配置rgw(方法2复杂)
- q) h F5 I$ _8 @7 V安装yum-plugin-priorities
; H# `3 n+ V; h1 ~yum -y install yum-plugin-priorities: [4 B: v$ g$ {9 ^! u0 v
1/ |: ^# a0 l! u+ u% t: v
配置mod_fastcgi的yum源5 Q2 M8 l3 A& ]1 k9 H0 v$ v7 Y
cat > /etc/yum.repos.d/ceph-fastcgi.repo <<EOF8 ^* Q# _) {; }
[fastcgi-ceph-basearch]
; Z9 h2 D: ?8 F8 S' S0 rname=FastCGI basearch packages for Ceph: b$ J; D$ l, M {
baseurl=http://gitbuilder.ceph.com/mod_fastcgi-rpm-centos7-x86_64-basic/ref/master/
# h" s, e1 f# S. t9 c# d. K2 `enabled=1
: G( @8 W R+ \1 K7 Rpriority=2- s6 @, C5 ?6 o; c% s' A
gpgcheck=13 X) T8 }* F1 ^( Q1 e& |+ S
type=rpm-md
. j/ x9 V4 H2 }" pgpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/autobuild.asc
8 j6 d; r5 @8 \: C. K }- e7 `0 Z- V* ^8 u" x7 b
[fastcgi-ceph-noarch]5 X( m9 i& ^7 @9 f
name=FastCGI noarch packages for Ceph E0 a/ H" h A; e; N2 V4 ?' `
baseurl=http://gitbuilder.ceph.com/mod_fastcgi-rpm-centos7-x86_64-basic/ref/master/* A9 y E- f/ B( i
enabled=1
& p7 t+ M3 C8 |8 b) \$ qpriority=2& k0 ~+ L9 y, _$ B# H: t
gpgcheck=1. U, k* a7 t6 h4 N7 r) A% s! N
type=rpm-md) @' _, e9 m' R' c' M4 i% m, S* H
gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/autobuild.asc, s: [" I- [ S* r6 y
2 V$ y- ?4 m; N6 Y[fastcgi-ceph-basearch]" C* j4 Q2 G4 Y7 o r, W
name=FastCGI source packages for Ceph
# M" Q7 z4 J0 _& S. H" z3 |5 Mbaseurl=http://gitbuilder.ceph.com/mod_fastcgi-rpm-centos7-x86_64-basic/ref/master/* |& v; d% t$ i
enabled=1
% ?; h: H3 d, npriority=23 E2 S, I, W6 S! P1 Q/ |. f
gpgcheck=1! |: J& a, d, h/ Z: W0 n4 P
type=rpm-md' {' i- ]* d/ _, H9 M
gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/autobuild.asc
( K! _; Y2 U9 l: R) fEOF9 ]# V3 Z! e8 c- j( [9 ^
1; b9 F5 K; y7 n& j9 \8 U
23 S6 S% v. e" N) J
3
7 h( ^9 f _+ [8 q: m% d2 i$ x n44 p' g0 E* T! r4 B1 x. r* V
5
% [# P3 _ x/ C, \5 ?6
5 h/ I9 r: ?" |! c( S% @" ~7
6 D3 }- H2 W2 V! f1 s8& _) t8 o6 M- r: n
9" S% q& }9 x- D1 G: ]8 @
10
0 w2 V% k% A" r H7 ?! P$ A11
) }7 Y) N, _$ e& P, Z }! ^127 q+ |- |8 h: B5 B$ H7 {
13
3 T( q/ U E& {" w0 O0 C14
; k1 N; c% n7 w* \9 _$ Q: u9 x15
; G* Y' O. F. F" u" F# K8 p( Q7 H164 }4 m4 R m2 r/ Z8 D
176 s% D6 R+ l$ S4 }
18% \1 \2 d" i4 f5 m! R% e
190 _: ^) z0 M4 Z8 V6 G3 c4 h, r
20
: W2 x6 H1 x# K/ u/ i Z0 \21
% n$ L2 a+ }( X' C# ~8 c9 p221 T. Q$ }; f r/ ?) ^
23$ k1 f4 P" j' v5 I. v8 a
24% o Z M9 H. n4 N5 I7 w
25
% l* P% U' A* G) _26
5 y! }9 ^2 l6 L9 H: b/ i27
1 X2 @0 |; E D28
# F" e& Q" K) U j' a g4 m4 q安装相关包# P% e! v8 u. D
yum -y install httpd mod_fastcgi ceph-radosgw ceph' U5 k8 M. I% \
18 C3 F. p8 D: I$ r; T8 L2 P
配置rados网关
0 |9 C! U" g0 h+ `2 ?9 Srados网关的配置包括apache和fastcgi的配置以及ceph密钥的生成。4 r3 _& A3 N( ^5 {( `
编辑/etc/httpd/conf/httpd.conf文件以配置apache% l" H+ @3 Z M- {4 |' d# `
) \0 B) ^4 W6 ~0 k+ ~/ \cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak
* r) z; K, ]9 ^' y8 s- w* v19 _' `# n m) e
设置ServerName = 主机名- ~* F( Q( _6 S2 z
1- O! ?9 i! }$ h6 o
确保下面这行存在并且是非注释状态* b# A( D8 m# C( C' B( [9 i! f: S
% e2 @/ L& s( b) F* Q/ Hcat /etc/httpd/conf/httpd.conf|egrep "rgw|rewrite"
, r3 B6 n1 V! J2 j/ BLoadModule rewrite_module modules/mod_rewrite.so2 d& N( p2 e! c8 M% E- E/ `
1
1 J7 z4 r' b7 B R9 B2
( B6 t* S, u/ h4 I4 [1 F3 z" S/ X: i编辑/etc/httpd/conf.d/fastcgi.conf文件以配置FastCGI
2 g! D( }; u P$ F5 s& ~确保FastCGI模块开启6 O2 Q/ O8 Y$ q& b e7 H" }
0 m3 k# ]1 c9 w- E' }' I& C* mcat /etc/httpd/conf.d/fastcgi.conf |grep "fastcgi_module"# a8 Q- P$ \: F
LoadModule fastcgi_module modules/mod_fastcgi.so
' ^- F$ ~. ?2 q) f5 \( F6 T. L1
) c0 n" v p* n4 u5 i20 D$ Z# m$ C1 c" q g) @
关闭FastCgiWrapper) x% R3 v7 ?6 t/ y
8 m6 H* V. u, h$ E6 ?2 N2 X" a+ B
cat /etc/httpd/conf.d/fastcgi.conf |grep -i "fastcgiwrapper" _ D$ _/ l( p( d! J
FastCgiWrapper Off( E( ~6 k$ Z- n5 f
1
' Z* r6 C; i7 ^2 W& c) w' [% p+ F, l26 n; W5 _0 B# Z) k7 A" o8 B( H
设置对象网关脚本; H: x% l2 a+ A8 y2 r+ y' M
1 [4 p7 M7 s- c% O c$ n
cat > /var/www/html/s3gw.fcgi <<
% Y. L! o) }/ [& i$ L8 Y" S8 r#!/bin/sh3 ^, ~, R8 G" f) A" v5 d, l# A4 k& [
exec /usr/bin/radosgw -c /etc/ceph/ceph.conf -n client.radosgw.gateway2 J" @: X8 d* P& U# A* H1 q7 Y7 _
EOF
. t8 X2 d8 {; Z1* a3 ]7 A" M% [1 t$ n# p
2
, d8 c2 E. x5 C8 w; m' z38 s- \- U( \, t/ C7 G0 _0 G9 I
48 l/ k/ p+ r" B/ F
授权脚本! J8 T) n, t, D9 y7 ]. t! b
chmod +x /var/www/html/s3gw.fcgi
6 n' w A# {+ J% a3 u& Bchown apache.apache /var/www/html/s3gw.fcgi
1 a9 i6 N. Z! m: W. B7 T1
- n; _( y+ x7 G2
& T+ ^2 }7 z8 C! a# f在/etc/httpd/conf.d/目录下创建网关配置文件rgw.conf5 C1 w" j0 I3 K1 @5 f
' ]+ b& G8 F4 j; Y9 Y0 zcat >/etc/httpd/conf.d/rgw.conf<<EOF/ _7 T* }4 z" l( d
FastCgiExternalServer /var/www/html/s3gw.fcgi -socket /var/run/ceph/ceph.radosgw.gateway.fastcgi.sock% ?7 r2 F; _' I- A4 P5 g4 D y$ U* x
<VirtualHost *:80> i. g/ b) i" f+ A+ Z! s# g+ Y
ServerName ceph01
2 {" ?) W+ j( _ X5 I5 l7 gServerAdmin {zhanghao@ceicloud.com}7 o1 l. K o. d: ^- u
DocumentRoot /var/www/html
# y d7 Z( d: [9 ]# TRewriteEngine On
5 S$ q9 K. v; q0 U9 F# R9 o9 SRewriteRule ^/(.*) /s3gw.fcgi?%{QUERY_STRING}[E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]5 Y1 C% g" A f4 Y; ~. r( }
<IfModule mod_fastcgi.c>
' Q. k/ Z8 C( g: `3 R' A% ^<Directory /var/www/html>1 g6 V/ ~9 Q, H2 M/ r- C2 k
Options +ExecCGI U+ Z/ P' S5 S# `/ E3 M+ g
AllowOverride ALL
+ D$ C0 j* \+ ]2 @3 ySetHandler fastcgi-script
+ {7 `" H* ^# ~Order allow,deny
3 c* _7 ?3 ~% c' R# tAllow from all' x a% ~' [& }8 x
AuthBasicAuthoritative Off
; V5 q, i" g" S</Directory>9 r$ W( o- k2 x" v3 R* i
</IfModule>
6 j! r& D7 i1 V- Y" ? E9 nAllowEncodedSlashes On7 {% z* d: M% r! y5 s: ?( l
Errorlog /var/log/httpd/error.log
! Q7 {$ W$ S4 [* aCustomLog /var/log/httpd/access.log combined' M& b$ y- V9 O( n& H9 c8 m
ServerSignature Off
& O7 E! n4 s, N% _; {6 c</VirtualHost>6 r) S% n; C. x* N* z n
EOF' G, F5 C1 b* v* E' F
1
1 Y* D, N4 O/ a( D: ?' j) g2& O3 C2 s- F: p/ E$ O$ G: Q
3
% D" f( G. K7 F, S* [- h5 V4& j4 O+ g [2 w4 P G+ |4 J
5
4 f* q0 [% C4 B$ }6; R* m' S% Y+ ^3 b
7$ Y" E8 `/ n: |, [
8
% t; I! c# w0 C) F: b. ~9/ M& [5 A* X7 x9 J
10
" A; A. V4 a: A' f* _11
6 Z& h& Z& h( Y: p3 s: n/ o. d+ l12# G3 K0 B: N: [3 a% o9 P [
13
+ A1 F+ x* W8 _5 h# F! f p' x14
" V4 |" J) t- P% y7 A2 \6 B$ ]- F6 l15
- Q- y: s$ L: x2 m$ B16
4 V! _( `" u/ j8 }/ p9 S2 k* n17
( x* A4 I: L. ], ^2 M, }181 l$ [5 z x# H4 Z" i# p
19
$ \, t4 W b: x. V% q3 H% k20
0 O- t# S4 q2 H7 X+ n21/ j& O& S: r; B0 o+ _: k" k) ?
22, g m# }* b0 [% |
23
5 l, S& y5 n& `# Z24
e4 y2 h% s+ C% m) O! R8 e$ |添加ceph配置8 G" `5 a4 L+ T' R9 E1 i
给ceph添加一个网关配置,添加如下配置到ceph monitor节点的ceph.conf文件中, 并将该文件移动到RADOS网关节点。确保主机名是RADOS网关的主机名。! N* H3 ^- `( F+ h$ F
; K" S0 H4 m' R: o P1 Z) [: E. n[client.radosgw.gateway]
/ }. N; p+ `0 t" k/ E7 ~% _host=ceph01
9 \3 _1 ]2 T# G7 Jkeyring=/etc/ceph/ceph.client.radosgw.keyring% v& L; W' C' v w/ r6 j
rgw socket path=/var/run/ceph/ceph.radosgw.gateway.fastcgi.sock
: T4 V# c! ], T: L+ [/ Rlog file=/var/log/ceph/client.radosgw.gateway.log6 u3 |0 o7 q, g+ d8 b
#rgw frontends = fastcgi socket_port=80 socket_host=0.0.0.0
- H& i4 G. w @3 ?$ H) trgw dns name = ceph-rgw.objectstore.com7 M. a6 Y# c+ u; U4 M, h7 J
rgw print continue=false6 V4 I; }% V6 d# t" u9 O
1) Y- L, ], P0 K8 Y2 T/ p9 Y
2
t7 _2 t& X' J9 @6 h' G: p" x3
- T% z3 Q9 a9 y! J# g3 b; ~' s4* [1 k$ }% Z! ^
5/ T7 ~7 a" g( _- O- g& D
6
4 p0 ]( ?9 F2 c! [* v7
, G) U$ }6 {' R8! ~$ ~+ I r) h& j6 d; L, h
设置文件权限
I" N+ U2 S' l' d调整RADOS网关节点上的/var/log/httpd、/var/run/ceph和/var/log/ceph这三个文件的所有权和权限,并设置SELinux为Permissive。- u) M$ q$ B/ d
+ {$ @; v- C5 w o; A0 f4 t% m+ V hchown apache:apache /var/log/httpd/2 H6 a! a- w* u
chown apache:apache /var/run/ceph/. j4 H( l. E" ~7 V
chown apache:apache /var/log/ceph/
% M6 f1 R: S* f1$ A5 S3 r/ [* c h4 L
2! K1 T7 h; P2 Z
3
! A5 Z9 D7 V+ j/ Q8 H8 M启动Apache和ceph RADOS网关服务,忽略遇到的任何警告。9 T' p! h5 b7 J& W5 J. l
3 j" S8 Q: R, N8 C! i/ R% j* ~- h
启动httpd& {! a+ R# k" U3 ^
systemctl start httpd
# b- z/ N. ~9 U& `1
- N6 ^5 S K$ A- s启动ceph-radosgw.target服务4 ^* j# X- q, v. A: ^: t
systemctl start ceph-radosgw@radosgw.gateway.service3 j8 e- C2 y% G5 b# n
1
! k3 H+ {2 M7 Q4 f! w8 k8 x B验证
3 s: X1 Q" ^1 J( qcurl http://ceph014 c& x; [0 a! s6 ~
<?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@ceph01 yum.repos.d]#
& L1 P& i0 ^: z1 f# a/ C5 Z1" j- U# A, w9 q$ c: U1 H
2
: V4 t' j7 F6 N1 J$ {' X或者浏览器输入rgw节点ip! I4 N+ Y" g7 X6 k; Q S: w; ~$ [
正确输出如下
, I0 R* T. ^7 R' Z# G2 T% K& E
. S/ g- H" Z$ S7 u; H0 S! \$ F. i9 H3 n o
Nginx fastcgi方式配置rgw' g: u8 i0 u( n! ?+ J7 ^
添加ceph配置
2 p# |' h* S. l* ]7 k给ceph添加一个网关配置,添加如下配置到ceph monitor节点的ceph.conf文件中, 并将该文件移动到RADOS网关节点。确保主机名是RADOS网关的主机名。
' s) h0 E+ u% k9 T. v" y4 U9 v" `( C9 |. }$ I, m- I0 p9 l
[client.radosgw.gateway]$ ^+ s# a- o, G! U
host=ceph01
" M$ \$ K0 t: A2 ~& pkeyring=/etc/ceph/ceph.client.radosgw.keyring
6 K$ x0 o" B% j* @ F' ], X8 Vrgw_socket_path=/var/run/ceph/ceph.radosgw.gateway.fastcgi.sock* d& v$ z5 u8 Y2 I& V# c
log file=/var/log/ceph/client.radosgw.gateway.log+ H& M K# n: x- V, }
rgw frontends = fastcgi
& ~' U6 D% Y7 v* P: Nrgw print continue=false
& z' u2 D8 `+ j6 ~1 z+ {rgw_content_length_compat = true7 Y& Y' ^# L7 j4 f: c5 v& y1 V
1$ W$ y7 K! F4 Y! A
2
7 r) z; q& _ X8 a3- S' {) O/ K3 g* j, q' i/ R9 O! W8 K: ^
4
/ q I+ q2 i; u7 w% \$ H. q% X# @5
3 M0 d9 }4 U. R6
" S+ O' W t$ e$ D+ S- K2 B3 l7
) L0 {9 K* T5 h4 v6 M2 Z8
* z* O0 c, c, M% w安装nginx
# O$ f2 s) p' p/ Z4 j/ _yum -y install epel-release9 X5 }) k5 H: U* q; e+ |; u* C
yum -y install nginx
4 w. Y0 F7 n0 }1 a. c+ A, Z w1
! h T2 _. e( ~- U5 u* ~21 k! o' e t6 `9 f. J; P
配置nginx
3 S* Y! o, h! s9 }3 \) u# w8 N) r配置nginx服务,在/etc/nginx/nginx.conf文件的http段下添加如下内容:
$ f' ^/ ?8 ^- h% o2 k G1 g4 S4 u9 A0 v$ \& y8 P
http {' S1 H5 x/ {8 r
server {
4 \# S/ a7 @3 c/ w- l listen 80 default;
2 B+ E+ H8 t% S5 J: m5 f server_name {hostname};+ z3 e& v& G& F8 q/ r
location / {
) h# F# b" y6 S. L( X, H fastcgi_pass_header Authorization;) N/ D) W$ g2 ?4 l3 M5 i+ T
fastcgi_pass_request_headers on;
3 I0 E6 y1 n0 J2 S) f2 [ fastcgi_param QUERY_STRING $query_string;
- O! O% L2 n$ |/ |8 ] fastcgi_param REQUEST_METHOD $request_method;
% g; A8 a# r+ L5 P$ s- | fastcgi_param CONTENT_LENGTH $content_length;
. u% p2 H# y( v& e/ a4 }, z) w! d- ^( ? fastcgi_param CONTENT_LENGTH $content_length;0 k& j: b7 C( q. {! t: E
% X& t6 S. g) H5 A* Z0 ~" y if ($request_method = PUT) {- G( N$ g! K( j) w/ i
rewrite ^ /PUT$request_uri;* Z8 h8 f3 w5 |8 @
}: C" k" q/ F- d- E2 S3 U
7 A4 B' T& t+ ~1 H4 f include fastcgi_params; M5 @4 f- M! l' x( X8 U) {0 B. h
fastcgi_pass unix:/var/run/ceph/ceph.radosgw.gateway.sock;
1 q( q9 L+ r z" o7 f! I% V1 W }
( {. K8 [! O N ?+ b
2 a }- q0 d; J' `" W location /PUT/ {
# E F( h/ _+ L% b p1 s! U6 l internal;
% i: o8 g1 {5 v2 Q' t4 ] fastcgi_pass_header Authorization;4 F) U; ~5 G3 c- o
fastcgi_pass_request_headers on;2 p: R- v0 W# h
3 p8 ^) }# X; \# v) _4 _+ u: p
include fastcgi_params;; i! f6 u' D: h2 x2 e. m6 |% S: h
fastcgi_param QUERY_STRING $query_string;3 q, [9 {6 C% E V- O% o& O' n* \
fastcgi_param REQUEST_METHOD $request_method;# l) K) E( R. }' V9 t- \
fastcgi_param CONTENT_LENGTH $content_length;) J! W, C8 ^, _- A0 y
fastcgi_param CONTENT_TYPE $content_type;: S6 n+ e1 p) u7 Z" ]4 p
fastcgi_pass unix:/var/run/ceph/ceph.radosgw.gateway.sock;5 e% \% p' a7 N# H# P4 }" `: N% u
}% ^6 `6 ?4 x- N* L
}, Z4 V& [% \1 E( U# _, |
6 f& X0 f3 x8 y Z1 S6 d
' _2 K) }! E% V0 @( l) Z注意: fastcgi_pass 指向的路径需要与ceph.conf中配置的路径一致。
# _4 s$ P# t) Q' v修改nginx启动用户
& o; Y3 ~) s9 O; f编辑/etc/nginx/nginx.conf文件,修改user为root: o- L7 W9 R( e3 i8 t/ |$ T; U
) {* R9 E! h) e" m+ r9 T# zuser root;( ~+ j. m9 x* s: z6 a7 |
% u% t& z4 N6 h8 `' y; V启动nginx
7 L7 f8 N5 D# V, i* R. p* a. P) [4 esystemctl start nginx
1 z& D/ R& x: K/ z2 M' C# Q* n. ^# e
cat /var/log/nginx/error.log
/ d" c5 X. X- I2020/11/03 15:19:09 [crit] 26789#0: *23 connect() to unix:/var/run/ceph/ceph.radosgw.gateway.fastcgi.sock failed (13: Permission denied) while connecting to upstream, client: 192.168.229.114, server: ceph01, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/ceph/ceph.radosgw.gateway.fastcgi.sock:", host: "ceph01"5 W, e# A* B5 ?. J
5 x( ?& ~. g! p% o$ Y
验证 R* v5 E& x$ E5 M: [
curl http://ceph01! [9 J9 ~( L3 h/ V/ p# t' |
<?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@ceph01 yum.repos.d]#
5 D d: M9 B" N; }2 ]+ m' O, [
5 _5 n' D% S$ u* c" L: x y9 n7 r6 Z或者浏览器输入rgw节点ip; r6 I6 Y5 r/ B s% `0 S
正确输出如下
. _ t/ C' f& Y7 ]$ p1 X' }8 Y0 I& C( h1 J9 ~( M
T9 k# m6 `- w" M' R2 U1 t报错* O2 |+ ~1 a6 n, s6 U7 m. `
配置nginx fastcgi rgw时候权限错误- E5 w8 @$ N+ i, \# f$ b; H& S
curl http://ceph011 H; B0 z, |: c0 t3 {4 [& }2 i- b
<html>7 y4 s" w9 D! m% Q& T$ l6 f/ m
<head><title>502 Bad Gateway</title></head>
) B8 f/ z/ H/ }" m$ }<body>% O+ U) a/ A, O4 c" i ^% Z
<center><h1>502 Bad Gateway</h1></center>; p) n+ W i0 @ c- k
<hr><center>nginx/1.16.1</center>
7 t9 l) r+ C1 E A& r$ q% P! D1 b. u</body>1 y( A% H5 c! ~# U" B6 x3 Y
</html>: H; D0 Q0 D9 |5 J
- X+ A- e( U/ i4 Z6 L
nginx错误日志; w+ e% J1 ? u% V% j
n# ^8 f- L7 I+ F
2020/11/03 15:19:09 [crit] 26789#0: *23 connect() to unix:/var/run/ceph/ceph.radosgw.gateway.fastcgi.sock failed (13: Permission denied) while connecting to upstream, client: 192.168.229.114, server: ceph01, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/ceph/ceph.radosgw.gateway.fastcgi.sock:", host: "ceph01"& M* N H: }4 u' P. X
. t3 A$ T9 c/ C4 q/ c# U解决
2 e" \# |$ y( T修改nginx启动用户
0 m2 l6 G7 p" v编辑/etc/nginx/nginx.conf文件,修改user为root
3 W+ F s! q [) P2 G5 m+ V/ I$ G2 H( ]# r. h' |
user root;
5 a+ E2 ]" Z0 q+ Y$ k' x9 _& g% I3 C6 M8 U3 J# v8 S: x! }6 U! p
. ]+ p W j( t! W+ {; ?% [重载nginx配置
! j, k5 `( a! V" G6 [$ X* ^# \" e+ u' U
nginx -s reload
: E, o/ a6 S/ Y: A: c& E! A7 z9 B, ?. b" j
apache fastcgi配置rgw(方法2复杂)报错
5 `: z; b7 V$ b) V3 Q. E" n0 pcurl http://ceph017 D! V1 A: Q' H# m% I
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
5 ^5 n6 H$ H9 o/ C; t' o% y<html><head>; ?3 x! ~# ?; O
<title>500 Internal Server Error</title>( q& M9 ^4 B* \6 A
</head><body>
& R0 f* Z# i; u' u<h1>Internal Server Error</h1>0 p' u8 D) I$ w/ I/ |
<p>The server encountered an internal error or
) R4 z+ d" }: H. q( M& Zmisconfiguration and was unable to complete3 s" H! @ `5 e* t; r
your request.</p>! M3 Z! D/ E3 t& x1 v% ]( A
<p>Please contact the server administrator at
& `# C- z4 N8 t9 z( H, \4 D1 X zhanghao@ceicloud.com to inform them of the time this error occurred,
/ e+ ]. ^ m) t' f and the actions you performed just before this error.</p>/ [7 p* }2 D/ e6 r3 S: ~
<p>More information about this error may be available
3 a9 V. ~9 B9 ~. U: Vin the server error log.</p>( B( R* w) |# @% ? v8 Q
</body></html>
2 _2 X( T. D3 w( a2 U' {; u1 o% K2 b9 M9 @+ v& C s9 E# i
9 I2 P+ O/ _* K0 O6 E[Tue Nov 03 15:31:06.955924 2020] [:error] [pid 28243] (13)Permission denied: [client 192.168.229.114:36712] FastCGI: failed to connect to server "/var/www/html/s3gw.fcgi": connect() failed
8 B9 E; s; s9 c' a2 g[Tue Nov 03 15:31:06.956045 2020] [:error] [pid 28243] [client 192.168.229.114:36712] FastCGI: incomplete headers (0 bytes) received from server "/var/www/html/s3gw.fcgi"
$ u7 z1 G) o: L) t# o; @6 r9 i" `6 n* i. ~: H( q
( t" q) l0 t7 G/ b, _: @
授权) p- n7 K# d) t9 Y$ d: j
; y$ n8 s: g) C+ hchmod 777 -R /var/run/ceph/2 Z& h( e+ c' O6 C6 n2 }% V
2 V; Y1 h( z! X# T p换了报错,但还是权限的问题! @3 e7 O/ \, {( U& [; b; G
4 s Y! h$ P7 F5 L
[Tue Nov 03 15:39:19.598498 2020] [:error] [pid 29128] (111)Connection refused: [client 192.168.229.114:36768] FastCGI: failed to connect to server "/var/www/html/s3gw.fcgi": connect() failed$ p: \+ `- |$ P `* |5 ^
[Tue Nov 03 15:39:19.598595 2020] [:error] [pid 29128] [client 192.168.229.114:36768] FastCGI: incomplete headers (0 bytes) received from server "/var/www/html/s3gw.fcgi"! v4 c6 q: j% z9 c8 D
, u }& }; m' J& B" O$ K5 T3 r: {& G2 p" V0 ^6 H
检查httpd的启动用户,发现启动用户不一致' Q3 h. T7 {1 V; O% ]# r$ p, U
4 M& C) t' C' i5 ~) \* k h7 S- |0 p7 P[root@ceph01 yum.repos.d]# ps -ef|grep httpd
+ l! A( E5 L1 Z/ oroot 29125 1 0 15:38 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
% L. c( ^/ W: sapache 29127 29125 0 15:38 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
$ I# Y% k7 P. n8 E9 Wapache 29128 29125 0 15:38 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
" E6 \/ d; P$ M; z, x1 Fapache 29129 29125 0 15:38 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
4 @4 d4 ^3 S0 n3 V9 P- o7 Uapache 29130 29125 0 15:38 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
: Y/ Q L3 E" S) _$ I4 {apache 29131 29125 0 15:38 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
7 l& X+ x3 b9 [3 Kroot 29414 12349 0 15:43 pts/3 00:00:00 grep --color=auto httpd' {, H+ o" R0 V. n
3 _9 h6 n$ x1 R& L( s4 F/ c4 r解决:
% |& r2 B8 R6 G/ ~0 J `2 U* ]- E用root用户启动nginx: o$ O0 l2 s5 }5 m" L3 E
具体方法百度,但不是只改配置文件User Group那么简单。
0 A! y. j# O! f& L: s
, ^7 {0 t; v5 \# h" L创建rados网关用户5 W |& B7 A; K, N% g/ j7 ~
要访问对象存储,需要为RADOS网关创建用户。这些用户的账户将由访问权限以及密钥标识,客户端可以使用这些账户来执行ceph对象存储操作。" Z. I8 x7 n" S+ y/ I
; R* [8 @5 K/ d, R
复制ceph密钥
% c a, P) \" x从monitor节点复制admin的密钥到rados的网关节点
$ o* i3 a/ Y+ X: v% c6 n' r& }. H& b
0 v6 [, T7 O% b. E5 i H5 p% _scp /etc/ceph/ceph.client.admin.keyring RADOS网关节点ip:/etc/ceph/
6 T. F% A- L4 |: _: I4 v
* w+ [7 N- N" G# }. W( `$ P7 S5 Z从rados网关节点执行命令确定集群可达
" M6 n5 I: L+ N: X ~6 L7 i8 qceph -s
+ S X0 a x6 u
! I. L5 j5 ^; y! ~创建rados网关用户
( c+ k; I2 n5 `这是会生成该用户的access_key和secret_key,这两个密钥用于访问ceph对象存储。" j/ {& A+ w2 ^1 C8 A
( L2 C1 F4 V$ J: m7 M$ [
radosgw-admin user create --uid=mona --display-name='Monika Singh' --email=mona@example.com
* a$ O5 D4 {3 I" ]" L8 C7 V输出8 u) R. x. u2 u6 ?& `6 q$ r
{ b" _2 x; Q$ u
"user_id": "mona",
+ k2 J: \2 [- V "display_name": "Monika Singh", j! g* [5 ~3 w; _
"email": "mona@example.com",
' x Q7 d( r8 N) F% C4 B0 a( G "suspended": 0,
) X5 b2 W, S7 S& e, C; e! Z5 E "max_buckets": 1000," x( r" r6 l( }3 a! i: a& E
"auid": 0,
0 |+ N- k) x" m, | "subusers": [],
( C9 m* D' E0 g7 P* e$ j "keys": [
# E7 n$ O4 K* Q& |/ t {( Q4 e$ L' w5 d8 [7 j) u; L
"user": "mona",
9 e6 ?7 f: d/ h0 e* s. E "access_key": "JDRTJS0766NOL89YXR8X",
5 y* O: {0 { V "secret_key": "Sg6QTkXMs79epxSUEvwFmjVNWgqvWI2Jkll4KiNQ"8 L( t1 a8 y( t" S0 \+ @4 W% x9 P
}
^& w; q, X% Y: a) p& j ],. |9 J$ g4 ~( ~8 c: u6 m
"swift_keys": [],% ?3 ^2 C* J5 L l8 Q, l8 u
"caps": [],
- e, X; U! w1 P% o* i ` "op_mask": "read, write, delete",
5 `" a8 {2 H1 M. Z. J+ ? "default_placement": "",
6 e0 j8 k4 ?1 s0 S$ D, I "placement_tags": []," }% n! l1 X. `' w( {6 C& W- `
"bucket_quota": {6 ]- E# D: V: c1 J a
"enabled": false,. r: t; `4 Q- |3 J
"max_size_kb": -1,. y$ W0 [8 [5 X! u8 }
"max_objects": -1
8 O2 l' D( w, I4 ? p$ }4 [ },& b) ]# f! Q- d. |4 ]
"user_quota": {% a0 }$ B; a; s9 D. U8 h/ M
"enabled": false,5 ~6 x' t0 N _5 b% C+ k
"max_size_kb": -1,
' C7 X- N$ {$ J( l "max_objects": -1
2 N) Y# [" `, h. `7 r! r },4 c) z/ C- ^- s& j9 C7 H% |3 g, _1 F
"temp_url_keys": []$ D" M+ o$ w8 w, w6 z a
}
% m0 X/ s* b! J
3 Y' K2 A' y; {2 o; I4 z |( @" ^说明:执行这条命令之后会自动创建存储池,创建的存储池如下
( f. n! F- K( o0 t; }, o" l! W
5 T/ o5 @6 n) K$ g0 F# S$ K* _- dceph osd pool ls7 p2 r0 S( V k6 w) N+ m" a" m4 f
.rgw.root2 f" S( ^3 \* U- J! J6 b) y
default.rgw.control3 |2 a' }3 V/ n* ?' N) Q" D! J- n
default.rgw.data.root4 Z0 A) d4 W7 @6 F* s
default.rgw.gc
" a" T+ F3 ~ ]0 n+ q$ `0 k5 [) Vdefault.rgw.log
: Z! i- E/ \3 L2 ~5 u Zdefault.rgw.users.uid) {3 R4 c1 X8 e, x) i* r
default.rgw.users.email9 c2 W# U( {& \) t* u
default.rgw.users.keys/ x0 X- W9 [9 Q* k5 x
) ?( v: R. k- t$ ?, \8 e" M4 v创建一个mano的子用户用于swift访问
2 x; j4 [" d" hradosgw-admin subuser create --uid=mona --subuser=mona:swift --access=full --secret=secretkey --key-type=swift9 g. c1 o, D5 r( ]2 T s2 Q
{
( [3 O3 l7 x6 w2 m4 s' Y "user_id": "mona",# Y9 r8 d, V5 M" B6 H; o- F
"display_name": "Monika Singh",
" B m: D" |& x: x! M- ?( A "email": "mona@example.com",' y+ x" M/ Z3 j- ^& u8 {8 y
"suspended": 0,
0 a5 m! }" Q1 j k4 [ "max_buckets": 1000,
( _* g( i0 G8 E" d "auid": 0,
# |/ t6 f( M4 F, y" I "subusers": [
, C+ S5 G7 d; E: Q! s3 Y {2 X& ]8 I* \) l" ^4 W
"id": "mona:swift",
# Q# y/ d$ o" _0 f; }- L5 ^ l "permissions": "full-control"
1 s' p, v6 h I) x* c3 W' F0 d6 G' C }
, T8 b p9 ] d ],2 b( b( j1 _6 U7 U9 A: G: J6 G
"keys": [
% ~& q( }% o9 {/ C; U {0 x5 [( ?: r- z/ p0 |7 U3 i# B
"user": "mona",4 ?" j* v4 W2 X: h1 e
"access_key": "JDRTJS0766NOL89YXR8X",
- H [, Q F- P "secret_key": "Sg6QTkXMs79epxSUEvwFmjVNWgqvWI2Jkll4KiNQ"6 G# `8 I) L% f3 }3 V
}
' A& D4 M' @( X- H; i ],
: R! O+ p1 @$ R! J5 `" ^- k "swift_keys": [( V: `" p& }( r" X# V
{. Z3 L' P1 _. a# E3 Y' ~
"user": "mona:swift",# J7 Q! h U0 T- |
"secret_key": "secretkey"6 v: f5 Z, |& N: ~0 t; k
}) B- t+ w+ |4 `5 W5 k' O
],3 r, ?4 s7 j7 g# `8 o
"caps": [
, W" z6 G6 c: Q$ w: i {: x9 [3 i( [* K1 K- o% T4 H2 T$ a
"type": "buckets",
' a ?' ^9 _. q- D2 ] "perm": "*"
0 {( G* n5 i" W5 ` },/ N1 x" @$ i8 \$ \
{
) F0 q. u4 ]* E; y' c "type": "metadata",2 T) F, ~. H0 O4 v
"perm": "*"
: w$ B' r3 u7 `$ O },
0 J9 U- ]1 F0 q& \ {5 m1 [( {( O1 d9 ~' T6 f* w
"type": "users",
\' m7 V4 l& e( i6 N) l9 w+ } "perm": "*"; t: {2 H9 [$ y% i1 \
},
- z2 _9 N4 Z$ |* ~; _' F {7 J+ e- _6 w9 C
"type": "zone",
8 ^4 V$ ]& _; ~ "perm": "*"
$ r1 ]7 s. X2 i a+ {3 E }; o( U, _& ?7 ~* W
],5 [% U) x3 N. n9 A, X
"op_mask": "read, write, delete",1 x7 \) H$ @2 |: w/ |1 J
"default_placement": "",+ D; U8 ~. P! @' [8 G. }
"placement_tags": [],
1 [4 v7 k0 C( g2 X# k% V "bucket_quota": {
; _( V) e* K' R; L2 [/ e "enabled": false,4 a7 y" l1 y+ {/ I" s
"max_size_kb": -1,( B+ ^* Q6 |7 z0 Y
"max_objects": -1
$ O* O! s {1 N8 E: N7 D },
* g8 Y4 V/ J" R' z% {: k "user_quota": {$ _" _: ]9 U/ h! r$ P
"enabled": false,
$ A/ B8 Y' p L& L7 n "max_size_kb": -1,
( K8 [4 B8 ~. b: j. P2 L "max_objects": -15 e- h8 g7 t1 h# _+ |( P$ }' J) o3 a
},* h ?- n4 ?' @
"temp_url_keys": []
' c9 P- s" [; a0 z# _& q}
5 v! v- Q5 M* `9 V$ e* u
8 g2 t- Q5 M3 S( w为访问用户增加必要的能力( m- u" a& s2 D2 G8 K
radosgw-admin caps add --uid=mona --caps='zone=*'* \4 z- ]& b+ o* Z
输出
% T, w" | m2 S9 O+ t; v6 Z{
0 p, `- | w( s0 A* t% N "user_id": "mona",
% }2 c: s; P) l: B "display_name": "Monika Singh",4 i1 ^+ m2 g z- [$ x. F/ _
"email": "mona@example.com",: f: Y. _7 g3 B9 S6 R
"suspended": 0,5 F) N8 g$ m W: a d% H
"max_buckets": 1000,2 Y& Y8 ^# P- Y; |. {+ f, \0 h$ U
"auid": 0,
6 r- g; V7 }0 d7 u! [7 [ "subusers": []," g5 m9 j: o0 K6 Q. W' o" z
"keys": [' G* X' z; c# D
{
8 {; B" N" @* S! o `0 ? "user": "mona",( }. m6 c# s( c$ h
"access_key": "JDRTJS0766NOL89YXR8X",
' k) |, R5 a# H2 m "secret_key": "Sg6QTkXMs79epxSUEvwFmjVNWgqvWI2Jkll4KiNQ"8 L* I8 w o2 K1 ]0 N3 D( V N
}
f! B. @, n" d9 b. E8 A& Q ],
6 s% R2 m7 F/ Z# A "swift_keys": [],
) p' T' ]( Z7 W( A( w6 q "caps": [
( w( ]! q2 W2 D" R {
0 m: f$ w0 ^. _$ n7 k "type": "zone",* g' M+ }9 y# J* ~; a/ q
"perm": "*"
5 m3 j9 X7 X7 O* I3 N }7 y& p" x- I6 C* J; J
],
, V ]$ Q3 u0 b! j4 I8 S "op_mask": "read, write, delete",( V5 \) M- A7 U9 s1 t
"default_placement": "", ~& p: a2 H. y" h' q G+ h/ R
"placement_tags": [],
5 {( Y* C" H; G4 a8 L- {; w "bucket_quota": {; B, w. e" @5 o8 F
"enabled": false,' S1 a% w* k9 w$ @8 V6 c' @ v8 w
"max_size_kb": -1,3 e% v( ?9 y' d! N
"max_objects": -10 s: ]$ C8 J3 r4 }
},0 v$ Y( K3 d- b. Y, Q2 Q8 L3 P
"user_quota": {0 W5 j1 M }+ U0 a6 p
"enabled": false,, i% M [: U& J; G0 Q! i
"max_size_kb": -1,
! Q+ a8 d4 N' \0 v "max_objects": -17 @% ]# V2 D6 s- ^/ E
},, S+ A- ?" U; O( z4 d: G
"temp_url_keys": []
! N& P7 w, |) t' m5 y. v) k# t}
# f1 X, Y$ C4 V) ?. r
P! _7 J& ]% [* }% y& `2 Y' M& D5 @# M: [
访问对象存储(IP方式访问)3 P; ]( I: Z, d% ^ x: g' G
S3 API访问" V2 ?# P9 n% y! W; J
客户端安装s3cmd
# r$ Y6 D9 ^& A2 s% ]) |4 eyum -y install s3cmd4 l3 ^" }7 z8 e3 E+ c
?- A6 c% z! w
生成s3.cfg配置文件
/ E* b- H3 O4 A- us3cmd --configure. [9 v9 H1 i( D. v7 `
* n* u0 R/ [; S5 h7 K7 x+ G
Enter new values or accept defaults in brackets with Enter.: Z \4 X8 U$ B. ]' Z
Refer to user manual for detailed description of all options.6 q+ \) g" l2 ^7 Q. o. G9 y
A" h/ s1 `, @8 }1 m% DAccess key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.7 h3 K, i/ t3 C3 V, t3 D8 X
Access Key: 1F0D2GRLPRU9ENSB689J # 粘贴服务端生成的Access Key
; X( Z0 F$ [, c# _5 w; n; zSecret Key: M5AmCuh8XcWnKXvBUJ8orE90z6508YGDtbvIA0h4 # 粘贴服务端生成的Secret Key6 v% R) s- ]! ^+ @) o# ^) @1 X9 `
Default Region [US]: # 直接回车即可
" g$ l' i2 f/ D" } o/ q: ~/ Y9 ], i/ d: b+ h% b
Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3.( A7 F' _$ o: S( \; c
S3 Endpoint [s3.amazonaws.com]: 192.168.229.114 # 输入对象存储的IP地址# T; a( ?: ?9 Z6 n2 f7 D7 E% ^* Q0 w7 P
% H5 N' T4 i- |0 m" H! S
Use "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars can be used$ U* H: r1 G3 W) x
if the target S3 system supports dns based buckets.
K; C8 a$ @) R6 xDNS-style bucket+hostname:port template for accessing a bucket [%(bucket)s.s3.amazonaws.com]: %(bucket).192.168.229.114 # 输入对象存储的bucket地址
! u0 B4 w* t6 Z) D7 J) k" w. F, h# F/ B j- {: K
Encryption password is used to protect your files from reading
8 Y( {* k: \$ |, y7 I7 {7 C0 hby unauthorized persons while in transfer to S3- ^ j4 P( ^3 b9 R
Encryption password: # 空密码回车
9 d K6 I7 g3 \, F' ZPath to GPG program [/usr/bin/gpg]: # 回车: z$ S/ s" U$ t4 {
8 a% p6 ]2 i) V% ^* HWhen using secure HTTPS protocol all communication with Amazon S34 t4 e$ D$ J# q: ~ ]3 ]
servers is protected from 3rd party eavesdropping. This method is
- n$ H% w8 {, K8 L Pslower than plain HTTP, and can only be proxied with Python 2.7 or newer2 O- N( G- ?) I0 C
Use HTTPS protocol [Yes]: No # 是否使用https,选no9 `( D D* [7 M! p% _4 E6 j
( E( e9 Q) f. r {/ c
On some networks all internet access must go through a HTTP proxy.
: Q7 o) n" Y8 L3 qTry setting it here if you can't connect to S3 directly
# @6 x' |6 Y) B% Y; p$ s% Y5 n QHTTP Proxy server name: # 留空回车; g$ t: @% E' x
1 u0 `6 S \% R+ \# f" R
New settings:
, z2 `9 P, ^; s- x& P Access Key: 1F0D2GRLPRU9ENSB689J& R: f, x4 W% @5 @
Secret Key: M5AmCuh8XcWnKXvBUJ8orE90z6508YGDtbvIA0h4
8 f5 e3 ~( Q# f0 R6 m, a Default Region: US
7 v: B4 y2 C9 c: n$ |6 c) w4 W! i+ c6 Y S3 Endpoint: 192.168.229.1148 H- T, f; K- B8 }5 }# O( Z
DNS-style bucket+hostname:port template for accessing a bucket: %(bucket).192.168.229.114" I: }: n8 I% a1 i4 B: A6 R
Encryption password:
8 h6 R/ ], E. c1 H" J R# r Path to GPG program: /usr/bin/gpg
4 b- C/ v: L. O Use HTTPS protocol: False
- N- v. C/ W2 b. d0 j! g HTTP Proxy server name: + R$ H4 g+ B. ]5 i
HTTP Proxy server port: 0, F+ Q5 C5 [' d H) }1 G& p. H
* o# ], H, W* `7 m% @7 E
Test access with supplied credentials? [Y/n] n #输入n. h% Y0 b) ]- S
8 X$ q. ]# \& F% aSave settings? [y/N] y # y 要保存配置文件5 ^1 j4 W0 Z D, `
Configuration saved to '/root/.s3cfg' # 最后配置文件保存的位置/root.s3cfg
# B% e. l; O3 [+ M/ r/ i
7 ]9 j; y, w) a) a$ {$ V: {7 B: ^- J; w4 \) h& L, Y t8 I
生成的s3.cfg配置文件内容如下
! A i) o" m; c3 d+ u* ]! f, Xcat /root/.s3cfg l7 `+ d9 n* `2 O# t
[default]$ F2 \' U7 G; V% d
access_key = 1F0D2GRLPRU9ENSB689J
* ?; g0 ^* Z# d6 l) C% u/ E+ }5 h3 Yaccess_token =
: R C8 J3 Q' m; J( U D- c. n5 ]add_encoding_exts = 4 j8 i( ?' Q" b- T" F: U
add_headers = [3 r* f: `3 n U
bucket_location = US* d B" d5 K/ N" F( }. `
ca_certs_file =
1 u7 k) D8 Z+ Ccache_file =
( c ^' V& t; n. w: s+ u' ncheck_ssl_certificate = True
' e3 F6 m8 d) r$ lcheck_ssl_hostname = True ^8 S. A% F3 V2 d$ e$ U# Q; Y7 @
cloudfront_host = cloudfront.amazonaws.com
7 ~- a+ T; d1 X& W1 iconnection_pooling = True9 ]8 v$ {0 l' G, [0 W
content_disposition = / E( p5 z( j2 y; ~& O0 g
content_type = ) b' f6 ]; Y+ y4 e* W& @/ i
default_mime_type = binary/octet-stream
2 S- K$ O* l6 Q$ k4 x/ i& W, zdelay_updates = False5 o0 K: m8 r1 k3 b+ K
delete_after = False
% P3 U' X& S( X2 }9 r5 i8 e2 rdelete_after_fetch = False3 Q* Q! L+ a! G
delete_removed = False D' j5 J! M+ G3 k7 P: [; w
dry_run = False
2 l8 y$ N( L, L: Uenable_multipart = True6 M8 w+ w- g6 h! A: F, T4 @8 P& b
encrypt = False
! m! m1 h4 |1 mexpiry_date =
7 u6 f6 A5 X; I9 Y7 e. Rexpiry_days =
) W$ q8 n4 N6 }expiry_prefix =
4 @$ E/ ~: u% Y# q5 wfollow_symlinks = False
* _) y4 g T' tforce = False# I! j" P! i$ J
get_continue = False
, l1 L! ^9 w2 X2 F8 L3 u% ~gpg_command = /usr/bin/gpg' s* T* I, B4 W; J
gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s% ?! K7 E$ Y/ g8 y
gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
+ x0 V6 l; L% x6 t# K$ V. Ugpg_passphrase = ( T3 n" ^" m9 q: y6 H" g9 z
guess_mime_type = True
% N M9 K: e$ A) A/ q0 N' Q% }host_base = 192.168.229.1140 B* n1 } z0 G8 Z* v# P2 V2 {
host_bucket = %(bucket).192.168.229.114
3 u- s4 a& h& ohuman_readable_sizes = False' `' o/ V" M Y2 v
invalidate_default_index_on_cf = False
2 [' `* d- R+ F! `& b( rinvalidate_default_index_root_on_cf = True
2 J: ?# G1 Q i4 finvalidate_on_cf = False2 |$ D7 F; O$ `5 Y1 _ K& [
kms_key = " V& a+ @4 p- {! T
limit = -1
6 j4 S6 y0 u" |$ Mlimitrate = 0
* A! R6 X" o: m% W' D, I$ Mlist_md5 = False
7 n2 f" W9 @) T3 s' h7 D2 P/ r& y3 Plog_target_prefix = 7 `% n8 d4 v$ c4 V X' S
long_listing = False' l: p7 r) u0 Y
max_delete = -1, n1 X+ E7 f$ h4 q
mime_type =
' X* h7 q+ e- O: Smultipart_chunk_size_mb = 15
, h1 e* h& l( r n3 ?. fmultipart_max_chunks = 10000- Q; t( ?2 i/ s$ n
preserve_attrs = True
, W8 w( p- B/ Hprogress_meter = True
1 X% d0 Q0 a' zproxy_host = 5 T5 x) `0 V. H/ W6 p* R6 m
proxy_port = 0# `! R$ E4 p/ ^/ @
public_url_use_https = False
& \$ E- r; C: |6 `put_continue = False
' o B* K- q! Q% B$ C) @ Krecursive = False
) i% k& p% G. @0 R, nrecv_chunk = 65536
; I1 K, c# e4 O( Q8 [8 T6 ereduced_redundancy = False C: M" B/ E) M$ e) r- U/ k
requester_pays = False
. J4 M4 w6 Y3 ^restore_days = 1
- g$ E* n# W$ g5 M2 {% o% Brestore_priority = Standard
4 a& r% G. H+ @9 B3 V: usecret_key = M5AmCuh8XcWnKXvBUJ8orE90z6508YGDtbvIA0h4
- i5 C2 V1 {2 Usend_chunk = 65536
1 r! v/ o# j5 A- T* b$ [server_side_encryption = False8 r" _! T0 p& R
signature_v2 = False' C. X" ?+ K$ |
signurl_use_https = False
: ?! ^7 A, U$ ^simpledb_host = sdb.amazonaws.com7 j; t( E8 H, |5 j* W
skip_existing = False
' c& Y( U o+ K! r y- u* T6 {7 w: Ksocket_timeout = 300
6 X- a+ I9 w6 K5 i+ u% u" Sstats = False: ?3 ^; v( M1 x$ D! _" E6 S
stop_on_error = False( Q* M" e9 E" ^. ^5 }- _
storage_class =
K1 s* \4 p5 R) t8 o9 _- z: rthrottle_max = 1003 [, O1 s& c+ x1 e
upload_id =
' b1 l. u- K* h6 ` ^( Z, Durlencoding_mode = normal& y. ^3 ~% x. v( a6 P: c. {, @, c G
use_http_expect = False
$ N8 I. |( v I, m: ~: Nuse_https = False
3 V6 z" v; A3 B$ i4 B& W% y! Duse_mime_magic = True
/ |' h7 V7 H: o- }% i7 nverbosity = WARNING: V# K& x& h- v8 y' r' Y m
website_endpoint = http://%(bucket)s.s3-website-%(location)s.amazonaws.com/
9 V* [5 E! U% ^& R3 I* B% Lwebsite_error =
6 u$ N7 |) S. J1 swebsite_index = index.html7 M W8 ?$ [: w* u ?2 |& B
0 _( k" D4 s/ Y& H) J- K创建桶' G8 v, ?2 \6 _
s3cmd mb s3://buck1
$ R) V) M* H3 c. e+ B4 M输出
* J2 k5 T( R$ M3 o- zBucket 's3://buck1/' created' h* `- e) f1 M( x, J
: J5 D( q* g- R0 Y% ^s3cmd mb s3://my-bucket# O2 D4 f* P6 f7 p$ o5 ]3 @
输出
: E7 S K! K$ U" q" M; zBucket 's3://my-bucket/' created
* M5 ^4 H4 W0 h. S
2 B% K. N2 l. ~1 T3 ^8 V, ?2 i) h3 U; f* r5 _3 W2 n; d
查看桶
- V5 n$ P8 ^. Q5 o8 bs3cmd ls! @1 C7 I; h' j4 e
输出8 }$ o5 `; x( H4 q6 [
2020-11-04 02:43 s3://buck1
; X! ]5 L$ i; O3 e2020-11-04 02:30 s3://my-bucket
/ o3 w9 Y5 Y3 `
) n: \# Z0 w" {往桶中传数据
- D% i5 ~, l; W! As3cmd put /etc/hosts s3://buck1
' j8 @0 T( u1 x% u输出" b D. P& c& A2 X1 I. O
upload: '/etc/hosts' -> 's3://buck1/hosts' [1 of 1]
$ p0 {! r' j1 ?2 X8 d2 x 304 of 304 100% in 3s 92.11 B/s done9 E) Z# o+ U8 z V( A( S" k" [
7 t4 D* _7 a$ ^swift访问4 d3 H f9 B n" p* G9 q# V6 j
客户端安装swift客户端
* u* r/ y) f B% e6 Z- C- `yum -y install python-setuptools
0 v$ n0 P. g; O% ?8 Uyum -y install python-pip
# D u. b& W# [; V0 h3 dpip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple2 k- J4 B- p1 s
pip install --upgrade setuptools -i https://mirrors.aliyun.com/pypi/simple% P, ]0 A" a1 Y+ P% c/ [# I0 O9 K
pip install python-swiftclient -i https://mirrors.aliyun.com/pypi/simple( i) u* ~- |8 M8 Q f
b9 S3 \3 m* `0 y% P+ m4 ^swift创建并查看桶
' B0 R. a# f& q$ |6 Xswift -V 1.0 -A http://192.168.229.114/auth -U mona:swift -K secretkey post swift-buck
' D2 p# r2 S0 u" A. M8 Oswift -V 1.0 -A http://192.168.229.114/auth -U mona:swift -K secretkey list
$ _, M5 B# M1 Q/ l0 r输出# Z( H0 v' ]7 B0 Y( x! Q
buck1
3 }! o7 q/ p% W/ S, q$ h7 gmy-bucket+ ^% ~" K, `/ ?2 v$ t9 g6 d' s1 J
swift-buck
5 ?1 G& K/ Y1 k/ L2 @0 b; i9 [8 v3 y2 }* [/ r7 W
访问对象存储(DNS方式访问)5 |# @# C, n% e/ J: f' E
ceph对象存储支持S3和swift兼容的API。为了利用ceph对象存储的能力,我们需要配置S3或者swift接口。接下来我们依次为这两种接口做一个基本配置。高级配置请查阅它们各自的文档。. J# h' k0 V' o9 ]5 T. r
2 ]: U6 E% b/ W) R& t% rS3 API访问$ |: w# u+ Y1 M3 Y4 ?0 B p: C/ K
Amazon的简单存储服务(S3)通过Web接口(例如REST)为用户提供存储服务。ceph通过RESTful API兼容S3。S3客户端应用程序能够通过access和密钥来访问ceph对象存储。下面我们来配置它,除非特别指明,否则以下命令都在ceph-rgw节点上执行。
( L8 G) g6 [) O0 Xradosgw用户应该有足够的能力来处理S3请求。为radosgw用户(ID为mona)增加必要的能力。
) \0 e: ^! `8 d4 ^, W3 }
6 }& a# R" x% P1 |) `安装dns服务
1 _8 J7 z8 j) zyum -y install bind* -y0 }; J. v: K1 N" v, d2 M
* o$ A! O/ o) p& x9 C3 e: C
配置dns服务' `, a' q9 ~. R# J4 t
cat /etc/named.conf
" _# F( [! s- A: @4 Q3 }options {
1 L8 U5 O, f' S l0 o+ t listen-on port 53 { 127.0.0.1;192.168.229.114; };3 E# q& i, ]% D; f% r9 b/ N& Y! [
listen-on-v6 port 53 { ::1; };
7 x2 M$ z) p! j1 a0 L8 }3 ]# E directory "/var/named";+ R4 r4 X- x9 I3 h1 i9 e* q
dump-file "/var/named/data/cache_dump.db";
, @, S' J5 t1 X statistics-file "/var/named/data/named_stats.txt";
6 P6 A4 b$ _1 \4 Q: d ~ memstatistics-file "/var/named/data/named_mem_stats.txt";$ Q& u# C) p* M9 R6 v; C
recursing-file "/var/named/data/named.recursing";
$ J$ z% N2 n @3 m X4 [ secroots-file "/var/named/data/named.secroots";
+ R! S. n; l, \; j0 q i' b allow-query { localhost;192.168.0.0/16; };
u1 M7 G1 Y" Y- [9 C
9 }0 D6 A/ K* v" a7 e7 e7 T' qzone "objectstore.com" IN {
0 r4 z5 j* Z3 T/ f! V' ^% f9 ?) x) ~4 v type master;) `' C7 B# L, O/ x; \
file "db.objectstore.com";
3 c/ j' w2 G& r3 m, d# [" m allow-update {none;};$ ?) f* ^, E+ g. O' z
};$ N0 I% R& {% ?
& e% G, d8 p8 G9 f4 S% V; T说明:ip地址根据实际情况更改。- n5 |6 g3 N( Q& U* o0 T2 R
( u& c1 w) n% r- q" b$ } o: O5 P
cat >/var/named/db.objectstore.com <<EOF% S6 ?" M6 }3 f; ~ Y
@ 86400 IN SOA objectstore.com. root.objectstore.com. (% P* A5 b9 x% L. o
20091028 ; serial yyyy-mm-dd
# w* g( w; t% r$ x# e) ? 10800 ; serial every 15 min1 f& q: M4 R& h4 f7 @1 o
3600 ; serial every hour8 S5 \/ p6 t, F" @5 p: ?7 [0 j
3600000 ; expire after 1 month +5 a6 M& r! }/ B* I& R
86400) ; min ttl of 1 day
; h6 |1 \- a9 Z0 v, a@ 86400 IN NS objectstore.com.( W, `7 O+ a- E2 w& n0 K8 C+ x
@ 86400 IN A 192.168.229.114& P9 ?6 R1 {0 {- Y- U7 j* @
* 86400 IN CNAME @
9 D# V8 t2 V- fEOF, A; h$ _5 N; o
$ j9 B' C' [& {) o0 U编辑/etc/resolv.conf文件% v w0 \# `; y: c+ K& o
cat /etc/resolv.conf
" l6 o+ m/ }/ l2 k' Y# Generated by NetworkManager- [/ u. O' _0 h
nameserver 114.114.114.114' I t- ?* Y' k
search objectstore.com
* w8 b% [, v. ~9 h$ ]) l& enameserver 192.168.229.1147 M) O4 s5 J2 k, `
# |2 G" z- e, F
" r( u% {- Z+ `( {
检查配置
. A8 s, r( V, h4 V0 d& c# Y, S2 Mnamed-checkconf /etc/named.conf
2 d; I }+ L+ \& {5 z1
+ C# |0 P1 k4 G5 rnamed-checkzone objectstore.com /var/named/db.objectstore.com
( S2 S' ~9 R0 E正确输出
+ p4 o1 h E+ d# @% z' _& W) V3 @zone objectstore.com/IN: loaded serial 20091028" L3 p; V% W9 v9 n9 _, F4 n+ q
OK: V2 l* N; g: ~3 K2 x8 m/ ?
7 k3 i9 C8 Y0 s( K启动dns服务
' m. B" o4 t& Z, P* H7 j. rsystemctl start named3 z: w" K* ]6 m0 |5 j
, f% ]! _# W+ ]2 C b+ D6 D测试dns配置% j: _. n3 w+ O# ], d+ [2 ~
dig ceph01.objectstore.com* \6 V5 M9 V4 D# y6 z
nslookup ceph01.objectstore.com. E; m# P+ x: ~) \0 Q6 C7 O5 j
% [3 s7 V( s9 }$ I! X/ r* ^/ t* z" r, D' F9 o: F2 H5 ]
在客户端的/etc/resolv.conf文件增加配置9 g6 k( z; k% J6 S/ P& K8 ]
cat /etc/resolv.conf8 N$ Y B; ~4 W; Q2 M. h3 n
# Generated by NetworkManager
& w8 r- X. e( G. f9 R4 Snameserver 114.114.114.114
5 D5 m* u. L0 Asearch objectstore.com
F ^6 x/ q1 c* r' Q& Ynameserver 192.168.229.114
. W% b, Y# L! ^; `
" d$ s+ `: P2 U+ j2 B测试客户端的dns配置# @0 `! ?# }8 e1 } `( g9 o: y4 ]
yum install bind-utils* Y8 m; l5 e" y$ f
dig ceph01.objectstore.com. F6 ]9 K) K3 O% y8 O" B) ]
nslookup ceph01.objectstore.com
) ?6 w( f1 x- `) P% W: P% g& ~% m' F
4 d$ `# `* V: e0 I& m O客户端安装s3cmd
0 `2 T1 h! j7 |; D6 O4 z# n; gyum -y install s3cmd4 W2 ]. s' H+ G9 R- O L
; b# u* m* {, p5 ~/ \: Q9 B生成s3.cfg配置文件
$ D8 }6 C8 t& D2 Qs3cmd --configure" Q; z$ c9 N7 x! t9 X8 O
0 c& Y5 B( ]2 r8 u LEnter new values or accept defaults in brackets with Enter.
+ a) c; j: y4 L! ^/ j' ^/ lRefer to user manual for detailed description of all options.
8 l9 q7 ?4 {0 `0 e! W( m6 C- G. t; P. [. _+ L p5 i
Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.2 _9 z9 `' t. I' V- f; T; l
Access Key: 1F0D2GRLPRU9ENSB689J # 粘贴服务端生成的Access Key
' P& n. b6 [+ E! [; d/ f: j: gSecret Key: M5AmCuh8XcWnKXvBUJ8orE90z6508YGDtbvIA0h4 # 粘贴服务端生成的Secret Key
' n% Y H7 @: r L/ e2 `Default Region [US]: # 直接回车即可7 P6 x) @" g. u1 G2 H7 P
$ I3 z" F5 Y& _, A0 rUse "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3. N' l3 h0 I/ s( g
S3 Endpoint [s3.amazonaws.com]: ceph01.objectstore.com # 输入对象存储的域名: t+ Q0 n% {+ m$ [
4 H5 X& M4 y @
Use "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars can be used9 X4 T) V% u' a+ B' T9 h1 v* _# h, z2 f
if the target S3 system supports dns based buckets.
0 e7 X) c7 x- \" o' V. uDNS-style bucket+hostname:port template for accessing a bucket [%(bucket)s.s3.amazonaws.com]: %(bucket).ceph01.objectstore.com # 输入对象存储的bucket地址
4 o- _$ c. P! v1 [3 _
2 C1 E+ Y: l5 D2 P' @! DEncryption password is used to protect your files from reading; T, `! U, _- D/ p# x- D( z1 n
by unauthorized persons while in transfer to S3
4 }5 w2 M$ E" v' K5 b! T' `! x/ ]Encryption password: # 空密码回车$ Y- e- a! {2 d1 g
Path to GPG program [/usr/bin/gpg]: #回车6 g5 e9 h3 o- u* x
5 M. a; s, D4 o, A: C- _ R, V
When using secure HTTPS protocol all communication with Amazon S3
2 [6 K) x$ Z/ X4 Iservers is protected from 3rd party eavesdropping. This method is3 v( ~0 R. V' q- |
slower than plain HTTP, and can only be proxied with Python 2.7 or newer
$ O. C. S; X Q8 c2 {) }( eUse HTTPS protocol [Yes]: No #输入No( d3 w5 \% k" @
6 j+ v+ P, }8 B: z( H
On some networks all internet access must go through a HTTP proxy.; P# A. m2 f# ^" l
Try setting it here if you can't connect to S3 directly
* o" Y2 g8 o3 X bHTTP Proxy server name: #回车+ w8 o/ l7 ~! w. t$ b
* M1 B9 ~0 ]* N$ R+ l
New settings:/ G3 t6 S9 t8 A( F$ o) v1 F! x
Access Key: 1F0D2GRLPRU9ENSB689J
3 j# A/ I& O" N z- E6 S Secret Key: M5AmCuh8XcWnKXvBUJ8orE90z6508YGDtbvIA0h4. Y: N: f& s% z4 h. _0 V! y; ~* k& m
Default Region: US3 `( O! ^/ x* x" r, }$ x& g
S3 Endpoint: ceph01.objectstore.com
$ z: o& h: F7 |/ L7 x" y DNS-style bucket+hostname:port template for accessing a bucket: %(bucket).ceph01.objectstore.com
( U8 H* ]* |5 x% i; G `# I( j Encryption password:
1 Q9 e8 f0 n/ x, y Path to GPG program: /usr/bin/gpg
9 i+ h* c: H6 b& {- p Use HTTPS protocol: False
8 h9 k$ a ], _5 O. k HTTP Proxy server name:
. e! i( @2 m$ _5 D HTTP Proxy server port: 0
7 R2 R ?/ i3 Q$ `; d0 g4 P" ]5 Z: z/ N- ^: S& p4 E' Y" n' u& I- X
Test access with supplied credentials? [Y/n] n #输入n
8 S- [/ z& @4 [, \8 q3 s6 A7 L+ [0 ^4 E# ]: D
Save settings? [y/N] y #输入y
( G: q m! s% C* z' HConfiguration saved to '/root/.s3cfg' # 最后配置文件保存的位置/root.s3cfg
7 I8 G" p2 y+ T2 c8 Y& J1 {/ w5 J; s6 J
+ U q/ L! Z( ~2 |. V" z
生成的s3.cfg配置文件内容如下
1 y% q# V8 x6 g- D0 `8 o4 tcat /root/.s3cfg ' q( `) A; y! Y% J- J
[default]
+ m; R5 W& C5 h* ]4 Q* s% _* Qaccess_key = 1F0D2GRLPRU9ENSB689J
{$ e9 ~8 b0 _1 z: ]: jaccess_token = ( `$ s% n8 F% S( y" M8 U
add_encoding_exts = & w) U8 D; d2 q1 s
add_headers =
# m, i u0 B* r9 j' d, Rbucket_location = US. g) S- G; E, v* s# n& o0 z
ca_certs_file = O: I% p; W1 v5 T& L
cache_file = $ s! p/ I& A9 @
check_ssl_certificate = True7 {4 l2 T& T* X2 v
check_ssl_hostname = True0 J9 [+ y" C: y4 `7 R% m. H6 r
cloudfront_host = cloudfront.amazonaws.com
/ y. d: I9 [5 {6 o3 Hconnection_pooling = True5 }+ V0 U! s0 U- W7 Y6 g, I
content_disposition =
2 h; k6 H1 D" z# k6 V) Wcontent_type = # h1 i& H8 o# B X
default_mime_type = binary/octet-stream
3 N% s+ l9 ]4 i' W- B& _delay_updates = False4 \* M& P: t9 S% w
delete_after = False
7 S) B4 k3 i' T0 y! ]9 p" zdelete_after_fetch = False
4 j9 U* e7 `9 ]4 n% Odelete_removed = False2 B( y5 H" m8 a5 N# v+ h, L j
dry_run = False4 r% X& u9 @( A( K
enable_multipart = True) E8 x; T+ [# R! P; I
encrypt = False
8 a" {5 s! O3 P2 oexpiry_date = ! J- f# H. R h/ N7 s' j5 p
expiry_days = 7 K8 O4 p5 [2 E) f( ]8 @+ F2 q# O
expiry_prefix = 5 w1 w; Q/ {$ E' H
follow_symlinks = False; A4 n8 g0 t) U U) c/ N1 P
force = False
& V0 V4 d. _5 x! j& W$ Qget_continue = False6 C% A8 B; x- A% G
gpg_command = /usr/bin/gpg! Q$ [2 f; V" O% x; \" E7 \
gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s1 x/ W4 n' \7 \& J# b# w
gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
8 v) N g. G8 k4 _8 Kgpg_passphrase =
+ Y; v' f3 l9 R1 Vguess_mime_type = True3 z, J# F5 |; u% ]
host_base = ceph01.objectstore.com
; E7 d/ `" E* a M" rhost_bucket = %(bucket).ceph01.objectstore.com
. |1 N& ^) w+ G* x6 K6 q# Ohuman_readable_sizes = False
* Q: b. N1 c* [+ Hinvalidate_default_index_on_cf = False+ ?( p2 [/ C) c _# j/ y) q
invalidate_default_index_root_on_cf = True
8 G' Q8 }% I6 u- y* Y: i( L2 Q finvalidate_on_cf = False
, ~* c# [) H6 ^. d( zkms_key = " [9 g E. w a% V6 R) F
limit = -1 V" Q; d) h% z n( ~6 C) _
limitrate = 0
$ H) W6 X$ `; @1 e8 |list_md5 = False4 u/ U, k, n" Z1 }; i6 r9 b
log_target_prefix =
9 a& u4 D3 P3 n& q9 w$ Y5 [long_listing = False j% x: s2 Q0 V2 ?) m2 Y- u
max_delete = -1( ]$ S! k' q; t; V' K$ @/ g. R- o9 N) e8 x
mime_type = * Q% F7 F9 z. ?! p
multipart_chunk_size_mb = 154 X% G6 Q8 }" ]; N T' \
multipart_max_chunks = 10000
' w. Z( C3 y9 l6 `8 }preserve_attrs = True
- B! G+ ?3 j9 f" m4 @' {# d) Mprogress_meter = True
% @- b" T* N% {- p. r: kproxy_host =
' s' M7 j9 `5 b$ O2 ~) }6 y$ m- yproxy_port = 0. ^# w9 d8 P2 V V
public_url_use_https = False% @; f4 H3 _$ \1 y8 L$ k
put_continue = False
2 B) o. H) d& i5 r5 v0 hrecursive = False
" g/ y' g8 P8 e' g- D0 R jrecv_chunk = 655366 V5 V% _ S% N
reduced_redundancy = False
* e S. h3 E h/ {1 mrequester_pays = False f i* o2 i! [; K2 I
restore_days = 1
& m* R3 b* [9 `5 ]( `) n, prestore_priority = Standard
4 Z3 n" K% m9 C4 u$ bsecret_key = M5AmCuh8XcWnKXvBUJ8orE90z6508YGDtbvIA0h4
" `0 f& o3 h3 f/ q* tsend_chunk = 65536
8 I/ F5 b4 s" I$ Mserver_side_encryption = False( z3 _5 D1 T8 G. g! {! k% w
signature_v2 = False9 @! n; ]! \0 r. D+ J* ]8 M. \
signurl_use_https = False7 C w+ U0 F1 @3 c. E; p
simpledb_host = sdb.amazonaws.com
% y+ ]) k% s& Nskip_existing = False4 }: W6 [2 y; Q3 j. O( ~4 `' m
socket_timeout = 300
" `1 k1 l. M/ _) g) ]7 pstats = False7 t# j1 w( R- O0 I
stop_on_error = False
2 w/ e! z4 ?+ i9 u4 Zstorage_class = $ M& k- v; l0 X: T0 j: Y2 |
throttle_max = 100
2 V; k2 G$ }7 {9 H9 k* O& Cupload_id = & p+ ^1 N4 C* W+ m2 P- E* ]
urlencoding_mode = normal. B( H" R' M8 B: w) \' @
use_http_expect = False/ x9 {# y2 q0 h$ {& I: u5 x
use_https = False1 w9 W& C. w% s3 |- i
use_mime_magic = True
7 \5 k" q0 c ?% m' j" B; Overbosity = WARNING
1 g3 u) b% m( `4 l' E, H swebsite_endpoint = http://%(bucket)s.s3-website-%(location)s.amazonaws.com/, ~, Z' m: @; w L5 C/ r% r
website_error =
3 [; B3 x0 L# R5 K" f) g: Hwebsite_index = index.html
0 a, F: D8 ]4 b, z* v
6 ~ [" I( M) [2 ~/ @- i9 zvim /root/.s3cfg. V: t" W7 l7 |* u6 B( z# \
host_base = ceph01.objectstore.com
7 e5 S9 X- {, i. j. bhost_bucket = %(bucket)s.ceph01.objectstore.com! A' ^3 J' A8 }) r& v A
9 c; f4 M; e9 k1 M6 z* C
创建桶
$ j& r# i8 j/ z3 C' i# p7 o' Y! os3cmd mb s3://buck1
; g' W# ^- Z- R1 H& z. F输出
+ z5 L6 t; x% x5 L+ L% vBucket 's3://buck1/' created
& l5 Q& i# f7 Z4 t4 a% D0 f; x" f$ E( S6 s- C7 y. c% G/ c
s3cmd mb s3://my-bucket% t4 w& Z: G$ k& ?
输出; t4 D3 F H. T8 o, m5 N
Bucket 's3://my-bucket/' created0 l' y; ]" G# T9 S
1 S4 K7 o: e. N查看桶9 [# y8 P. {$ f u3 V! A* W* d
s3cmd ls1 b+ n7 j8 j% ~& f& {
输出. n& ~6 F% ]( y6 J
2020-11-04 02:43 s3://buck1
- v% E6 l! x+ O( Q- Q4 a7 m2020-11-04 02:30 s3://my-bucket
# g9 `4 Z: f$ `
- X1 I! B0 I' p5 f% n5 `往桶中传数据& D5 v6 u2 ~0 h1 Y2 W7 [3 s
s3cmd put /etc/hosts s3://buck1
0 T& I1 p) ~/ o+ u3 [! Q输出
! r8 J" R/ ^" A8 ~: x8 Hupload: '/etc/hosts' -> 's3://buck1/hosts' [1 of 1]
5 O8 U% z- s# d% ^( d3 N* B 304 of 304 100% in 3s 92.11 B/s done
( |, |" [5 T' T" U0 ^0 o3 D" t$ }3 L
swift访问
+ u* E. Q3 m6 n! @$ \+ k9 R( a客户端安装swift客户端: g: t. ^4 r9 b, c. K" G
yum -y install python-setuptools
5 O( }( v5 ?* ~1 h0 \' `8 ^yum -y install python-pip/ y$ l, _0 |7 F, {4 O/ r& ]
pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple
( d. R0 X, x( q& G1 c* Xpip install --upgrade setuptools -i https://mirrors.aliyun.com/pypi/simple
1 B+ T4 }1 y7 Q. W& p: b ^pip install python-swiftclient -i https://mirrors.aliyun.com/pypi/simple) z j% V, D$ S- y
3 y" U4 T, f. z3 l/ N5 }+ f+ zswift创建并查看桶) P7 L X$ k# g8 @: S5 i
swift -V 1.0 -A http://ceph01.objectstore.com/auth -U mona:swift -K secretkey post swift-buck( Q; M g3 R: y0 T/ y
swift -V 1.0 -A http://ceph01.objectstore.com/auth -U mona:swift -K secretkey list; g" v" ^$ C- ]# `: z( X
输出7 D3 L5 o6 J p1 a) \8 V
buck1
5 J" n/ h8 ~9 h# U% q7 S' @my-bucket
7 U. [$ s8 V% J9 q* X- oswift-buck6 L, y/ l% M- Y; E5 q+ p" o
2 F' F/ O0 r. i- Z, @% D+ y
5 H( K7 _+ @1 B/ n3 Y! g |
|