[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fgTsFRER36KiM_fdrod7JPKABGCUGydRUsp5135YWSbs":3},{"item":4,"related":44},{"id":5,"type":6,"title":7,"slug":8,"summary":9,"body":10,"coverUrl":11,"productScreenshots":12,"productLinks":13,"authorName":14,"authorUrl":15,"authorSubject":16,"category":17,"tags":22,"sourceLabel":35,"sourceName":36,"sourceUrl":37,"status":38,"seoTitle":7,"seoDescription":9,"canonicalUrl":35,"isFeatured":39,"sno":40,"sortOrder":41,"publishedAt":42,"updatedAt":43,"createdAt":43},"a9f8a62f-9a3c-4d41-880a-1f2f734a0450","article","CRUSH：Ceph 怎样决定数据放在哪些磁盘和机架上？","ceph-crush-distributed-data-placement","Ceph CRUSH 根据对象标识、集群拓扑和 placement rule 计算副本位置，避免依赖逐对象中心目录。本文解释故障域建模与规则配置的重要性。","分布式存储集群有成百上千块盘，保存一个对象时，系统怎么决定它的副本或分片放到哪些设备上？如果每次都询问一个中央目录，目录可能成为瓶颈或故障点；如果把每个对象的落点都单独记录，集群扩缩容时又要维护大量映射。Ceph 的 CRUSH 算法，正是用规则、集群拓扑和输入标识计算数据放置位置的一种方法。\n\nCRUSH 会结合对象或放置组（PG）标识、集群映射以及 placement rule，沿着描述设备层级的结构选择目标。拓扑可以表达设备属于哪个主机、机架、机房等故障域，规则则能指定应当从哪类设备中选择、需要把副本分散到哪里。客户端和 OSD 可依据相同映射计算目标位置，减少对每个对象中心化目录查询的依赖。\n\n为什么这很重要？如果所有副本都被放在同一台机器，硬件故障就会同时带走它们。合理的 CRUSH rule 可以要求副本跨主机或机架分布，从而把逻辑冗余对应到真实故障域。集群设备加入、移除或权重变化时，CRUSH 会重新计算放置；设计目标之一是只移动必要的一部分数据，而不是把整个集群彻底洗牌。\n\n但“算法自动放置”不代表拓扑可以随便填。若管理员把主机、机架层级描述错误，或者 rule 指向了不合适的 bucket 类型，算法就可能按错误的现实模型做出确定性选择。新增容量的 CRUSH 权重、可用设备数量、规则约束与数据副本数也必须匹配，否则可能出现无法满足放置要求的 PG 或意料之外的数据迁移。\n\nCRUSH 还不是数据恢复或一致性协议的全部。它负责按照集群状态计算“应该放在哪里”；副本同步、故障检测、数据修复和客户端读写语义由 Ceph 的其他组件共同承担。理解它时，最好区分放置计算、实际副本状态与恢复流程，避免把所有“集群自动搬数据”的现象都归因于 CRUSH。\n\n对于运维者，最实用的检查问题是：当前拓扑是否准确反映设备与故障域？规则是否真的要求跨越预期边界？改动权重后会迁移多少数据？CRUSH 让分布式放置变得可计算、可复现，但最终可靠性仍取决于人提供的拓扑和规则是否贴近现实。\n\n来源：[Ceph 官方文档：CRUSH Map](https:\u002F\u002Fdocs.ceph.com\u002Fen\u002Flatest\u002Frados\u002Foperations\u002Fcrush-map\u002F)","\u002Fuploads\u002F2026-10-06\u002F9d9f54cb-df84-4d78-8c96-08ffdfbd3760.jpg",[],[],"Foundit","https:\u002F\u002Ffoundit.cn","foundit-ai-editorial",{"id":18,"name":19,"slug":20,"description":21},"6179d3b6-dc34-4483-9ded-3cd9f1b37a47","科普","abbreviation","介绍各领域新兴概念",[23,27,31],{"id":24,"name":25,"slug":26},"7c76bfc2-f80f-4ee0-a95d-27bd8708b434","技术","slug",{"id":28,"name":29,"slug":30},"a202d639-99a6-488a-a712-4d4c6ffd7e15","开发","dev",{"id":32,"name":33,"slug":34},"8d35e42e-9f5b-4dd9-b30f-dc2c53d06096","硬件","hardware",null,"Ceph Official Documentation：CRUSH Map","https:\u002F\u002Fdocs.ceph.com\u002Fen\u002Flatest\u002Frados\u002Foperations\u002Fcrush-map\u002F","published",false,54,0,"2026-10-06T00:00:00.000Z","2026-10-06T07:51:48.597Z",[45,54,63],{"id":46,"type":6,"title":47,"slug":48,"summary":49,"coverUrl":50,"authorName":14,"sno":51,"publishedAt":52,"createdAt":53},"5f2d281d-4673-42f3-b5e4-4cc68974abc6","SR-IOV：一张实体网卡怎样变成多个可分配给虚拟机的设备？","sriov-pci-device-virtual-functions","SR-IOV 允许支持该能力的 PCIe 设备由物理功能创建多个虚拟功能，供不同工作负载更直接地使用。本文解释 PF\u002FVF 分工、性能价值，以及为什么硬件虚拟化本身不等于完整隔离。","\u002Fuploads\u002F2026-10-13\u002F8b63e99b-a5e9-4f90-bbdb-81b28a2a38be.jpg",44,"2026-10-13T00:00:00.000Z","2026-10-13T02:13:46.843Z",{"id":55,"type":6,"title":56,"slug":57,"summary":58,"coverUrl":59,"authorName":14,"sno":60,"publishedAt":61,"createdAt":62},"ccf00154-c4a8-4439-a8e8-4151b1c20721","AF_XDP：Linux 怎样把高速网卡数据直接交给用户程序？","linux-af-xdp-fast-packet-path","AF_XDP 是 Linux 面向高性能收发包的套接字接口，可把 XDP 处理后的数据送入用户态环形队列。本文从网卡、缓冲区和队列讲清数据路径，并说明所谓零拷贝依赖驱动与硬件支持。","\u002Fuploads\u002F2026-10-17\u002Ffdcc8edb-927f-41dc-8802-1e9053c47bfa.jpg",45,"2026-10-17T00:00:00.000Z","2026-10-17T03:08:33.177Z",{"id":64,"type":6,"title":65,"slug":66,"summary":67,"coverUrl":68,"authorName":14,"sno":69,"publishedAt":52,"createdAt":70},"2ff97b85-3142-4a75-924f-e6afa339d700","NVMe ZNS：为什么有些 SSD 要求数据按区域顺序写？","nvme-zns-zoned-namespace","ZNS 把 SSD 命名空间划分为必须顺序写入的区域，让主机参与闪存数据布局与回收。本文解释这种分工如何减少无效搬运，也说明它给文件系统和应用带来的管理成本。","\u002Fuploads\u002F2026-10-13\u002Fd2d45247-533f-4b02-b1a8-56f14d1dade3.jpg",46,"2026-10-13T02:13:43.485Z"]