ceph介绍
ceph是一种开源的分布式的存储系统,分布式存储的优点:
高可靠
既满足存储读取不丢失,还要保证数据长期存储。在保证部分硬件损坏后依然可以保证数据安全
高性能
读写速度快
可扩展
分布式存储的优势就是“分布式”,所谓的“分布式”就是能够将多个物理节点整合在一起形成共享的存储池,节点可以线性扩充,这样可以源源不断的通过扩充节点提升性能和扩大容量,这是传统存储阵列无法做到的
openstack介绍
Openstack是一个开源的云平台管理项目,可以用于构建公有云或者私有云平台,提供了基础设施及服务的解决方案,OpenStack覆盖了网络、虚拟化、操作系统、服务器等各个方面,主要用来解决计算机资源问题,通过openstack可以启动,分配和管理虚拟机资源
openstack为什么要使用ceph存储
Openstack通过对接ceph,可以大大降低云环境的部署和运维复杂度。使用 Ceph 作为 OpenStack 后端存储,具有如下优点:
1.所有的计算节点共享存储,迁移时不需要拷贝根磁盘,即使计算节点挂了,也能立即在另一个计算节点启动虚拟机(evacuate)
2.利用COW(Copy On Write)特性,创建虚拟机时,只需要基于镜像 clone 即可,不需要下载整个镜像,而 clone 操作基本是0开销,从而实现了秒级创建虚拟机。
3.Ceph RBD 支持 thin provisioning,即按需分配空间,有点类似Linux文件系统的 sparse 稀疏文件。创建一个20GB的虚拟硬盘时,最开始并不占用物理存储空间,只有当写入数据时,才按需分配存储空间。
安装和配置ceph
1.机器规划
openstack的controller节点
ens33:提供浮动ip的,也就是出网地址 192.168.199.115 ens37:内网之间通信,采用仅主机模式的网卡 192.168.184.135
openstack的computer节点
ens33:提供浮动ip的,也就是出网地址 192.168.199.220 ens37:内网之间通信,采用仅主机模式的网卡 192.168.184.136
ceph_admin节点:
ens33:提供浮动ip的,也就是出网地址 192.168.199.211 ens37:内网之间通信,采用仅主机模式的网卡 192.168.184.134
2.安装ceph
1)ceph的admin节点ip规划
外网ip:192.168.199.211 内网ip:192.168.184.134
2)设置主机名
hostnamectl set-hostname admin
3)禁用掉NetworkManager
systemctl disable NetworkManager systemctl stop NetworkManager
4)禁用掉防火墙
systemctl disable firewalldsy stemctl stop firewalld
5)在三个节点配置hosts文件
cat /etc/hosts
192.168.184.135 controller1 92.168.184.136 computer 192.168.184.134 admin
6)时间同步
ntpdate time2.aliyun.com
7)三个节点配置相互之间无密码登陆
在controller节点
ssh-keygen -t rsa #一直回车即可 ssh-copy-id -i .ssh/id_rsa.pub admin #输入admin节点的密码
ssh-keygen -t rsa #一直回车即可 ssh-copy-id -i .ssh/id_rsa.pub computer #输入computer节点的密码
在computer节点
ssh-keygen -t rsa #一直回车即可 ssh-copy-id -i .ssh/id_rsa.pub controller #输入controller节点的密码
ssh-keygen -t rsa #一直回车即可 ssh-copy-id -i .ssh/id_rsa.pub admin #输入admin节点的密码
在admin节点
ssh-keygen -t rsa #一直回车即可 ssh-copy-id -i .ssh/id_rsa.pub controller #输入controller节点的密码
ssh-keygen -t rsa #一直回车即可s sh-copy-id -i .ssh/id_rsa.pub computer #输入computer节点的密码
8)安装ceph
新增如下yum源
/etc/yum.repos.d/ceph.repo
yum源内容如下
cat /etc/yum.repos.d/ceph.repo
[Ceph] name=Ceph packages for $basearch baseurl=http://mirrors.163.com/ceph/rpm-kraken/el7/$basearch enabled=1 priority=1 gpgcheck=1 gpgkey=https://download.ceph.com/keys/release.asc [Ceph-noarch] name=Ceph noarch packages baseurl=http://mirrors.163.com/ceph/rpm-kraken/el7/noarch enabled=1 priority=1 gpgcheck=1 gpgkey=https://download.ceph.com/keys/release.asc [ceph-source] name=Ceph source packages baseurl=http://mirrors.163.com/ceph/rpm-kraken/el7/SRPMS enabled=0 priority=1 gpgcheck=1 gpgkey=https://download.ceph.com/keys/release.asc
清理yum缓存
yum makecache
首先在admin 上安装ceph-deploy管理工具 并且创建ceph工作目录
mkdir -p /etc/ceph && cd /etc/ceph/ yum -y install ceph-deploy
在admin上使用ceph-deploy给所有节点安装ceph
ceph-deploy install admin controller computer
在admin 节点 进入ceph 目录 创建一个ceph集群
ceph-deploy new admin controller computer
命令执行之后在ceph目录会生成相关的配置文件ceph.conf
cat ceph.conf
[global] fsid = 37516893-56ee-44b8-807f-04e7b253e1e1 mon_initial_members = admin, controller, computer mon_host = 192.168.184.134,192.168.184.135,192.168.184.136 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx
在admin 节点上使用ceph-deploy创建Mon
ceph-deploy mon create admin controller computer
在admin节点上收集秘钥
ceph-deploy gatherkeys admin
在admin节点上使用ceph-deploy创建osd
ceph-deploy osd create admin:sdb controller:sdb computer:sdb
在admin 节点分发配置文件
ceph-deploy admin admin controller computer
给kerying添加权限 (每一个节点都要执行)
chmod +r /etc/ceph/ceph.client.admin.keyring
查看集群健康状态
ceph -s
显示如下说明集群正常
知识扩展,卸载ceph集群
在admin上执行如下步骤: ceph-deploy purge admin controller computer ceph-deploy purgedata admin controller computer ceph-deploy forgetkeys
3.配置ceph
创建ceph池,在admin节点操作
#创建volumes池,对应Cinder服务
ceph osd pool create volumes 128
#创建vms池,对应Nova服务
ceph osd pool create vms 128
#创建images池,对应Glance服务
ceph osd pool create images 128
#查看创建的volume池
ceph osd lspools
显示如下
在运行glance-api节点(controller节点)上确定安装了python-rbd
rpm -qa | grep python-rbd
显示如下
python-rbd-11.2.1-0.el7.x86_64
运行cinder-volume(controller节点)和nova-compute(computer节点)节点上确保安装了ceph-common软件包
rpm -qa | grep ceph-common
显示如下
ceph-common-10.2.11-0.el7.x86_64
授权设置,admin节点操作
#创建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'
在admin节点上操作,将上述创建的密码分发到glance-api和cinder-volume节点上,也就是发送到openstack的controller节点
#admin节点上操作
ceph auth get-or-create client.glance | ssh controller tee /etc/ceph/ceph.client.glance.keyring
#controller节点操作
chown glance:glance /etc/ceph/ceph.client.glance.keyring
#admin节点上操作
ceph auth get-or-create client.cinder | ssh controller tee /etc/ceph/ceph.client.cinder.keyring
#controller节点操作
chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
在admin节点上操作,将cinder.client发送到computer节点,运行nova-compute节点(computer节点)的服务需要使用cinder.client的秘钥,将其秘钥传送到computer 节点上去
#在admin节点操作
ceph auth get-or-create client.cinder | ssh computer tee /etc/ceph/ceph.client.cinder.keyring
nova-compuete节点需要将clinet.cinder秘钥存储到libvirt中 ,当基于ceph 后端的cinder 卷被分配到虚拟机的时候 需要访问秘钥,需要做以下操作
#在admin 节点操作
ceph auth get-key client.cinder|ssh computer tee client.cinder.key
在运行nova-compute节点(computer)上将临时秘钥文件添加到libvirt中,然后删除,如下步骤在compute节点上操作
uuidgen
显示如下
9a144709-dc79-48d9-9008-0f299c76d6d1
cat > secret.xml<
9a144709-dc79-48d9-9008-0f299c76d6d1
client.cinder secret
EOF
virsh secret-define --file secret.xml
生成如下秘钥
9a144709-dc79-48d9-9008-0f299c76d6d1
virsh secret-set-value --secret 9a144709-dc79-48d9-9008-0f299c76d6d1 --base64 $(cat client.cinder.key) && rm client.cinder.key secret.xml
上面命令执行之后输入y即可
y
y
openstack对接ceph
1.ceph与glance对接
把之前上传到openstack的镜像删除
在controller节点操作,修改glance-api.conf这个配置文件
cat /etc/glance/glance-api.conf
stores = rbd #改成rbd,原来是stores = file,http rbd_store_pool = images #这行的前面注释去掉 rbd_store_user = glance #这行原来有注释,去掉注释,把原来的none,改成glance这个用户 rbd_store_ceph_conf = /etc/ceph/ceph.conf #这行前面有注释,把注释去掉 rbd_store_chunk_size = 8 #这行前面注释去掉 default_store = rbd #原来是file,改成rbd
上面修改好之后,重启glance服务
systemctl restart openstack-glance-api.service systemctl restart openstack-glance-registry.service
查看日志/var/log/glance/api.log 没有报错就开始进行下面步骤
在openstack的dashboard重新上传镜像
在admin节点查看是否有镜像
rbd ls images
显示如下
cf5cd20a-402e-4818-ble6-41b0f951b2cf
ceph df 显示如下
上面images处显示USED是607m,这个就是镜像的大小,跟在dashboard看到的镜像大小一样
2.cinder块存储以及与ceph对接
cinder组件讲解:为云主机增加数据盘
openstack中创建云主机的时候可以创建一个卷,把这个卷挂到云主机上,如果云主机出现故障被删除,那么在找一个云主机,把这个卷挂到新的云主机上,数据还是会存在的,不丢失
cinder与nfs对接
(1)创建一个pv,vg(controller节点操作)
vgdisplay
显示如下
vgremove cinder-volumes pvcreate /dev/sdc vgcreate cinder-volumes /dev/sdc
(2)在controller节点重启cinder-volume这个服务
systemctl list-unit-files | grep cinder
显示如下
systemctl restart openstack-cinder-volume cd /var/log/cinder cat volume.log
显示如下,说明可以创建cinder卷了
(3)在dashboard的界面创建卷
http://192.168.184.135
项目------>卷------>创建卷
卷名称:test01
卷类型:iscsi
大小:10G
显示如下,说明创建成功
可以扩大卷,但是不能缩小卷
cinder与ceph对接
在controller节点修改cinder配置文件
cd /etc/cinder
cat cinder.conf
修改内容如下
glance_api_version = 2 #之前是注释的,把注释打开,值由1变成2 enabled_backends = ceph,lvm
在文件最后一行加上如下内容
[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 = 502804dd-8504-405a-b7a1-33a52ec3a77c
上面修改好了重启服务
systemctl restart openstack-cinder-volume source /root/keystone_admin
cinder type-create ceph
显示如下
cinder type-list
显示如下
cinder type-key ceph set volume_backend_name=ceph cinder create --volume-type ceph --name ceph-volume1 2
在dashboard界面可以看到创建了一个卷ceph-volume1,大小是2G
3.nova与ceph对接
在计算节点操作(computer节点)
修改配置文件/etc/nova/nova.conf 在最后一行加上如下配置
[libvirt] images_type = rbd images_rbd_pool = vms images_rbd_ceph_conf = /etc/ceph/ceph.conf rbd_user = cinder rbd_secret_uuid = 9a144709-dc79-48d9-9008-0f299c76d6d1 disk_cachemodes="network=writeback" inject_password=false inject_key=false inject_partition=-2 hw_disk_discard=unmap
上述修改好之后重新启动nova的配置文件
systemctl restart openstack-nova-compute
nova与ceph对接是需要使用raw 格式镜像,转化步骤如下
qemu-img convert -f qcow2 -O raw CentOS7.qcow2 centos7.raw
在dashboad界面创建一个镜像
镜像名称centos-raw
文件--->浏览cento7-raw
镜像格式:原始