Ceph蹚坑笔记 - (2)

分布式存储中HDFS与Ceph两者的区别是什么,各有什么优势? 过去两年,我的主要工作都在Hadoop这个技术栈中,而最近有幸接触到了Ceph。我觉得这是一件很幸运的事,让我有机会体验另一种大型分布式存储解决方案,可以对比出HDFS与Ceph这两种几乎完全不同的存储系统分别有哪些优缺点、适合哪些场景。 对于分布式存储,尤其是开源的分布式存储,站在一个SRE的角度,我认为主要为商业公司解决了如下几个问题: 可扩展,满足业务增长导致的海量数据存储需求; ... 阅读详情

Ceph蹚坑笔记 - (2)

大数据量引发的LevelDB问题

在使用Ceph RGW 0.80时,由于还没有Bucket Index Sharding机制,一个Bucket的Index只会存放在一个对象的omap中,而omap是存放在OSD的LevelDB中的。所以,当一个Bucket存放了大量对象(比如几千万上亿),omap中会有大量记录,即其所在OSD的LevelDB中的数据量也大增。在日常使用时,并未发现什么问题。问题出在OSD意外终止后的重启过程。我们注意到,在OSD启动过程中,CPU占用率很高,大量内存(包括swap)也被消耗,要经过几个小时,OSD才会启动完毕。我们用pstack观察,发现整个漫长的过程中OSD主要是在对其LevelDB进行recover和compact操作。在Ceph邮件组的讨论中,Sage提到这个可能是因为早期的LevelDB存在bug,导致LevelDB一直没有进行必要的compact。
具体原因,我们还未细究,目前使用Ceph 0.94的Bucket Index Sharding功能和RocksDB之后,未再发现该问题。

Bucket Index引发的瓶颈问题

当外部向一个Bucket上传一个对象时,RGW执行的步骤大致为:
1. 在对应的Bucket Index写上一条pending的entry(如果开启datalog的话,还要写一条pending的日志)
2. 存入用户数据
3. 把刚才的pending的entry改为complete(如果开启datalog的话,还要写一条complete的日志)
所以,如果对象不大的话,Bucket Index上所承受的IOPS甚至远超用于写入用户数据的IOPS。
在Ceph RGW 0.80里,由于一个Bucket的Index只存在一个对象中(一个对象只会在一个PG中,对一个对象进行修改时需要相应锁PG,FileStore中对同一文件的操作也是串行的)。于是,当对一个Bucket进行并发修改时,Bucket Index就成了瓶颈。这种瓶颈在recovery/backfill的时候表现得尤其显著。当一个对象在被recovery/backfill时,所有对该对象的读写都将被挡住。所以,Ceph RGW 0.80中,当一个Bucket Index对象正处于recovery/backfill过程中时,对该Bucket的写将被暂时挂起,等到Bucket Index对象的recovery/backfill完成后,才会被执行。由于客户端一般都有超时设置,而且可能不太长,但Ceph RGW 0.80中大的Bucket Index对象可能需要很长的时间才能完成recovery/backfill,所以在客户端看来,操作在一段时间内就是一直都超时失败。
Ceph RGW 0.94中引入了Bucket Index Sharding的机制(把原来一个Bucket Index对象切成多个)。通过配置较大的shard数(rgw_override_bucket_index_max_shards),Bucket Index的瓶颈效应的到了很大改善。
应当注意的是,较大的shard数会有一个副作用,那就是降低List操作的性能。这时,可以适当调大rgw_bucket_index_max_aio来降低List的相应时间。在Bucket Index Sharding的情况下,List操作本质上是向多个shard发出子List请求,把各个shard返回的有序列表进行归并排序后再返回给客户端。调大这个rgw_bucket_index_max_aio意味着同时向更多的shard发出子List请求,从而降低总时间。当然,也不能因为有rgw_bucket_index_max_aio而无顾忌地使用太大的rgw_override_bucket_index_max_shards,因为shard数越多,List操作中的归并排序所需要的计算量和缓存也会大为增加。

分片上传导致Bucket List缓慢的问题

用S3接口对一个有大量对象的Bucket进行List操作时,一般是先调一次API列出几百调记录,然后在根据上一次API调用返回的marker继续列出后续的记录,如此反复直到Bucket中的所有对象被穷举完。
有一次,对一个大Bucket进行这样的操作时,我们注意到,前几次API调用都很快返回,然后中间有一次调用却耗时非常久,其后的API调用又恢复了较快返回。
从RGW的日志中发现,在执行耗时很久的那个操作时,RGW在过滤Bucket Index中的几万条以_multipart为前缀的记录。原来Bucket Index不只存放着用户可见的对象的列表(直接以对象名为key),对于未完成的分片上传的每一个分片也保留了记录(它们的key是以_multipart为前缀)。这些key在Bucket Index中是按字符串升序排列的。ASCII的数字和大写字母排在_之前,小写字母排在_之后。所以,前几个API调用还没有遇到_multipart,RGW只需要把Bucket Index中的entry读出直接返回个客户段即可。但当遇到以_multipart为前缀的key时,RGW就得逐一过滤掉这样的对象,这也就是那个耗时最久的操作所做的事。在走过所有_multipart为前缀的记录后,RGW的逻辑就又恢复到了以前的模式,所以相应速度又变快了。
所以,对于中断的分片上传,应当及时调用AbortMultipart操作,否则日积月累会严重影响List的速度。当然,RGW应该也有优化的空间,比如见到_multipart前缀时,直接换一个能够直接跳过所有_multipart前缀的marker,这样就不必一条一条过滤了。

非法字符导致Bucket List失败的问题

s3cmd ls bucket-x和s3 -u list bucket-x出错,报XML解析失败,但使用curl发出同样的请求,却可以收到HTTP 200的返回。通过查看curl所返回的XML发现,有的对象名含有(对应ASCII中的退格键)。原来%08在URL中是合法的,但根据https://www.w3.org/TR/REC-xml/#charsets 退格键不是XML中的合法字符。可见,RGW没有根据XML的标准对上传对象的名字进行校验,导致某些客户端能够使用含有非法字符的对象名上传对象。而且,这样的对象也无法用s3cmd或s3命令删除,因为它们都会在发出HTTP请求前把输入的非法字符替换掉。一个简单的清理方法是使用curl构造S3请求进行删除。以下是个例子:

host=127.0.0.1:7480
# %08 is backspace
file=abc%08def
bucket=bucket-x
resource="/${bucket}/${file}"
contentType="text/plain"
dateValue=`date -R -u`
stringToSign="DELETE

${contentType}
${dateValue}
${resource}"
s3Key=aaaaa
s3Secret=bbbbb
signature=`/bin/echo -n "$stringToSign" | openssl sha1 -hmac ${s3Secret} -binary | base64`
curl -X DELETE \
  -H "Date: ${dateValue}" \
  -H "Content-Type: ${contentType}" \
  -H "Authorization: AWS ${s3Key}:${signature}" \
  http://${host}/${bucket}/$file

当然,如果RGW返回的是JSON格式而不是XML,就不会遇到该问题。但RGW没有配置选项能够使其从XML切换到JSON的选项。从代码观察,对XML的使用是hard-code的,那么JSON格式的逻辑可能也缺乏测试。所以从稳定性角度考虑,目前也不太适合直接使用JSON格式。

【ceph】Ceph之PG状态详解--研读笔记 原文:分布式存储Ceph之PG状态详解 - 简书 1. PG介绍 继上次分享的《Ceph介绍及原理架构分享》,这次主要来分享Ceph中的PG各种状态详解,PG是最复杂和难于理解的概念之一,PG的复杂如下: 在架构层次上,PG位于RADOS层的中间。 a. 往上负责接收和处理来自客户端的请求。 b. 往下负责将这些数据请求翻译为能够被本地对象存储所能理解的事务。 是组成存储池的基本单位,存储池中的很多特性,都是直接依托于PG实现的。 面向容灾域的备份策略使得一般而言的PG需要执行跨节点的分布式写 阅读详情

相关推荐

基于ceph-deploy部署Ceph 集群

基于ceph-deploy部署Ceph 集群

m0_71593537的博客 1911

避坑指南:Ceph RBD性能测试中常见的5个误区与解决方案

本文深入剖析Ceph RBD性能测试中的5个常见误区,包括缓存陷阱、同步模式误用、网络瓶颈、条带化配置不当及测试工具选择错误,并提供专业解决方案。通过实战案例和性能调优建议,帮助用户准确评估和提升Ceph集群性能,避免数据失真和资源浪费。

weixin_29211309的博客 344

Ceph-deploy搭建ceph集群

Ceph可用于为云平台提供Ceph对象存储、块存储、文件系统存储。所有Ceph存储集群部署都从设置每个Ceph节点开始,然后设置网络块存储RedismasterslavezookeeperMysqlmasterslavecephFS对象存储Ceph存储集群需要以下内容:至少一个和至少一个,以及至少与Ceph集群中存储的给定对象的副本一样多的Ceph对象存储守护进程(OSD)(例如,如果给定对象的三个副本存储在Ceph集群中,则该Ceph集群中必须至少存在三个OSD)

qq_31055683的博客 1925

ceph 版本升级_Ceph V10.2.0 Jewel正式版本发布

本文由Ceph中国社区-半天河翻译,Devin校稿英文出处:官网release-notes欢迎加入翻译组此次主版本的更新将是下一个长期稳定发行版的基础版本。在Infernalis(9.2.X)版本和Hammer(0.94.X)版本后,我们做了许多重大修改,而且更新过程并不简单哦,请仔细阅读版本说明。在Infernalis版本上进行的重要修改CephFS这是第一个CephFS宣称稳定并且生产就绪的...

weixin_30946627的博客 717

【Ceph】基于ceph-deploy部署Ceph集群详解

我们相恋的季节,从夏天到冬天,记忆一页页翻阅,你却留下了思念。

陌上花开,静待绽放! 1413

Ceph:关于 Ceph 存储集群配置的一些笔记(7)

集群网络配置集群监视器(MON)配置和引导程序选项集群身份验证配置守护进程的配置选项编译后的默认值集中式配置数据库保存在本地主机上的配置文件环境变量命令行参数运行时将覆盖监视器(MON)节点管理集中的配置数据库,在启动时,Ceph 守护进程通过命令行选项解析环境变量和本地集群配置文件提供的配置选项,守护进程然后联系MON集群以检索存储在集中配置数据库中的配置设置。Red Hat Ceph Storage 5 已降级配置文件,使集中配置数据库成为存储配置设置的首选方式。

山河已无恙 2111

Ceph14.2.22集群部署及踩坑指南(纯内网环境,无yum源、无时间同步)

关于第一次部署ceph,之前的话,只是新建用户,分配空间,没有自己的部署过,实际的生产运维经验也比较少,最多的也就是之前做过一次ceph到阿里云OSS的数据迁移。因为是内网环境,除了可以上传一些包之外,与外网基本是隔绝的,而且操作界面也是很不适应,本来以为很快就可以搞定的,但实际用了几乎一下午的时间才搞定,遇到了一些坑,还好在周五下班前搞定了。这篇文章简单记录下,有同样疑问的,可以直接私信。♦️准备工作。...

smallbird108的专栏 1533

ceph搭建及使用详解

第1章 ceph介绍 1.1 Ceph的主要特点 统一存储 无任何单点故障 数据多份冗余 存储容量可扩展 自动容错及故障自愈 1.2 Ceph三大角色组件及其作用 在Ceph存储集群中,包含了三大角色组件,他们在Ceph存储集群中表现为3个守护进程,分别是Ceph OSD、Monitor、MDS。当然还有其他的功能组件,但是最主要的是这三个。 Ceph OSD Ceph的OSD(Object Storage Device)守护进程。主要功能包括:存储数据、副本数据处理、数据恢复、数据回补、平衡数据分布,并将

weixin_40548182的博客 1万+

Ceph蹚坑笔记 - (1)

关于ceph osd rm的行为初探

JeegnChen的博客 2750

Ceph:关于Ceph 集群如何访问的一些笔记(3)

对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》

山河已无恙 1703

Snort源代码编译 _ 采坑之旅(for Windows VS2015)

    系统环境:Windows7 sp1 x64     编译环境:VS2015 SP1     Snort版本:2.9.12     daq版本:2.0.6     Snort官网:https://www.snort.org/downloads#snort-downloads 背景     最近需要实现一个类似网络防火墙的产品,主要参考Snort源码,先花了点时间简单读了下网上比较流行的《...

magictong的专栏 8888

Ceph蹚坑笔记 - (3)

RGW的数据丢失和存储空间泄漏问题

JeegnChen的博客 3405

小曾WRF自学日记(3)渐入佳境 ——WRF实例-数据下载与WPS前处理

ww

weixin_46297571的博客 1480

Ceph蹚坑笔记 - (4)

使用radosgw-agent过程中见到的一些问题

JeegnChen的博客 1345

别再怕非观测区了!手把手教你用移相法搞定PMSM单电阻FOC的电流重构难题

本文详细解析了永磁同步电机(PMSM)单电阻FOC系统中非观测区的电流重构难题,重点介绍了移相法的工程实践。通过STM32平台的具体实现和调试指南,帮助工程师有效解决相电流检测中的采样窗口不足问题,提升系统稳定性和性能。

weixin_27252001的博客 433

openEuler 22.03 安装 openGauss 5.0.2 部署手册

openEuler 22.03 安装 openGauss 5.0.2 部署手册

全国服务器高效代维 1422

【Ceph】Ceph介绍、原理、架构

Ceph技术栈/学习图谱

我的笔记本 1万+

自动驾驶---Planning模块详细介绍(以Apollo为例)

主要介绍高速场景下Planning模块,至于低速的泊车场景对比高速场景或者城区场景有比较大的差距(后面也会介绍泊车场景),本篇Planning介绍主要包括三大子模块Routing,Behavioural Planning以及Motion Planining,并且对比较重要的Decider和Optimizer都做了通俗化的说明供大家思考,以便于后续理解更深入的内容,后面有时间会再开一些篇幅对这些模块进行更加深入的讲解。

智能汽车人的博客 2084

Proxmox ve 6.2 集群中Ceph的部署

Proxmox ve 6.2 集群中Ceph的部署 一、Ceph简介 Ceph 是一个高性能、高可靠、高可扩展的分布式对象存储和文件系统。 Proxmox VE 集成的 Ceph 优势有: 可以通过 CLI 和 GUI 轻松安装管理 支持薄模式存储 支持快照 自动修复 容量最大可扩充至 exabyte 级别 支持多种性能和冗余级别的存储池 多副本,高容错 可在低成本硬件运行 无需硬件 raid 控制器 开源软件 二、Ceph的安装 web向导安装 PS:向导安装ceph,安装过程中窗口关闭会终端安装

ggeol的博客 2271

腾讯面试——机器学习岗面试总结

先写合并两个有序数组,接着写合并n个有序的数组,假设总共m个数,讲了一个思路两两合并直到只剩下一个数组,分析一下时间复杂度(MlogN),面试官不满意,然后想了一下说了另一个思路,用n个指针开始指向各个数组的首端,用一个优先队列维护他们的最小值,每次拿出最小值的指针然后插入该指针的下一个值。感觉跟二面面试官聊得还是挺开心的,他详细地介绍了他们部门所做的业务,然后问了一下什么时候能来实现,我说只能暑假七八两个月,他觉得有点晚,这样子不利于转正,有些人都实习半年的,回去讨论一下,正式批之前给我答复。

FPGA/MATLAB学习教程/源码/项目合作开发 1230

玩转企业微信群机器人:一份超详细的Webhook消息推送指南

企业微信群机器人是一个连接内部协作与外部服务的强大桥梁。通过灵活运用本文介绍的各种消息类型,你可以构建出丰富多彩、信息明确的自动化通知系统,极大地提升团队沟通效率。现在,就动手试试,将你的第一个机器人集成到工作流中吧!如果你有任何有趣的机器人应用场景或遇到了问题,欢迎在评论区留言交流!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 3975

centos7.2 搭建ceph集群

centos7.2 搭建ceph集群 最近正在学习Kubernetes,搭建Kubernetes。看到可以使用harbor和cephfs配合搭建docker私有仓库。于是学习搭建ceph集群。 环境介绍 使用腾讯云的两台两台主机操作系统的和版本内核为: centos 7.2 、Linux 3.10.0-693.el7.x86_64。ceph 采用ceph version 10.2.10。

zcc_heu的博客 6322

LVGL 拨盘菜单(Dial Menu)

h。

摸鱼专家 191

Ceph集群部署

本节内容: Ceph集群部署。

qq_45817836的博客 2310

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

在Ubuntu20.04下基于ceph-deploy部署ceph 16.2.10

Ceph 是一个开源的分布式存储系统, 同时支持对象存储、 块设备、 文件系统。ceph 支持 EB(1EB=1,000,000,000GB)级别的数据存储, ceph 把每一个待管理的数据流(文件等数据)切分为一到多个固定大小(默认 4 兆)的对象数据, 并以其为原子单元(原子是构成元素的最小单元)完成数据的读写。

Operational_0624的博客 2001

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ceph 笔记

Ceph是一个开源的分布式存储系统,具有以下优势和特点:可扩展性:Ceph可以轻松地扩展到大规模的存储集群,支持数百或数千个节点,并能够处理PB级别的数据。弹性和高可用性:Ceph采用了复制和纠删码等机制来保证数据的弹性和高可用性。它在集群中自动复制数据副本,并且能够容忍多个故障或节点失效。统一的存储系统:Ceph提供了统一的接口和命名空间,使用户可以以各种方式访问数据,包括对象存储、文件系统和块设备。这简化了应用程序与存储交互的复杂性。自我管理:Ceph具有自动管理和自恢复的功能。

怨行客 966

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: Ceph蹚坑笔记 - (1)
下一篇: Ceph蹚坑笔记 - (3)
静夜恒辰
博客等级 码龄12年 8粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值