本文基于Openstack ocata+Ceph12+centos7

1、创建一个POOL ceph osd pool create volumes 64 ceph osd pool create images 64 ceph osd pool create vms 64

2、配置OPENSTACK CEPH CLIENTS 环境的准备,需要事先在ceph管理节点到openstack各服务节点间建立起免密钥登录的关系,且需有使用sudo的权限。

安装ceph客户端软件包: 在glance-api,nova-compute, and on the cinder-volume节点: sudo yum install ceph python-rbd

在OpenStack中运行glance-api, cinder-volume, nova-compute 服务的主机节点,都属于Ceph的客户端。需要配置ceph.conf. 使用以下命令把ceph.conf复制到每个ceph客户端节点: ssh {your-openstack-server} sudo tee /etc/ceph/ceph.conf </etc/ceph/ceph.conf

3、设置Ceph Client Authentication 如果启用了cephx认证,那么就需要为Nova/Cinder创建一个新用户: $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'

将密钥(client.cinder, client.glance)分发至对应的主机节点,并调整属主权限: ceph auth get-or-create client.glance | ssh {your-glance-api-server} sudo tee /etc/ceph/ceph.client.glance.keyring ssh {your-glance-api-server} sudo chown glance:glance /etc/ceph/ceph.client.glance.keyring ceph auth get-or-create client.cinder | ssh {your-volume-server} sudo tee /etc/ceph/ceph.client.cinder.keyring ssh {your-cinder-volume-server} sudo chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring

也可生成keyring,使用scp拷贝到其他节点 ceph auth get-or-create client.glance > /etc/ceph/ceph.client.glance.keyring ceph auth get-or-create client.cinder > /etc/ceph/ceph.client.cinder.keyring

运行nova-compute的节点需要使用cinder密钥: ceph auth get-or-create client.cinder | ssh {your-nova-compute-server} sudo tee /etc/ceph/ceph.client.cinder.keyring

libvirt同样也要使用client.cinder密钥: Libvirt进程在从Cinder挂载一个块设备时,需要使用该密钥访问Ceph存储集群。 先要在运行nova-compute的节点上创建一个密钥的临时拷贝: ceph auth get-key client.cinder | ssh {your-compute-node} tee client.cinder.key

然后登录到compute节点上,将密钥增加到libvirt配置文件中并删除上面的临时文件:

cat > secret.xml <<EOF <secret ephemeral='no' private='no'> <uuid>22003ebb-0f32-400e-9584-fa90b6efd874</uuid> <usage type='ceph'> <name>client.cinder secret</name> </usage> </secret> EOF ]# virsh secret-define --file secret.xml #Secret 22003ebb-0f32-400e-9584-fa90b6efd874 created ]# virsh secret-set-value --secret 22003ebb-0f32-400e-9584-fa90b6efd874 --base64 $(cat client.cinder.key) && rm client.cinder.key secret.xml Secret value set

在有多个计算节点时,在compute节点上执行相同的操作。

4、设置Glance集成Ceph

vi /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

启用copy-on-write功能: 在[DEFAULT]中增加以下参数, show_image_direct_url = True

怎样关闭Glance的镜像缓存: 修改以下参数如以下所示, [paste_deploy]flavor = keystone

5、设置Cinder集成Ceph vi /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 glance_api_version = 2

在启用了cephx认证时,还需要配置认证信息: [ceph] ... rbd_user = cinder rbd_secret_uuid = 22003ebb-0f32-400e-9584-fa90b6efd874

注:如果你需要配置多个cinder back ends,一定要在 [DEFAULT] 部分设置glance_api_version = 2 。

6、设置NOVA集成Ceph 为了直接基于Ceph存储启动虚机,还需要为Nova配置一个临时的存储后端。同时,建议使用RBD缓存,启用admin socket。 admin socket可以通过以下方法访问: ceph daemon /var/run/ceph/ceph-client.cinder.19195.32310016.asok help

在你的每个compute节点上,编辑Ceph配置文件: [client] rbd cache = true rbd cache writethrough until flush = true admin socket = /var/run/ceph/guests/$cluster-$type.$id.$pid.$cctid.asok log file = /var/log/qemu/qemu-guest-$pid.log rbd concurrent management ops = 20

调整权限: mkdir -p /var/run/ceph/guests/ /var/log/qemu/ chown qemu:libvirt /var/run/ceph/guests /var/log/qemu/

注:以上的qemu用户和libvirt组是基于RedHat相关系统的。

以配置好后,如果虚机已经在运行,则可以重启使上面的配置生效。

在每个compute节点上编辑/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 = 22003ebb-0f32-400e-9584-fa90b6efd874 disk_cachemodes="network=writeback"

建议关闭nova的密钥注入功能,而是使用基于metadata服务、cloud-init实现类似功能: 在每个计算节点上,编辑/etc/nova/nova.conf: inject_password = false inject_key = false inject_partition = -2

启动热迁移支持: 在[libvirt]部分增加: live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST,VIR_MIGRATE_TUNNELLED"

7、重启OpenStack服务

systemctl restart openstack-glance-api
systemctl restart openstack-nova-compute
systemctl restart openstack-cinder-volume