存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载rados模块是 Ceph 官方提供的librados的 Python 薄封装thin wrapper它让开发者能够用纯 Python 编写自定义的 Ceph 分布式存储客户端直接对 Ceph 存储集群执行对象读写、存储池管理、XATTR 扩展属性操作以及向 Monitor/OSD/MGR 发送管理命令。本文以仓库中的 doc/rados/api/python.rst 为骨架结合 rados.pyx 的源码实现完整讲解从安装、连接集群、管理存储池到对象与扩展属性读写的全过程帮助你掌握一套可直接落地运行的 Ceph Python 客户端编程范式。安装获取 Python 版 libradosrados模块通过python3-rados软件包分发。在不同发行版上安装命令如下Debian/Ubuntusudo apt-get install python3-radosRHEL/CentOSsudo yum install python3-radosSLE/openSUSEsudo zypper install python3-rados安装后模块位于 Debian 系统的/usr/share/pyshared目录或 CentOS/RHEL 系统的/usr/lib/python*/site-packages目录。仓库内对应的构建与打包源文件位于 src/pybind/rados/包括rados.pyxCython 实现、setup.py与pyproject.toml可据此了解模块的编译与安装方式。更多关于 librados 各语言绑定的说明参见 doc/rados/api/librados-intro.rst。快速上手构建你的第一个 Ceph Python 客户端使用 Python 绑定操作 Ceph 集群需要四步导入模块 → 创建集群句柄cluster handle→ 连接集群 → 通过 I/O 上下文读写数据。开始前你需要一个正在运行的 Ceph 集群快速搭建方法参见 doc/start并拥有合适的客户端凭据。本文示例默认使用client.admin用户。首先创建源码文件vim client.py导入模块import rados创建集群句柄rados.Rados类封装了连接 Ceph 存储集群所需的全部客户端配置。默认情况下集群句柄假定集群名为ceph与部署工具及官方快速入门指南一致、用户名为client.admin这些默认值都可以按需修改。连接集群前应用必须知道 Ceph Monitor 的位置。标准做法是在 Ceph 配置文件中记录初始 Monitor 地址然后在创建句柄时传入配置文件路径import rados, sys # 创建句柄的几种示例 cluster rados.Rados(conffileceph.conf) cluster rados.Rados(conffilesys.argv[1]) cluster rados.Rados(conffileceph.conf, confdict(keyring/path/to/keyring))要点说明conffile参数提供 Ceph 配置文件的路径与文件名用sys模块读取命令行参数可以避免硬编码路径。Python 客户端还需要一个 keyring密钥环。示例默认使用client.admin的密钥如果要在创建句柄时显式指定 keyring可以用conf参数也可以在 Ceph 配置文件中写入 keyring 路径例如keyring /path/to/ceph.client.admin.keyring从源码 rados.pyx 可以看到Rados.__init__的配置加载顺序是先应用conf_defaults默认值再读取conffile指定的配置文件conffile为空字符串或DEFAULT_CONF_FILES时读取标准配置文件None或NO_CONF_FILE时不读文件最后应用conf字典中的键值对后者优先级最高。连接集群句柄配置完成后即可连接集群连接成功后就可以调用返回集群信息的各种方法import rados, sys cluster rados.Rados(conffileceph.conf) print(\nlibrados version: {}.format(str(cluster.version()))) print(Will attempt to connect to: {}.format(str(cluster.conf_get(mon host)))) cluster.connect() print(\nCluster ID: {}.format(cluster.get_fsid())) print(\n\nCluster Statistics) print() cluster_stats cluster.get_cluster_stats() for key, value in cluster_stats.items(): print(key, value)默认情况下 Ceph 认证是开启的应用必须知道 keyring 的位置。python-ceph模块没有内置默认 keyring 位置因此需要显式指定——最简单的方式是把它写进 Ceph 配置文件[global] # ... 其余配置省略 keyring /path/to/keyring/ceph.client.admin.keyring关闭连接完成所有操作后应显式关闭连接以释放资源异步操作还需先等待其完成print(\nClosing the connection.) ioctx.close() cluster.shutdown()从源码看Rados还实现了上下文管理器协议rados.pyx 中的__enter__/__exit__因此也可以写成with rados.Rados(conffile...) as cluster:退出时自动调用shutdown()。管理存储池Pool连接集群后RadosAPI 允许你列出存储池、检查存储池是否存在、创建和删除存储池print(\n\nPool Operations) print() print(\nAvailable Pools) print(----------------) pools cluster.list_pools() for pool in pools: print(pool) print(\nCreate test Pool) print(------------------) cluster.create_pool(test) print(\nPool named test exists: {}.format(str(cluster.pool_exists(test)))) print(\nVerify test Pool Exists) print(-------------------------) pools cluster.list_pools() for pool in pools: print(pool) print(\nDelete test Pool) print(------------------) cluster.delete_pool(test) print(\nPool named test exists: {}.format(str(cluster.pool_exists(test))))警告使用该 API 删除存储池时务必谨慎——删除存储池意味着该池及其全部数据都会永久丢失。底层实现上rados.pyxpool_exists调用rados_pool_lookup返回值大于等于 0 表示池存在返回-ENOENT表示不存在其他负值则抛出异常create_pool支持可选的crush_rule参数指定 CRUSH 规则从而控制数据在集群中的放置策略。I/O 上下文Ioctx读写数据的前提对 Ceph 对象存储进行读写必须创建 I/O 上下文ioctx它把连接绑定到一个特定的存储池。用户需要具备访问该池的相应 CAPS 权限——例如只有读权限的用户将无法写入。# 按池名称打开推荐 ioctx cluster.open_ioctx(data)或者按池 ID 打开ioctx cluster.open_ioctx2(pool_id)从源码看open_ioctx内部调用rados_ioctx_create、open_ioctx2内部调用rados_ioctx_create2rados.pyx两者都要求集群句柄处于connected状态。Ioctx类还提供了get_stats()获取池的使用统计、get_last_version()获取最近一次写操作的版本号可用于实现乐观锁/条件更新语义等能力。对象操作写入、读取与删除拥有 I/O 上下文后即可对对象进行操作。写一个不存在的对象时 Ceph 会创建它写一个已存在的对象时 Ceph 会覆盖它除非指定了 range此时只覆盖该 range 内的内容print(\nWriting object hw with contents Hello World! to pool data.) ioctx.write_full(hw, Hello World!) print(\n\nContents of object hw\n------------------------\n) print(ioctx.read(hw)) print(\nRemoving object hw) ioctx.remove_object(hw)同步对象操作 APIIoctx类提供的核心同步对象操作方法定义于 rados.pyx 附近方法说明write(key, data, offset0)从指定偏移开始同步写数据rados_writewrite_full(key, data)整体覆写对象原子地截断后再写入rados_write_fullappend(key, data)在对象末尾追加数据writesame(key, data, write_len, offset0)将同一缓冲区重复写入指定长度read(key, length8192, offset0)从指定偏移同步读取length字节默认一次读 8 KiBstat(key)返回(size, mtime)元组trunc(key, size)将对象截断到指定大小remove_object(key)删除对象注意write与write_full在语义上的区别write是按偏移覆盖写入不会改变对象已有尾部write_full是整体替换先原子截断再写入适合初始化或全量更新场景。异步对象操作 API对于高吞吐场景可以使用异步方法。异步操作需要提供完成回调oncomplete/onsafe并通过aio_flush()等待未决操作落盘aio_write(object_name, to_write, offset0, oncompleteNone, onsafeNone)异步写aio_write_full(object_name, to_write, oncompleteNone, onsafeNone)异步整体写aio_append(object_name, to_append, oncompleteNone, onsafeNone)异步追加aio_read(object_name, length, offset, oncomplete)异步读aio_flush()阻塞直至所有异步写操作安全落盘此外set_locator_key(loc_key)可以为对象设置 locator key用于控制对象的放置位置Ioctx还支持通过set_namespace()在命名空间内隔离对象仓库中的实现位于 rados.pyx 的 Ioctx 类中。扩展属性XATTR读写对象创建后可以为其写入并读取扩展属性XATTR常用于存储对象元数据print(\n\nWriting XATTR lang with value en_US to object hw) ioctx.set_xattr(hw, lang, en_US) print(\n\nGetting XATTR lang from object hw\n) print(ioctx.get_xattr(hw, lang))XATTR 相关方法包括set_xattr(key, xattr_name, xattr_value)设置扩展属性get_xattr(key, xattr_name)读取单个扩展属性值get_xattrs(oid)返回XattrIterator迭代器可遍历对象上全部扩展属性rm_xattr(key, xattr_name)删除扩展属性XattrIterator的__next__()返回(属性名, 属性值)形式的元组配合循环即可枚举对象的所有元数据。列出对象与文件式 Object 接口如果需要检查池中的对象列表可以通过对象迭代器遍历object_iterator ioctx.list_objects() while True: try: rados_object object_iterator.__next__() print(Object contents {}.format(rados_object.read())) except StopIteration: break # 或更简洁的写法 [print(Object contents {}.format(obj.read())) for obj in ioctx.list_objects()]Object类为对象提供了类似文件的接口定义于 rados.pyx内部维护一个offset游标支持连续读写read(length1024*1024)从当前游标读取默认一次读 1 MiB并自动推进游标write(string_to_write)从当前游标写入并推进游标seek(position)移动读写游标stat()返回(size, mtime)get_xattr(xattr_name)/get_xattrs()/set_xattr(xattr_name, xattr_value)/rm_xattr(xattr_name)扩展属性操作remove()删除对象需要说明的是Object接口提供的是同步的文件式操作异步操作应使用 I/O 上下文Ioctx的方法以获得更好的并发性能。对象删除后其状态变为removed此时再调用方法会抛出ObjectStateError。通过 Python 调用集群管理命令rados模块的集群句柄还封装了四类管理命令通道——Ceph CLI 工具内部正是通过这些 Python 绑定方法与集群交互的mon_command(cmd, inbuf, timeout0, targetNone)向 Monitor 发送命令。cmd是 JSON 格式字符串target可指定某个 Monitor 的名称或 rank返回(ret, outbuf, outs)三元组。例如检查 OSD 是否可安全销毁import json c rados.Rados(conffile/etc/ceph/ceph.conf) c.connect() cmd json.dumps({prefix: osd safe-to-destroy, ids: [2], format: json}) c.mon_command(cmd, b)osd_command(osdid, cmd, inbuf, timeout0)向指定 OSD 发送命令mgr_command(cmd, inbuf, timeout0, targetNone)向 Ceph Manager 发送命令pg_command(...)向 Placement Group 发送命令从源码rados.pyx可以看到mon_command在未指定target时调用 C 层的rados_mon_command指定时调用rados_mon_command_targettimeout参数在当前 C API 中并未实现仅为向后兼容旧版 Python 绑定而保留。命令返回的outbuf是命令输出的字节内容outs是错误/附加信息文本。集群句柄 API 速查配置相关无需连接即可调用方法说明conf_get(option)读取配置项的值返回None表示未设置conf_set(option, val)设置配置项conf_read_file(pathNone)读取 Ceph 配置文件path为None时读取标准配置文件conf_parse_argv(args)解析并消费 Ceph 认识的命令行参数返回剩余未知参数conf_parse_env(varCEPH_ARGS)解析环境变量中的 Ceph 参数version()返回 librados C 库版本(major, minor, extra)三元组这些方法要求句柄处于configuring或connected状态参见源码中的require_state(configuring, connected)校验但不需要已经连接到集群。配置项的完整清单参见仓库的 Storage Cluster Configuration 文档。连接管理相关方法说明connect(timeout0)连接集群timeout当前被忽略仅保留兼容性shutdown()断开连接并释放资源get_fsid()获取集群文件系统 IDget_cluster_stats()返回集群统计字典键为kb总空间、kb_used已用空间、kb_avail可用空间、num_objects对象总数require_state(*args)断言句柄处于某个状态如configuring、connecting、connected否则抛出RadosStateErrorget_instance_id()获取当前实例的全局 ID注意get_cluster_stats()返回的数据是最终一致的——写入数据后不会立即更新。连接失败或操作出错时绑定会把 C 层的错误码转换为 Python 异常如Error、TypeError、LogicError、RadosStateError等因此建议用try/except包裹网络与 I/O 相关调用。源码级延伸阅读src/pybind/rados/rados.pyxrados模块的 Cython 实现包含Rados、Ioctx、Object、ObjectIterator、XattrIterator等类以及错误码到异常的全部转换逻辑。阅读它可精确掌握每个方法的参数语义、默认值、状态机约束configuring→connected→shutdown与底层rados_*C 函数调用链。doc/rados/api/librados-intro.rstlibrados 各语言绑定C/C/Python/Java/PHP的入门指南包含集群句柄创建、I/O 上下文建立与多语言对照示例。doc/rados/api/librados.rst 与 doc/rados/api/libradospp.rstC 与 C 版本的 API 参考便于对照理解 Python 绑定与底层接口的对应关系。examples/librados/仓库自带的 librados 编程示例可与本文的 Python 示例互为印证。小结通过rados模块你可以用最少的样板代码把 Python 应用接入 Ceph 分布式存储创建集群句柄、读取配置并连接集群、打开 I/O 上下文、执行对象与扩展属性的同步/异步读写、管理存储池甚至直接向 Monitor/OSD/MGR 下发管理命令。理解 rados.pyx 中各方法对底层 C API 的封装与状态机约束能帮助你在实际项目中写出健壮、可维护的 Ceph Python 客户端——无论是自定义对象存储网关、数据迁移工具还是基于 RADOS 的领域专用存储系统。赞分享存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载相关推荐深入解析 Ceph LibCephFS Python 绑定用 cephfs 模块编写分布式文件系统客户端深入解析 Ceph LibCephFS Python 绑定用 cephfs 模块编写分布式文件系统客户端 本文围绕 Ceph 官方文档 LibCephFS P存储分布式文件系统对象存储后端高可用Ceph librados 开发指南用 RADOS API 构建自定义存储接口Ceph librados 开发指南用 RADOS API 构建自定义存储接口 Ceph 存储集群Ceph Storage Cluster在底层由 RAD存储分布式文件系统对象存储后端高可用Tinode Python gRPC 绑定包 tinode_grpc 完整指南gRPC 客户端与插件开发实战Tinode Python gRPC 绑定包 tinode_grpc 完整指南gRPC 客户端与插件开发实战 本篇指南围绕开源即时通讯平台 Tinode 的后端即时通讯创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
PaddleSpeech 音频工具库 dynamic_import 机制解析:模块路径到类对象的动态加载 人工智能语音音频 【免费下载链接】PaddleSpeech Easy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword… · 2026/9/23 22:38:14
Model Merging Evaluation:融合模型的基准评测、指标度量与质量保障完全指南 AI 技能人工智能大模型深度学习 【免费下载链接】AI-Research-SKILLs Comprehensive open-source library of AI research and engineering skills for any AI model. Package the skills and your claude code/codex/gemini agent will be an AI research agent with full hor… · 2026/9/23 22:38:14
合肥改红蓝眉去哪里靠谱,旧眉毛怎么淡化修复 很多合肥的爱美人士早年做过老式纹眉,时间久了眉毛会发红、发蓝,眉形过时,画眉也很难遮盖。不少人想直接重新纹眉,却忽略了底色的影响,直接叠加新色很容易颜色混杂,效果不理想。想要处理红蓝旧眉࿰… · 2026/9/24 0:26:11
LLM Agent驱动的CLI代码审查工具设计与实践 1. 这不是又一个“AI代码审查工具”:open-code-review 的真实定位与设计哲学你点开 GitHub,看到一个叫open-code-review的仓库,README 第一行写着 “A CLI tool for code review powered by LLM agents”。你心里一咯噔——又来了?… · 2026/9/24 0:25:59
MCP协议:让大模型安全可靠调用本地工具的通信标准 1. MCP 是什么?它真能当 AI 落地的“超级翻译官”吗?先说结论:MCP(Model Context Protocol)不是某个公司推出的闭源产品,也不是一个需要下载安装的App,更不是某种神秘的AI模型。它是一套轻量、开… · 2026/9/24 0:25:53
YOLOv8眼镜检测实战:数据集验证、模型训练与调参全流程 简介:眼镜检测数据集,专为YOLO系列目标检测算法学习与实战场景打造。数据已完成训练、验证、测试划分,并附带数据集配置文件,适配YOLOv5、YOLOv7、YOLOv8、YOLOv9、YOLOv10、YOLO11等主流框架,拿到手即可直接训练和验证… · 2026/9/24 0:25:53
TCGA-BRCA聚类分析R工程骨架:从数据加载到ER状态验证 简介:本资源是一份面向生物信息学初学者与R语言实践者的教学型分析案例,聚焦TCGA乳腺癌(BRCA)数据的聚类与降维实战,解决如何利用基因表达谱对患者进行分子分型的核心问题。资源共22个文件,含8张结果图&… · 2026/9/24 0:25:53
用PyTorch实现图像自动着色:U-Net从零训练到效果调优全指南 简介:这是一个基于深度神经网络的自动图像着色Python项目,包含ECCV16与SIGGRAPH17两套经典预训练模型,面向图像处理与深度学习初学者及研究者,解决黑白照片快速上色与实时交互引导着色问题。项目提供完整的Python源码与示例图片&a… · 2026/9/24 0:25:46
基于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