openstack-miatka超融合基础架构之ceph对接openstack glance/nova/cinder/cinder-backup
OpenStack项目中Glance、Nova、Cinder、Swift等服务是项目中存储的服务,服务种类的不同也决定着提供服务的方式不同,在OpenStack的设计中Glance被用于镜像资源的存储,称为镜像服务。Nova则用于虚拟机实例操作和实例资源的存储,称之为计算服务。Cinder则是提供虚拟机的块存储服务。Swift则是提供对象存储服务,在下面的任务实施中重点讲解Ceph与Glance、Nova、cinder三者之间的结合和作为OpenStack服务后端统一存储的配置说明。
本次实验采用All-in-one的OpenStack节点作为Ceph的客户端,(All-in-one 说白了就是单节点的openstack实验平台)
后期再写ceph的搭建过程,现在重点写对接;
实验工具:
openstack(mitaka) | All-in-one(centos7.2-1511) |
ceph | 三节点 ceph的分布式存储集群,注意:不是文件系统(即不是cephFS)。 |
这里个大家先展示下对接成功的例子:
[root@xiandian ~]# rbd ls images //查询imges pool
0a2ce51d-bcd6-4a5b-8320-ca7db7c5aa9f
[root@xiandian ~]# glance image-list
+--------------------------------------+------+
| ID | Name |
+--------------------------------------+------+
| 0a2ce51d-bcd6-4a5b-8320-ca7db7c5aa9f | 1 |
+--------------------------------------+------+
[root@xiandian ~]# rbd ls vms
6a0a4266-815b-48dc-beb6-5123861a6e2f_disk
[root@xiandian ~]# nova list
+--------------------------------------+------+--------+------------+-------------+--------------------------+
| ID | Name | Status | Task State | Power State | Networks |
+--------------------------------------+------+--------+------------+-------------+--------------------------+
| 6a0a4266-815b-48dc-beb6-5123861a6e2f | a | ACTIVE | - | Running | sharednet1=192.168.200.6 |
+--------------------------------------+------+--------+------------+-------------+--------------------------+
[root@xiandian ~]# cinder list
+--------------------------------------+-----------+------+------+-------------+----------+-------------+
| ID | Status | Name | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+------+------+-------------+----------+-------------+
| 295c9b3f-755f-44a8-9481-db6952c22752 | available | test | 20 | - | false | |
| 2a064ae1-abfc-4ecc-8587-088f2f4caa89 | available | test | 1 | - | false | |
+--------------------------------------+-----------+------+------+-------------+----------+-------------+
[root@xiandian ~]# rbd ls volumes
volume-295c9b3f-755f-44a8-9481-db6952c22752
volume-2a064ae1-abfc-4ecc-8587-088f2f4caa89
[root@xiandian ~]# cinder backup-list
+--------------------------------------+--------------------------------------+-----------+------+------+--------------+---------------+
| ID | Volume ID | Status | Name | Size | Object Count | Container |
+--------------------------------------+--------------------------------------+-----------+------+------+--------------+---------------+
| 7144290b-7cef-437f-9dac-0e2c9f2fd9fa | 2a064ae1-abfc-4ecc-8587-088f2f4caa89 | available | - | 1 | 0 | backups |
+--------------------------------------+--------------------------------------+-----------+------+------+--------------+---------------+
[root@xiandian ~]# rbd ls backups
volume-2a064ae1-abfc-4ecc-8587-088f2f4caa89.backup.7144290b-7cef-437f-9dac-0e2c9f2fd9fa
1、在All-in-one openstack 平台上安装ceph客户端,这里通过ceph-deploy 工具来安装;
将 openstack 节点与 ceph 进行时间同步,我用NTP 服务器,
# ntpdate ceph-1
在ceph server 服务器上执行:
# ceph-deploy install <OPENSTACK-HOST>
等待安装完成。。。。。。。
2、创建 ceph 存储 池 pool
使用以下命令创建新池时:
ceph osd pool create <pool-name> pg_num
- 少于5个OSD设置
pg_num
为128 - 5到10个OSD设置
pg_num
为512 - 10到50个OSD设置
pg_num
为1024 - 如果您有超过50个OSD,您需要了解权衡以及如何自己计算
pg_num
值
在ceph server 服务器上执行:
[root@ceph-server1 ~]# ceph osd pool create volumes 128
// 创建volumes池,对应Cinder服务
[root@ceph-server1 ~]# ceph osd pool create images 128
// 创建images池,对应Glance服务
[root@ceph-server1 ~]# ceph osd pool create vms 128
// 创建vms池,对应Nova服务
[root@ceph-server1 ~]# ceph osd pool create backups 128
// 创建backups池,对应Cinder-backup服务。但这个backup在同一Ceph集群中,意义不大,既然是做备份的话,就应该跨集群或者跨机房、跨区域来达到备份容灾的目的。
3、创建用户;
在ceph中创建了cinder、glance、cinder-backup等用户,并做了权限控制
[root@ceph-server1 ~]# 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'
//这里cinder和nova组件都使用一个用户。
[root@ceph-server1 ~]# ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
[root@ceph-server1 ~]# ceph auth get-or-create client.cinder-backup mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=backups'
4、将生成的keyring文件,保存在相应的节点上,并修改为相应的权限;注意:替换<openstack-HOST> 为 对应的IP 或者是 主机名
//glance用户分配keyring,并修改权限:
[root@ceph-server1 ~]# ceph auth get-or-create client.glance | ssh <openstack-HOST> tee /etc/ceph/ceph.client.glance.keyring
# ssh <openstack-HOST> chown glance:glance /etc/ceph/ceph.client.glance.keyring
//cinder用户分配keyring,并修改权限:
[root@ceph-server1 ~]# ceph auth get-or-create client.cinder | ssh <openstack-HOST> tee /etc/ceph/ceph.client.cinder.keyring
# ssh <openstack-HOST> chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
//cinder-backup用户分配keyring,并修改权限:
[root@ceph-server1 ~]# ceph auth get-or-create client.cinder-backup | ssh <openstack-HOST> tee /etc/ceph/ceph.client.cinder-backup.keyring
[root@ceph-server1 ~]# ssh <openstack-HOST> chown cinder:cinder /etc/ceph/ceph.client.cinder-backup.keyring
5、在libvirt上添加secret key
ceph server 节点执行:
// 获取cinder keyring,并保存到一个临时文件中
[root@ceph-server1 ~]# ceph auth get-key client.cinder | ssh <openstack-HOST> tee /root/client.cinder.key
openstack 节点执行:
// 生成一个UUID
[root@opensatck ~]# uuidgen
457eb676-33da-42ec-9a8c-9293d545c337
// 修改secret.xml文件,注意替换下面的uuid
[root@opensatck ~]# 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
[root@opensatck ~]# virsh secret-define --file secret.xml
Secret 457eb676-33da-42ec-9a8c-9293d545c337 created
// 设置libvirt的secret key,并删除之前的key临时文件
[root@opensatck ~]# virsh secret-set-value --secret 457eb676-33da-42ec-9a8c-9293d545c337 --base64 $(cat /root/client.cinder.key) && rm client.cinder.key
//查看secret key
[root@opensatck ~]# virsh secret-list
6、修改各组件配置文件:
glance:
[root@opensatck ~]# vi /etc/glance/glance-api.conf
[DEFAULT]
rpc_backend = rabbit
show_image_direct_url = True
[glance_store]
#stores = file,http
#file =
#filesystem_store_datadir = /var/lib/glance/images/
stores = rbd
default_store = rbd
rbd_store_pool = images
rbd_store_user = glance
rbd_store_ceph_conf = /etc/ceph/ceph.conf
rbd_store_chunk_size = 8
cinder:
[root@opensatck ~]# vi /etc/cinder/cinder.conf
[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
rbd_user = cinder
rbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337
[DEFAULT]
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 127.0.0.1
enabled_backends = ceph
glance_api_servers = http://controller:9292
[lvm]
#volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
#volume_group = cinder-volumes
#iscsi_protocol = iscsi
#iscsi_helper = lioadm
cinder_backup:
[root@opensatck ~]# vi /etc/cinder/cinder.conf
[DEFAULT] //增加配置
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:
[root@opensatck ~]# vi /etc/nova/nova.conf
[libvirt]
virt_type = qemu
inject_key = false
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"
systemctl restart openstack-glance-api.service openstack-glance-registry.service
systemctl restart libvirtd.service openstack-nova-compute.service openstack-nova-api.service
systemctl restart openstack-nova-consoleauth.service openstack-nova-scheduler.service
systemctl restart openstack-nova-conductor.service openstack-nova-novncproxy.service
systemctl restart openstack-cinder-api.service openstack-cinder-scheduler.service
systemctl restart openstack-cinder-volume.service target.service openstack-cinder-backup.service
systemctl restart openstack-glance-api.service openstack-glance-registry.service
systemctl restart libvirtd.service openstack-nova-compute.service openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
systemctl restart openstack-cinder-api.service openstack-cinder-scheduler.service openstack-cinder-volume.service target.service openstack-cinder-backup.service