私有云平台搭建openstack和ceph结合搭建手册

OpenStack与云计算

什么是云?

如何正确理解云,可以从以下几个方面。

云的构成。

用户:对用户而言是透明无感知的,不用关心底层构成,只需要知道利用云完成自己任务即可。

云提供商:对云资产管理和运维。

云的特点。

弹性扩展;自助服务;标准接口方便二次开发和其他系统对接;付费和计量。

云的定义。

云是指你作为接受服务的对象,是云端,不管你在何时何地,都能享受云计算提供的服务。云是网络、互联网的一种比喻说法。

云分为私有云、公有云、混合云及行业云等等。

OpenStack

既是一个社区,也是一个项目和一个开源软件,提供了一个部署云的操作平台或工具集。用OpenStack易于构建虚拟计算或存储服务的云,既可以为公有云、私有云,也可以为大云、小云提供可扩展、灵活的云计算。

OpenStack是一个管理计算、存储和网络资源的数据中心云计算开放平台,通过一个仪表板,为管理员提供了所有的管理控制,同时通过Web界面为其用户提供资源。

简介

OpenStack部署方式多样化,本文采用脚本方式部署OpenStack Q版本。私有云平台搭建的各项软件包、依赖包、安装脚本等离线安装,可满足私有云平台的搭建、云平台的使用、各组件的运维操作等。

个人使用方面

1、DevStack

2、Rdo

3、手动部署

手动部署all-in-one、multi-node、multi-HA-node环境。

企业、团体方面

1、Puppet

2、ansible

构建OpenStack私有云平台

基本环境配置

云计算平台的拓扑图如图1所示,IP地址规划如下图所示。

云计算IaaS控制节点

本次搭建采用双节点安装,即 controller node 控制节点和 compute node 计算节点。ens34为内部管理网络,ens33 为外部网络。存储节点安装操作系统时划分两个空白分区以 sda,sdb 为例。作为 cinder 和 swift存储磁盘,搭建 ftp 服务器作为搭建云平台的 yum 源。配置文件中密码需要根据实际环境进行配置。

角色 接口 主机名 IP地址 用途
controller node ens33 controller 192.168.150.10 用于外部网络
ens34 192.168.200.10 用于内部管理网络
compute node ens33 compute 192.168.150.20 用于外部网络
ens34 192.168.200.20 用于内部管理网络
ceph node ens33 ceph1 192.168.150.11 后端分布式存储
ceph node ens33 ceph2 192.168.150.12 后端分布式存储
ceph node ens33 ceph3 192.168.150.13 后端分布式存储
安装CentOS7说明

【CentOS7版本】

:::info

CentOS7系统选择1804版本:CentOS-7-x86_64-DVD-1804.iso 最小化安装系统

controller node:4G内存,40G存储

:::


compute node:4G内存,40G存储,额外添加一块100G硬盘作为cinder存储。

配置网络、主机名
controller节点

配置网络:

ens33: 192.168.150.10

ens34: 192.168.200.10

bash 复制代码
[root@controller ~]# nmcli con mod ens33 ipv4.method manual ipv4.address 192.168.150.10/24 ipv4.gateway 192.168.150.2 ipv4.dns 223.5.5.5 autoconnect yes
[root@controller ~]# nmcli con mod ens34 ipv4.method manual ipv4.address 192.168.200.10/24 autoconnect yes
[root@controller ~]# nmcli con up ens33
[root@controller ~]# nmcli con up ens34

配置主机名:

bash 复制代码
# hostnamectl set-hostname controller
# 按ctrl+d 退出  重新登陆
compute 节点

配置网络:

ens33: 192.168.150.20

ens34: 192.168.200.20

bash 复制代码
[root@compute ~]# nmcli con mod ens33 ipv4.method manual ipv4.address 192.168.150.20/24 ipv4.gateway 192.168.150.2 ipv4.dns 223.5.5.5 autoconnect yes
[root@compute ~]# nmcli con mod ens34 ipv4.method manual ipv4.address 192.168.200.20/24 autoconnect yes
[root@compute ~]# nmcli con up ens33
[root@compute ~]# nmcli con up ens34

配置主机名:

bash 复制代码
# hostnamectl set-hostname compute
# 按ctrl+d 退出  重新登陆
配置yum源(Controller和compute节点)

1)yum源备份

bash 复制代码
# cd /etc/yum.repos.d/
# mkdir bak_repo
# mv *.repo bak_repo/

2)创建repo文件
controller:

bash 复制代码
在/etc/yum.repos.d创建CentOS.repo源文件

[root@controller yum.repos.d]# cat > CentOS.repo << EOF
[CentOS]
name=CentOS
baseurl=file:///opt/centos
gpgcheck=0
[iaas]
name=iaas
baseurl=file:///opt/iaas-repo
gpgcheck=0
EOF

compute:

bash 复制代码
在/etc/yum.repos.d创建CentOS.repo源文件

[root@compute yum.repos.d]# cat > CentOS.repo << EOF
[CentOS]
name=CentOS
baseurl=ftp://192.168.150.10/centos
gpgcheck=0
[iaas]
name=iaas
baseurl=ftp://192.168.150.10/iaas-repo
gpgcheck=0
EOF

3)挂载iso文件

bash 复制代码
【挂载CentOS-7-x86_64-DVD-1804.iso】
[root@controller ~]# mount /dev/sr0 /mnt/
[root@controller ~]# mkdir /opt/centos
[root@controller ~]# cp -rf /mnt/* /opt/centos/
[root@controller ~]# umount  /mnt/
bash 复制代码
【挂载XianDian-IaaS-v2.4.iso】
[root@controller ~]# mount -o loop XianDian-IaaS-V2.4.iso /mnt/
[root@controller ~]# cp -rf /mnt/* /opt/
[root@controller ~]# umount  /mnt/

4)搭建ftp服务器,开启并设置自启

bash 复制代码
[root@controller ~]# yum install vsftpd -y
[root@controller ~]# vi /etc/vsftpd/vsftpd.conf
添加anon_root=/opt/

保存退出

[root@controller ~]# systemctl enable --now vsftpd

5)配置防火墙和Selinux

bash 复制代码
【controller/compute】
编辑selinux文件

# sed -i '/^SELINUX=/ c SELINUX=disabled' /etc/selinux/config
# setenforce 0
编辑环境变量

controller和compute节点

yum install iaas-xiandian -y

编辑文件/etc/xiandian/openrc.sh,此文件是安装过程中的各项参数,根据每项参数上一行的说明及服务器实际情况进行配置。

bash 复制代码
vim etc/xiandian/openrc.sh

HOST_IP=192.168.150.10
HOST_PASS=redhat
HOST_NAME=controller
HOST_IP_NODE=192.168.150.20
HOST_PASS_NODE=redhat
HOST_NAME_NODE=compute
network_segment_IP=192.168.150.0/24
RABBIT_USER=redhat
RABBIT_PASS=redhat
DB_PASS=redhat
DOMAIN_NAME=demo
ADMIN_PASS=redhat
DEMO_PASS=redhat
KEYSTONE_DBPASS=redhat
GLANCE_DBPASS=redhat
GLANCE_PASS=redhat
NOVA_DBPASS=redhat
NOVA_PASS=redhat
NEUTRON_DBPASS=redhat
NEUTRON_PASS=redhat
METADATA_SECRET=redhat
INTERFACE_IP=192.168.150.10/192.168.150.20(controllerIP/computeIP)
INTERFACE_NAME=enp9s0 (外部网络网卡名称)
Physical_NAME=provider (外部网络适配器名称)
minvlan=101 (vlan网络范围的第一个vlanID)
maxvlan=200 (vlan网络范围的最后一个vlanID)
CINDER_DBPASS=redhat
CINDER_PASS=redhat
BLOCK_DISK=sdb1 (空白分区)
SWIFT_PASS=redhat
OBJECT_DISK=sdb2 (空白分区)
STORAGE_LOCAL_NET_IP=192.168.150.20
HEAT_DBPASS=redhat
HEAT_PASS=redhat
ZUN_DBPASS=redhat
ZUN_PASS=redhat
KURYR_DBPASS=redhat
KURYR_PASS=redhat
CEILOMETER_DBPASS=redhat
CEILOMETER_PASS=redhat
AODH_DBPASS=redhat
AODH_PASS=redhat
通过脚本安装服务

Compute节点:划分两个分区

bash 复制代码
[root@compute ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x0e7a20a8.

Command (m for help): n
Partition type:
p   primary (0 primary, 0 extended, 4 free)
e   extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-629145599, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-629145599, default 629145599): +150G
Partition 1 of type Linux and of size 150 GiB is set

Command (m for help): n
Partition type:
p   primary (1 primary, 0 extended, 3 free)
e   extended
Select (default p):
Using default response p
Partition number (2-4, default 2):
First sector (314574848-629145599, default 314574848):
Using default value 314574848
Last sector, +sectors or +size{K,M,G} (314574848-629145599, default 629145599):
Using default value 629145599
Partition 2 of type Linux and of size 150 GiB is set

Command (m for help): p

Disk /dev/sdb: 322.1 GB, 322122547200 bytes, 629145600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0e7a20a8

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048   314574847   157286400   83  Linux
/dev/sdb2       314574848   629145599   157285376   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

基础配置操作命令已经编写成shell脚本,通过脚本进行一键安装。如下:

Controller节点和Compute节点

执行脚本iaas-pre-host.sh进行安装

脚本主要完成安装OpenStack包、配置hosts解析、安装chrony服务

[root@controller ~]# iaas-pre-host.sh

安装完成后同时重启

[root@controller ~]# reboot

通过脚本安装数据库服务

基础服务的操作命令已经编写成shell脚本,通过脚本进行一键安装。如下:

Controller节点

执行脚本iaas-install-mysql.sh进行安装

安装Keystone认证服务

#Controller

通过脚本安装keystone服务

认证服务的操作命令已经编写成shell脚本,通过脚本进行一键安装。如下:

脚本主要完成安装keystone软件、创建keystone数据库、配置数据库连接、为keystone服务创建数据库表、创建令牌、创建签名密钥和证书、定义用户、租户和角色、配置环境变量。

Controller节点

执行脚本iaas-install-keystone.sh进行安装。

安装Glance镜像服务

#Controller

通过脚本安装glance服务

镜像服务的操作命令已经编写成shell脚本,通过脚本进行一键安装。如下:

脚本主要完成安装glance软件包、创建glance数据库、配置数据库连接、为镜像服务创建数据库表、创建用户、配置镜像服务、创建Endpoint和API端点、启动服务。

Controller 节点

执行脚本iaas-install-glance.sh进行安装

安装Nova计算服务

#Controller

通过脚本安装nova服务 计算服务的操作命令已经编写成shell脚本,通过脚本进行一键安装。如下:

#Controller节点

执行脚本iaas-install-nova-controller.sh进行安装

#Compute节点

执行脚本iaas-install-nova-compute.sh进行安装

安装Neutron网络服务

#Controller节点

通过脚本安装neutron服务

网络服务的操作命令已经编写成shell脚本,通过脚本进行一键安装。如下:

#Controller节点

执行脚本iaas-install-neutron-controller.sh进行安装

#Compute节点

执行脚本iaas-install-neutron-compute.sh进行安装

安装Dashboard服务
通过脚本安装dashboard服务

dashboard的操作命令已经编写成shell脚本,通过脚本进行一键安装。如下:

#Controller节点

执行脚本iaas-install-dashboard.sh进行安装

访问dashboard

打开浏览器访问Dashboard
http://controller(或本机内网ip)/dashboard

注:检查防火墙规则,确保允许http服务相关端口通行,或者关闭防火墙。

OpenStack命令补全

设置openstack命令补全

很多时候,在输入openstack命令的时候总感觉重复手打输入和记不住想不起来命令时,很困扰,所以为了解决这个问题,下面提供一种方法:

首先执行安装命令:
bash 复制代码
[root@controller ~]# yum -y install bash-completion
将命令写入到/etc/bash_completion.d/中,这个路径一定要写正确:
bash 复制代码
[root@controller ~]# openstack complete >> /etc/bash_completion.d/complete
最后执行以下命令即可,最后reboot,即可生效
bash 复制代码
[root@controller ~]# echo "source /etc/bash_completion.d/complete" >> ~/.bashrc
安装Cinder块存储服务

通过脚本安装Cinder服务

块存储服务的操作命令已经编写成shell脚本,通过脚本进行一键安装。如下:

#Controller

执行脚本iaas-install-cinder-controller.sh进行安装

#Compute节点

执行脚本iaas-install-cinder-compute.sh进行安装

安装Swift对象存储服务

通过脚本安装Swift服务

对象存储服务的操作命令已经编写成shell脚本,通过脚本进行一键安装。如下:

#Controller

执行脚本iaas-install-swift-controller.sh进行安装

#Compute节点

执行脚本iaas-install-swift-compute.sh进行安装

安装Heat编配服务

Controller节点

通过脚本安装heat服务

编配服务的操作命令已经编写成shell脚本,通过脚本进行一键安装。如下:

#Controller节点

执行脚本iaas-install-heat.sh进行安装

安装Ceilometer监控服务

通过脚本安装Ceilometer服务

ceilometer监控服务的操作命令已经编写成shell脚本,通过脚本进行一键安装。如下:

#Controller节点

执行脚本iaas-install-ceilometer-controller.sh进行安装

#Compute节点

执行脚本iaas-install-ceilometer-compute.sh进行安装

安装Aodh监控服务

通过脚本安装Aodh服务

Alarm监控服务的操作命令已经编写成shell脚本,通过脚本进行一键安装。如下:

#Controller节点

执行脚本iaas-install-aodh.sh进行安装

构建ceph分布式存储

基本环境配置

本文将通过ceph-deloy工具,一个集群自动化部署工具,使用较久,成熟稳定,被很多自动化工具所集成,可用于生产部署。

安装CentOS7说明

【CentOS7版本】

CentOS7系统选择2009版本:CentOS-7-x86_64-Minimal-2009.iso 最小化安装系统

规划:

三台CentOS7.9服务器,2核CPU,2G内存,根磁盘50GB,新增3块硬盘(sdb、sdc、sdd)其中sdb 200G硬盘,sdc和sdd各100G,sdb划分两个分区各100G,作为journal跟cache的缓存盘,sdc和sdd作为数据共享盘。

集群ceph1 管理IP:192.168.150.11
集群ceph2 管理IP:192.168.150.12
集群ceph3 管理IP:192.168.150.13
配置网络、主机名
关闭防火墙关闭selinux
bash 复制代码
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
同步时间
bash 复制代码
yum install chrony -y
sed -i -e '3,6 s/^/#/' -e '3 c server ntp1.aliyun.com iburst' /etc/chrony.conf
systemctl enable --now chronyd
chronyc sources
分别修改三台机器hostname
bash 复制代码
hostnamectl set-hostname ceph1
hostnamectl set-hostname ceph2
hostnamectl set-hostname ceph3
在三台机器分别添加配置hosts
bash 复制代码
cat >> /etc/hosts << EOF
192.168.150.11 ceph1
192.168.150.12 ceph2
192.168.150.13 ceph3
EOF
配置ceph1到所有节点root用户免密钥互信。
bash 复制代码
[root@ceph1 ~]# ssh-keygen -f ~/.ssh/id_rsa -N '' -q
# 公钥分发到所有节点
[root@ceph1 ~]# for i in ceph1 ceph2 ceph3 ; do ssh-copy-id $i; done
配置本地yum源。

ceph1配置为yum仓库服务器,其他节点使用ftp方式使用ceph仓库

bash 复制代码
# 上传ceph.iso到ceph1
[root@ceph1 ~]# ll ceph.iso
-rw-r--r-- 1 root root 2408808448 Mar 18 09:15 ceph.iso

# 安装httpd并设置为开机自启动
[root@ceph1 ~]# yum install -y vsftpd
[root@ceph1 ~]# systemctl enable vsftpd --now

# 挂载ceph.iso到/var/ftp
[root@ceph1 ~]# mkdir /var/ftp/ceph
[root@ceph1 ~]# echo "/root/ceph.iso  /var/ftp/ceph  iso9660 defaults 0 0" >> /etc/fstab 
[root@ceph1 ~]# mount -a
# yum文件ceph.repo由后面的ceph-deploy工具安装时自动生成。
部署ceph集群

步骤一:安装ceph-deploy

重要:直接设置环境变量即可,否则集群部署过程将使用官方yum源。

bash 复制代码
[root@ceph1 ~]# export CEPH_DEPLOY_REPO_URL=ftp://ceph1/ceph/
在ceph1上安装部署工具。
bash 复制代码
Ceph官方推出了一个用python写的工具 cpeh-deploy,可以很大的简化ceph集群的配置过程

[root@ceph1 ~]# yum install /var/ftp/ceph/noarch/ceph-deploy-2.0.1-0.noarch.rpm 
# 注意:安装高版本的ceph-deploy,否则后面配置会报错
ceph1上创建工作目录
bash 复制代码
[root@ceph1 ~]# mkdir /ceph-cluster
[root@ceph1 ~]# cd /ceph-cluster

步骤二:创建ceph集群,在/ceph-cluster目录下生成配置文件

创建ceph集群

创建一个新集群,并设置mon节点。

bash 复制代码
ceph1-ceph3添加epel源

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@ceph1 ceph-cluster]# ceph-deploy new ceph1 ceph2 ceph3
[root@ceph1 ceph-cluster]# ll
total 16
-rw-r--r-- 1 root root  235 Mar 18 09:19 ceph.conf
-rw-r--r-- 1 root root 4852 Mar 18 09:19 ceph-deploy-ceph.log
-rw------- 1 root root   73 Mar 18 09:19 ceph.mon.keyring
给所有节点安装ceph相关软件包。
bash 复制代码
[root@ ceph1 ceph-cluster]# ceph-deploy install ceph1 ceph2 ceph3
添加监控节点
bash 复制代码
初始化所有节点的mon服务,也就是启动mon服务。
[root@ceph1 ceph-cluster]# ceph-deploy mon create-initial
# 作用是将ceph.conf配置文件拷贝到所有mon节点,并将ceph-mon服务启动并设置开机自启
创建ceph管理节点(mgr)
bash 复制代码
注意:每个运行了mon的节点上都需要安装mgr节点
[root@ceph1 ceph-cluster]# ceph-deploy mgr create ceph1 ceph2 ceph3 

步骤三:准备日志磁盘分区

注意:sdb1和sdb2两个分区用来做存储服务器的journal缓存盘。生产中固态用于缓存,sas用户共享。

格式化sdb
bash 复制代码
[root@ceph1 ceph-cluster]# for i in ceph{1..3}
do
 ssh $i parted /dev/sdb mklabel gpt
 ssh $i parted /dev/sdb mkpart primary 1 50%
 ssh $i parted /dev/sdb mkpart primart 50% 100%
done
磁盘分区后的默认权限无法让ceph对其进行读写操作,需要修改权限。
bash 复制代码
[root@ceph1 ceph-cluster]# for i in ceph{1..3}
do
 ssh $i chown ceph.ceph /dev/sdb1 /dev/sdb2
done

以上操作服务器重启后再次重值导致授权失效,所以需要把规则写到配置文件实现永久有效。

规则1:如果设备名为/dev/sdb1,则设备文件的拥有者和拥有组为ceph

规则2:如果设备名为/dev/sdb2,则设备文件的拥有者和拥有组为ceph

bash 复制代码
[root@ceph1 ceph-cluster]# vim /etc/udev/rules.d/70-sdb.rules
ENV{DEVNAME}=="/dev/sdb1",OWNER="ceph",GROUP="ceph"
ENV{DEVNAME}=="/dev/sdb2",OWNER="ceph",GROUP="ceph"

复制到其他osd节点

bash 复制代码
[root@ceph1 ceph-cluster]# for i in ceph{2..3}
do
 scp /etc/udev/rules.d/70-sdb.rules $i:/etc/udev/rules.d/
done

步骤四:创建OSD存储空间

初始化清空磁盘数据(仅在ceph1操作)

注意ceph-deploy v2.0.0开始不再使用ceph-disk命令来初始化osd磁盘,如果还使用旧的命令初始磁盘报错

bash 复制代码
[root@ceph1 ceph-cluster]# for i in ceph{1..3}
do
 ssh $i parted /dev/sdc mklabel gpt
 ssh $i parted /dev/sdd mklabel gpt
done

#清理磁盘

bash 复制代码
[root@ceph1 ceph-cluster]# for i in ceph{1..3}
do 
  ssh $i ceph-volume lvm zap /dev/sdc
  ssh $i ceph-volume lvm zap /dev/sdd
done
创建OSD存储空间
bash 复制代码
// 创建osd存储设备,sdc提供存储空间,sdb1提供缓存
[root@ceph1 ceph-cluster]# ceph-deploy osd create --data /dev/sdc --journal /dev/sdb1 ceph1
[root@ceph1 ceph-cluster]# ceph-deploy osd create --data /dev/sdd --journal /dev/sdb2 ceph1
[root@ceph1 ceph-cluster]# ceph-deploy osd create --data /dev/sdc --journal /dev/sdb1 ceph2
[root@ceph1 ceph-cluster]# ceph-deploy osd create --data /dev/sdd --journal /dev/sdb2 ceph2
[root@ceph1 ceph-cluster]# ceph-deploy osd create --data /dev/sdc --journal /dev/sdb1 ceph3
[root@ceph1 ceph-cluster]# ceph-deploy osd create --data /dev/sdd --journal /dev/sdb2 ceph3

步骤五:查看ceph状态,验证在主节点生成的ceph.client.admin.keyring文件拷贝至所有节点的/etc/ceph下

bash 复制代码
[root@ceph1 ceph-cluster]# ceph-deploy admin ceph1 ceph2 ceph3

# 检查集群状态:使用命令 ceph health 或者 ceph -s
[root@ceph1 ceph-cluster]# ceph health
HEALTH_OK
[root@ceph1 ~]# ceph -s
  cluster:
    id:     55eafb95-ab53-4045-9c64-82d2726a6b31
    health: HEALTH_OK
  services:
    mon: 3 daemons, quorum ceph1,ceph2,ceph3 (age 68m)
    mgr: ceph1(active, since 68m), standbys: ceph3, ceph2
    osd: 6 osds: 6 up (since 75s), 6 in (since 75s)
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   6.0 GiB used, 594 GiB / 600 GiB avail
pgs:   

步骤六:启用dashboard自 nautilus开始,dashboard作为一个单独的模块独立出来了,使用时需要在所有的mgr节点上单独安装

bash 复制代码
# 在所有的mgr节点上单独安装
[root@ceph1 ceph-cluster]# for i in ceph{1..3}
do
 ssh $i yum install -y ceph-mgr-dashboard
done

# 启用dashboard
[root@ceph1 ceph-cluster]# ceph mgr module enable dashboard --force
# 默认启用SSL/TLS,所以需要创建自签名根证书
[root@ceph1 ceph-cluster]# ceph dashboard create-self-signed-cert

# 创建具有管理员角色的用户
[root@ceph1 ceph-cluster]# ceph dashboard ac-user-create admin admin administrator
{"username": "admin", "lastUpdate": 1616031372, "name": null, "roles": ["administrator"], "password": "$2b$12$4wa4pCKkDf.pvDO9LFldZuwn1GRt.W6zDXvV9QHxnjovrmpA3inWS",
"email": null}

# 查看ceph-mgr服务
[root@ceph1 ~]# ceph mgr services
{
    "dashboard": "https://ceph1:8443/"
}


(注)如果仪表盘(dashboard)密码忘了,可以使用以下命令重置密码

ceph dashboard ac-user-set-password admin "RedHat@123"

ceph和openstack集成

OpenStack 使用 Ceph 作为后端存储可以带来以下好处:

  • 不需要购买昂贵的商业存储设备,降低 OpenStack 的部署成本
  • Ceph 同时提供了块存储、文件系统和对象存储,能够完全满足 OpenStack 的存储类型需求
  • RBD COW 特性支持快速的并发启动多个 OpenStack 实例
  • 为 OpenStack 实例默认的提供持久化卷
  • 为 OpenStack 卷提供快照、备份以及复制功能
  • 为 Swift 和 S3 对象存储接口提供了兼容的 API 支持
配置Ceph环境

首先,openstack和ceph节点统一hosts解析:

bash 复制代码
192.168.150.11 ceph1
192.168.150.12 ceph2
192.168.150.13 ceph3
192.168.150.10 controller
192.168.150.20 compute
创建后端需要的存储池(ceph-01节点操作)
bash 复制代码
# cinder卷的存储池
root@ceph1:~# ceph osd pool create volumes 32
# glance存储池
root@ceph1:~# ceph osd pool create images 32
# 备份存储池
root@ceph1:~# ceph osd pool create backups 32
# 创建实例存储池
root@ceph1:~# ceph osd pool create vms 32

# 查看存储池
root@ceph1:~# ceph osd pool ls
volumes
images
backups
vms
root@ceph1:~# ceph osd pool ls detail
pool 1 'volumes' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode warn last_change 68 flags hashpspool stripe_width 0
pool 2 'images' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode warn last_change 71 flags hashpspool stripe_width 0
pool 3 'backups' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode warn last_change 74 flags hashpspool stripe_width 0
pool 4 'vms' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode warn last_change 77 flags hashpspool stripe_width 0
创建后端用户

2.1创建密钥(ceph1节点操作)

在ceph上创建cinder、glance、cinder-backup、nova用户创建密钥,允许访问使用Ceph存储池

2.1.1创建用户client.cinder

对volumes存储池有rwx权限,对vms存储池有rwx权限,对images池有rx权限

root@ceph1:~# 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"

class-read:x的子集,授予用户调用类读取方法的能力 object_prefix 通过对象名称前缀。下例将访问限制为任何池中名称仅以 rbd_children 为开头的对象。

2.1.2 创建用户client.glance

对images存储池有rwx权限

root@ceph1:~# ceph auth get-or-create client.glance mon "allow r" osd "allow class-read object_prefix rbd_children,allow rwx pool=images"

2.1.3 创建用户client.cinder-backup

对backups存储池有rwx权限

root@ceph1:~# ceph auth get-or-create client.cinder-backup mon "profile rbd" osd "profile rbd pool=backups"

使用 rbd profile 为新的 cinder-backup 用户帐户定义访问权限。然后,客户端应用使用这一帐户基于块来访问利用了 RADOS 块设备的 Ceph 存储。

2.2 导出密钥(ceph-01节点操作)

bash 复制代码
# 切换到ceph目录
root@ceph1:~# cd /etc/ceph/

# 导出glance密钥
root@ceph1:/etc/ceph# ceph auth get client.glance -o ceph.client.glance.keyring

# 导出cinder密钥
root@ceph1:/etc/ceph# ceph auth get client.cinder -o ceph.client.cinder.keyring

# 导出cinder-backup密钥
root@ceph1:/etc/ceph# ceph auth get client.cinder-backup -o ceph.client.cinder-backup.keyring
拷贝密钥

3.1 创建存放目录(openstack节点执行)

bash 复制代码
root@controller:~# mkdir /etc/ceph/

3.2 拷贝密钥到控制节点(ceph1节点操作)

bash 复制代码
# 拷贝glance密钥
root@ceph1:/etc/ceph# scp ceph.client.glance.keyring root@controller:/etc/ceph/

# 拷贝cinder密钥
root@ceph-01:/etc/ceph# scp ceph.client.cinder.keyring root@controller:/etc/ceph/

# 拷贝ceph集群认证配置文件
root@ceph-01:/etc/ceph# scp ceph.conf root@controller:/etc/ceph/

3.3 拷贝密钥到计算节点(ceph-01节点操作)

bash 复制代码
# 拷贝cinder密钥
[root@compute ~]# mkdir /etc/ceph
root@ceph1:/etc/ceph# scp ceph.client.cinder.keyring root@compute:/etc/ceph/

# 拷贝cinder-backup密钥(backup服务节点)
root@ceph1:/etc/ceph# scp ceph.client.cinder-backup.keyring root@compute:/etc/ceph/

# 拷贝ceph集群认证配置文件
root@ceph1:/etc/ceph# scp ceph.conf root@compute:/etc/ceph/
添加libvirt密钥(计算节点执行)
bash 复制代码
# 生成密钥(PS:注意,如果有多个计算节点,它们的UUID必须一致)
root@compute:~# cd /etc/ceph/
root@compute:/etc/ceph# UUID=bf168fa8-8d5b-4991-ba4c-12ae622a98b1
root@compute:/etc/ceph# cat >> secret.xml << EOF
<secret ephemeral='no' private='no'>
  <uuid>$UUID</uuid>
  <usage type='ceph'>
      <name>client.cinder secret</name>
  </usage>
</secret>
EOF

# 执行命令写入secret
[root@compute ~]# virsh secret-define --file secret.xml

# 查看添加后端密钥
root@compute ~:/etc/ceph# virsh secret-list
 UUID                                   Usage
-------------------------------------------------------------------
 bf168fa8-8d5b-4991-ba4c-12ae622a98b1   ceph client.cinder secret

# 加入key
# 将key值复制出来
[root@compute ~]# cat ceph.client.cinder.keyring
AQCvztRk8ssALhAAXshR1E+Y90HvIyxkhal1cQ==

[root@compute ~]# virsh secret-set-value --secret ${UUID} --base64 $(cat ceph.client.cinder.keyring | grep key | awk -F ' ' '{print $3}')
注意:本文controller节点复用计算节点,执行相同操作。
安装ceph客户端(openstack所有节点执行)
bash 复制代码
# 主要作用是OpenStack可调用Ceph资源
root@controller:~# yum install -y ceph-common
root@compute:~# yum install -y ceph-common
ceph和openstack glance集成
配置glance后端存储(控制节点执行)
bash 复制代码
# 更改glance密钥属性
root@controller:~# chown glance.glance /etc/ceph/ceph.client.glance.keyring

# 修改配置文件
root@controller:~# cp /etc/glance/glance-api.conf{,.bak}
root@controller:~# vim /etc/glance/glance-api.conf
root@controller:~# sed -n "14,23p" /etc/glance/glance-api.conf
[DEFAULT]
...
# enable COW cloning of images
show_image_direct_url = True
[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配置
root@controller:~# systemctl restart openstack-glance-api.service

# 设置开机自启动
root@controller:~# systemctl enable openstack-glance-api.service

# 配置管理员环境变量
root@controller ~# vim admin-openrc.sh
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=redhat
export OS_AUTH_URL=http://192.168.150.10:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
export PS1='[\u@\h \W(keystone_admin)]\$ '
# 上传镜像
root@controller ~# 
root@controller ~# ll CentOS-7-x86_64-GenericCloud-2009.qcow2
-rw-r--r--. 1 root root 888995840 Dec 23 13:04 CentOS-7-x86_64-GenericCloud-2009.qcow2

root@controller:~# openstack image create centos7 --disk-format qcow2 --file CentOS-7-x86_64-GenericCloud-2009.qcow2 --public
# openstack image list
+--------------------------------------+---------+--------+--------+
| ID                                    | Name  | Status |
+--------------------------------------+---------+--------+--------+
| 88342def-69e7-4aaa-a8d2-936473b0cb0e | centos7 | active |
+--------------------------------------+---------+--------+--------+
验证镜像(ceph1节点执行)
bash 复制代码
root@ceph1:/etc/ceph# rbd ls images
88342def-69e7-4aaa-a8d2-936473b0cb0e

[root@ceph1 ceph]# ceph df
RAW STORAGE:
    CLASS     SIZE        AVAIL       USED        RAW USED     %RAW USED 
    hdd       600 GiB     591 GiB     2.6 GiB      8.6 GiB          1.43 
    TOTAL     600 GiB     591 GiB     2.6 GiB      8.6 GiB          1.43 
 
POOLS:
    POOL        ID     STORED      OBJECTS     USED        %USED     MAX AVAIL 
    volumes      1         0 B           0         0 B         0       187 GiB 
    images       2     848 MiB         112     2.5 GiB      0.44       187 GiB 
    backups      3         0 B           0         0 B         0       187 GiB 
    vms          4         0 B           0         0 B         0       187 GiB 
ceph和openstack cinder集成
更改cinder密钥属性(openstack节点执行)
bash 复制代码
root@controller:~# chown cinder.cinder /etc/ceph/ceph.client.cinder.keyring
root@compute:~# chown cinder.cinder /etc/ceph/ceph.client.cinder.keyring
修改cinder配置文件

控制节点执行

bash 复制代码
# 指定存储类型,否则在创建卷时,类型为 __DEFAULT__
root@controller:~# vim /etc/cinder/cinder.conf
root@controller:~# sed -n "1,2p" /etc/cinder/cinder.conf
[DEFAULT]
default_volume_type = ceph

# 重启服务生效配置
root@controller:~# systemctl restart openstack-cinder-scheduler.service
# 计算节点执行
root@compute:~# vim /etc/cinder/cinder.conf
root@compute:/etc/ceph# sed -n "1,2p;28,39p" /etc/cinder/cinder.conf

[DEFAULT]
#enabled_backends = lvm
enabled_backends = ceph,lvm

[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 = bf168fa8-8d5b-4991-ba4c-12ae622a98b1
volume_backend_name = ceph

# 重启服务生效配置
root@compute:/etc/ceph# systemctl restart openstack-cinder-volume.service
创建卷类型(控制节点执行)
bash 复制代码
# 创建卷类型
root@controller:~# openstack volume type create ceph
root@controller:~# openstack volume type create lvm

# 设置卷类型元数据
root@controller:~# cinder --os-username admin --os-tenant-name admin type-key ceph set volume_backend_name=ceph
root@controller:~# cinder --os-username admin --os-tenant-name admin type-key lvm set volume_backend_name=lvm
# 查看存储类型

root@controller:~# openstack volume type list
+--------------------------------------+------+-----------+--------+
| ID                                   | Name | Is Public |
+--------------------------------------+---------+--------+--------+
| a64c49a3-b5a2-4c2d-a26f-ba392f91d22f | lvm  | True   |
| 2e42be46-1f70-481f-9db0-8638547e9011 | ceph | True   |
+--------------------------------------+------+-----------+--------+

# 创建卷测试
root@controller:~# openstack volume create ceph01 --type ceph --size 1
# 查看volumes存储池是否存在卷
root@ceph1:/etc/ceph# rbd ls volumes
volume-22ddb8e3-7390-4390-be67-dbd83ea1394f 
配置cinder卷备份
配置卷备份(计算节点执行)
bash 复制代码
# 更改密钥属性
root@compute:/etc/ceph# chown cinder.cinder /etc/ceph/ceph.client.cinder-backup.keyring

# 修改配置文件
root@compute-01:/etc/ceph# vim /etc/cinder/cinder.conf
root@compute-01:/etc/ceph# sed -n "1,9p" /etc/cinder/cinder.conf
[DEFAULT]
backup_driver = cinder.backup.drivers.ceph.CephBackupDriver
backup_ceph_conf=/etc/ceph/ceph.conf
backup_ceph_user = cinder-backup
backup_ceph_chunk_size = 4194304
backup_ceph_pool = backups
backup_ceph_stripe_unit = 0
backup_ceph_stripe_count = 0
restore_discard_excess_bytes = true

# 重启生效配置
root@compute-01:/etc/ceph# systemctl restart openstack-cinder-backup.service

# 设置开机自启动
root@compute-01:/etc/ceph# systemctl enable openstack-cinder-backup.service
创建卷备份(控制节点执行)
bash 复制代码
root@controller:~# openstack volume backup create --name ceph_backup ceph01
验证卷备份(ceph1节点执行)
bash 复制代码
root@ceph1:/etc/ceph# rbd ls backups
volume-22ddb8e3-7390-4390-be67-dbd83ea1394f.backup.base
ceph和openstack nova集成

注意:vmware嵌套虚拟化环境需要修改nova配置文件,修改virt_type=qemu,然后重启nova-compute服务。

修改nova配置文件(计算节点执行)
bash 复制代码
# 修改nova配置文件

root@compute:/etc/ceph# vim /etc/nova/nova.conf
root@compute:/etc/ceph# sed -n "1,2p;47,52p" /etc/nova/nova.conf
[DEFAULT]
live_migration_flag = "VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE"

[libvirt]
images_type = rbd
images_rbd_pool = vms
images_rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_user = cinder
rbd_secret_uuid = bf168fa8-8d5b-4991-ba4c-12ae622a98b1

# 重启nova服务生效配置
root@compute1:/etc/ceph# systemctl restart openstack-nova-compute.service
创建实例测试(控制节点执行)
bash 复制代码
# 创建云主机类型
openstack flavor create --vcpus 1 --ram 2048 --disk 20 --public m1.web

# 创建外部网络
openstack network create --share --external --provider-physical-network provider 
--provider-network-type flat public
# 创建子网
openstack subnet create --network public --allocation-pool start=192.168.150.100,end=192.168.150.200 --dns-nameserver 223.5.5.5 --gateway 192.168.150.2 --subnet-range 192.168.150.0/24 public_150

# 创建云主机
openstack server create --flavor m1.web --image centos7 --security-group default --nic net-id=ba8a9f55-9d0e-4f08-9db7-e38ea8526ab4 vm01
验证是否到ceph中的vms存储池(ceph1节点执行)
bash 复制代码
oot@ceph1:/etc/ceph# rbd ls vms
ae046a56-79d5-46b0-a62a-380fc677a3e4_disk

在存储节点Ceph OSD使能pool
[root@ceph1 ceph]# ceph osd pool application enable volumes rbd
enabled application 'rbd' on pool 'volumes'
[root@ceph1 ceph]# ceph osd pool application enable vms rbd
enabled application 'rbd' on pool 'vms'
[root@ceph1 ceph]# ceph osd pool application enable images rbd
enabled application 'rbd' on pool 'images'
[root@ceph1 ceph]# ceph osd pool application enable backups rbd
enabled application 'rbd' on pool 'backups'

查看ceph状态

相关推荐
许嵩661 天前
IC脚本之perl
开发语言·perl
一名路过的小码农1 天前
ceph 18.2.4二次开发,docker镜像制作
ceph·docker·容器
墨水\\4 天前
分布式----Ceph应用(下)
分布式·ceph
大G哥5 天前
基于K8S1.28.2实验rook部署ceph
java·ceph·云原生·容器·kubernetes
石兴稳6 天前
Ceph PG(归置组)的状态说明
ceph
石兴稳6 天前
Ceph层次架构分析
ceph
活老鬼6 天前
Ceph分布式存储
linux·运维·服务器·分布式·ceph
云计算DevOps-韩老师7 天前
【网络云计算】2024第46周周考-磁盘管理的基础知识-RAID篇
网络·云计算·perl·devops·raid·lvm扩容·tcp模型
荼靡6037 天前
云技术基础
开发语言·perl
石兴稳8 天前
Ceph client 写入osd 数据的两种方式librbd 和kernel rbd
linux·ceph