Ceph学习笔记(4)- OSD
前言
OSD是一个抽象的概念,对应一个本地块设备(一块盘或一个raid组)
传统NAS和SAN存储是赋予底层物理磁盘一些CPU、内存等,使其成为一个对象存储设备(OSD),可以独立进行磁盘空间分配、I/O调度等以达到客户端I/O操作与系统调用之间解耦。
与传统对象存储相比:
- ceph的OSD可以精确控制、CPU、内存、网络带宽等资源
- 实例化对象,定义了一套完备的对象接口,客户端可以直接操作对象,基于对象开发存储型应用
- 可自主进行数据复制、数据恢复、数据迁移,快速进行故障切换和恢复
- OSD与客户端、OSD之间以点对点的方式传播集群表,避免广播方式在OSD数量较大时形成广播风暴
OSD依赖ObjectStore(本地对象存储引擎)来访问块设备上的数据
工作方式
集群
客户端与OSD通信之前要获取osdmap,因此OSD up时需要向monitor报告自身元数据等信息。之后osdmap在集群之间传播,逐渐恢复此OSD与client、其他OSD之间的通信。所有OSD会周期性的向Monitor上报自身信息。每个OSD上驻留一个monitorClient,负责与Monitor通信,有了monitorClient之后,OSD不需要与Monitor直连,因此如果Monitor故障也可以通过monitorClient来切换,而不需要OSD重连
网络
网络通信组件Messenger允许OSD采用TCP/IP、Infiniband等流行的网络通信协议与客户端和其他OSD通信。Ceph将RADOS集群的网络分为公共网络与集群网络,两个网段互不干扰,客户端通过Monitor获得osdmap,因此Monitor通信在公共网络。集群网络则用于OSD之间通信。
进行网络隔离一方面时因为公共网络传输量要远远小于集群网络,OSD需要将客户端写入的数据根据不同的备份策略复制到其他的OSD上,同时OSD恢复、自动数据均衡等都会增加网络负载。另一方面是客户端业务与集群通信的性质不同,避免两者进行干扰如OSD之间通信抢占带宽等。
每个IP地址绑定一个Messenger,但是Messenger可以维护多条链路,实现多个客户端同时访问一个OSD,或一个OSD同时与多个OSD通信。
Messenger类型如下图:
在业务压力不大的情况下公共网络可以使用千兆网络,但是存储内网最好使用万兆网络,否则集群性能会严重受损
OSDService
OSDService是OSD层面的服务,包括如下:
- 传播和发布osdmap
- 消息收发(与monitor、其他OSD)
- 提供全局的本地存储引擎ObjectStore,具体实现分为FileStore和BlueStore,BlueStore的性能要强于FileStore
- 透传OSD自身状态
- 针对PG的recovery、scurb等任务进行资源分配和调度
OSD中还有线程池、定时器等。线程池供任务分时间片使用。定时器用来处理OSD的一些周期性的任务,如心跳检测、scrub调度等
OSD故障检测
OSD故障后对外部展示的4种状态如下图:
up、down代表OSD临时故障或下电,不会发起数据恢复;in、out代表被踢出集群,集群发起数据恢复
所有类型的故障会记录再osdmap后报告到Monitor,然后扩散至集群,其他OSD收到消息后采取对应的措施。
Monitor通过一下三种方式检测OSD故障(下电):
- OSD自主上报状态,优雅下电
- 通过心跳检测向Monitor报告失联的OSD,满足以下两个条件,OSD被标记为down:
- OSD检测到伙伴OSD返回ECONNREFUSED错误,则设置Force/ Immediate标识,向Monitor上报
- 候选OSD积累的有效票数达到阈值(默认2),投票采用少数服从多数的方式,并且来自某个最小故障域的主机所有OSD针对候选OSD的投票算1票
- 每个OSD周期性(默认300秒)的向Monitor发送Beacon消息证明自己存活,如果Monitor一段时间(默认900秒)没收到OSD的Beacon,就标记OSD为down。OSDdown后超过600S,会被标记为out(Monitor通过 一个名为 mon_ osd_ down_ out_ subtree_ limit的配置项来限制自动数据迁移的粒度,例如设置为主机,则 当某个主机上的OSD全部宕掉时,这些OSD不再会被自动标记为Out,也就无法自动进行数据迁移,从而避免 数据迁移风暴)
OSD空间管理
OSD空间使用率对外展示如下图:
- Nearfull:默认为OSD设备裸容量的85%
- Backfillfull:数据恢复、自动均衡以backfill方式进行数据迁移,集群内部的活动,不受Full约束,因此引入Backfillfull
- Full:默认OSD设备裸容量95%
- Failsafefull:如果引擎使用FileStore,会使用本地文件系统接管磁盘,文件系统使用率超过一定门限时会变成只读,为防止灾难发生,引入Failsafefull
每个OSD向Monitor上报自身空间使用量,之后由Monitor计算集群使用量,存储池使用量,再统一展现出来
Ceph学习笔记(4)- OSD的更多相关文章
- Ceph学习笔记(2)- CRUSH数据分布算法
前言: 分布式存储系统需要让数据均匀的分布在集群中的物理设备上,同时在新设备加入,旧设备退出之后让数据重新达到平衡状态尤为重要.新设备加入后,数据要从不同的老设备中迁移过来.老设备退出后,数据迁移 ...
- Ceph学习笔记(3)- Monitor
Ceph学习笔记(3)- Monitor 前言: Ceph将cluster map与placement rule合并为一张表称为crush map,作为集群表的一部分.由Monitor对集群表的副 ...
- ceph学习笔记之十二 Ubuntu安装部署Ceph J版本
https://cloud.tencent.com/info/2b70340c72d893c30f5e124e89c346cd.html 安装Ubuntu系统安装步骤略过 拓扑连接: 一.安装前准备工 ...
- delphi操作xml学习笔记 之一 入门必读
Delphi 对XML的支持---TXMLDocument类 Delphi7 支持对XML文档的操作,可以通过TXMLDocument类来实现对XML文档的读写.可以利用TXMLDocum ...
- Kubernetes 学习笔记(一):基础概念
个人笔记,仅本人查阅使用,不保证正确. 零.微服务 微服务架构专注于应用解耦合,通过将应用彻底地组件化和服务化,每个微服务只包含一个非常小的功能,比如权限管理.日志收集等等.由这一组微服务组合起来,提 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
随机推荐
- qt creator源码全方面分析(3-5)
目录 qtcreatorlibrary.pri 使用实例 上半部 下半部 结果 qtcreatorlibrary.pri 上一章节,我们介绍了src.pro,这里乘此机会,把src目录下的所有项目文件 ...
- Js中的For循环详解
大家好,我是逆战班的一员,今天给大家讲解一下Js循环中的For循环. For循环是JS循环中一个非常重要的部分. 我们先讲一下for循环的作用: For循环用在需要重复执行的某些代码,比如从1打印到1 ...
- Natas4 Writeup(Referer篡改)
Natas4: 提示来源出错,合法用户只能来自"http://natas5.natas.labs.overthewire.org/". 在http的header中,referer代 ...
- angualrjs 总结 随记(一)
$apply方法的作用 $apply方法是用来触发脏检查,它在控制器里监听一个变量,每当这个变量的值改变的时候,它会去与最初的值做一次比较,然后HTML页面就会及时更新该变量的值(将最新的值赋值到ht ...
- NeurIPS 2019 Spotlight | Cascade RPN,结构的艺术带来极致的提升
论文提出Cascade RPN算法来提升RPN模块的性能,该算法重点解决了RPN在迭代时anchor和feature不对齐的问题,论文创新点足,效果也很惊艳,相对于原始的RPN提升13.4%AR 论文 ...
- kerberos系列之hive认证配置
大数据安全系列之hive的kerberos认证配置,其它系列链接如下 https://www.cnblogs.com/bainianminguo/p/12548076.html-----------安 ...
- WebStorm添加Angular2服务启动的脚本命令
注意:选择的start在package.json可以修改. 例如添加一个run命令:
- C++中decltype(*)作为模板实参时的隐藏问题
在函数模板中使用智能指针时,可能会希望根据指针的类型推导出指针引用的对象类型作为模板参数,于是写出以下代码: shared_ptr<decltype(*objPtr)>(objPtr); ...
- effective-java学习笔记---注解优于命名模式39
命名模式的缺点有以下三点:(在第 4 版之前,JUnit 测试框架要求其用户通过以 test[Beck04] 开始名称来指定测试方法) 1.拼写错误导致失败,但不会提示. 2.无法确保它们仅用于适当的 ...
- PyTorch1.2.0版本来啦!居然还有全套视频!让你快速熟练掌握深度学习框架!
[翻到文末, 还能让你看尽CV和NLP完整技术路径以及前沿+经典论文篇目,助你构建深度学习知识框架] 今年8月!PyTorch 1.2.0 版本来啦!! 据我们了解,在学术领域,特别是CV/NLP方向 ...