在OpenStack的R版基础上搭建CEPH存储群集

一、为什么使用CEPH作为openstack的后端

  • 对于一个IaaS系统,涉及到存储的部分主要是块存储服务模块、对象存储服务模块、镜像管理模块和计算服务模块。具体针对OpenStack而言,则分别对应为其中的Cinder、Swift、Glance和Nova四个项目。
  • Ceph 是当前非常流行的开源分布式存储系统,不但具有高可靠性、高扩展性、高性能, 也是统一存储系统,同时提供块存储服务(rbd)、对象存储服务(rgw)以及文件系统存储服务(cephfs)。
  • CEPH 目前也是OpenStack的主流后端存储,和OpenStack亲如兄弟,为OpenStack提供统一共享存储服务。

1.1、Ceph作为后端存储的优点

  • 所有的计算节点共享存储,迁移时不需要拷贝根磁盘,即使计算节点挂了,也能立即在另一个计算节点启动虚拟机(evacuate)。
  • 利用COW(Copy On Write) 特性,创建虚拟机时,只需要基于镜像clone即可,不需要下载整个镜像,而clone操作基本是0开销,从而实现了秒级创建虚拟机。
  • Ceph RBD支持thin provisioning,即按需分配空间,有点类似Linux文件系统的sparse稀疏文件。创建一个20GB的虚拟硬盘时,最开始并不占用物理存储空间,只有当写入数据时,才按需分配存储空间。

1.2、OpenStack的功能服务对接

对接分为三种,也就是ceph存储系统为openstack提供的三类功能
1、镜像服务Glance对接
2、块存储服务Cinder对接
3、云主机储存对接
在ceph中分别为镜像,云主机,卷创建了三个pool资源存放池:images,vms,volumes来存放对应的数据。

二、在OpenStack基础上搭建CEPH集群

  • 搭建中使用的安装包百度云链接:https://pan.baidu.com/s/1VkwWbkmIGyTjhJf-9EA8Fg
  • 提取码:fagk

2.1、环境准备

  • 以下是三台虚拟机的配置,首先opnstack–R版多节点的搭建 见我以前的博客,这里就不重复操作了。
    1、控制节点(计算+网络)
    CPU:双核双线程-CPU虚拟化开启
    内存:8G 硬盘:300G+1024G(充当CEPH块存储)
    网卡:VM1-192.168.10.20 NAT-192.168.100.128
    操作系统:Centos 7.5(1804)-最小化安装
    2、计算节点1(计算)
    CPU:双核双线程-CPU虚拟化开启
    内存:8G 硬盘:300G+1024G(充当CEPH块存储)
    网卡:VM1-192.168.10.21
    操作系统:Centos 7.5(1804)-最小化安装
    3、计算节点2(计算)
    CPU:双核双线程-CPU虚拟化开启
    内存:8G 硬盘:300G+1024G(充当CEPH块存储)
    网卡:VM1-192.168.10.22
    操作系统:Centos 7.5(1804)-最小化安装
  • 实验拓扑图:
    在OpenStack的R版基础上搭建CEPH存储群集_第1张图片

2.2、部署过程

2.2.1、Ceph基础环境

1、部署CEPH之前,必须把和存储有关系数据清理干净

  • OpenStack安装了实例,必须删除----在控制台dashboard删除
  • OPenStack上产的镜像,必须删除----在控制台dashboard删除
  • OpenStack的cinder块,必须删除----在控制台dashboard删除

2、三个节点都设置主机名、添加hosts文件、关闭防火墙,设置开机不启动,做SSH免交互。(这些配置已经在OpenStack搭建过程设置过,详细步骤见博客)

2.2.2、创建ceph集群和对接池

3、安装ceph,配置控制节点

//三个节点安装Python-setuptools工具
yum -y install python-setuptools

//在控制节点,创建ceph配置文件目录
mkdir -p /etc/ceph

//在控制节点安装ceph-deploy工具
#ceph-deploy是ceph官方提供的部署工具,可以通过ssh远程登录其它各个节点上执行命令完成部署过程
yum -y install ceph-deploy

//在三个节点安装ceph软件
yum -y install ceph

//创建集群
进入控制节点/etc/ceph的目录
cd /etc/ceph
ceph-deploy new ct c1 c2
#ceph-deploy new 主机名命令:用来创建ceph.conf配置文件和监视器密钥环到各个节点的/etc/ceph/目录。

//检查ip地址是否是节点的IP地址
more /etc/ceph/ceph.conf   

在OpenStack的R版基础上搭建CEPH存储群集_第2张图片

//添加mon服务,生成并收集三个节点的秘钥
进入控制节点/etc/ceph的目录
cd /etc/ceph
ceph-deploy mon create-initial  

当前目录下会生成各种服务的配置文件
在OpenStack的R版基础上搭建CEPH存储群集_第3张图片

//创建OSD服务
进入控制节点/etc/ceph的目录
cd /etc/ceph
ceph-deploy osd create --data /dev/sdb ct
ceph-deploy osd create --data /dev/sdb c1
ceph-deploy osd create --data /dev/sdb c2

//使用ceph-deploy下发配置文件和admin秘钥下发到ct c1 c2
进入控制节点/etc/ceph的目录
cd /etc/ceph
ceph-deploy admin ct c1 c2

//给ct c1 c2 每个节点的keyring增加读的权限
[root@ct ceph# chmod +x /etc/ceph/ceph.client.admin.keyring
[root@c1 ceph# chmod +x /etc/ceph/ceph.client.admin.keyring
[root@c2 ceph# chmod +x /etc/ceph/ceph.client.admin.keyring

在OpenStack的R版基础上搭建CEPH存储群集_第4张图片

//查看ceph集群状态
ceph -s
ceph osd tree

这里显示健康警告,原因是没有安装mgr服务。
在OpenStack的R版基础上搭建CEPH存储群集_第5张图片

//创建mgr管理服务
进入控制节点/etc/ceph的目录
cd /etc/ceph
ceph-deploy mgr create ct c1 c2
ceph -s  #查看健康状况,成功则OK

在OpenStack的R版基础上搭建CEPH存储群集_第6张图片

//创建三个与openstack对接的pool(volumes、vms、images)64是PG
ceph osd pool create volumes 64
ceph osd pool create vms 64
ceph osd pool create images 64

//查看CEPH状态
ceph mon stat
ceph osd status	
ceph osd lspools	###查看创建的pools池

在OpenStack的R版基础上搭建CEPH存储群集_第7张图片
在OpenStack的R版基础上搭建CEPH存储群集_第8张图片
此时ceph集群就搭建完成,但是没有与OpenStack集群做对接,数据是无法存储到ceph存储系统中的。

2.2.3、安装Ceph集群管理页面

//启用dashboard模块
ceph mgr module enable dashboard

//创建https证书
ceph dashboard create-self-signed-cert

//查看mgr服务
ceph mgr services

在OpenStack的R版基础上搭建CEPH存储群集_第9张图片
在浏览器中打开ceph网页
https://192.168.10.20:8443 此处IP地址是控制节点的地址
在OpenStack的R版基础上搭建CEPH存储群集_第10张图片
在命令行界面设置账号密码
ceph dashboard set-login-credentials admin 123 ###admin是账号 123是密码这个可以改
在这里插入图片描述
使用账号、密码登录ceph网页
在OpenStack的R版基础上搭建CEPH存储群集_第11张图片

2.2.4、Ceph与OpenStack对接环境初始化准备

//在控制节点上创建client.cinder并设置权限
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'

//控制节点创建client.glance并设置权限
ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children,allow rwx pool=images'

//传送秘钥到对接的节点,因为glance自身就装在控制节点所以不需要发送到其他的节点
ceph auth get-or-create client.glance |tee /etc/ceph/ceph.client.glance.keyring 
chown glance.glance /etc/ceph/ceph.client.glance.keyring 

在OpenStack的R版基础上搭建CEPH存储群集_第12张图片

//将client.cinder节点也进行设置权限,因为这个默认也是安装在controller上 ,所以不需要传递到其他节点,如果在其他节点就执行第一条语句##
ceph auth get-or-create client.cinder | tee /etc/ceph/ceph.client.cinder.keyring
chown cinder.cinder /etc/ceph/ceph.client.cinder.keyring

//同时也需要将client.cinder 传递到计算节点
由于计算节点需要将用户的client.cinder用户的密钥文件存储在libvirt中,所以需要执行如下操作
ceph auth get-key client.cinder |ssh c1 tee client.cinder.key 
ceph auth get-key client.cinder |ssh c2 tee client.cinder.key 
#####配置libvirt secret
//在C1节点上操作
1、生成UUID
命令:uuidgen   
eb46d080-e21c-4d37-9179-1cb685d13773

注意:这里生成的UUID复制下来,在后面的步骤中使用
在这里插入图片描述

2、用如下内容创建一个秘钥文件确保使用上一步骤中生成唯一的UUID
cd /root
cat >secret.xml <<EOF

   eb46d080-e21c-4d37-9179-1cb685d13773
   
    client.cinder secret
   

EOF

3、定义秘钥,并将其保存。后续步骤中使用这个秘钥
virsh secret-define --file secret.xml

在OpenStack的R版基础上搭建CEPH存储群集_第13张图片

4、设置秘钥并删除临时文件。删除文件的步骤是选的的,步骤是保持系统的纯净。
virsh secret-set-value --secret eb46d080-e21c-4d37-9179-1cb685d13773 --base64 $(cat client.cinder.key) && rm -rf client.cinder.key secret.xml
//在C2节点上操作
将第一个计算节点secret.xml 传到其他节点
cd /root
cat >secret.xml <<EOF

   eb46d080-e21c-4d37-9179-1cb685d13773
   
    client.cinder secret
   

EOF

virsh secret-define --file secret.xml
virsh secret-set-value --secret eb46d080-e21c-4d37-9179-1cb685d13773 --base64 $(cat client.cinder.key) && rm -rf client.cinder.key secret.xml

//在控制节点上执行,启动监控这三个ceph资源池
ceph osd pool application enable vms mon
ceph osd pool application enable images mon
ceph osd pool application enable volumes mon

2.2.5、Ceph对接Glance

//登录到glance所在的节点 然后修改
1、备份配置文件
cp /etc/glance/glance-api.conf /etc/glance/glance-api.conf.bak

2、修改对接配置文件
vi /etc/glance/glance-api.conf
[glance_store]
stores = rbd					●2054行、存储的类型格式
default_store = rbd				●2108行、修改默认的存储格式类型
#filesystem_store_datadir = /var/lib/glance/images/	●2442行、默认储存本地注销掉
rbd_store_chunk_size = 8		●2605行、去掉注释			
rbd_store_pool = images			●2626行、去掉注释
rbd_store_user = glance			●2645行、去掉注释、指定glance用户,不知道可以查
rbd_store_ceph_conf = /etc/ceph/ceph.conf		●2664行、去掉注释  指定CEPH的路径

//查找glance用户,对接上面#########
[root@ct ceph]# source /root/keystonerc_admin
[root@ct ceph(keystone_admin)]# openstack user list |grep glance
| ee8b4470f93c4e82b83f7bcd1bf3ad0d | glance   |  #这地方是glance用户

3、重启OpenStack-glance-api服务
systemctl restart openstack-glance-api

上传镜像做测试,再打开一个控制节点的终端窗口
1、点击【计算】–【镜像】–【创建镜像】–名称、文件、格式
点击【创建镜像】
在OpenStack的R版基础上搭建CEPH存储群集_第14张图片
2、等待过程中,通过终端可以查看上传到哪一步

tail -f /var/log/glance/api.log

镜像创建成功!
在OpenStack的R版基础上搭建CEPH存储群集_第15张图片

//查看ceph镜像大小
ceph df
//查看镜像ID号
rbd ls images 

在OpenStack的R版基础上搭建CEPH存储群集_第16张图片
在OpenStack的R版基础上搭建CEPH存储群集_第17张图片

2.2.6、ceph与cinder块存储对接

####ceph与cinder对接#####
1、备份cinder.conf配置文件
cp /etc/cinder/cinder.conf /etc/cinder/cinder.conf.bak

2、修改配置文件
vi /etc/cinder/cinder.conf
[DEFAULT]
enabled_backends = ceph			●409行,更改为ceph
#[lvm]
#volume_backend_name=lvm
#volume_driver=cinder.volume.drivers.lvm.LVMVolumeDriver
#iscsi_ip_address=192.168.100.10
#iscsi_helper=lioadm
#volume_group=cinder-volumes
#volumes_dir=/var/lib/cinder/volumes
[ceph]
default_volume_type=ceph
glance_api_version = 2  
volume_driver = cinder.volume.drivers.rbd.RBDDriver
volume_backend_name = ceph
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
rbd_user = cinder
rbd_secret_uuid = eb46d080-e21c-4d37-9179-1cb685d13773	####这个uuid是之前写在自己的计算节点上的

3、重启cinder服务
systemctl restart openstack-cinder-volume
systemctl status openstack-cinder-volume

4、创建cinder 的ceph存储后端相应的type 
source /root/keystone_admin
cinder type-create ceph 
cinder type-list    #查看cinder卷的类型 

在OpenStack的R版基础上搭建CEPH存储群集_第18张图片

5、设置后端的存储类型 volume_backend_name=ceph一定要顶格写不能有空格
cinder type-key ceph set volume_backend_name=ceph   

6、创建卷
点击【项目】–【卷】–【创建卷】
【卷名称】:ceph 【类型】: ceph 【大小】:10G
点击【创建卷】
在OpenStack的R版基础上搭建CEPH存储群集_第19张图片

7、查看创建的卷
rbd ls volumes

在OpenStack的R版基础上搭建CEPH存储群集_第20张图片

2.2.7、Ceph与Nova 对接

1、备份配置文件(C1、C2节点)
cp /etc/nova/nova.conf /etc/nova/nova.conf.bak

2、修改配置文件(C1、C2节点)
vi /etc/nova/nova.conf  所有计算节点的配置文件
[libvirt]
images_type = rbd				●7083行、去掉注释、修改类型RBD
images_rbd_pool = vms			●7107行、去掉注释、改为VMS在CEPH中声明的
images_rbd_ceph_conf = /etc/ceph/ceph.conf	●7110行、去掉注释、添加CEPH配置文件路径
rbd_user = cinder				●7267行、去掉注释、添加cinder
rbd_secret_uuid =eb46d080-e21c-4d37-9179-1cb685d13773	●7272行、去掉注释、添加UUID值
disk_cachemodes="network=writeback"		●6943行、去掉注释、添加"network=writeback"硬盘缓存模式
inject_password=false			●6436行,去掉注释
inject_key=false				●6460行,去掉注释
inject_partition=-2				●6493行,去掉注释
live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST,VIR_MIGRATE_TUNNELLED"		●找到live_migration附近添加整行  是否启用热迁移
hw_disk_discard=unmap			●7119行、去掉注释、添加unmap

3、安装Libvirt(C1、C2节点)
yum -y install libvirt

4、编辑计算节点(C1、C2节点)
vi /etc/ceph/ceph.conf
[client]
rbd cache=true
rbd cache writethrough until flush=true
admin socket = /var/run/ceph/guests/$cluster-$type.$id.$pid.$cctid.asok
log file = /var/log/qemu/qemu-guest-$pid.log
rbd concurrent management ops = 20

5、创建日志文件,加权限
mkdir -p /var/run/ceph/guests/ /var/log/qemu/
chown 777 -R /var/run/ceph/guests/ /var/log/qemu/

6、将控制节点的秘钥发给所有计算节点
cd /etc/ceph
scp ceph.client.cinder.keyring root@c1:/etc/ceph
scp ceph.client.cinder.keyring root@c2:/etc/ceph

7、计算节点重启服务
systemctl restart libvirtd
systemctl enable libvirtd
systemctl restart openstack-nova-compute

新建一个实例,在命令行用命令 rbd ls vms 查看
在OpenStack的R版基础上搭建CEPH存储群集_第21张图片
到这里,我们的OpenStack+ceph服务已经搭建成功了!

你可能感兴趣的:(OpenStack平台)