ceph二次学习理解及命令使用
什么是分布式存储系统
传统存储:
客户端读写数据时需要一个controller或gateway,这种集中式组件通信架构使其天然具有单点故障、性能 瓶颈、扩展性差等特点。
分布式存储架构:
允许Client(客户端)直接访问OSD进程(硬盘),消除集中式架构,不再需要查询中心式元数据表,将计 算压力下发,提升整体存储性能
什么是CEPH
Ceph是一个开源的软件定义存储解决方案,它运行在商用硬件之上,从而使企业摆脱昂贵的、限制性的、专用的存储 系统。它提供了一个统一的、分布式的、高度可扩展的并且高可靠的对象存储解决方案,这非常符合当今以及将来的 非结构化数据存储需要。当今世界的存储需求爆炸性增长,因此我们需要一个这样的存储系统,它能够扩展到数EB级 别,而不会影响数据的可靠性和系统性能。Ceph经得起未来的考验,并为所有的这些问题提供解决方案。Ceph满足 真正的云存储解决方案的需求,并支持几乎所有的云平台。如今从任何角度看,Ceph都是一个宏大的存储解决方案
ceph基础架构图
ceph组件-OSD
主要功能包括存储数据, 处理数据的复制、 恢复、 回补、 平衡数据分布, 并将一些相关数 据提供给Ceph Monitor, 例如Ceph OSD心跳等。 一个Ceph的存储集群, 至少需要两个Ceph OSD来实现 active+clean健康状态和有效的保存数据的双副本(ceph默认是3) 。 注意: 每一个Disk、 分区都可以成 为一个OSD。(csmp中要求是每个disk作为一个osd)。ceph中建议每一个osd的大小一致,这样的话数 据才能更好的进行数据均衡
ceph组件-Monitor(mon)
Ceph Monitor: Ceph的监控器, 主要功能是维护整个集群健康状态, 提供一致性的决策, 包含了Monitor map、 OSD map、 PG(Placement Group) map和CRUSH map。
ceph组件-PG
PG:是一个逻辑概念,在这里起到了两个作用:第一个作用是划分数据分区。每个PG管理的数据区间相同,因而数据能够均
匀地分布;第二个作用是对object的存储进行组织和位置映射。这样便在object和osd之间提供一个中间映射层,如下图
1、 每个存储池下的pg一定要是2*,所以根据公式最接近2*的,就是每个pool下的pg个数;
2、 要求PGs/OSD*副本数(默认为3)≥ 30
3、pgp_mun的值应设置与pg的值一致。
pg常见的几种状态详解
Creating:PG正在被创建
Peering:持有同一个PG的OSD之间互相比较数据的过程,peering过程中,PG不可读写
Active: PG中的数据可以被读写,对该PG的操作请求都将会被处理。
Clean: PG中的所有对象都已经被复制了规定的副本数量。
Scrubbing: PG在做不一致性校验。
Degraded: PG中部分对象的副本数量未达到规定的数量
Undersized: PG当前Acting Set小于存储池副本数
Recovering: PG正在迁移或者同步对象及其副本。
Back Filling: OSD加入或离开集群后,集群原有的一部分PG进行迁移或进行全量同步
Down: PG处于失效离线状态,无法提供读写
Inconsistent: PG副本出现不一致
Unfound: 某个object已经不存在于任何活动的OSD上了
Inactivate: Pg中的数据不可被读写,pg remap流程无法处理完成
Crush算法
CRUSH:Controlled(可控的), Replication(重复的) ,Under,Scalable(可扩展的), Hashing(hash算法 )
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kPOk3j6R-1627907737311)(C:\Users\liuyong05\AppData\Roaming\Typora\typora-user-images\image-20210802200755691.png)]
数据的自动恢复与平衡
故障检测:
OSD主动将异常上报给Monito
Monitor与OSD间维持心跳
故障恢复:
OSD故障时,降级的PG计算出其他OSD,完成数据复制 已有故障OSD恢复,会从维护相同PG的OSD完成数据复制
数据平衡:
新增加OSD后,重新计算承载PG的OSD组,替换掉现有 OSD中的一个,并承担其数据
在数据复制完成后,被替换的OSD将退出该PG
数据写入过程
1.数据通过负载均衡策略获得节点IP地址
2.通过块、对象等协议传输数据到节点上
3.数据被分割成4M对象并取得对象ID
4.对象ID通过HASH算法被分配到不同的PG
5.不同的PG通过CRUSH算法被分配到不同的OSD
缓存加速
数据缓存加速功能:
• 在廉价的机械硬盘之上,通过SSD盘缓存加速提高存储的读写性能,满足高性能业务需求;
• 通过冷热数据分层原理,将热数据保存在SSD组成的Cache Tier中
数据的一致性
数据一致性:分布式系统通过副本控制协议,使得从系统外部读取系统内部各个副本的数据在一定的约束条件下相同, 称之为副本一致性(consistency)。
Ceph常见的命令和日志
ceph -s ##查看集群的状态
[root@ostack1 home]# ceph -s
cluster fdecc391-0c75-417d-a980-57ef52bdc1cc
health HEALTH_OK
monmap e1: 1 mons at {ostack1=127.0.0.1:6789/0}
election epoch 1, quorum 0 ostack1
osdmap e60: 2 osds: 2 up, 2 in
pgmap v2544223: 128 pgs, 1 pools, 67568 MB data, 17464 objects
105 GB used, 1941 GB / 2046 GB avail
128 active+clean
client io 0 B/s rd, 142 kB/s wr, 58 op/s
health:
health HEALTH_OK表示集群健康,health HEALH_WARN表示集群有告警信息,还有HEALTH_ERR状态,集群发生数据不一致等情况下的严重错误状 态。根据输出信息确定集群异常原因,通常情况下PG异常,OSD异常,集群时间不一致等异常都会在health处有提示
monmap:
查看集群monitor数量及所在节点;上图示例查看到,集群有3个monitor,分别位于node117,node118,node119上,显示的第一个为主monitor
osdmap
查看OSD总数,处于up(OSD在运行)状态和in(OSD在集群中)状态的OSD数量;上图示例查看到;集群共有18个OSD,处于up且in状态,此时OSD全部 正常
pgmap
查看集群PG数量、存储池数量、一份数据副本所占的空间大小、对象的总数量,还显示了集群使用的信息,包括已用容量、可用容量和总容量。最后还显示 了PG的状态信息;图中集群PG数量1024个,1个存储池,集群使用容量202G,object数量25603,可用容量9672G。
ceph health detail
查看ceph集群的详细健康状态信息,命令会列出所有不是active和clean状态的PG,包括所有处于unclean、 inconsistent、degraded状态的PG
[root@ostack1 home]# ceph health detail
HEALTH_OK
HEALTH_WARN表示集群处于“警告”状态
单节点故障,ceph osd tree查看down的OSD处于哪个节 点,查看该节点硬件、操作系统是否正常。
ceph -w
监控集群的状态变化,会持续输出,使用ctrl+c结束命令输出
集群PG状态正常时ceph -w 显示与ceph -s 开头显示一致
[root@ostack1 home]# ceph -w
cluster fdecc391-0c75-417d-a980-57ef52bdc1cc
health HEALTH_OK
monmap e1: 1 mons at {ostack1=127.0.0.1:6789/0}
election epoch 1, quorum 0 ostack1
osdmap e60: 2 osds: 2 up, 2 in
pgmap v2544657: 128 pgs, 1 pools, 67568 MB data, 17464 objects
105 GB used, 1941 GB / 2046 GB avail
128 active+clean
client io 0 B/s rd, 242 kB/s wr, 78 op/s
2021-08-02 20:18:08.731808 mon.0 [INF] pgmap v2544657: 128 pgs: 128 active+clean; 67568 MB data, 105 GB used, 1941 GB / 2046 GB avail; 0 B/s rd, 242 kB/s wr, 78 op/s
2021-08-02 20:18:11.803193 mon.0 [INF] pgmap v2544658: 128 pgs: 128 active+clean; 67568 MB data, 105 GB used, 1941 GB / 2046 GB avail; 0 B/s rd, 169 kB/s wr, 73 op/s
集群异常,可以通过osdmap、pgmap、mon、osd pgmap的实时输出,查看集群的状态
ceph osd tree
显示各个节点上的osd以及其在CRUSH map中的位置,显示osd权重(weight),UP/DOWN ,IN/OUT 状态,对 于维护一个大规模集群很有帮助
[root@ostack1 home]# ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 2.00000 root default
-2 2.00000 host ostack1.bj1.net
0 1.00000 osd.0 up 1.00000 1.00000
1 1.00000 osd.1 up 1.00000 1.00000
WEIGHT:表示容量,1TB对应1.00。
REWEIGHT:1代表处于in在集群中,0代表处于out不在集群
REWEIGHT:1代表处于in在集群中,0代表处于out不在集群
以osd.1为例,权重是1.0000,位于节点host ostack1.bj1.net,处 于 up状态
OSD 处于down状态5分钟后会从down:
单个OSD down/out,考虑是否有硬盘
整个节点OSD down,考虑是否有节点异常、网络异常
ceph osd perf
查看ceph集群中osd的延迟,commit_latency为写延迟,apply_latency为读延迟
主要需要关注 fs_apply_latency时延,单位ms
集群空闲状态下,延时持续大于10ms建议排查
集群空闲状态下,延时持续大于10ms建议排查
集群空闲状态下,延时持续大于10ms建议排查
[root@ostack1 home]# ceph osd perf
osd fs_commit_latency(ms) fs_apply_latency(ms)
0 2 4
1 2 3
ceph osd df
统计集群osd的使用数据,列出OSD的大小、已用容量、可用容量、使用率
集群有OSD使用率超过85% 就会触发nearfull
集群有OSD使用率超过95%,集群不可读写。
[root@ostack1 home]# ceph osd df
ID WEIGHT REWEIGHT SIZE USE AVAIL %USE VAR
0 1.00000 1.00000 1023G 55323M 969G 5.28 1.03
1 1.00000 1.00000 1023G 52375M 972G 5.00 0.97
TOTAL 2046G 105G 1941G 5.14
MIN/MAX VAR: 0.97/1.03 STDDEV: 0.14
lsblk
显示硬盘容量、分区、使用、挂载情况
iostat
iostat工具查看进程IO请求下发的情况,系统处理IO请求的耗时,进而分析进程与操作系统的交互过程中IO是否存储 在瓶颈,单独执行iostat,显示的结果为从系统开机到当前执行时刻的统计信息
root@ostack1 home]# iostat
Linux 3.10.0-1062.el7.x86_64 (ostack1.bj1.net) 08/02/2021 _x86_64_ (24 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
18.74 0.00 12.43 0.35 0.00 68.48
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sdc 8.71 15.21 181.32 93242635 1111802367
sdb 10.70 16.64 202.93 102011599 1244329243
sda 41.06 28.67 1105.70 175810838 6779850382
scd0 0.00 0.00 0.00 1028 0
dm-0 30.11 26.66 637.57 163448724 3909406507
dm-1 0.34 0.40 0.95 2475028 5820532
dm-2 7.88 0.69 413.23 4226254 2533783438
dm-3 3.70 0.92 53.95 5627234 330836279
dm-4 0.00 0.00 0.00 1098 2048
Ceph日志介绍
message:
系统日志,主要记录系统中的任意事件,可通过查看系统记录随时掌握 系统状况
kern.log
内核日志,主要存放系统内核消息,包括内核产生的日志,有助于在定 制内核时解决问题
ceph.log
记录集群的健康状况以及集群的流量等内容,只有监控节点才有,内容 与ceph -w查看内容一致
ceph-osd.*.log
记录集群对应硬盘的信息,若集群硬盘出现问题,对应的OSD日志将会 记录异常原因,作为定位问题的依据
ceph-mon.*.log
集群监控节点日志,mon的作用主要是监控集群,记录monitor异常原因,作为定位问题依据
ceph日志介绍
osd异常
需要提供syslog(/var/log/syslog),dmesg(/var/log/dmesg),相 关osd日志(/home/ceph/software/ceph/var/log/ceph/ceph- osd.*.log)
mon异常
需要提供相应的mon日志 (/home/ceph/software/ceph/var/log/ceph/ceph-mon.*.log)
ceph常见问题
问题一
问题原因:ceph -s查看集群有too few PGs per OSD
要求PG_num/OSD*副本数(默认为3)≥ 30 ,否则会产生告警
解决方案:修改pg和pgp的数量,满足限制要求。并且取值必须为最为接近的2的整数幂
各个节点执行
ceph osd pool set rbd pg_num 256
ceph osd pool set rbd pgp_num 256
问题二
问题原因:ceph -s 查看集群出现部分osd down
解决方法:手动重新拉去down掉的osd盘
在故障主机节点上执行/etc/init.d/ceph restart osd.x 重新拉起osd盘,使ceph集群恢复数据平衡
问题三
问题原因:在部署过程中作为osd的硬盘已经被分区使用
解决方法:删除硬盘的分区,重新部署。 也可以重新格式化硬盘,重新部署。 parted /dev/sdx rm y (x为盘符,y为分区号)。
举例:删除sdd磁盘的第三个分区:parted /dev/sdd rm
近的2的整数幂
各个节点执行
ceph osd pool set rbd pg_num 256
ceph osd pool set rbd pgp_num 256
问题二
问题原因:ceph -s 查看集群出现部分osd down
解决方法:手动重新拉去down掉的osd盘
在故障主机节点上执行/etc/init.d/ceph restart osd.x 重新拉起osd盘,使ceph集群恢复数据平衡
问题三
问题原因:在部署过程中作为osd的硬盘已经被分区使用
解决方法:删除硬盘的分区,重新部署。 也可以重新格式化硬盘,重新部署。 parted /dev/sdx rm y (x为盘符,y为分区号)。
举例:删除sdd磁盘的第三个分区:parted /dev/sdd rm