前言:
- Ceph ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和扩展性
- ceph项目最早其源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。
一、Ceph特点
-
高性能
① Ceph摒弃了传统的集中式元数据寻址方案,采用crush算法, 数据分布均匀,并行度高
② 考虑了容灾域的隔离,能够实现哥类负载的副本放置规则,例如跨机房、机架感知等
③ 能够支持上千个存储节点的规模,支持TB到PB级的数据
-
高可用性
① 副本数可以灵活控制
② 支持故障域分隔,数据强一致性
③ 多种故障常见自动进行修复自愈
④ 没有单点故障,自动管理
- 高可扩展性
① 去中心化
② 扩展灵活
③ 随着节点增加而线性增长
- 特性丰富
① 支持三种存储接口:块存储、文件存储、对象存储
② 支持自定义接口,支持多种语言驱动
二、Ceph架构介绍
2.1 Ceph生态系统大致分为四类
-
客户端 clients
数据用户
-
元数据服务器 mds metadata server cluster
缓存和同步分布式元数据
-
对象存储集群 osd object storage cluster
将数据和元数据作为对象存储,执行其他关键职能
-
集群监视器 Cluster monitors
执行监视功能
2.2 Ceph架构
2.2.1 三种接口文件
-
① Object
由原生的API,而且兼容Swift的S3和API
-
② Block
支持精简配置、快照、克隆
-
③ file
posix接口,支持快照
2.3 Ceph 核心组件简介
-
Monitor(监控):monitor在集群中扮演管理者角色,负责响应客户端请求返回具体数据的进程。一个Ceph集群一般都有很多个OSD
当Ceph集群为2个副本,至少需要2个OSD才能达到健康状态
-
MGR:由于Monitor负载过大,采用MGR来辅助Monitor管理
-
OSD(存储):负责响应客户端请求返回具体数据的进程,一个ceph集群有很多OSD
OSD还能够存储数据、处理数据的复制、恢复、回填再均衡、并且通过检查其他的OSD的守护进程的心跳,向monitor提供给一些监控信息
-
MDS(元数据):CephFS服务依赖的元数据服务,元数据的内存缓存,为了加快元数据的访问
-
Object:Ceph最底层的存储单元是Object对象,每个Object包含元数据和原始数据
-
PG(Placement Groups),PG就是管理Object(对象)的容器
-
RADOS(Reliable Autonomic Distributed Object Store):RADOS在动态变化和异质结构的存储设备机群之上提供一种稳定、可扩展、高性能的单一逻辑对象(Object)存储接口和能够实现节点的自适应和自管理的存储系统
-
Libradio:
Librados是Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的,目前提供PHP、Ruby、Java、Python、C和C++支持
-
Crush
CRUSH是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。
-
RGW
RGW全称RADOS gateway,是Ceph对外提供的对象存储服务,接口与S3和Swift兼容。
-
CephFS
CephFS全称Ceph File System,是Ceph对外提供的文件系统服务
三、Ceph三种存储类型
3.1 文件存储
-
典型设备
FTP NFS服务器
-
主要功能
为了克服块存储文件无法共享的问题,所以有了文件存储,在服务器上架设FTP和NFS服务,就是文件存储
-
优缺点
-
优点:
造价低、随便一台机器就可以
方便文件共享
-
缺点
读写速率低
传输速率慢
-
-
使用场景
日志存储、有目录结构的文件存储等等
3.2 块存储
-
典型设备
磁盘阵列、硬盘
-
主要功能
主要功能是将裸磁盘空间映射给主机使用
-
优缺点
-
优点
通过RAID与LVM等手段,对数据提供了保护
多块廉价的硬盘组合起来,提高容量
多块磁盘组合出来的逻辑盘,提升读写效率
-
缺点
采用SAN架构组网时,光纤交换机造价成本高
主机之间无法共享数据
-
-
使用场景
docker容器、虚拟机磁盘存储分配
日志存储、文件存储等等
3.3 对象存储
-
典型设备
内置大容量硬盘的分布式服务器(Swift,s3)
-
功能
多台服务器内置大容量硬盘,安装上对象存储管理软件,对外提供读写访问功能
-
优点
具备块存储的读写高速
具备文件存储的共享等特性
-
使用场景(适合更新变动较少的数据)
图片存储
视频存储
3.4 分布式文件系统比较
四、Ceph搭建
4.1 实验环境
- 此项实验基于之前的OpenStack多节点部署的环境,OpenStack多节点部署可查看我之前的博客:
-
注意,在部署Ceph之前,必须把和存储有关的数据清理干净(可在控制台删除),包括:
安装的实例
上传的镜像
cinder块
4.2 ceph环境部署
- 关闭所有节点的防火墙
[root@ct ~]# systemctl stop iptables
-
在三个节点上部署本地源
上传openstack_rock2.tar.gz 到/opt目录中
-
解压上传的包
[root@ct ~]# tar zxvf openstack_rocky2.tar.gz -C /opt
- 因为此处上传的文件和之前部署openstack的yum源的文件一致,所以直接清除缓存并重新创建缓存即可
[root@ct yum.repos.d]# yum clean all
[root@ct yum.repos.d]# yum makecache
4.3 Ceph集群搭建
- ① 在所有节点服务器上安装Python-setuptools工具和ceph软件
[root@ct ~]# yum install python-setuptools -y
[root@ct ~]# yum -y install ceph
- ② 在控制节创建ceph配置文件目录并安装ceph-deploy
[root@ct ~]# mkdir -p /etc/ceph
[root@ct ~]# yum -y install ceph-deploy
- ③ 在控制节点创建三个mon
[root@ct ~]# cd /etc/ceph/
[root@ct ceph]# ceph-deploy new ct c1 c2
......省略部分内容
[root@ct ceph]# more /etc/ceph/ceph.conf
[global]
fsid = b65b3c32-7d1e-4e5f-b2f6-24072373c333
mon_in