主页 > 互联网  > 

私有云平台搭建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 nodeens33controller192.168.150.10用于外部网络ens34192.168.200.10用于内部管理网络compute nodeens33compute192.168.150.20用于外部网络ens34192.168.200.20用于内部管理网络ceph nodeens33ceph1192.168.150.11后端分布式存储ceph nodeens33ceph2192.168.150.12后端分布式存储ceph nodeens33ceph3192.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

[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

配置主机名:

# hostnamectl set-hostname controller # 按ctrl+d 退出 重新登陆 compute 节点

配置网络: ens33: 192.168.150.20 ens34: 192.168.200.20

[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

配置主机名:

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

1)yum源备份

# cd /etc/yum.repos.d/ # mkdir bak_repo # mv *.repo bak_repo/

2)创建repo文件 controller:

在/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:

在/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文件

【挂载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/ 【挂载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服务器,开启并设置自启

[root@controller ~]# yum install vsftpd -y [root@controller ~]# vi /etc/vsftpd/vsftpd.conf 添加anon_root=/opt/ 保存退出 [root@controller ~]# systemctl enable --now vsftpd

5)配置防火墙和Selinux

【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,此文件是安装过程中的各项参数,根据每项参数上一行的说明及服务器实际情况进行配置。

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节点:划分两个分区

[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命令的时候总感觉重复手打输入和记不住想不起来命令时,很困扰,所以为了解决这个问题,下面提供一种方法:

首先执行安装命令: [root@controller ~]# yum -y install bash-completion 将命令写入到/etc/bash_completion.d/中,这个路径一定要写正确: [root@controller ~]# openstack complete >> /etc/bash_completion.d/complete 最后执行以下命令即可,最后reboot,即可生效 [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 systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config 同步时间 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 hostnamectl set-hostname ceph1 hostnamectl set-hostname ceph2 hostnamectl set-hostname ceph3 在三台机器分别添加配置hosts cat >> /etc/hosts << EOF 192.168.150.11 ceph1 192.168.150.12 ceph2 192.168.150.13 ceph3 EOF 配置ceph1到所有节点root用户免密钥互信。 [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仓库

# 上传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源。

[root@ceph1 ~]# export CEPH_DEPLOY_REPO_URL=ftp://ceph1/ceph/ 在ceph1上安装部署工具。 Ceph官方推出了一个用python写的工具 cpeh-deploy,可以很大的简化ceph集群的配置过程 [root@ceph1 ~]# yum install /var/ftp/ceph/noarch/ceph-deploy-2.0.1-0.noarch.rpm # 注意:安装高版本的ceph-deploy,否则后面配置会报错 ceph1上创建工作目录 [root@ceph1 ~]# mkdir /ceph-cluster [root@ceph1 ~]# cd /ceph-cluster

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

创建ceph集群

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

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相关软件包。 [root@ ceph1 ceph-cluster]# ceph-deploy install ceph1 ceph2 ceph3 添加监控节点 初始化所有节点的mon服务,也就是启动mon服务。 [root@ceph1 ceph-cluster]# ceph-deploy mon create-initial # 作用是将ceph.conf配置文件拷贝到所有mon节点,并将ceph-mon服务启动并设置开机自启 创建ceph管理节点(mgr) 注意:每个运行了mon的节点上都需要安装mgr节点 [root@ceph1 ceph-cluster]# ceph-deploy mgr create ceph1 ceph2 ceph3

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

格式化sdb [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对其进行读写操作,需要修改权限。 [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

[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节点 [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磁盘,如果还使用旧的命令初始磁盘报错 [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

#清理磁盘

[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存储空间 // 创建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下

[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节点上单独安装

# 在所有的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解析:

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节点操作) # 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节点操作)

# 切换到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节点执行)

root@controller:~# mkdir /etc/ceph/

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

# 拷贝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节点操作)

# 拷贝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密钥(计算节点执行) # 生成密钥(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所有节点执行) # 主要作用是OpenStack可调用Ceph资源 root@controller:~# yum install -y ceph-common root@compute:~# yum install -y ceph-common ceph和openstack glance集成 配置glance后端存储(控制节点执行) # 更改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节点执行) 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节点执行) root@controller:~# chown cinder.cinder /etc/ceph/ceph.client.cinder.keyring root@compute:~# chown cinder.cinder /etc/ceph/ceph.client.cinder.keyring 修改cinder配置文件

控制节点执行

# 指定存储类型,否则在创建卷时,类型为 __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 创建卷类型(控制节点执行) # 创建卷类型 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卷备份 配置卷备份(计算节点执行) # 更改密钥属性 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 创建卷备份(控制节点执行) root@controller:~# openstack volume backup create --name ceph_backup ceph01 验证卷备份(ceph1节点执行) 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配置文件(计算节点执行) # 修改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 创建实例测试(控制节点执行) # 创建云主机类型 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节点执行) 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状态

标签:

私有云平台搭建openstack和ceph结合搭建手册由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“私有云平台搭建openstack和ceph结合搭建手册