Ceph CRUSH 设计实现剖析
CRUSH(Controlled Replication Under Scalable Hashing)是 Ceph 存储系统中用于数据分布和复制的算法。关于 CRUSH 的论文解析参考: 译 - CRUSH: Controlled, Scalable, Decentralized Placement of Replicated Data 。CRUSH map 是 Ceph 集群中一个关键的配置组件,它定义了数据如何在集群的物理硬件上分布。 CRUSH 算法使得 Ceph 能够在无需中心化或者分布式元数据管理器的情况下,高效、可靠地进行数据复制和恢复。 一、CRUSH map 解析CRUSH map 包含了集群的层次结构和各种规则,这些规则定义了数据应该如何在集群中分布。 CRUSH map 主要包含以下几个部分: Tunables : 一组可用于调整 CRUSH 算法行为的参数。 Devices : 定义集群中所有可用的存储设备的列表。 Types : 定义存储层次结构中的不同层级类型。 Buckets : 组织和管理存储设备(如 OSDs )的逻辑容器。 Rules :...
译 - CRUSH: Controlled, Scalable, Decentralized Placement of Replicated Data
译作: 可控的、可扩展的、分布式的副本数据放置算法,论文原文 。 该论文于 2006 年 11 月发布于 SC2006 。 CRUSH 是一种用于大规模分布式存储系统的数据分布算法,它通过伪随机函数将数据对象映射到存储设备上,无需依赖中央目录。CRUSH 算法设计考虑了系统的动态性,支持在添加或移除存储设备时高效地重组数据,并最小化不必要的数据移动。此外,CRUSH 支持多种数据复制和可靠性机制,并允许根据用户定义的策略进行数据分布,这些策略能够在故障域之间有效地分离副本,增强数据安全性。 CRUSH 的核心是其层级集群图,该图描述了存储集群的物理和逻辑结构,并通过一系列规则来确定数据的放置位置。CRUSH 算法通过将数据均匀分布在加权设备上,保持存储和设备带宽资源的平衡利用。算法还考虑了设备的故障和过载情况,能够在设备发生故障或过载时重新分配数据,避免数据丢失并优化系统性能。 CRUSH 的映射性能高效,计算复杂度为 O(logn) ,适用于管理大规模(多 PB...
译 - Replication Under Scalable Hashing: A Family of Algorithms for Scalable Decentralized Data Distribution
译作: 可扩展哈希下的复制: 可扩展分散数据分布的算法家族 , 原文地址 ,该论文发表于 2004 年 4 月在新墨西哥州圣达菲举行的第 18 届国际并行和分布式处理研讨会 (IPDPS 2004) 论文集。这篇论文介绍了一系列名为 RUSH(Replication Under Scalable Hashing) 的算法,用于在去中心化的存储系统中分配和管理数据。每种 RUSH...
Ceph 集群性能测试工具详解
本文详细介绍了包括 rados bench、rbd bench、dd 、fio 、vdbench 、mdtest 、iozone、cosbench、cbt 等测试工具对于 Ceph 集群的性能压测的使用。对于每个工具都提供了压测命令参数、示例命令等使用说明,实现了对 Ceph 块存储、文件存储、对象存储、rados 对象存储等存储类别的性能压测。文中重点阐述了各命令的使用格式、基本功能和参数选择,为用户在 Ceph 环境中进行性能评估提供了实用指南。 一、rados bench以下基于 v19.2.1 版本进行测试。 用途: 测试 ceph rados 对象存储性能; 1.1、测试配置参数命令格式: rados bench $seconds $type [args...] $seconds : 压测运行时间; $type : 压测类型,可选值为 write/seq/rand (分别代表写/连续读/随机读); -p : 指定压测的目标 pool ; -b : 只有当压测类型为 write 时可用,用于设置写入 block...
Ceph 常用命令汇总
一、常用命令1.1、Pool# 查看 poolceph osd pool ls detail# 创建 poolceph osd pool create testpool 32 32ceph osd pool set testpool pg_autoscale_mode off# 调整 pool pg/pgp , 并关闭自动调整ceph osd pool set testpool pg_num 32ceph osd pool set testpool pgp_num 32ceph osd pool set testpool pg_autoscale_mode off# 设置 pool 最小副本ceph osd pool set testpool min_size 1ceph osd pool set testpool size 1 --yes-i-really-mean-it# 移除 poolceph tell mon.\* injectargs '--mon-allow-pool-delete=true'ceph osd pool delete...
ceph-ansible 集群部署运维指南
本文详细介绍了使用 ceph-ansible 部署和运维 Ceph 集群的过程,包括各版本及其依赖的 Ansible 版本的对应关系、自定义模块与任务的结构、集群部署、运维操作及相关示例。特别强调了环境配置、节点连通性验证、MDS 和 OSD 组件的管理,以及安全和性能优化注意事项。 一、项目介绍以下分析基于 ceph-ansible stable-6.0 分支代码。 1.1、版本与对应关系目前 ceph-ansible 采用不同的代码分支来支持部署不同版本的 ceph 集群,且每个代码分支需要特定的 ansible 版本支持,具体的对应关系如下(以下对应关系更新于 2025/05/23 ): ceph-ansible 分支 支持的 ceph 版本 依赖的 ansible 核心版本 依赖的 ansible 发布版本包 stable-3.0 Jewel(V10), Luminous(V12) 2.4 - stable-3.1 Luminous(V12), Mimic(V13) 2.4 - stable-3.2 Luminous(V12),...
译 - The Google File System
《The Google File System》 是由 Google 公司开发的分布式文件系统,旨在解决存储海量数据的问题。GFS 采用了一些独特的设计,如基于大块的文件存储、多副本存储和自动故障恢复等。GFS 能够支持高并发、高吞吐量的数据访问,并且具有良好的扩展性和可靠性。GFS 的设计思想已经被广泛应用于其他分布式存储系统的开发中,是分布式存储领域的重要里程碑之一。 摘要We have designed and implemented the Google File System, a scalable distributed file system for large distributed data-intensive applications. It provides fault tolerance while running on inexpensive commodity hardware, and it delivers high aggregate performance to a large number of clients. 我们设计并实现了...
Redis异地多活方案杂谈
Redis 的异地多活是一种跨地域容灾、并提供低延迟访问的部署方案。业界提供了很多的构建思路,这里将对比一下这里方案,并详细介绍一下业界的设计与实现。 一、简介二、思考2.1、Redis异地多活的定位在使用 Redis 的异地多活部署方案之前,为了提供 Redis 集群的高可用,我们也会提供跨地域主从的部署方式,通过这种方式我们也能实现地域级别的容灾能力。考虑到业务在使用 Redis 前的关注点一般是:性能、延迟、可用性以及数据一致性,我们将通过这四个关键点来对比一下这两种方案的不同: 性能(高性能, QPS ): 跨地域主从:跨地域写性能较差,本地域读性能较好; 异地多活:本地域读写性能较好; 延迟(低延迟, Avg , P99 等): 跨地域主从:跨地域写延迟交高,本地域读延迟较低; 异地多活:本地域读写延迟较低; 可用性(高可用): 跨地域主从:集群间的容灾切换,存在主从切换的瞬时访问问题,满足高可用需求; 异地多活:集群内的主从故障切换,满足高可用需求; 数据一致性: 跨地域主从:提供 Redis...
Redis扩缩容演进史与奇思妙想
Redis 的扩缩容方案在 RedisCluster 中发生了很多的改造与优化,其中主要包括对于 Slot 和 Keys 映射关系的优化,从最初的跳表,到基数树,再到最新的柔性数组的相关优化。同时 Redis 的非社区Cluster 模式下的扩缩容在业界在诞生了很多有意思的设计思路,比如 Codis 提供的同步/异步迁移方案,选择性复制以及旁路扩缩容的迁移方案等。这篇文章将简略的描述一下当前业界实现的 Redis 的扩缩容方案。 一、简介这里主要描述的是 Redis 的横向扩缩容。 二、Redis 扩缩容演进史2.1、映射关系存储结构演进由于我们需要能够高效的依据 Slot 来找到对应的 Keys 信息,从而实现数据的迁移,因此我们需要记录 Slot 和 Keys 的映射关系,Redis 也在不断的优化这种存储结构,从而在实现高效遍历的时候又能够节省存储所带来的内存开销。 2.1.1、SkipList 存储结构 版本范围:3.0.0 ~ 3.2.13(以下分析基于 3.2.13 版本) 设计特点: 使用一个全局结构体变量(...
Redis持久化演进史与奇思妙想
目前 Redis 主要支持两种持久化的方式:RDB 和 AOF 。这两者在 Redis 的演进过程中也发生了很多有意思的变化。RDB 的数据格式也已经进行了十次版本迭代,AOF 从最初的 Rewrite 到 Redis 7.0.0 的 Multi-Part-AOF 也发生了很多的变化,这里将对每个版本进行详细的剖析,学习 Redis 的持久化演进历史。这篇文章主要借鉴于 Redis 持久化机制演进与百度智能云的实践 ,同时按照自己的理解绘制了一些示意图。 一、简介Redis 支持两种持久化的方式:RDB 和 AOF 。 二、Redis RDB 持久化演进史2.1、持久化的数据版本演进2.1.1、版本一 版本范围:2.0.0 ~ 2.2.15 (以下分析基于 2.2.15 版本) RDB版本号:0001 版本特点: 首次支持对五种数据类型数据的持久化; 持久化数据内容: 标记头尾信息; 多 DB 信息( REDIS_SELECTDB ); 过期时间属性(单位秒, REDIS_EXPIRETIME...