ceph是模块化和可扩展的,并且有容错设计。先进的分布式存储系统。
ceph凭借其高可扩展性、高可靠性、高性能的特点,逐渐成为openstack\cloudstack、opennebula等主流开源云平台后端存储的首选。可靠性、自平衡、自恢复、一致性
软件定义存储。
可以大幅降低企业存储基础设施的成本。
分布式、可大规模扩展,经济
虚拟平台KVM、VMWARE也支持ceph
ceph存储介绍
ceph部署实战
ceph架构和组件
ceph内部构建
ceph部署
ceph存储配置
ceph操作及管理
监控ceph集群
ceph与openstack集成
ceph性能调优和基准测试
1、ceph是什么
ceph是一个开源项目,它提供软件定义的、统一的存储解决方案。ceph可大规模扩展、高性能并且无单点故障的分布式存储系统。容量可扩展至EB级别。1EB=1024PB
ceph以章鱼作为自己的吉祥物,表达了ceph跟章鱼一样的并行行为。
inktank公司为ceph提供专业服务和技术支持。
版本历史
块存储
cephFS
对象存储
ceph与其他工具的对比
ceph-deploy工具部署
ceph架构:ceph存储集群由几个不同的软件守护进程组成,每个守护进程负责ceph的一个独特功能并将值添加到相应的组件中。
RADOS:可靠、自动、分布式对象存储(Reliable Autonomic Distributed Object Store),是ceph存储集群的基础。ceph中的一切都以对象的形式存储,而RADOS就负责存储这些对象,而不考虑它们的数据类型。RADOS确保数据一致性和可靠性。对于数据一致性,它执行数据复制、故障检测和恢复,还包括数据在集群节点间的迁移和再平衡。
MON监控健康状态:OSD,MON,PG,CRUSH。
librados提供接口
RBD块设备:支持快照和写时复制
RGW对象网关:支持S3和SWIFT
cephFS,MDS
自我管理,自我修复,自我计算
查看存储池:rados lspools
查看存储池的对象(metadata池的名字):rados -p metadata ls
查看集群空间:rados df
OSD:::
文件系统
日志大小常见的是10GB,一个SSD做日志最多分给4到5个OSD
每个磁盘推荐1-2GB内存
查看单节点上的OSD:service ceph status osd
检查OSD的ID:ceph osd ls
检查OSD map和状态:ceph osd stat
ceph osd tree 树形图
ceph monitor:集群map包括monitor\osd\pg\crush\mds map
检查mon map:ceph mon dump
检查osd map:ceph osd dump
检查pg map:ceph pg dump
crush map: ceph osd crush dump
ceph mds dump
检查mon状态:service ceph status mon
ceph mon stat
ceph mon_status
ceph mon dump
librados:
一个本地的C语言库,可以直接和RADOS通信。
RBD驱动被集成到LINUX内核中
ceph与open'stack紧密集成:写时复制快照、克隆和可恢复的只读快照
cgw:是一个代理,可以将HTTP请求转换成RADOS,也可以把RADOS请求转换成HTTP,从而提供RESTful对象存储。radosgw
MDS
部署MDS:ceph-deploy mds create ceph-node2
CEPH FS
ceph构架及其核心组件、底层实现
对象:
一个对象用一个全局唯一的标识符标识,元数据和数据
ceph的池是一个用来存储对象的逻辑分区,它提供了一个有组织的存储形式。
默认存储池: rbd,如果配置了MDS,则还会创建data/metadata
列出所有池:rados lspools
列出池中的对象名称:rados -p metadata ls
CRUSH算法:Controlled Replication Under Scalable Hashing
客户端使用自己的资源来执行CRUSH查找。
一次读写操作
恢复和再平衡:
修改crush map:
提取:ceph osd getcrushmap -o crushmap.txt
反编译:crushtool -d crushmap.txt -o crushmap-decompile
打开/修改: vi crushmap-decompile
重新编译: crushtool -c crushmap-decompile -o crushmap-compiled
应用:ceph osd setcrushmap -i crushmap-compiled
ceph osd tree :查看层级结构
bucket:表示放设备的容器,可以包含多个设备或子类型的bucket
device:设备,最基本的存储设备,也就是OSD,通常一个OSD对应一个磁盘存储设备
bucket类型:osd,host,chassis,rack,row,pdu,pod,room,datacenter,regin,root 11各等级
osd,主机,底盘,机架,一排机架,?,?,机房,数据中心,区域,根
修改bucket结构,例子:
PG:一组对象的逻辑集合
建议每个OSD上放置50-100各PG
PG总数计算公式
PG 总数= (OSD 总数x 100) /最大副本数
结果必须舍入到最接近2 的N 次幕的值。比如:如果C巳ph 集群有160 个OSD 且副本数是3 ,这样根据公式计算得到的PG 总数是5333.3 ,因此舍入这个值到最接近的2 的N 次幕的结果就是8192 个PG 。
我们还应该计算Ceph 集群中每一个池中的PG 总数。计算公式如下:
PG 总数= ((OSD 总数x 100) /最大副本数) /池数
同样使用前面的例子: OSD 总数是160 ,副本数是3 ,池总数是3 。根据上面这个公式,
计算得到每个池的PG 总数应该是1777 . 7 ,最后舍入到2 的N 次幕得到结果为每个池2 048个PG 。
PGP 是为实现定位而设置的PG ,它的值应该与PG 的总数(即pg_num) 保持一致。
查看数量:ceph osd pool get data pg_num
ceph osd pool get data pgp_num
检查池的副本数:ceph osd dump|grep -i size
规划PG数量
PG的peering、up集合和acting集合
一个池,一个CRUSH规则集
创建池:
ceph osd pool create web-services 128 128
查看池列表:ceph osd lspools / rados lspools / ceph osd dump|grep -i pool
修改副本数:ceph osd pool set web-services size 3
重命名池:ceph osd pool rename web-services frontend-services
池的快照操作
删除池也会删除快照
ceph osd poo1 de1ete frontend-services frontend-services --yes-i-rea11y-rea11y-mean-it
PG数据管理
ceph monitor:单核2GB内存,硬盘可以大点存储日志,1G/S的网卡
OSD:1块物理硬盘1各OSD,1GHZCPU和2GB内存,硬盘?,独立日志盘,一个SSD做2-4各OSD日志盘
MDS需要4核或更高,更高RAM
纠删码:整个机制需要的耗OSD 节点更多的计算能力。此外,在恢复时, 解码数据块也需要大量的计算。
纠删码的概念:n=k+m
配置纠删码
ceph缓存层
部署缓存层
基准测试