1、配置Glance集成Ceph作为后端存储并验证

在控制节点(controller)上修改Glance的配置文件

# vim /etc/glance/glance-api.conf

在[DEFAULT]部分添加如下内容

[DEFAULT]
# 启用写时复制
show_image_direct_url = True

在[glance_store]部分添加如下内容,需要注释原来的 stores 和 default_store

[glance_store]
#stores = file,http
#default_store = file
filesystem_store_datadir = /var/lib/glance/images/
stores = rbd,file,http
default_store = rbd
rbd_store_pool = images
rbd_store_user = glance
rbd_store_ceph_conf = /etc/ceph/ceph.conf
rbd_store_chunk_size = 8

# 镜像存储在ceph中会被分割成多个对象,单个对象大小,单位是MB,该值最好是2的幂次方,默认是 8,chunk_size不能太大,当镜像小于chunk_size时会上传失败。

# rbd_store_user = admin # 直接用admin,当在ceph中没有创建glance用户时,同时还要修改/etc/ceph/ceph.client.admin.keyring文件权限为775

在[paste_deploy]部分添加如下内容,避免images缓存到/var/lib/glance/image-cache目录下

[paste_deploy]
flavor = keystone

在控制节点(controller)重启glance-api服务。

# systemctl restart openstack-glance-api.service

 

验证镜像上传

# source /root/admin-openrc.sh
# cd /var/lib/glance/images/

# openstack image create "cirros3.2" --file /var/lib/glance/images/cirros-0.3.2-x86_64-disk.img --disk-format qcow2 --container-format bare --public

查看
# rbd ls images
# openstack image list

# rbd info images/ID

 

2、配置Cinder集成Ceph作为后端存储并验证

①在Cinder控制节点(controller)上,修改配置文件/etc/cinder/cinder.conf

# vim /etc/cinder/cinder.conf

在[DEFAULT]部分,将默认volume设置为ceph

[DEFAULT]
default_volume_type = ceph

修改default_volume_type 会重新往cinder库中volume_types表中增加一条名为ceph的记录,在控制节点重启cinder-api和cinder-scheduler服务
# systemctl restart openstack-cinder-api.service openstack-cinder-scheduler.service

 

②在Cinder存储节点compute02上,修改配置文件/etc/cinder/cinder.conf

# vi /etc/cinder/cinder.conf

在[DEFAULT]部分,注释已经有的enabled_backends

[DEFAULT]

#enabled_backends = lvm
enabled_backends = ceph,lvm
glance_api_version = 2

在文件末尾添加[ceph]部分

[ceph]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
volume_backend_name = ceph
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf

# rbd snapshot 在底层会快速复制一个元信息表,但不会产生实际的数据拷贝,当从snapshot 创建新卷时,用户可能会期望不要依赖原来的snapshot,这个选项开启会在创建新卷时对原来的snapshot 数据进行拷贝来生成一个不依赖于源snapshot 的卷,默认为false
rbd_flatten_volume_from_snapshot = false

# 克隆卷的最大嵌套(层)数,设置为0表示禁用克隆,降低这个值不会影响克隆深度超过新值的已有卷
rbd_max_clone_depth = 5
rbd_store_chunk_size = 4
rados_connect_timeout = -1
glance_api_version = 2
rbd_user = cinder

# 注意uuid后面不要复制空格
rbd_secret_uuid = 82e9e6fa-e6d5-42b3-b682-9852aa14e780

 

/*

说明:此处rbd_secret_uuid的值即为配置Ceph环境保存的UUID值,如果有多个ceph集群,可以再新增一个section

[ceph-2]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
volume_backend_name = ceph-2 # 区分name
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph2.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
rbd_user = cinder2
rbd_secret_uuid = 821c2c05-2c0b-4820-bad3-29a2b3efc338 # 区分uuid

*/

 

在Cinder存储节点compute02上,重启cinder-volume服务

# systemctl restart openstack-cinder-volume.service

 

测试

新增卷类型:
管理员---卷---卷类型---创建卷类型---名称(ceph)---创建卷类型---创建加密旁边有个按钮---更新元数据---定制(volume_backend_name)点击+---ceph---保存


创建实例:
项目------计算------实例------创建实例
详情------实例名称------vm1 源------Image(创建新卷:是)------选上上传的cirros3.2镜像
实例类型------选上前面创建的test-vm1实例类型
网络------选上前面创建的网络net1
创建实例


验证
项目---卷---卷---创建卷---卷名称(cephtest)---大小1GiB---创建卷

在ceph01节点上执行命令对照卷ID是否一致
# rbd ls volumes

 

3、配置cinder_backup集成Ceph作为后端存储并验证

cinder-backup 用于将卷(volume)备份到其他存储系统上,目前支持的备份存储系统有swift、ceph以及IBM Tivoli Storage Manager(TSM),默认为Swift

1、在存储节点compute02上修改配置文件/etc/cinder/cinder.conf

# vim /etc/cinder/cinder.conf

在[DEFAULT]部分,增加如下内容
[DEFAULT]
backup_driver = cinder.backup.drivers.ceph.CephBackupDriver
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

 

        在配置参数back_driver时需要注释掉其他backup_driver的配置。另外,在dashboard配置(/etc/openstack-dashboard/local_settings)中的OPENSTACK_CINDER_FEATURES中增加如下配置

OPENSTACK_CINDER_FEATURES = {
'enable_backup': True,
}

 

启动cinder backup服务进程并设置成开机自启动

# systemctl enable openstack-cinder-backup.service
# systemctl restart openstack-cinder-backup.service

重新启动cinder服务

# systemctl restart openstack-cinder-scheduler.service openstack-cinder-api.service openstack-cinder-volume.service

重启httpd服务

# systemctl restart httpd

 

验证

项目---卷---卷---编辑卷旁边有个按钮---创建备份---备份名称(ceph01backup)---创建一个卷备份

ceph01

# rbd ls backups

 

4、配置Nova集成Ceph,使RBD挂载到Nova实例上并验证

1.计算节点之间可以通过主机名互相访问
2.计算节点和控制节点的nova uid和gid保持一致
3.vncserver_proxyclient_address和vncserver_listen 监听的是本地IP
4.必须有共享存储,实例存放在共享存储中,且每个计算节点都可以访问共享存储。否则只能使用块迁移

在Nova计算节点(controller、compute01、compute02)

修改libvirt配置,配置versh免密码连接,修改/etc/libvirt/libvirtd.conf

# vim /etc/libvirt/libvirtd.conf

listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
#根据自己的计算节点IP改写,101、102 ...
listen_addr = "192.168.58.100"  
auth_tcp = "none"

修改/etc/sysconfig/libvirtd,取消参数前面的注释

# vim /etc/sysconfig/libvirtd

LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf 
LIBVIRTD_ARGS="--listen"

重启libvirt

# systemctl restart libvirtd.service

 

修改计算节点配置文件/etc/nova/nova.conf
# vim /etc/nova/nova.conf

新增以下内容:

[DEFAULT]
# 支持热迁移
live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST,VIR_MIGRATE_TUNNELLED"
#通过该参数的修改,可解决在大并发量创建虚拟机时,因排队超时导致虚拟机获取不到IP地址的报错
vif_plugging_is_fatal=false

[libvirt]

# 虚拟机模拟openstack可能需要将virt_type设置为qemu,否则创建虚拟机后,一直停在 GRUB Loading stage2

virt_type = qemu
inject_partition=-2
images_type = rbd
images_rbd_pool = vms
images_rbd_ceph_conf = /etc/ceph/ceph.conf
disk_cachemodes="network=writeback"
rbd_user = cinder
# 此处uuid与cinder.conf是同一个
rbd_secret_uuid = 82e9e6fa-e6d5-42b3-b682-9852aa14e780

 

重启nova-compute服务
# systemctl restart openstack-nova-compute.service

测试:实例热迁移

管理员---计算---实例---救援云主机旁边有个按钮---实例热迁移

 

说明:nova集成ceph,允许从ceph卷上启动实例。当cinder挂载或者卸载块设备时,libvirt进程需要有访问ceph集群的权限 。

创建实例时,在选择源时,选择不创建新卷,实例的数据就会生成在ceph集群里面的vms存储池里面,实例在被删除时,vms下的卷也会被删除

创建实例:
项目------计算------实例------创建实例
详情------实例名称------vm1 源------Image(创建新卷:否)------选上上传的cirros3.2镜像
实例类型------选上前面创建的test-vm1实例类型
网络------选上前面创建的网络net1
创建实例

#  rbd ls vms