Ceph对接Openstack配置及问题解决

技术堆栈
Ceph的一个使用场景是结合Openstack来提供云存储服务,Openstack到Ceph之间的调用堆栈就是下面这个结构:
  

三大模块
Openstack对接Ceph,有3大模块可以使用Ceph:

镜像
Openstack的Glance组件提供镜像服务,可以将Image直接存储在Ceph中。

操作系统盘
Openstack的Nova组件提供计算服务,一个虚机的创建必然需要操作系统,也就少不了系统盘,系统盘可以使用Ceph来提供。

非操作系统盘
Openstack的Cinder组件提供块存储服务,也就是我们物理机中的普通磁盘,也可以通过Ceph来提供。

以上3个组件从Openstack角度来说,是不同的3个模块,提供的服务也不同,但对于Ceph来说,都是一个Rbd Image,也就是一个块存储。
走的是同样的API,但是在一些属性和参数间存在一些差异。
具体操作
创建存储池
针对Openstack的3个不同服务,需要把存储资源池隔离开,也就是每个服务一个Pool:

// 创建volumes池,对应Cinder服务
ceph osd pool create volumes 128

// 创建images池,对应Glance服务
ceph osd pool create images 128

// 创建vms池,对应Nova服务
ceph osd pool create vms 128

// 创建backups池,对应Cinder-backup服务。但这个backup在同一Ceph集群中,意义不大,既然是做备份的话,就应该跨集群或者跨机房、跨区域来达到备份容灾的目的。
ceph osd pool create backups 128


安装Ceph相关包
在glance-api的主机上安装python-rbd包

yum install python-rbd


在nova-compute、cinder-volume、cinder-backup节点上安装ceph-common包

yum install ceph-common
安装完ceph包之后,需要将ceph集群的ceph.conf copy到所有client端。

如果在Ceph的配置中打开了auth认证,就需要做如下的操作;如果Ceph中的auth都是设置的none,也就是关闭的话,可以不做如下操作。

在ceph中创建了cinder、glance等用户,并做了权限控制

ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images'
ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
ceph auth get-or-create client.cinder-backup mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=backups'


将上面生成的keyring文件,保存在相应的节点上,并修改为相应的权限

// 注意替换所有的server为相应的主机名
ceph auth get-or-create client.glance | ssh {glance-api-server} sudo tee /etc/ceph/ceph.client.glance.keyring
ssh {glance-api-server} sudo chown glance:glance /etc/ceph/ceph.client.glance.keyring
ceph auth get-or-create client.cinder | ssh {cinder-volume-server} sudo tee /etc/ceph/ceph.client.cinder.keyring
ssh {cinder-volume-server} sudo chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
ceph auth get-or-create client.cinder-backup | ssh {cinder-backup-server} sudo tee /etc/ceph/ceph.client.cinder-backup.keyring
ssh {cinder-backup-server} sudo chown cinder:cinder /etc/ceph/ceph.client.cinder-backup.keyring


在nova-compute节点上保存和cinder-volume相同的keyring

ceph auth get-or-create client.cinder | ssh {nova-compute-server} sudo tee /etc/ceph/ceph.client.cinder.keyring


在libvirt上添加secret key

// 获取cinder keyring,并保存到一个临时文件中
ceph auth get-key client.cinder | ssh {nova-compute-node} tee client.cinder.key

// 生成一个UUID
uuidgen
457eb676-33da-42ec-9a8c-9293d545c337

// 修改secret.xml文件,注意替换下面的uuid
cat > secret.xml <<EOF
<secret ephemeral='no' private='no'>
  <uuid>457eb676-33da-42ec-9a8c-9293d545c337</uuid>
  <usage type='ceph'>
    <name>client.cinder secret</name>
  </usage>
</secret>
EOF

sudo virsh secret-define --file secret.xml
Secret 457eb676-33da-42ec-9a8c-9293d545c337 created

// 设置libvirt的secret key,并删除之前的key临时文件
sudo virsh secret-set-value --secret 457eb676-33da-42ec-9a8c-9293d545c337 --base64 $(cat client.cinder.key) && rm client.cinder.key secret.xml


在三大模块中增加ceph相关配置
Glance配置

// 在/etc/glance/glance-api.conf中添加如下:

// 在DEFAULT域中增加:
[DEFAULT]
default_store = rbd

// 在glance_store域中增加如下,如果没有glance_store域,直接创建:
[glance_store]
stores = rbd
rbd_store_pool = images
rbd_store_user = glance
rbd_store_ceph_conf = /etc/ceph/ceph.conf
rbd_store_chunk_size = 8


Cinder配置

// 在/etc/cinder/cinder.conf中添加如下:

// 在DEFAULT域中增加:
[DEFAULT]
enabled_backends = ceph

// 在ceph域中增加如下,如果没有ceph域,直接创建:
[ceph]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_flatten_volume_from_snapshot = false
rbd_max_clone_depth = 5
rbd_store_chunk_size = 4
rados_connect_timeout = -1
glance_api_version = 2

// 如果使用了ceph auth,还需增加:
rbd_user = cinder
rbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337


Cinder-backup配置

// 在/etc/ceph/ceph.conf中添加如下:
backup_driver = cinder.backup.drivers.ceph
backup_ceph_conf = /etc/ceph/ceph.conf
backup_ceph_user = cinder-backup
backup_ceph_chunk_size = 134217728
backup_ceph_pool = backups
backup_ceph_stripe_unit = 0
backup_ceph_stripe_count = 0
restore_discard_excess_bytes = true


Nova配置

// 在/etc/nova/nova.conf中添加如下:
[libvirt]
images_type = rbd
images_rbd_pool = vms
images_rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_user = cinder
rbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337
disk_cachemodes="network=writeback"


重启glance-api、nova-compute、cinder-volume、cinder-backup服务
 

 

问题现象
openstack集成ceph过程中出现rbd和rados连接ceph成功,但是openstack连接不成功。

原因
我配置的ceph使用了admin用户进行连接ceph没有建立用户,可能是权限限制。

解决方法
给ceph新建授权用户就可以

ceph get-or-create client.glance mon 'allow *' osd 'allow *' mds 'allow *' -o ceph.client.glance.keyring
ceph get-or-create client.cinder mon 'allow *' osd 'allow *' mds 'allow *' -o ceph.client.cinder.keyring
ceph get-or-create client.nova mon 'allow *' osd 'allow *' mds 'allow *' -o ceph.client.nova.keyring

另外需要注意的是修改nova的计算节点:

cat > secret.xml <<EOF
<secret ephemeral='no' private='no'>
  <uuid>457eb676-33da-42ec-9a8c-9293d545c337</uuid> <!-- uuidgen生成,这行可以没有后面加入  -->
  <usage type='ceph'>
    <name>client.cinder secret</name>
  </usage>
</secret>
EOF

virsh secret-define --file secret.xml
virsh secret-set --secret key --base64 ceph auth get-key client.cinder

说明
这一系列命令生成的key值是配置nova和cinder的一个重要的值rbd_secret_uuid
uuid可以先用uuidgen生成也可以,在virsh sercret-define 的时候生成
附:openstack配置修改
/etc/glance/glance-api.conf

[DEFAULT]
...
default_store = rbd
...
[glance_store]
stores = rbd
rbd_store_pool = images
rbd_store_user = glance
rbd_store_ceph_conf = /etc/ceph/ceph.conf
rbd_store_chunk_size = 8

/etc/cinder/cinder.conf

[DEFAULT]
...
enabled_backends = ceph
...
[ceph]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_flatten_volume_from_snapshot = false
rbd_max_clone_depth = 5
rbd_store_chunk_size = 4
rados_connect_timeout = -1
 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值