存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载本指南围绕 Ceph 源码仓库中 RGWRADOS Gateway数据去重功能的脚本化测试套件展开核心文档为 src/test/rgw/dedup/README.rst。通过本文你将掌握如何用vstart.sh启动本地开发集群、如何编写去重测试的配置文件、如何通过tox/pytest一键运行去重测试套件并理解测试代码如何借助 S3 接口、radosgw-admin命令与admin/dedupREST API 验证去重前后集群物理空间的真实变化。一、测试套件定位为什么要做 Dedup 脚本化测试Ceph RGW 的数据去重Dedup功能用于发现并消除对象存储中的重复数据当多个 S3 对象内容相同时去重过程将重复副本改写为指向单一副本source的引用从而节省底层 RADOS 池的物理空间。该功能的核心实现在 src/rgw/driver/rados/rgw_dedup.cc 及配套的rgw_dedup_*.h头文件族rgw_dedup_cluster.h、rgw_dedup_epoch.h、rgw_dedup_filter.h、rgw_dedup_remap.h、rgw_dedup_store.h、rgw_dedup_table.h等中。由于去重是数据面操作任何误判都可能造成数据损坏或误删因此仓库在 src/test/rgw/dedup 目录下维护了一套完整的脚本化测试套件用于验证去重前后池中 RADOS 对象数量与磁盘字节数是否符合预期差值应等于重复数据的空间验证去重后对象仍可通过 S3 正常读取ETag 与内容哈希保持一致验证压缩对象、多副本对象、多部分上传对象、多租户对象等复杂场景下的去重行为验证estimate预估、exec执行、pause暂停、resume恢复、abort中止、throttle限速等去重控制操作。二、运行前置条件用 vstart.sh 启动本地集群原文档的第一步是启动集群Start the cluster using thevstart.shscriptvstart.sh位于仓库根目录的 src/vstart.sh是 Ceph 开发人员最常用的本地集群启动脚本。运行方式如下cd src ./vstart.sh -n -d # -n 表示全新启动不保留旧数据-d 表示调试模式由于本测试套件通过 boto3 访问 S3 接口endpoint_urlhttp://host:port并频繁调用radosgw-admin与rados命令集群必须包含运行中的 RADOS Gateway。默认配置下 vstart 会启动 RGW如未启动可显式设置RGW1 ./vstart.sh -n同时需要 mon、mgr、osd 等基础组件。测试配置中的cluster参数如c1用于在调用radosgw-admin和rados时指定集群名称——测试代码通过 src/test/rgw/test-rgw-call.sh 中的call_rgw_admin/call_rgw_rados函数以--cluster参数把命令指向 vstart 创建的集群。三、配置文件详解deduptests.conf.SAMPLE运行测试前必须准备一份配置并通过环境变量DEDUPTESTS_CONF指向它。仓库提供了样例配置 deduptests.conf.SAMPLE内容如下[DEFAULT] port 8101 host localhost #zonegroup default #cluster noname zonegroup zg1 zone zg1-1 cluster c1 # Optional; defaults to {zone}.rgw.buckets.data when omitted #data_pool zg1-1.rgw.buckets.data [s3 main] # vstart default user: #access_key 0555b35654ad1656d804 #secret_key h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q # test-rgw-multisite.sh system user (zone.user) -- do not use for boto3 S3 ops: #access_key 1234567890 #secret_key pencil # test-rgw-multisite.sh regular user (regular.user): access_key 0987654321 secret_key crayon display_name M. Tester user_id testid email testerceph.com3.1 DEFAULT 段连接与集群参数配置文件必须包含[DEFAULT]段缺少时会直接报错其键值由init.py 中的setup()解析为全局变量配置键样例值含义必填hostlocalhostRGW 网关监听的主机名是port8101RGW 网关端口443/8443 时走 https否则 http是zonegroupzg1Zonegroup 名称同时作为 boto3 客户端的region_name是zonezg1-1Zone 名称是clusterc1集群名称用于radosgw-admin/rados的--cluster参数是data_poolzg1-1.rgw.buckets.data存放对象数据的 RADOS 池名省略时默认取{zone}.rgw.buckets.data否其中data_pool的默认推导逻辑位于init.py若配置中未显式设置data_pool则取zone拼接.rgw.buckets.data若zone也未设置则直接抛出RuntimeError要求必须配置data_pool或zone之一。3.2 [s3 main] 段S3 测试用户凭据该段提供测试用 S3 用户的访问凭据缺段同样会报错。样例中注释了两种常用凭据并给出使用提示vstart 默认用户0555b35654ad1656d804/h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q这是vstart.sh自动创建的用户适合大多数本地测试test-rgw-multisite.sh 的系统用户1234567890/pencil配置注释明确警告不要用于 boto3 S3 操作系统用户走内部数据路径不适用 S3 协议test-rgw-multisite.sh 的普通用户0987654321/crayon当前样例实际启用的凭据。display_name、user_id、email等字段用于用户创建场景的辅助信息例如another_user()创建租户用户时设置显示名。四、运行测试DEDUPTESTS_CONF tox按原文档指引在src/test/rgw/dedup目录下执行cd src/test/rgw/dedup DEDUPTESTS_CONFdeduptests.conf.SAMPLE tox4.1 tox.ini 的执行语义tox.ini 内容如下[tox] envlist py skipsdist True [testenv] deps -rrequirements.txt passenv DEDUPTESTS_CONF commands pytest {posargs}skipsdist True跳过源码打包直接在当前目录运行deps -rrequirements.txt安装 requirements.txt 中声明的依赖即boto3 1.0.0与pytestpassenv DEDUPTESTS_CONF将环境变量透传给测试进程——这是配置能够生效的关键commands pytest {posargs}最终由 pytest 驱动执行{posargs}允许你透传额外的 pytest 参数例如DEDUPTESTS_CONFdeduptests.conf.SAMPLE tox -- -k compression -x4.2 pytest 行为配置pytest.ini 定义了[pytest] markers basic_test log_clitrue log_cli_levelINFO注册自定义标记basic_test可用于-m basic_test筛选基础用例开启 CLI 实时日志并默认INFO级别便于观察每个用例的建桶、上传、去重、清理过程log_cli_levelWARNING可临时降噪。4.3 环境变量缺失时的行为若未设置DEDUPTESTS_CONFinit.py 会抛出RuntimeError: To run tests, point environment variable DEDUPTESTS_CONF to a config file.。同理配置缺[DEFAULT]或[s3 main]段也会分别报错——这保证了测试绝不会在错误配置下静默运行。五、测试代码架构从数据生成到空间验证整个套件的核心是 test_dedup.py约 5500 行组织为若干可复用模块5.1 命令封装层bash()带 300 秒超时的子进程执行器超时即断言失败admin(args)封装radosgw-admin经 test-rgw-call.sh 的call_rgw_admin传入集群名用于建用户、加 caps、查对象、处理 GC 等rados(args)封装rados命令用于lspools、ls、stat等底层池操作admin_rest(method, params)直接向http://host:port/admin/dedup发送带 AWS 签名HmacV1的 GET/POST 请求用于去重控制类操作。5.2 连接与用户管理_make_s3_client()按配置的 host/port/zonegroup 创建 boto3 S3 客户端端口 443/8443 自动切换 httpsget_connections()连接池复用减少重复建连开销another_user()通过radosgw-admin user create创建带租户的新用户用于多租户去重场景close_all_connections()/verify_no_forgotten_buckets()teardown 阶段清理所有残留桶与对象防止污染后续用例。5.3 测试数据生成write_file()/write_random()向/tmp/dedup/写入随机字节文件记录(filename, size, copies_count)gen_files_fixed_size()/gen_files_fixed_copies()/gen_files_in_range()按固定大小、固定副本数或随机区间批量生成文件gen_files_in_range()中通过min_copies_count2人为制造重复数据从而保证去重空间可被精确预测关键常量见 test_dedup.py常量值含义DEDUP_MIN_OBJ_SIZE64 KB小于此大小的对象跳过去重对应Dedup_Stats.skip_too_smallRADOS_OBJ_SIZE4 MB单个 RADOS 对象尺寸用于换算对象切分MULTIPART_SIZE15 MB多部分上传阈值与 s3cmd 默认一致超过则走 multipartMAX_COPIES_PER_OBJ128单对象最大副本数ETAG_ATTRuser.rgw.etag去重后校验 ETag 的 xattr5.4 空间验证底层池的真实对账去重测试最关键的验证逻辑是count_object_parts_in_all_buckets()用rados lspools确认数据池存在用rados ls -p pool列出池内全部 RADOS 对象统计对象数量若对象数不超过 1000进一步逐个rados stat累加字节数并按 4096 块对齐换算calc_on_disk_byte_size()与测试预期的expected_size精确比对去重成功后池内对象数与磁盘字节数应显著小于去重前。该函数位于 test_dedup.py配合calc_rados_obj_count()/calc_head_size()/calc_dedupable_space()等辅助函数测试可以预先计算出“去重后应剩多少对象、多少字节”再做端到端对账从而把去重收益变成可断言的硬指标。5.5 清理与隔离cleanup()/cleanup_all_buckets()删除本地临时文件、清空并删除 S3 桶verify_pool_is_empty()先radosgw-admin gc process --include-all强制处理垃圾回收再断言池内对象数为 0、无遗留桶__init__.py中的configfilefixtureautouse, scopepackage在全部用例结束后自动调用restore_default_compression_via_period()与close_all_connections()确保压缩设置与连接状态恢复原状。六、去重管理操作REST API 与 CLI 对照测试通过两条路径驱动去重引擎radosgw-admin dedupCLIdedup_admin_cli()与admin/dedupREST 接口dedup_admin()。两者的操作集合由 rgw_rest_dedup.cc 定义opHTTP 方法语义对应 CLI 子命令statsGET查询去重运行统计radosgw-admin dedup statsthrottleGET/POST查询/设置去重限速radosgw-admin dedup throttleestimatePOST只扫描预估可回收空间不实际去重radosgw-admin dedup estimateexecPOST真正执行去重需显式确认radosgw-admin dedup exec --yes-i-really-mean-itabortPOST中止进行中的去重radosgw-admin dedup abortpausePOST暂停去重radosgw-admin dedup pauseresumePOST恢复去重radosgw-admin dedup resume几个关键实现细节权限控制REST 操作必须先为用户授予dedup相关 caps。_ensure_dedup_caps()test_dedup.py通过radosgw-admin caps add --uid uid --caps dedup*授予dedup*否则请求会因RGWUserCaps校验失败被拒服务端在 rgw_rest_dedup.cc 中以caps.check_cap(dedup, RGW_CAP_READ/WRITE)做读写分级校验exec 需要显式确认REST 调用exec时必须附带参数yes-i-really-mean-itCLI 侧对应--yes-i-really-mean-it标志见 test_dedup.py防止误触发真实去重stats 与 throttle 的 GET 判定dedup_admin()中仅stats及带stat标志的throttle走 GET其余一律 POST运行态标志去重执行标志dedup_exec、remote_paused等控制字段定义在 rgw_dedup.h 并由 rgw_dedup.cc 编解码与驱动REST 层的 pause/resume/abort 最终通过紧急控制消息URGENT_MSG_ABORT/PASUE/RESUME作用于去重主循环。七、统计指标如何判断去重收益测试通过Dedup_Stats数据类test_dedup.py收集去重过程中的各类计数器可归纳为四组跳过类为什么不去重skip_too_small/skip_too_small_bytes小于DEDUP_MIN_OBJ_SIZE的对象skip_shared_manifest/skip_singleton/skip_singleton_bytes共享 manifest 或仅单副本的对象skip_src_record源记录缺失skip_changed_object去重期间对象被修改skip_compressed_objs/skip_compressed_bytes跳过压缩对象压缩数据不参与字节级去重。哈希校验类corrupted_etagETag 损坏hash_mismatch/valid_hash/invalid_hash/set_hash内容哈希比对结果。执行结果类deduped_obj/deduped_obj_bytes实际去重对象数与字节数set_shared_manifest_src设置共享 manifest 源次数set_compression_on_tgt/clear_compression_on_tgt目标对象压缩标志的调整deduped_compressed_objects去重过的压缩对象数。总量类total_processed_objects、size_before_dedup、dedup_bytes_estimate、non_default_storage_class_objs_bytes等。此外Dedup_Ratios3_bytes_before/s3_bytes_after/ratio用于直接刻画“去重前后 S3 逻辑字节数”的压缩比例。测试会把这些指标与第 5.4 节的底层池对账结果交叉印证REST/CLI 返回的统计值与rados ls/stat实测的物理空间必须一致。八、常见问题与排障要点RuntimeError: To run tests, point environment variable DEDUPTESTS_CONF...未设置或未透传DEDUPTESTS_CONF直接运行pytest而非tox时尤其容易触发因为 tox 通过passenv显式透传。解决方案export DEDUPTESTS_CONFdeduptests.conf.SAMPLE后再运行。连接被拒/端口不对确认deduptests.conf中host/port与vstart.sh实际启动的 RGW 监听地址一致样例端口为8101。RADOS data pool ... not founddata_pool或推导用的zone与集群实际池名不匹配可用rados lspools核对多站点场景下务必让zonegroup/zone/cluster与 test-rgw-call.sh 传入的集群一致。权限不足确认测试用户在配置中使用了正确的凭据且已通过_ensure_dedup_caps()完成dedup*caps 授予使用 test-rgw-multisite.sh 的系统用户执行 S3 操作会失败应改用注释中标注的普通用户。测试残留污染若某用例失败导致桶未清理verify_no_forgotten_buckets()会警告并自动删除残留桶后再继续保证后续用例从干净状态开始。九、结语Dedup 脚本化测试套件是 Ceph RGW 去重功能质量保障的重要一环它用一套约 5500 行的 pytest 用例把“S3 写入重复数据 → 触发去重 → 底层池空间对账 → 数据可读性与哈希一致性校验”的完整链路自动化。对开发者而言掌握vstart.sh DEDUPTESTS_CONF tox这条运行路径就等于掌握了复现、验证与扩展 RGW 去重行为的标准入口对使用者而言本文介绍的estimate/exec/pause/resume/abort/throttle操作与Dedup_Stats指标同样适用于生产环境中评估和管控去重任务。建议结合 test_dedup.py、rgw_rest_dedup.cc 与 rgw_dedup.cc 深入阅读以完整掌握去重引擎的实现细节。赞分享存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载相关推荐MaaAssistantArknights 启动任务StartUp实战指南模拟器自动拉起、客户端启动与账号切换的实现原理MaaAssistantArknights 启动任务StartUp实战指南模拟器自动拉起、客户端启动与账号切换的实现原理 本篇围绕 MaaAssistan存储分布式文件系统对象存储后端高可用5分钟快速上手全网资源下载神器res-downloader终极使用指南5分钟快速上手全网资源下载神器res downloader终极使用指南 你是否经常遇到这样的情况看到精彩的短视频想保存却无法下载听到好听的音乐只能在线收听存储分布式文件系统对象存储后端高可用pipenv自动化测试集成pytest与tox的完整方案pipenv自动化测试集成pytest与tox的完整方案 想要为Python项目建立 可靠高效的自动化测试体系 吗pipenv作为现代化的Python开发工开发工具CLI包管理器上一篇OpenDrop系统服务优化减少启动时间与资源占用下一篇GitBucket高可用产品选型解决方案指南方法论与工具选型创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
2026 中小企业财务 AI 选型指南:按业务阶段匹配对应解决方案 中小企业财务AI正在变成一个越来越宽泛的概念。有些产品专注发票和凭证识别,解决的是“录得慢、录得错”;有些以RPA数字员工的形态出现,能登录网银、ERP和税务系统,把对账、报销校验这类跨系统工作跑起来;还有一些偏向… · 2026/9/24 19:36:08
Word打开显示只读的6大原因与精准修复方案 1. 为什么Word一打开就“锁住”了?这不是Bug,是系统在悄悄告诉你某些事 你双击一个Word文档,界面右上角赫然写着“只读”,编辑光标变成灰色,CtrlS毫无反应——这种瞬间被剥夺编辑权的体验,几乎每个办公族都… · 2026/9/24 19:35:49
WinPE启动盘制作与Windows纯净安装实战指南 1. 这不是“装系统”,是重建你对Windows底层控制权的起点很多人点开这个标题,第一反应是:“我又不是电脑小白,还用得着学PE?”——这话我十年前也说过。直到某天凌晨三点,客户服务器蓝屏报错0x0000007B&… · 2026/9/24 19:35:49
JavaWeb网上书店系统部署指南:从源码解压到完整运行 简介:一份JavaWeb网上书店/书城系统课程设计项目,面向JavaWeb初学者、在校学生及需要完成类似课设的开发者。项目已通过导师指导并获97分高分,代码完整可直接运行,涵盖前台图书搜索、分页展示、用户注册登录、购物车增减、订单提交… · 2026/9/24 22:16:58
OpenCV与深度学习联手:背景去除与透明PNG生成实战 简介:一套基于OpenCV与深度学习技术实现的图像背景去除Python代码包,面向计算机视觉初学者和有图像分割需求的中级开发者,以人物及非人物主体的自动抠图为目标,解决照片或视频帧前背景分离问题,可广泛应用于照片美化、… · 2026/9/24 22:16:58
Nydus容器镜像加速实战:从3GB镜像到十秒级冷启动 上个月我们一套 AI 推理服务的镜像从 3GB 涨到了 5.2GB,新集群冷启动一次要等将近两分钟,一半时间花在 pull 镜像上。后来我把这套镜像切到 Nydus,容器从调度到 Ready 的时间压到了十秒级。Nydus 是目前容器镜像加速领域里相当能打的一套方案… · 2026/9/24 22:16:58
家居行业AI落地实战:从知识库到智能体的避坑指南 1. 家居行业做AI落地,先搞清楚到底要解决什么问题家居行业这两年聊AI的密度,比过去十年聊数字化转型加起来都高。我前后参与过三个家居类项目的AI落地,从定制衣柜的销售辅助,到软装门店的智能导购,再到工厂端的售后知识… · 2026/9/24 22:16:58
Nydus镜像加速实战:容器启动从分钟级降到秒级 我们会遇到一个共同的问题:镜像体积大、层数多,docker pull全量拉下来要几分钟,解压又要等半天,尤其生产环境一扩容,新节点拉镜像的耗时直接被拉满,服务迟迟起不来。Nydus 就是专门解决这个痛点的镜像加速方… · 2026/9/24 22:16:58
PDF合同数据提取实战:小模型组合破解结构化难题 PDF合同数据提取这件事,放在AI Engineer的圈子里,听起来确实不性感。但如果我们面对的是两万亿美元规模的合同存量,情况就完全不一样了。银行、保险、供应链金融、政府招投标,几乎所有行业的核心资产都压在密密麻麻的PDF文件里。合… · 2026/9/24 22:16:52
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44