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