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

cinder 对接多个 ceph 存储

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2020-12-26 15:00:04 | 显示全部楼层 |阅读模式
环境说明当前 openstack环境正常使用由于后端 ceph 存储容量已经超过 85%不想直接进行扩容, 因为会有大量的数据迁移新创建一个独立的ceph 集群, 并计划用于 openstack 现有环境成为一个新的 ceph后端旧的 ceph 集群称为 ceph-A,  使用中的 pool 为 volumes新的 ceph 集群称为 ceph-B,  使用中的 pool 为 new_volumes目标在 openstack 中,  同时连接到两个不同的 ceph backendcinder server 配置1. ceph 连接配置2. cinder 配置ceph 连接配置

1.同时把两个 ceph 集群中的配置复制到 cinder 服务器 /etc/ceph 目录下, 定义成不同命名

[root@hh-yun-db-129041 ceph]# tree `pwd`/etc/ceph├── ceph.client.admin-develop.keyring      <- ceph-B 集群中的 admin key├── ceph.client.admin-volumes.keyring      <- ceph-A 集群中的 admin key├── ceph.client.developcinder.keyring      <- ceph-B 集群中的用户 developcinder key├── ceph.client.cinder.keyring             <- ceph-A 集群中的 cinder key├── ceph.client.mon-develop.keyring        <- ceph-B 集群中的 mon key├── ceph.client.mon-volumes.keyring        <- ceph-A 集群中的 mon key├── ceph-develop.conf                      <- ceph-B 集群配置文件(包含了 mon 地址等集群信息)└── ceph-volumes.conf                      <- ceph-B 集群配置文件(包含了 mon 地址等集群信息)

这里需要注意, clinet.client.(username).keyring 必须要与连接 ceph 的合法用户命名一致, 否则 cinder server 端, 无法正确获得权限

2.命令行下, 测试连接不同的 ceph 后端测试

ceph-A 连接测试

[root@hh-yun-db-129041 ceph]# ceph -c ceph-volumes.conf -k ceph.client.admin-volumes.keyring -s cluster xxx-xxx-xxxx-xxxx-xxxx 7 n. y# |; O) E

8 ~  v: o) g* j3 @1 e
; G  d4 H+ A9 T% Q, J9 `, r       health HEALTH_OK . q( ~# v5 b  h7 B7 Y# @

3 S- G6 d+ c- u6 |1 ]9 X; [5 N. m% I  g6 V6 D
       monmap e3: 5 mons at {hh-yun-ceph-cinder015-128055=240.30.128.55:6789/0,hh-yun-ceph-cinder017-128057=240.30.128.57:6789/0,hh-yun-ceph-cinder024-128074=240.30.128.74:6789/0,hh-yun-ceph-cinder025-128075=240.30.128.75:6789/0,hh-yun-ceph-cinder026-128076=240.30.128.76:6789/0}, election epoch 452, quorum 0,1,2,3,4 hh-yun-ceph-cinder015-128055,hh-yun-ceph-cinder017-128057,hh-yun-ceph-cinder024-128074,hh-yun-ceph-cinder025-128075,hh-yun-ceph-cinder026-128076 . {: p$ [6 Q4 d( q! g( m

6 z- e* W7 Q" A1 `$ _, Q3 F% ]
! f2 S& |: b/ r# E; R. c      osdmap e170088: 226 osds: 226 up, 226 in ( z: Y7 F5 |, D9 g- @  [

! q% y) [3 r9 L  U' T/ n8 X) |; c6 N/ c2 ]/ F! e4 C2 U- B3 c  N
     pgmap v50751302: 20544 pgs, 2 pools, 157 TB data, 40687 kobjects 474 TB used, 376 TB / 850 TB avail 20537 active+clean 7 active+clean+scrubbing+deep client io 19972 kB/s rd, 73591 kB/s wr, 3250 op/s
+ q. d1 k( ^$ d& Q5 |

ceph-B 连接测试

[root@hh-yun-db-129041 ceph]# ceph -c ceph-develop.conf -k ceph.client.admin-develop.keyring -s cluster 4bf07d3e-a289-456d-9bd9-5a89832b413b ) ^$ K4 {2 x3 \( `# Q" E
  
* c6 `. C7 `: x  T  o1 v    health HEALTH_OK monmap e1: 5 mons at {240.30.128.214=240.30.128.214:6789/0,240.30.128.215=240.30.128.215:6789/0,240.30.128.39=240.30.128.39:6789/0,240.30.128.40=240.30.128.40:6789/0,240.30.128.58=240.30.128.58:6789/0} election epoch 6, quorum 0,1,2,3,4 240.30.128.39,240.30.128.40,240.30.128.58,240.30.128.214,240.30.128.215 : p  @& z0 @( D$ L
) X& o/ r0 T5 `0 T" ?; v' R' g2 p+ r
) p0 K1 q) `2 C9 x, E. a) c! d
   osdmap e559: 264 osds: 264 up, 264 in flags sortbitwise   _, S1 }. r5 H
% [. U6 }, b! T6 v2 J- M+ m: `
9 S/ P/ s5 @/ U9 E: r2 v5 A
   pgmap v116751: 12400 pgs, 9 pools, 1636 bytes data, 171 objects 25091 MB used, 1440 TB / 1440 TB avail 12400 active+clean: r$ l7 w: ?3 b0 a
cinder 配置

对 cinder 服务端进行配置

/etc/cinder/cinder.conf


! v9 q) i* B* ^7 C- @% x

enabled_backends=CEPH_SATA,CEPH_DEVELOP...8 U/ h) u4 c. S- S
[CEPH_SATA]/ R/ r$ t% [+ |
glance_api_version=2$ S: T1 w* e3 C
6 w3 C- J) }; y" D6 M! z9 B
volume_backend_name=ceph_sata1 \7 ~, q* M, ^

8 t8 _* e7 M. d, q; j( M) \rbd_ceph_conf=/etc/ceph/ceph-volumes.conf7 o8 c7 @( y+ S0 L
. L# N! l+ D6 O/ p. X+ t3 J$ D( P
rbd_user=cinder
7 \# Z0 Y/ N2 h- [5 f3 u! L
4 R% @6 Q* L- K+ F$ ]# e* ?; xrbd_flatten_volume_from_snapshot=False+ V2 H9 d3 Z: |+ i7 b% S* N

0 C8 W3 g4 f- arados_connect_timeout=-1/ `: R4 {2 x5 h+ q/ N' i
1 h: C3 ?1 K$ g" U
rbd_max_clone_depth=5
) u# u# E. q$ {' L" U. J1 `5 D/ N! v5 u
volume_driver=cinder.volume.drivers.rbd.RBDDriver# D* {# x% r* m2 T: d+ z( ?$ I5 F
; q* w  a3 d" l# X: Z4 m, E6 b; s
rbd_store_chunk_size=42 ]" X5 e7 w% }
  d2 Q4 C; }' c4 h% a
rbd_secret_uuid=dc4f91c1-8792-4948-b68f-2fcea75f53b! r- ^3 w+ u" d6 ~6 i) x

8 d1 s5 `0 _* n) Irbd_pool=volumeshost=cinder.vclound.com
6 U( l; G+ q3 O6 `* }5 |8 A5 u& L1 U  X! D6 A8 z
[CEPH-new_volumes]9 t2 `2 G- s4 N2 b, \) W
  `0 @8 Q1 X$ J" [% z& g& j$ {+ \+ `
glance_api_version=2
% O/ E- d. q* G( T# c1 q
* n6 @( Z2 S( ^5 h( k1 ~. Pvolume_backend_name=ceph-new_volumes
9 y, y1 t8 ]1 i2 N8 {  g
9 j& N  b5 }( N8 q; |rbd_ceph_conf=/etc/ceph/ceph-new_volumes.conf: H0 a# H1 E# Q6 ?
! |: ^, [; x4 l: R4 I: }8 i( N
rbd_user=cinder
6 y) E( W8 e, i, `  F$ _1 t7 `! j3 d, O6 p* J
rbd_flatten_volume_from_snapshot=False
7 W# k6 b3 U& I  y% E0 f3 V  E+ o
rados_connect_timeout=-1
2 N( m2 ~* P5 I* G. W. p' v+ ^0 p; \7 o- ]+ j
rbd_max_clone_depth=52 f! R0 \* G% ~& l0 S

3 n, y7 F- a* w; B; mvolume_driver=cinder.volume.drivers.rbd.RBDDriver( Y9 P1 b( p  x
& m$ N9 c1 z0 [9 @1 c7 q' D
rbd_store_chunk_size=4
4 I: i) v' E2 [, [& N( W% T( N9 N& X$ l: |8 w
rbd_secret_uuid=4bf07d3e-a289-456d-9bd9-5a89832b413
' V, X" ]7 E3 D. |; H1 z/ W! W. s3 A( W, O0 g
rbd_pool=new_volumes
' n6 R2 S( T2 ~: f, @% g
/ N$ T6 S2 y6 Y7 u# M! i8 e3 G/ W; Uhost=cinder.vclound.com
1 S$ n' f  J/ e: O3 o2 f
( j; y* U3 Q  P7 }6 N2 l4 [

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2021-1-14 23:28:30 | 显示全部楼层
在ceph监视器上执行
* M/ g) S8 N& ^( I! e1 }* mCINDER_PASSWD='cinder1234!'
2 m7 D) ?" I" r( zcontrollerHost='controller'1 C" ]( l8 g4 X3 j0 J$ W% m2 B
RABBIT_PASSWD='0penstackRMQ'# _7 g4 e% z5 i6 q6 r" I: ~

7 _8 c2 h3 r! y$ u1.创建pool池6 \6 }# w  f3 \3 G# M
为cinder-volume服务创建pool池(因为我只有一个OSD节点,所以要将副本数设置为1)
2 g- }9 T- O/ X6 aceph osd pool create cinder-volumes 32- ~( Q6 q. \$ U6 Z! J, b$ W- n
ceph osd pool set cinder-volumes size 1 3 i* ]" _: r1 \. S* v" g" }
ceph osd pool application enable  cinder-volumes rbd
7 J9 I& u% }" \' d/ |7 k& ]ceph osd lspools& v$ V& i! z! ?" X" R0 I* L
/ J% ~/ L. v+ Z5 F+ q& F: b; Q
2.查看pool池的使用情况( x* ]( s% {6 g
ceph df" K7 Y8 _& T9 K1 l' s! I# J

9 ^( \( a9 i5 f( t9 A0 V4 S2 Q* W7 q3.创建账号+ I1 L1 l5 L1 B: \7 V, U
ceph auth get-or-create client.cinder-volumes mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=cinder-volumes, allow rwx pool=glance-images' -o /etc/ceph/ceph.client.cinder-volumes.keyring
, v) q- H& o& y+ Y2 D! e( n" ?8 x#查看/ ^: H; l& H& }1 n4 r
ceph auth ls | grep -EA3 'client.(cinder-volumes)'6 |) r$ o3 K2 C- A. v) S

' g0 @! ~1 |* D7 |* n7 `/ u; r4.修改ceph.conf配置文件并同步到所有的监视器节点(这步一定要操作)
' F3 y9 t8 x2 ssu - cephd - Y' O2 Q. v& i# c1 f
cd ~/ceph-cluster/# c$ ?' @0 _, E& N7 k* c3 j9 w
cat <<EOF>> ceph.conf1 W+ a) \6 A0 Q3 s3 k
[client.cinder-volumes]
6 j8 V9 S8 K5 Kkeyring = /etc/ceph/ceph.client.cinder-volumes.keyring
" d) d8 G! Q5 I0 D9 s0 R( y# K8 mEOF
: E7 T2 c# N' S* O2 F2 V1 Y7 {ceph-deploy --overwrite-conf admin ceph-mon016 h5 ]8 Y. Q, G. k
exit" @# a( _5 I# R; C) @% z

* _! I# Q: v7 w9 Q+ l7 d; R5.安装cinder-volume组件和ceph客户端(如果ceph监视器是在控制节点上不需要执行这一步)* q; k) G$ Z; j* b1 t/ e' d
yum -y install openstack-cinder python-keystone ceph-common
. b2 \( b* m$ P3 I
+ L5 k* j8 J( I9 |; m' K" S6.使用uuidgen生成一个uuid(确保cinder和libvirt中的UUID一致)
) B; d% I4 H, Kuuidgen( Z( e& C  {* j* ]+ e
运行uuidgen命令可以得到下面的UUID值:/ U  s& ?" O2 h
0 p% d$ J+ v5 Z+ b1 k7 C5 }/ q
086037e4-ad59-4c61-82c9-86edc31b0bc0
6 A+ m  a+ f3 i, l7.配置cinder-volume服务与cinder-api服务进行交互" h) _8 y) V# N4 ]% M
openstack-config --set  /etc/cinder/cinder.conf DEFAULT transport_url rabbit://openstack:${RABBIT_PASSWD}@${controllerHost}:5672
+ _1 ~7 K0 t, W0 h& Q  m- Qopenstack-config --set /etc/cinder/cinder.conf cache backend  oslo_cache.memcache_pool
( C7 Y9 v8 J' e! nopenstack-config --set /etc/cinder/cinder.conf cache enabled  true
' f- b! H  O; ?. K6 p; uopenstack-config --set /etc/cinder/cinder.conf cache memcache_servers  ${controllerHost}:11211
) V, E' o3 D+ A$ F, B' u4 d' }openstack-config --set  /etc/cinder/cinder.conf DEFAULT auth_strategy  keystone
2 ]' V% ~% ?+ }) Fopenstack-config --set  /etc/cinder/cinder.conf keystone_authtoken  auth_uri  http://${controllerHost}:5000- R& L+ \2 f8 ~, O9 @; k' |
openstack-config --set  /etc/cinder/cinder.conf keystone_authtoken  auth_url  http://${controllerHost}:5000% Q% f( G0 X0 M: ~- R
openstack-config --set  /etc/cinder/cinder.conf keystone_authtoken  auth_type password
" ?* U, I+ B) O; ^7 Eopenstack-config --set  /etc/cinder/cinder.conf keystone_authtoken  project_domain_id  default % ?* t1 E- F+ W/ d
openstack-config --set  /etc/cinder/cinder.conf keystone_authtoken  user_domain_id  default
0 ?3 n" z' |& |, c- Nopenstack-config --set  /etc/cinder/cinder.conf keystone_authtoken  project_name  service : I: s" K" D- R1 n- n
openstack-config --set  /etc/cinder/cinder.conf keystone_authtoken  username  cinder- P* r, X% ?( B
openstack-config --set  /etc/cinder/cinder.conf keystone_authtoken  password  ${CINDER_PASSWD}, h0 d6 z6 C/ r- u7 _
openstack-config --set  /etc/cinder/cinder.conf oslo_concurrency lock_path  /var/lib/cinder/tmp
+ @3 G' W/ [; h& ~
& s) z, c1 m3 j: J8.配置cinder-volume服务使用的后端存储为ceph
' W( F& b% [- A& q- B# H0 v& n- P) Q- }openstack-config --set /etc/cinder/cinder.conf  DEFAULT  enabled_backends  ceph
* m" ~4 `5 S, M% J1 g' i4 x, H9 u6 c8 D  o1 g" o! Y' |8 B
9.配置cinder-volume服务驱动ceph
) v2 l9 F2 n+ F! mopenstack-config --set /etc/cinder/cinder.conf  ceph volume_driver  cinder.volume.drivers.rbd.RBDDriver * Z7 h' i3 P! d& f
openstack-config --set /etc/cinder/cinder.conf  ceph rbd_pool  cinder-volumes2 H/ T( [; C3 X2 Q  G/ [
openstack-config --set /etc/cinder/cinder.conf  ceph rbd_user cinder-volumes" `/ {% O2 N5 t8 l9 F1 g
openstack-config --set /etc/cinder/cinder.conf  ceph rbd_ceph_conf  /etc/ceph/ceph.conf
$ h/ ~, s/ N- m" F, G4 G0 Popenstack-config --set /etc/cinder/cinder.conf  ceph rbd_flatten_volume_from_snapshot  false + K9 d$ Y4 |* c  q5 K% \. ]% _! u/ n
openstack-config --set /etc/cinder/cinder.conf  ceph bd_max_clone_depth  5
# s0 p9 |' U4 A. J# @openstack-config --set /etc/cinder/cinder.conf  ceph rbd_store_chunk_size  4 % `0 ]8 w- ]$ d. n& x9 y* T7 Q6 H5 Z
openstack-config --set /etc/cinder/cinder.conf  ceph rados_connect_timeout  -1 % g& B+ T3 V# _6 U% Z! m  `
openstack-config --set /etc/cinder/cinder.conf  ceph glance_api_version 2
$ B$ H9 F2 C" {8 ]% qopenstack-config --set /etc/cinder/cinder.conf  ceph rbd_secret_uuid  086037e4-ad59-4c61-82c9-86edc31b0bc0! ]( v" X4 o& c: x

  m+ e* n: V5 z  S- @/ O" i1 D' H# e6 ?10.启动cinder-volume服务2 z1 J( K2 u8 j+ o2 w" {2 F
systemctl enable openstack-cinder-volume.service& }/ L8 \' X9 P9 L; `/ e8 P
systemctl start openstack-cinder-volume.service
3 y7 P% S6 P3 W* N2 c+ B3 usystemctl status openstack-cinder-volume.service
4 k% Q7 f7 H" h: e/ e8 \" [4 ^8 U+ g7 d; K. t
在需要挂载ceph卷的所有计算节点上执行) z* R9 j' P$ @5 A2 n( p
1.创建secret文件(UUID需要与cinder服务中一致)" A1 ~4 ~: _# m, D3 Z, I
cat << EOF > ~/secret.xml
8 T" Z0 c3 b7 r<secret ephemeral='no' private='no'>4 r4 _5 z/ S+ e" v$ G( S" d" |
     <uuid>086037e4-ad59-4c61-82c9-86edc31b0bc0</uuid>4 B; T# @# U! a1 T8 H
     <usage type='ceph'>- ?' c  _$ B: L- q) ]  S9 y+ M
         <name>client.cinder-volumes secret</name>& d6 N  Z+ T. p+ j) U% c; Z
     </usage>
3 ]* F/ W) n9 w$ G/ D/ |</secret>
1 h+ r& e% ~$ K# P2 h; I4 l5 iEOF
7 o9 E& }. Q0 G* u; X4 e8 O2 c
( A- A+ J! a9 g, Y2.从ceph监视器上获取cinder-volumes账户的密钥环
' j7 r5 V2 S6 q* _+ f2 ^# |  Dceph auth get-key client.cinder-volumes+ @" V3 ~$ p/ T# W
得到如下的结果:% A+ O' x3 ~9 P9 E8 y  K
AQCxfDFdgp2qKRAAUY/vep29N39Qv7xWKYqMUw==0 v' i& P+ j& Q4 R7 K2 O* `4 A

- x! ~; u. Y# r# c3.在libvirt中注册UUID- G8 X5 r$ s: h. N+ q2 h- D
virsh secret-define --file ~/secret.xml
+ R( I: F) n! S$ b3 G' k
( K: m2 h3 ~% \% Z1 c4.在libvirt中添加UUID和cinder-volumes密钥环. J- x) w% x1 p
virsh secret-set-value --secret 086037e4-ad59-4c61-82c9-86edc31b0bc0 --base64 AQCxfDFdgp2qKRAAUY/vep29N39Qv7xWKYqMUw==: t9 r( v. e" M# F" `3 T& Q
* J( M2 |2 x" O+ n; w
5.查看libvirt中添加的UUID
& D6 y) M+ O% T  Zvirsh secret-list
' Q$ I: F( y3 G  m9 H
, X3 G8 v* `* s8 u; m5 Y! `6.重启libvirt
# S: Y& Q; t( [7 vsystemctl restart libvirtd.service
5 h- j+ I* i$ o2 {systemctl status libvirtd.service
2 Y+ ]2 z& S. b" d$ Z: v9 p, F1 D$ b1 @& u, b
出错回滚的方案
% G; n9 d6 J7 \$ H; o1.删除pool池
$ V% c. X8 A: C9 @先在所有的监视器节点上开启删除pool的权限,然后才可以删除。
3 {4 a; D, V4 Z: q3 o& O( Z删除pool时ceph要求必须输入两次pool名称,同时加上--yes-i-really-really-mean-it选项。
, E# u9 B3 }: O/ T) Q% b6 techo '* O; q0 g( h9 P& _* e; C4 \# W
mon_allow_pool_delete = true, ]8 e2 k/ Y/ J" D
[mon]
. G) V- d" i1 b6 m) z1 l$ Cmon allow pool delete = true7 d4 X/ F, ]: A8 j3 C" C/ A2 v
' >> /etc/ceph/ceph.conf
0 Z6 M5 u. z% D: W  zsystemctl restart ceph-mon.target3 g; z3 S4 I4 h
ceph osd pool delete cinder-volumes cinder-volumes  --yes-i-really-really-mean-it
2 V5 w$ V8 T2 {/ x* K" V& @# ~" W
2.删除账号& E% [  C* d0 }( s' W
ceph auth del client.cinder-volumes3 A( k; u. q1 v0 F+ O

. J% D7 k' G: x  k0 L3.删除libvirt中注册的UUID和cinder-volumes密钥环/ o1 K, Z1 R0 {8 S& w& L
查看:& z' y" @6 q/ I
virsh secret-list
+ j( |. n, c2 e' t' h5 q0 C, x删除(secret-undefine后跟uuid值):
1 \" [( H1 ?* D% h* I8 @5 Jvirsh secret-undefine  086037e4-ad59-4c61-82c9-86edc31b0bc0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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