十、OpenStack ceph集群部署
10.1 Ceph集群部署(OpenStackNo.10)
Ceph开源分布式存储技术实现分布式存储资源池,通过存储多个副本,保证整个存储资源池无单点故障,从而保证数据的安全性和可靠性。
10.1.1 配置安装
10.1.1.1 安装NTP
安装完成后和控制节点同步时间。
[root@ceph1 ~]# yum install -y ntpdate
[root@ceph1 ~]# ntpdate controller
[root@ceph1 ~]# yum install -y ntpdate
[root@ceph1 ~]# ntpdate controller
10.1.1.2 设置免密登录
[root@ceph1 ~]# ssh-keygen
[root@ceph1 ~]# ssh-copy-id ceph2
[root@ceph1 ~]# ssh-copy-id ceph3
# 注:三台主机都需要免密
[root@ceph1 ~]# ssh-keygen
[root@ceph1 ~]# ssh-copy-id ceph2
[root@ceph1 ~]# ssh-copy-id ceph3
# 注:三台主机都需要免密
10.1.1.3 配置yum源
Ceph1、2、3台主机都需要设置,如图10.1所示。

10.1.1.4 安装Ceph软件包
部署集群,要使用ceph-deploy工具,使用yum命令安装。
注:以下命令只在ceph1节点上执行
[root@ceph1 ~]# yum -y install ceph-deploy
[root@ceph1 ~]# mkdir /etc/ceph
[root@ceph1 ceph]# cd /etc/ceph/
[root@ceph1 ceph]# ceph-deploy new ceph1
# 注:以下命令只在ceph1节点上执行
[root@ceph1 ~]# yum -y install ceph-deploy
[root@ceph1 ~]# mkdir /etc/ceph
[root@ceph1 ceph]# cd /etc/ceph/
[root@ceph1 ceph]# ceph-deploy new ceph1
10.1.2 创建集群
10.1.2.1 安装Ceph二进制软件包
使用ceph-deploy在三个节点上安装。
[root@ceph1 ceph]# ceph-deploy install ceph1 ceph2 ceph3
# 查看三个节点的ceph版本,如图10.2所示
[root@ceph1 ~]# ceph -v
[root@ceph1 ceph]# ceph-deploy install ceph1 ceph2 ceph3
[root@ceph1 ~]# ceph -v

10.1.2.2 创建monitor和OSD
Ceph1创建Monitor。
结果如10.3所示。
[root@ceph1 ceph]# ceph-deploy --overwrite-conf mon create-initial
[root@ceph1 ceph]# ceph-deploy --overwrite-conf mon create-initial

创建OSD:
这个步骤之前需要添加第二块硬盘,需要重启所有Ceph节点再进新建分区和格式化操作。
fdisk /dev/sdc
# 格式化分区:
[root@ceph1 ~]# mkfs.xfs /dev/sdc1
# 用xfs格式格式化新的分区
fdisk /dev/sdc
[root@ceph1 ~]# mkfs.xfs /dev/sdc1
创建分区挂载目录并挂载。
[root@ceph1 ~]# mkdir /opt/osd1
[root@ceph1 ~]# mount /dev/sdc1 /opt/osd1/
[root@ceph1 ~]# lsblk
# 如图10.4示查看分区
[root@ceph1 ~]# mkdir /opt/osd1
[root@ceph1 ~]# mount /dev/sdc1 /opt/osd1/
[root@ceph1 ~]# lsblk

给目录添加777权限
[root@ceph1 ~]# chmod 777 /opt/osd1/
只在ceph1执行创建OSD节点
[root@ceph1 ceph]# ceph-deploy osd prepare ceph1:/opt/osd1/ ceph2:/opt/osd2/ ceph3:/opt/osd3/
进入三个节点的osd1文件夹把文件的权限改为777
[root@ceph1 osd1]# chmod 777 *
给目录添加777权限
[root@ceph1 ~]# chmod 777 /opt/osd1/
只在ceph1执行创建OSD节点
[root@ceph1 ceph]# ceph-deploy osd prepare ceph1:/opt/osd1/ ceph2:/opt/osd2/ ceph3:/opt/osd3/
进入三个节点的osd1文件夹把文件的权限改为777
[root@ceph1 osd1]# chmod 777 *
激活OSD节点,如图10.5所示。
[root@ceph1 ceph]# ceph-deploy osd activate ceph1:/opt/osd1/ ceph2:/opt/osd2/ ceph3:/opt/osd3/
[root@ceph1 ceph]# ceph-deploy osd activate ceph1:/opt/osd1/ ceph2:/opt/osd2/ ceph3:/opt/osd3/

检查OSD集群状态,使用ceph -s命令,如图10.6所示。

开放权限给三个节点。
[root@ceph1 ceph]# ceph-deploy admin ceph{1,2,3}
[root@ceph1 ceph]# ceph-deploy admin ceph{1,2,3}
10.1.2.3 将Ceph设置为openstask的后端存储
安装controller节点客户端。
[root@ceph1 ceph]# ceph-deploy install controller
[root@ceph1 ceph]# ceph-deploy admin controller
# 使controller成为集群的客户端。
[root@ceph1 ceph]# ceph-deploy install controller
[root@ceph1 ceph]# ceph-deploy admin controller
# 使controller成为集群的客户端。
分别创建images镜像池、虚拟机池vms、volumes存储池对应glance、nova、cinder服务。如图10.7、图10.8所示。
[root@ceph1 ceph]# ceph osd pool create images 128
pool 'images' created
[root@ceph1 ceph]# ceph osd pool create vms 128
pool 'vms' created
[root@ceph1 ceph]# ceph osd pool create volumes 128
pool 'volumes' created
[root@ceph1 ceph]# ceph osd pool stats #查看创建的存储池
[root@ceph1 ceph]# ceph osd pool create images 128
pool 'images' created
[root@ceph1 ceph]# ceph osd pool create vms 128
pool 'vms' created
[root@ceph1 ceph]# ceph osd pool create volumes 128
pool 'volumes' created
[root@ceph1 ceph]# ceph osd pool stats #查看创建的存储池


创建Ceph用户,结果如10.9所示。
[root@ceph1 ceph]# ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children,allow rwx pool=images'
# 拷贝keyring
[root@ceph1 ceph]# ceph auth get-or-create client.glance | ssh controller tee /etc/ceph/ceph.client.glance.keyring
# 修改controller节点的keyring权限。
[root@ceph1 ceph]# ssh controller chown glance:glance /etc/ceph/ceph.client.glance.keyring
[root@ceph1 ceph]# ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children,allow rwx pool=images'
# 拷贝keyring
[root@ceph1 ceph]# ceph auth get-or-create client.glance | ssh controller tee /etc/ceph/ceph.client.glance.keyring
# 修改controller节点的keyring权限。
[root@ceph1 ceph]# ssh controller chown glance:glance /etc/ceph/ceph.client.glance.keyring

10.1.2.4 配置glance
回到控制节点编辑glance-api.conf配置文件。
[root@controller ~]# vi /etc/glance/glance-api.conf
[DEFAULT]下添加
rpc_backend = rabbit
show_image_direct_url = True
# 找到[glance_store]把原有的三行配置用#注释
# 添加以下内容:
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
然后重启glance-api服务
[root@controller ~]# openstack-service restart glance-api
[root@controller ~]# vi /etc/glance/glance-api.conf
[DEFAULT]下添加
rpc_backend = rabbit
show_image_direct_url = True
# 找到[glance_store]把原有的三行配置用#注释
# 添加以下内容:
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
[root@controller ~]# openstack-service restart glance-api
要在Ceph中启动虚拟机,Glance镜像的格式必须为RAW。这里可以利用之前上传的cirros-0.3.4-x86_64-disk.img镜像,将镜像类型从QCOW2转换成RAW格式。这里也可以使用任何RAW格式的其他镜像,需要用到qemu-img工具,yum -y install qemu-img,安装之后找到我们需要的镜像复制到root目录下。
[root@controller ~]# cd /opt/mitaka/image/
[root@controller image]# cp cirros-0.3.4-x86_64-disk.img /root/cirros-0.3.4-x86_64-disk.img
[root@controller ~]# cd /opt/mitaka/image/
[root@controller image]# cp cirros-0.3.4-x86_64-disk.img /root/cirros-0.3.4-x86_64-disk.img
将qcow2转换为raw格式,转换结果如图10.10所示。
[root@controller ~]# qemu-img convert -p -f qcow2 -O raw cirros-0.3.4-x86_64-disk.img cirros.raw
[root@controller ~]# qemu-img convert -p -f qcow2 -O raw cirros-0.3.4-x86_64-disk.img cirros.raw

上传镜像到openstack平台。
[root@controller ~]# glance image-create --name='cirros-ceph' --disk-format=raw --container-format=bare < /root/cirros.raw
[root@controller ~]# glance image-create --name='cirros-ceph' --disk-format=raw --container-format=bare < /root/cirros.raw
查看镜像列表,并用命令查看Ceph镜像池中的镜像ID和open stack镜像列表一致,如图10.11所示。
[root@controller ~]# openstack image list
[root@controller ~]# rbd ls images
[root@controller ~]# openstack image list
[root@controller ~]# rbd ls images

[root@controller ~]# cd /var/lib/glance/images/
[root@controller ~]# cd /var/lib/glance/images/
进入到以前的glance存储路径,检查有没有新增的cirrow的镜像,说明已经成功把glance的默认存储池改为Ceph的images镜像存储池,如图10.12所示。

10.1.2.5 配置cinder
回到Ceph1节点,创建cinder的认证并复制keyring ,如图10.13所示。
[root@ceph1 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'
[root@ceph1 ceph]# ceph auth get-or-create client.cinder | ssh controller tee /etc/ceph/ceph.client.cinder.keyring
# 更改权限
[root@ceph1 ceph]# ssh controller chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
[root@ceph1 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'
[root@ceph1 ceph]# ceph auth get-or-create client.cinder | ssh controller tee /etc/ceph/ceph.client.cinder.keyring
# 更改权限
[root@ceph1 ceph]# ssh controller chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring

回到控制节点使用uuidgen命令生成一个UUID:87d2d4b4-1c67-439c-9bb4-31fa4cfcaefa,如图10.14所示。

使用vi命令创建密钥xml文件名为secret.xml赋予uuid,内容如图10.15所示。

保存退出安装libvirt工具。
[root@controller ~]# yum install libvirt -y
# 启动libvirtd
[root@controller ~]# systemctl start libvirtd
# 定义文件,如图10.17所示
[root@controller ~]# virsh secret-define --file secret.xml
[root@controller ~]# yum install libvirt -y
[root@controller ~]# systemctl start libvirtd
[root@controller ~]# virsh secret-define --file secret.xml

设置密钥,如图10.18所示
[root@controller ~]# ceph auth get-key client.cinder > ./client.cinder.key
[root@controller ~]# virsh secret-set-value --secret 87d2d4b4-1c67-439c-9bb4-31fa4cfcaefa --base64 $(cat ./client.cinder.key)
[root@controller ~]# ceph auth get-key client.cinder > ./client.cinder.key
[root@controller ~]# virsh secret-set-value --secret 87d2d4b4-1c67-439c-9bb4-31fa4cfcaefa --base64 $(cat ./client.cinder.key)

[root@controller ~]# virsh secret-list #查看密钥
[root@controller ~]# virsh secret-list #查看密钥

修改cinder.conf配置文件。
[root@controller ~]# vi /etc/cinder/cinder.conf
[DEFAULT]
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 192.168.100.10
enabled_backends = ceph
glance_api_servers = http://controller:9292
[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 = 87d2d4b4-1c67-439c-9bb4-31fa4cfcaefa
[root@controller ~]# systemctl restart openstack-cinder-volume.service
# 重启cinder服务之后进行下一步。
创建块设备进行验证。
[root@controller ~]# cinder create --display–name muzhitest 1
[root@controller ~]# cinder create --display–name muzhitest 1
如图10.19所示。

查看块设备列表,如图10.20所示。
[root@controller ~]# cinder list
[root@controller ~]# rbd ls volumes
volume-532bd2e3-a932-432b-94e1-77203c2a390d
[root@controller ~]# cinder list
[root@controller ~]# rbd ls volumes
volume-532bd2e3-a932-432b-94e1-77203c2a390d

10.1.2.6 配置nova
回到两个计算节点:compute1、compute2,配置nova.conf文件。
[root@compute1 ~]# vi /etc/nova/nova.conf
[root@compute2 ~]# vi /etc/nova/nova.conf
[root@compute1 ~]# vi /etc/nova/nova.conf
[root@compute2 ~]# vi /etc/nova/nova.conf
找到[libvirt]下添加,如图10.21所示。
inject_key = True
rbd_user = cinder
rbd_secret_uuid = 87d2d4b4-1c67-439c-9bb4-31fa4cfcaefa
inject_key = True
rbd_user = cinder
rbd_secret_uuid = 87d2d4b4-1c67-439c-9bb4-31fa4cfcaefa

重启nova-compute服务
[root@compute1 ~]# systemctl restart openstack-nova-compute
# 返回Dashboard创建云主机,如图10.22、图10.23、图10.24、图10.25所示。
[root@compute1 ~]# systemctl restart openstack-nova-compute

选择之前上传的cirros-ceph镜像。


选择内部网络。

10.1.2.7 挂载云硬盘
点击启动实例,等待实例运行,如图10.26所示。

回到控制节点使用命令查询云虚拟机,如图10.27所示。
[root@controller ~]# nova list
[root@controller ~]# nova list

挂载云硬盘,查询cinder列表,如图10.28所示。
[root@controller ~]# cinder list
[root@controller ~]# cinder list

打开dashboard面板点击计算里面的卷选项卡,查看 muzhitest 硬盘,如图10.29所示。

点击管理连接可以给云主机进行挂载,在这之前我们需要先关闭云主机。这里我们先使用dashboard挂载,如图10.30、图10.31所示。


输入命令的方式进行挂载,如图10.32所示。
[root@controller ~]# nova volume-attach 4e41e756-bcbb-4dd5-b029-89fe4f545660 532bd2e3-a932-432b-94e1-77203c2a390d
# 4e41e756-bcbb-4dd5-b029-89fe4f545660为查询到的云主机的id
# 532bd2e3-a932-432b-94e1-77203c2a390d为查询到的云硬盘的id
[root@controller ~]# nova volume-attach 4e41e756-bcbb-4dd5-b029-89fe4f545660 532bd2e3-a932-432b-94e1-77203c2a390d
# 4e41e756-bcbb-4dd5-b029-89fe4f545660为查询到的云主机的id
# 532bd2e3-a932-432b-94e1-77203c2a390d为查询到的云硬盘的id

使用cinder list命令查看云硬盘状态结果,如图10.33所示。

自此本章详细的讲解了OpenStack平台的搭建配置和Ceph存储集群的搭建配置过程,也做了相关小节的验证结果。本文基于OpenStack的Iaas私有云平台的搭建与实验也就结束了,太棒了!🎉 经过一系列的手把手实操,咱们从零开始,把一个完整的 OpenStack + Ceph 私有云平台给搭出来了!💪
📌 教程回顾(快速索引)
✨ 核心收获
1️⃣ 彻底理解了 IaaS 的底层逻辑 🧠
以前只知道“云主机”,现在亲手搭建了 控制节点 + 计算节点 + 存储节点 的完整闭环。
明白了:
- Keystone 怎么管用户和权限
- Nova 怎么调度虚拟机
- Neutron 怎么搞网络
- Cinder + Ceph 怎么提供持久化存储
2️⃣ Ceph 分布式存储真的香 🐙
原来 Ceph 作为 OpenStack 后端存储,可以同时支持:
- Glance(存放镜像)
- Nova(存放虚拟机系统盘)
- Cinder(存放云硬盘)
3️⃣ 踩坑经验变财富 ⚠️
- yum 源一定要配对,否则依赖冲突想哭 😭
- 时间同步不准,Keystone 死活报错 🕒
- 网卡名称写错,Neutron 连不上 😤
- 权限、防火墙、SELinux 三步走,缺一不可 🔥
4️⃣ Dashboard 一把梭 🖥️
最后通过 Horizon 页面创建云主机、挂载云硬盘、绑定浮动IP、设置安全组,那种“点点鼠标就能管理整个数据中心”的感觉,真的很爽!✨