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 Ceph.png

图10.1 Ceph yum源

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.2 Ceph版本.png

图10.2 Ceph版本

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

图10.3 创建monitor.png

图10.3 创建monitor

创建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

图10.4 查看挂载的分区.png

图10.4 查看挂载的分区

给目录添加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/

图10.5激活OSD.png

图10.5激活OSD

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

图10.6 Ceph集群状态.png

图10.6 Ceph集群状态

开放权限给三个节点。

[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  #查看创建的存储池

图10.7 创建存储池.png

图10.7 创建存储池

图10.8 查看存储池.png

图10.8 查看存储池

创建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.9 创建用户.png

图10.9 创建用户

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

图10.10 镜像转换格式.png

图10.10 镜像转换格式

上传镜像到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

图10.11 查看镜像信息.png

图10.11 查看镜像信息
[root@controller ~]# cd /var/lib/glance/images/

[root@controller ~]# cd /var/lib/glance/images/

进入到以前的glance存储路径,检查有没有新增的cirrow的镜像,说明已经成功把glance的默认存储池改为Ceph的images镜像存储池,如图10.12所示。

图10.12新增镜像.png

图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

图10.13复制keyring.png

图10.13复制keyring

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

图10.14 uuidgen.png

图10.14uuidgen

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

图10.15创建xml.png

图10.15创建xml

保存退出安装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.16定义secret.png

图10.16定义secret

设置密钥,如图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)

图10.17设置密钥.png

图10.17设置密钥
[root@controller ~]# virsh secret-list #查看密钥

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

图10.18 secret-list.png

图10.18 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.19 cinder.png

图10.19 cinder create

查看块设备列表,如图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.20 cinder.png

图10.20 cinder list

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

图10.21 nova.png

图10.21 nova.con

重启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

图10.22 实例详细信息.png

图10.22 实例详细信息

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

图10.23 实例镜像.png

图10.23 实例镜像

图10.24 实例类型.png

图10.24 实例类型

选择内部网络。

图10.25 内部网络.png

图10.25 内部网络

10.1.2.7 挂载云硬盘

点击启动实例,等待实例运行,如图10.26所示。

图10.26 云主机.png

图10.26 云主机

回到控制节点使用命令查询云虚拟机,如图10.27所示。

[root@controller ~]# nova list

[root@controller ~]# nova list

图10.27 nova.png

图10.27 nova list

挂载云硬盘,查询cinder列表,如图10.28所示。

[root@controller ~]# cinder list

[root@controller ~]# cinder list

图10.28 cinder.png

图10.28 cinder list

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

图10.29 卷.png

图10.29 卷

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

图10.30 连接到云主机.png

图10.30连接到云主机

图10.31 连接图.png

图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

图10.32 命令挂载.png

图10.32 命令挂载

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

图10.33 cinder.png

图10.33 cinder list

自此本章详细的讲解了OpenStack平台的搭建配置和Ceph存储集群的搭建配置过程,也做了相关小节的验证结果。本文基于OpenStack的Iaas私有云平台的搭建与实验也就结束了,太棒了!🎉 经过一系列的手把手实操,咱们从零开始,把一个完整的 OpenStack + Ceph 私有云平台给搭出来了!💪

📌 教程回顾(快速索引)

章节内容
1.1云计算和OpenStack、基础概念介绍
2.1基础服务准备:关防火墙、配yum源、hosts、FTP
3.1安装基础软件包:openstack-utils、ntp等等
4.1Keystone 认证服务:数据库、用户、端点、脚本
5.1Glance 镜像服务:对接 Ceph 后端、上传镜像
6.1Nova 计算服务:控制节点 + 计算节点配置
7.1Neutron 网络服务:网络组件、LinuxBridge、路由、DHCP
8.1Dashboard 控制面板:Horizon 配置、登陆、创建云主机
9.1Cinder 块存储:创建卷、挂载卷、快照
10.1Ceph 集群部署:monitor、OSD、存储池、对接 Glance / Cinder / Nova

✨ 核心收获

1️⃣ 彻底理解了 IaaS 的底层逻辑 🧠

以前只知道“云主机”,现在亲手搭建了 控制节点 + 计算节点 + 存储节点 的完整闭环。
明白了:

  • Keystone 怎么管用户和权限
  • Nova 怎么调度虚拟机
  • Neutron 怎么搞网络
  • Cinder + Ceph 怎么提供持久化存储

2️⃣ Ceph 分布式存储真的香 🐙

原来 Ceph 作为 OpenStack 后端存储,可以同时支持:

  • Glance(存放镜像)
  • Nova(存放虚拟机系统盘)
  • Cinder(存放云硬盘)

3️⃣ 踩坑经验变财富 ⚠️

  • yum 源一定要配对,否则依赖冲突想哭 😭
  • 时间同步不准,Keystone 死活报错 🕒
  • 网卡名称写错,Neutron 连不上 😤
  • 权限、防火墙、SELinux 三步走,缺一不可 🔥

4️⃣ Dashboard 一把梭 🖥️

最后通过 Horizon 页面创建云主机、挂载云硬盘、绑定浮动IP、设置安全组,那种“点点鼠标就能管理整个数据中心”的感觉,真的很爽!✨