前言
Ceph 集群可以作为 OpenStack 的后端存储,分别向 Glance、Nova、Cinder 组件提供块设备服务。——《Ceph 设计原理与实现》
根据官方文档,OpenStack 里有三个地方可以和 Ceph 块设备结合:
Images:OpenStack 的 Glance 管理着 VM 的 image 。Image 相对恒定,OpenStack 把它们当作二进制文件、并以此格式下载。
Volumes:OpenStack 用 Cinder 服务管理 Volumes 。Volume 是块设备,OpenStack 用它们引导虚拟机、或挂载到运行中的虚拟机上。
Guest Disks: Guest disks 是装有客户操作系统的磁盘。默认情况下,启动一台虚拟机时,它的系统盘表现为 hypervisor 文件系统的一个文件(通常位于 /var/lib/nova/instances/${uuid}/)。
测试环境
openstack 测试环境
节点名称 | IP | 组件 | 对应存储池 |
---|---|---|---|
controller | 192.168.100.10 | Glacne | images |
compute1 | 192.168.100.20 | Nova | vms |
compute2 | 192.168.100.30 | Cinder | volumes |
openstack搭建过程请参考我这一篇博客:多节点安装OpenStack R版
ceph测试环境
节点名称 | IP |
---|---|
controller | 192.168.100.10 |
compute1 | 192.168.100.20 |
compute2 | 192.168.100.30 |
注:Ceph集群是搭建在OpenStack环境中的
ceph集群的构建
[root@controller ~]# mkdir ceph 创建工作目录
[root@controller ceph]# yum install -y ceph-deploy 只在控制节点安装下载批量部署工具
所有节点安装ceph
yum install -y ceph
进入ceph目录
[root@controller ceph]# ceph-deploy new controller compute1 compute2 //创建一个新的集群 并把相应节点加入到集群中
[root@controller ceph]# iptables -F 所有节点先执行这个
[root@controller ceph]# ceph-deploy mon create-initial 初始化认证文件
创建osd
[root@controller ceph]# ceph-deploy osd create --data /dev/sdb controller
[root@controller ceph]# ceph-deploy osd create --data /dev/sdb compute1
[root@controller ceph]# ceph-deploy osd create --data /dev/sdb compute2
[root@controller ceph]# ceph-deploy admin controller compute1 compute2 下载认证文件
在compute1和compute2执行如下命令
[root@compute1 ~]# cd /etc/ceph/
[root@compute1 ceph]# chmod a+x ceph.client.admin.keyring
接下来我们将节点加入到mgr 里面
[root@controller ceph]# ceph-deploy mgr create controller compute1 compute2
启动dashboard界面
[root@controller ceph]# ceph mgr module enable dashboard
[root@controller ceph]# ceph dashboard create-self-signed-cert
Self-signed certificate created
[root@controller ceph]# ceph mgr services
{
"dashboard": "https://controller:8443/"
}
[root@controller ceph]# ceph dashboard set-login-credentials admin 123
Username and password updated
浏览器访问测试
对接前基础环境构建
创建资源池
[root@controller ~]# ceph osd pool create volumes 64
pool 'volumes' created
[root@controller ~]# ceph osd pool create vms 64
pool 'vms' created
[root@controller ~]# ceph osd pool create images 64
pool 'images' created
在控制节点创建 Ceph 客户端及存储池的鉴权,生成相应的 key 文件
[root@controller ceph]# pwd 进入这个目录
/etc/ceph
[root@controller ceph]# 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' -o /etc/ceph/ceph.client.cinder.keyring
[root@controller ceph]# ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images' -o /etc/ceph/ceph.client.glance.keyring
将生成的 key 文件拷贝到其他所有 OpenStack节点
[root@controller ceph]# scp ceph.client.glance.keyring compute1:/etc/ceph/
[root@controller ceph]# scp ceph.client.cinder.keyring compute1:/etc/ceph/
[root@controller ceph]# scp ceph.client.glance.keyring compute2:/etc/ceph/
[root@controller ceph]# scp ceph.client.cinder.keyring compute2:/etc/ceph/
任何进入控制节点修改以下文件的权限
[root@controller ceph]# chown glance:glance /etc/ceph/ceph.client.glance.keyring
[root@controller ceph]# chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
在compute1、compute2上进行如下操作
[root@compute1 ceph]# ceph auth get-key client.cinder | tee client.cinder.key
AQCmPppg9++EKxAAeFb5gd5GpabgThKcGwtP8w==
[root@compute1 ceph]# uuidgen 每一台的uuidgen都不一样注意
58de3642-3bc2-49a2-913b-678795339875
--------------
cat > secret.xml <<EOF
<secret ephemeral='no' private='no'>
<uuid>58de3642-3bc2-49a2-913b-678795339875</uuid>
<usage type='ceph'>
<name>client.cinder secret</name>
</usage>
</secret>
EOF
[root@compute1 ceph]# virsh secret-define --file secret.xml
Secret 58de3642-3bc2-49a2-913b-678795339875 created
[root@compute1 ceph]# virsh secret-set-value --secret 58de3642-3bc2-49a2-913b-678795339875 --base64 $(cat client.cinder.key) && rm client.cinder.key secret.xml
Secret value set
rm: remove regular file ‘client.cinder.key’? y
rm: remove regular file ‘secret.xml’? y
注:两台操作一致,就是uuid注意区分以及改写
对接Glance镜像服务
控制节点修改如下文件
[root@controller ~]# vi /etc/glance/glance-api.conf
343 show_image_direct_url = false
2054 stores=glance.store.filesystem.Store, glance.store.http.Store, glance.store.rbd.Store
2108 default_store=rbd
2645 rbd_store_user = glance
2626 rbd_store_pool = images
4443 flavor=keystone
重启glance服务
[root@controller ~]# systemctl restart openstack-glance*
验证是否对接成功
[root@controller ~]# source keystonerc_admin
[root@controller ~(keystone_admin)]# glance image-create --name cirros --disk-format qcow2 --container-format bare < cirros-0.3.4-x86_64-disk.img
[root@controller ~(keystone_admin)]# ceph df
GLOBAL:
SIZE AVAIL RAW USED %RAW USED
220 GiB 217 GiB 3.0 GiB 1.39
POOLS:
NAME ID USED %USED MAX AVAIL OBJECTS
volumes 1 0 B 0 66 GiB 0
vms 2 0 B 0 66 GiB 0
images 3 13 MiB 0.02 66 GiB 8
images存在大小为13MIB 对接成功!!!!!!!!!
对接Cinder卷服务
控制节点修改如下文件
[root@controller ~]# vi /etc/cinder/cinder.conf
409 enabled_backends=ceph,lvm
410 glance_api_version = 2 自行添加
在最后添加即可 复制即可
5270 [ceph]
5271 glance_api_version = 2
5272 volume_driver = cinder.volume.drivers.rbd.RBDDriver
5273 volume_backend_name = ceph
5274 rbd_pool = volumes
5275 rbd_ceph_conf = /etc/ceph/ceph.conf
5276 rbd_flatten_volume_from_snapshot = false
5277 rbd_max_clone_depth = 5
5278 rbd_store_chunk_size = 4
5279 rados_connect_timeout = -1
5280 rbd_user = cinder
5281 rbd_secret_uuid = 58de3642-3bc2-49a2-913b-678795339875
uuid填compute1的uuid
重启cinder服务
[root@controller ~]# systemctl restart openstack-cinder*
验证是否对接成功
[root@controller ~]# source keystonerc_admin
[root@controller ~(keystone_admin)]# openstack volume type create lvm
[root@controller ~(keystone_admin)]# openstack volume create --type lvm --size 10 test
[root@controller ~(keystone_admin)]# ceph df
GLOBAL:
SIZE AVAIL RAW USED %RAW USED
220 GiB 217 GiB 3.0 GiB 1.39
POOLS:
NAME ID USED %USED MAX AVAIL OBJECTS
volumes 1 709 B 0 66 GiB 5
vms 2 0 B 0 66 GiB 0
images 3 13 MiB 0.02 66 GiB 8
volumes出现 数值709B 代表成功!!!!!!!
对接Nova计算服务
在compute1、compute2节点修改如下文件
[root@compute1 ~]# vi /etc/nova/nova.conf
6425 inject_password=False
6450 inject_key=False
6484 inject_partition=-2
6936 disk_cachemodes = "network=writeback"
7077 images_type=rbd
7101 images_rbd_pool=vms
7104 images_rbd_ceph_conf =/etc/ceph/ceph.conf
7118 hw_disk_discard=unmap
7261 rbd_user=cinder
7266 rbd_secret_uuid=58de3642-3bc2-49a2-913b-678795339875
6284 live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST,VIR_MIGRATE_TUNNELLED"
修改完成以后保存退出重启nova-compute服务即可
[root@compute1 nova]# systemctl restart openstack-nova*
任何将配置文件发送到compute2节点上即可
[root@compute1 nova]# scp /etc/nova/nova.conf compute2:/etc/nova/nova.conf
进入compute2节点进行如下修改
[root@compute2 ~]# vi /etc/nova/nova.conf
10982 vncserver_proxyclient_address=compute2 修改为compute2即可
[root@compute2 ~]# systemctl restart openstack-nova*
创建云主机验证
ceph集群查看
[root@controller neutron]# ceph df
GLOBAL:
SIZE AVAIL RAW USED %RAW USED
220 GiB 217 GiB 3.1 GiB 1.40
POOLS:
NAME ID USED %USED MAX AVAIL OBJECTS
volumes 1 0 B 0 66 GiB 0
vms 2 28 MiB 0.04 66 GiB 13
images 3 0 B 0 66 GiB 0
vms资源池存在数据 云主机创建在资源池成功