Ceph数据副本机制详解

Ceph 数据副本机制详解

Ceph 的数据副本机制是其保证数据可靠性和高可用性的核心设计,主要通过多副本(Replication)纠删码(Erasure Coding,EC) 两种方式实现。以下是对 Ceph 数据副本机制的全面解析:


一、副本(Replication)模式

1. 核心概念

  • 副本数(size):数据对象的副本数量(默认为 3)。
  • 最小可用副本数(min_size):允许 I/O 操作的最小副本数(默认为 2)。

2. 数据写入流程

  1. 客户端向主 OSD(Primary OSD)发送写请求。
  2. 主 OSD负责将数据同步到副本 OSD(Secondary OSDs)。
  3. 所有副本写入成功后,主 OSD 向客户端返回确认。
# 创建一个 3 副本的存储池
ceph osd pool create mypool 128 128 replicated
ceph osd pool set mypool size 3

3. 副本分布规则

通过 CRUSH Map 的 rule 定义副本分布策略:

rule replicated_rule {id 0type replicatedstep take defaultstep chooseleaf firstn 0 type host  # 确保副本分布在不同主机step emit
}
  • firstn 0:动态选择与存储池 size 相同数量的 OSD。
  • chooseleaf:自动选择 host 并取其下的一个 OSD。

4. 故障恢复

  • OSD 宕机:Monitor 检测到 OSD down 后,启动恢复流程。
  • 数据修复:通过其他副本重新同步数据到新 OSD。

二、纠删码(Erasure Coding)模式

1. 核心概念

  • 数据块(k):原始数据分片数量。
  • 校验块(m):冗余校验数据数量。
  • 恢复能力:允许最多丢失 m 个块(空间效率高于副本)。

2. 典型配置

# 创建 EC 池(k=4, m=2,允许 2 个块丢失)
ceph osd pool create ecpool 128 128 erasure
ceph osd pool set ecpool erasure_code_profile k=4 m=2

3. EC 规则示例

rule ec_rule {id 1type erasurestep take defaultstep choose indep 3 type rack  # 确保数据块跨机柜分布step emit
}

4. 读写特性

  • 写入:数据被分割为 k 个数据块,计算 m 个校验块。
  • 读取:只需读取任意 k 个块即可恢复数据。

三、副本 vs 纠删码对比

特性副本(Replication)纠删码(Erasure Coding)
空间利用率低(3 副本需 3x 空间)高(如 k=4,m=2 仅需 1.5x)
恢复速度快(直接拷贝副本)慢(需计算重建)
随机读写性能较差(尤其对小文件)
适用场景高性能、低延迟业务冷数据、归档存储

四、高级特性

1. 部分写(Partial Write)

  • 问题:副本未全部写入时可能产生数据不一致。
  • 解决:通过 min_size 控制最小可用副本数。
    ceph osd pool set mypool min_size 2
    

2. 一致性模型

  • 强一致性:主 OSD 确保所有副本写入成功后才返回确认。
  • 最终一致性:故障时可能短暂不一致,通过 Peering 机制恢复。

3. 快照与克隆

  • 副本池支持快照,EC 池需配合 overwrites 启用:
    ceph osd pool set ecpool allow_ec_overwrites true
    

五、监控与调优

1. 关键监控指标

# 检查副本状态
ceph pg dump | grep ^[0-9] | awk '{print $1,$2,$15}'# 查看恢复进度
ceph -s | grep recovery

2. 性能调优

  • osd_recovery_max_active:控制恢复并发数。
  • osd_client_message_cap:限制客户端消息队列深度。

六、最佳实践

  1. 生产环境推荐

    • 热数据:3 副本 + host 级故障域隔离。
    • 冷数据:EC(如 k=8,m=4)+ rack 级隔离。
  2. 混合存储

    • 使用 cache tiering 将热数据自动迁移到副本池。
  3. 硬件规划

    • 每个 host 的 OSD 数量均衡,避免权重倾斜。

通过合理配置副本策略,Ceph 可以在保证数据可靠性的同时,满足不同业务场景的性能和成本需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/92975.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/92975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【八股】Mysql中小厂八股

MySQL 基础 数据库三大范式(中) 第一范式: 要求数据库表的每一列都是不可分割的原子数据项 如详细地址可以分割为省市区等. 第二范式: 非主键属性必须完全依赖于主键, 不能部分依赖 第二范式要确保数据库表中的每一列都和主键相关, 而不能只与主键的某一…

怎么使用python查看网页源代码

使用python查看网页源代码的方法:1、使用“import”命令导入requests包import requests2、使用该包的get()方法,将要查看的网页链接传递进去,结果赋给变量xx requests.get(urlhttp://www.hao123.com)3、用“print (x.text)”语句把网页的内容…

C# 多线程:并发编程的原理与实践

深入探讨 C# 多线程:并发编程的原理与实践引言在现代应用开发中,性能和响应速度往往决定了用户体验的优劣。尤其在计算密集型或者IO密集型任务中,传统的单线程模型可能无法有效利用多核CPU的优势。因此,多线程技术成为了解决这些问…

react 常用组件库

1. Ant Design(蚂蚁设计)特点:国内最流行的企业级 UI 组件库之一,基于「中后台设计体系」,组件丰富(表单、表格、弹窗、导航等)、设计规范统一,支持主题定制和国际化。适用场景&…

Python 爬虫获取淘宝商品信息、价格及主图的实战指南

在电商数据分析、竞品调研或商品信息采集等场景中,获取淘宝商品的详细信息(如价格、主图等)是常见的需求。虽然淘宝开放平台提供了官方的 API 接口,但使用这些接口需要一定的开发和配置工作。本文将通过 Python 爬虫的方式&#x…

Ruby面向对象编程中类与方法的基础学习例子解析

代码示例: Ruby面向对象编程中类与方法的基础学习详细例子 1. 引言 在面向对象编程(OOP)中,类是定义对象结构和行为的蓝图。Ruby是一种纯面向对象的编程语言,它将一切视为对象,包括基本数据类型。本文将…

[ Mybatis 多表关联查询 ] resultMap

目录 一. resultMap 1. 使用场景: 2. 查询映射: (1)单表查询映射: (2)多表查询映射: a. 在学生表里查专业 b. 在专业表里查学生 二. 其他注意事项 1. 插件下载 2. #{ } 和 ${ }的区别 一. resultMap 1. 使用场景: (1)当数据库列名和java类中的属性名不同时,可⽤ r…

Rust 性能提升“最后一公里”:详解 Profiling 瓶颈定位与优化|得物技术

一、Profiling:揭示性能瓶颈的“照妖镜”在过去的一年里,我们团队完成了一项壮举:将近万核的 Java 服务成功迁移到 Rust,并收获了令人瞩目的性能提升。我们的实践经验已在《RUST练习生如何在生产环境构建万亿流量》一文中与大家分…

STM32H5 的 PB14 引脚被意外拉低的问题解析 LAT1542

关键字:STM32H5, GPIO 1. 问题现象 客户反馈,使用 STM32H523RET6 应用中配置了两个 IO 口,PC9 为输出模式,内部下拉;PB14 为输入模式,内部上拉。在程序中将 PC9 引脚输出高电平,结…

【办公自动化】如何使用Python让Word文档处理自动化?

在日常办公中,Word文档是最常用的文本处理工具之一。通过Python自动化Word文档操作,可以大幅提高工作效率,减少重复劳动,特别适合批量生成报告、合同、简历等标准化文档。本文将介绍几种常用的Python操作Word文档的方法&#xff0…

顺序表的总结及模拟实现

目录 一.线性表 二.顺序表 1.概念 2.结构 3.要实现的接口函数 三.模拟实现顺序表 1.定义出顺序表的基本结构 2.实现检查扩容功能 3.实现尾插 4.实现尾删 5.实现头插和头删 6.查找 7.修改 8.遍历 9.在指定位置插入和删除 四.顺序表的优缺点及思考 a.顺序表的弊端 …

Vue3 vs Vue2:全面对比与面试宝典

文章目录Vue3 vs Vue2:全面对比与面试宝典引言:Vue框架的进化之路一、核心架构对比二、响应式系统的革命Vue2的响应式:像老式监控摄像头Vue3的响应式:像智能AI监控系统三、API风格的进化Vue2的Options API:像填表格Vue…

Java Web开发:Session与Cookie详细入门指南

在Web开发中,状态管理是核心需求之一。本文将深入讲解Java中Session和Cookie的使用方法,帮助你掌握用户状态管理的核心技术。 一、Session与Cookie基础概念 特性SessionCookie存储位置服务器内存/持久化存储客户端浏览器安全性较高(敏感数据…

HTTPS与CA证书:安全通信全解析

CA(Certificate Authority):证书颁发机构,负责签发和管理数字证书,验证证书持有者的身份。HTTPS:基于 SSL/TLS 协议的 HTTP,通过证书实现客户端与服务器的身份验证和数据加密。HTTPSHTTPSSL/TLS…

AI生成代码时代的商业模式重构:从“软件即产品”到“价值即服务”

2025年,全球AI代码生成市场规模突破63亿元(数据来源:《中国AI代码生成行业发展报告》),开发者效率提升40%以上,软件开发成本下降30%。这一技术浪潮正在颠覆传统软件行业的商业逻辑——当代码生成变得像文字编辑一样简单时,企业如何构建可持续的商业模式? 本文将从硬件…

C#特性与反射知识梳理

C#中的**特性(Attributes)和反射(Reflection)**是两个非常重要的概念,它们通常用于代码的元编程,允许你在运行时获取类型信息并对其进行操作。下面对这两个概念进行详细梳理:一、C#中的特性&…

SQL 语法详解

SQL 语法详解 引言 SQL(Structured Query Language)是一种用于数据库管理的标准语言,它允许用户进行数据的查询、更新、插入和删除等操作。SQL语法是数据库管理和编程的基础,本篇文章将详细介绍SQL的基本语法和常用操作&#xff0…

为什么 sim(3) 中的尺度 s 与旋转 R 相乘,而不是平移 t?

文章目录为什么 sim(3) 中的尺度 s 与旋转 R 相乘,而不是平移 t?1️⃣ sim(3) vs SE(3):结构对比与核心差异2️⃣ 为什么尺度 s 不乘在 t 上?🚫 数学破坏:🧭 几何解释:3️⃣ t 是“相…

如何为你的 Docker 容器设置代理网络

一文搞定!如何为你的 Docker 容器设置代理网络(及一个最常见的“坑”) 你是否遇到过这样的窘境:在你的服务器上,代理工具(比如 Clash, V2Ray)运行得好好的,浏览器也能科学上网,但一旦把应用放进 Docker 容器,它就瞬间“失联”,无法访问外部世界? 别担心,这是每个…

LeetCode Day3 -- 哈希表

目录 1. 啥是哈希表? 2. 啥时候用哈希表? 2.1 存在性检查 → 集合Set 2.2 键值映射 → 字典Dict 2.3 频率统计 → Dict or Counter 3. LeetCode 3.1 集合 (1)2215 找出两数组的不同 (2)1207 独一无…