ceph运维硬件规划技巧

在规划Ceph集群的硬件配置时,需要综合考虑性能、成本、冗余、可扩展性以及特殊场景需求等因素。以下是关于Ceph硬件规划的关键技巧和建议,涵盖存储设备、网络、服务器配置、容量规划、冗余策略等多个方面:


1. 硬件选型建议

存储设备
  • 存储节点类型
    根据数据需求选择节点类型:

    • B<Object Storage Device (OSD) Nodes
      • 数据盘(Data Devices):存放实际数据(HDD或SSD)。
        • HDD: 高容量但IOPS低,适合冷数据存储。
        • SSD: 高IOPS和吞吐量,适合热数据或I/O密集型场景。
      • 缓存盘(Cache Devices)(可选,但推荐):
        • 使用NVMe或SATA SSD作为缓存层(例如Ceph的CacheTier),加速读写操作。
        • 缓存层需独立于数据盘,避免与OSD数据混用同一硬盘。
  • 避免RAID控制器
    Ceph本身通过分布式冗余(如Replication/Erasure Coding)提供数据保护,因此硬件RAID(尤其是RAID 5/6)会带来单点故障风险,并可能削弱性能。建议直接使用裸盘(JBOD)。

网络设备
  • 专用网络接口
    为以下流量划分独立网卡(或VLAN):

    • 集群内部通信(Mon, OSD, Manager Nodes):用于心跳、PG状态同步、CRUSH图更新等(推荐万兆网卡)。
    • 客户端访问(Public Network):用于存储客户端(如librados, RBD, CephFS)的访问(可根据实际流量需求选择万兆或以上)。
    • 管理网络:用于SSH、监控工具、日志收集等。
  • 网络冗余与带宽

    • 每个节点至少2块网卡(Bonding配置为主备或LACP模式),避免单点故障。
    • 监控网络延迟(Ping)、带宽(iperf测试),确保低延迟和高吞吐。

    ceph、hbase集群服务最好使用双网卡bond;目前hbase的集群网络IO峰值在180M/s,机房内部通信会出现丢包情况;替换较高交换性能的交换机以及做双网卡bond两项配合网络IO峰值可做到10Gb/s;

服务器配置
  • CPU与内存

    • CPU核心数:根据集群规模选择,最少4核CPU,大规模集群需要更高核心数(如16核或32核)。
    • 内存:至少 64GB RAM(每个OSD消耗2-4GB内存,需预留足够资源)。
      • 公式参考:内存 = OS + 其他软件 + (每个OSD消耗内存 × OSD数量) × 1.5倍(冗余)。
    • SSD的缓存层:加速PG的元数据操作(如 journals 分离到SSD)。
  • 电源与散热

    • 机架级电源冗余(如双电源)和UPS支持。
    • 保障服务器散热,避免高温导致硬盘或节点故障。

2. 容量规划

总存储容量计算
  • 可用容量 = (总物理磁盘容量 × 存储类型比例) / 副本数(如3副本则除以3)。
    • 若使用EC Erasure Coding (例如EC Profile为k+m=12+2),可用容量为:
    \( \text{可用容量} = (\text{总物理容量} \times m/(k+m)) \)  
  • 推荐预留空间
    • 至少预留30%~50%空闲空间,以维持PG/OSD的平衡和性能(新数据的均衡分布需要空间)。
    • 空间不足时,Ceph会触发 near fullfull 状态,拒绝写入。
PG(Placement Groups)规划
  • 初始PG数量设置
    • 公式参考:每个OSD分摊的PG应控制在 100~200 之间。
    • 推荐公式PGs = (OSD数量 × 100) / 副本数
    • 调整策略:集群扩容后需重新计算并调整PG,在ceph osd pool set <pool> pg_num后运行 ceph osd pool set <pool> pgp_num <value>

3. 冗余与高可用

  • 最小集群规模

    • 至少3个节点(每个节点部署Mon、OSD、Mgr)以满足大多数Ceph场景的可靠性需求。
    • 生产环境推荐5-7节点(奇数节点避免仲裁分裂)。
  • 故障域(Failure Domain)划分
    crush map 中划分故障域(如 Rack、Host、Chassis),确保副本分散到不同物理位置。例如:

    • 使用 ceph osd crush add-bucket rack1 rack 将节点划分到不同机架。
  • 备件策略

    • 建议准备至少10%的备件(包括硬盘、电源、网卡等关键部件),缩短硬件故障的恢复时间。

4. 网络隔离与设计

  • 物理网络拓扑

    • 核心层:采用高速交换机(如ToR交换机),确保集群内通信低延迟。
    • 流量分组:将Mon的通信、OSD的通信、客户端访问流量分开,避免带宽争用。
  • 存储网络配置建议

    • 禁用TCP/IP层优化(如NAPI、巨型帧)可能导致性能问题,需谨慎测试。
    • 使用 ethtool 禁用流量控制 (rx-usecs 设置为0) 并禁用IPv6(如需)。

5. 存储策略优化

  • 混合存储池(SSD+HDD)

    • 使用HDD作为主存储,SSD作为缓存层或Journals,降低延迟。
    • 通过 cache tiering 将热数据自动迁移到SSD缓存。
  • SSD的RAID与SSD类型

    • 避免SSD上使用硬件RAID(Ceph的分布式机制已足够),直接用JBOD。
    • Enterprise级SSD:适合频繁写入场景(如日志型应用)。
    • Client SSD:读取密集型可选TLC/QLC SSD以降低成本。

6. 维护与扩展策略

  • 硬件健康监控

    • 部署智能监控工具(如smartd, ceph-bluestore-tool, Prometheus) 监控硬盘SMART值、温度、错误率等。
    • 定期检查OSD状态:
      ceph osd stat
      ceph osd df tree
      ceph -s
  • 扩展规划

    • 新增节点后需运行 ceph osd crush reweight 均衡权重。
    • 使用 ceph osd crush move 将节点分配到特定故障域,避免负载不均。

7. 常见误区与注意事项

  • 节点数量不足

    • 3节点仅满足最小配置,建议根据数据量、性能需求扩展(如5节点提供更高可用性)。
  • 忽视网络延迟

    • 集群内节点延迟应控制在1ms以内,跨机架或远程部署(如云环境)可能导致性能瓶颈。
  • 不当使用RAID控制器

    • RAID控制器可能隐藏硬盘故障(如坏道切换到备用盘),破坏Ceph的故障定位机制。
  • PG数量过少或过多

    • PG太少导致OSD负载不均,过多则增加元数据管理开销。

8. 典型场景配置建议

高性能场景(如虚拟化存储)
  • 硬件配置
    • CPU: 至少24核
    • 内存: 256GB
    • 存储: NVMe SSD(主OSD)
    • 网络: 2个万兆网卡(Bonding)
大容量冷存储场景
  • 硬件配置
    • 硬盘: SATA NVMe SSD(Cache)+ 10TB HDD(主存储)
    • EC配置: 使用 EC profile(如k=12+m=2)提升空间利用率。
    • 监控: 监控HDD的旋转健康度和工作温度。
混合场景
  • 硬件配置
    • 热数据: 使用SSD节点+Cache Tier加速
    • 冷数据: 分配到HDD节点并启用EC(k+m=10+4)。

以下是新增的 日志SSD新OSD权重 两部分内容的详细说明,并集成到之前的硬件规划框架中:


9. 存储设备优化

日志SSD(Journal SSD)
  • 作用
    在Ceph的存储后端(如Bluestore)中,日志(Journal)负责记录数据的同步写入操作(如刷盘前的写缓存),单独使用SSD作为日志盘可以显著提升写入性能。

    • 关键原理
      • 将随机写操作集中到SSD日志盘,通过日志合并减少碎片和延迟。
      • 数据最终会异步刷新到主存储(如HDD或SSD数据盘)。
  • 配置要求

    1. 日志盘选择
      • SSD类型:推荐使用 NVMe SSDSATA SSD(PCIe接口优先)。
      • 容量建议:日志盘容量无需很大(例如单独240GB SSD即可),重点在于IOPS和低延迟。
    2. 部署方式
      • 在创建OSD时使用 - bluestore-db-dev(Bluestore的数据库盘)和 - bluestore-wal-dev(Bluestore的写入日志盘)参数。
      ceph-volume lvm prepare --data {主数据盘} --block.db {Bluestore DB SSD} --block.wal {Bluestore WAL SSD}
      
      • 对于纯Journal场景(如旧版本FileStore),强制定向日志到SSD:
      ceph-osd -i {osd_id} --osd-journal {journal_ssd_path}
      
  • 优势与风险

    • 优势:显著提升写吞吐量(尤其在高并发场景)。
    • 风险
      • 日志SSD故障可能导致数据丢失(需配合副本或EC的冗余策略);
      • 需定期监控SSD的健康状态(如写入寿命)。

10. OSD管理

新OSD权重调整(New OSD Weights)
  • 背景
    当新增一个OSD到集群中时,默认权重可能过低,导致数据再平衡缓慢(新OSD的存储空间未被充分利用)。需手动调整OSD的权重,使其尽快分担集群负载。

  • 权重计算与配置

    1. OSD权重定义

      • 权重(osd_weight)表示OSD的存储容量占比,数值越高,分配到的PG越多。
      • 公式示例:
        osd_weight = (OSD的存储容量) / (集群总容量) × 调整系数  
        
        示例:如果新OSD的容量是其他节点平均容量的150%,则应分配更高权重。
    2. 调整步骤

      • 查询当前权重
        ceph osd tree  # 查看各OSD的weight值
        
      • 设置新OSD的初始权重
        # 直接设置OSD的权重(可能需要多次调整)
        ceph osd reweight {osd_id} {新权重值(0-1之间)}# 通过CRUSH Bucket调整(推荐全局平衡)
        ceph osd crush reweight osd.{osd_id} {新权重值(如1.0)}
        
      • 强制快速平衡(谨慎操作)
        ceph osd pool set {pool_name} pg_autobalancing_mode upmap
        ceph osd pool set {pool_name} pg_autoscale_mode on
        
    3. 注意事项

      • 初始权重不宜过高:若权重设置过高可能导致其他OSD负载陡增,引发性能抖动。
      • 动态调整:根据集群负载监控逐步调整,避免单次修改过大的权重。
      • 对比工具:用 ceph osd df detail 或监控工具(如Grafana)观察OSD数据分布。
  • 扩展场景示例

    # 新增一个10TB HDD的OSD,集群总容量为90TB
    osd_new_weight = (10 / 90)0.11 → *1.05(预留扩展空间)
    ceph osd reweight 20 0.115
    

补充操作建议

日志SSD的监控与维护
  • 监控工具集成
    使用 Prometheus + Ceph Exporter 监控日志SSD的IOPS、延迟、写入速率等指标。
  • 故障场景处理
    如果日志SSD损坏,需优先替换并重建OSD的Bluestore journal,或使用 ceph_osd_mkjournal工具恢复。
权重管理的自动化
  • Ansible脚本:编写自动化脚本,在新OSD加入时自动计算并分配权重。
    # Ansible任务示例
    - name: Set OSD weight based on storage sizeshell: |osd_id="{{ item.id }}"capacity="{{ item.size }}GB"total_capacity="{{ cluster_total }}"weight=$(awk "BEGIN {print {{ capacity }}/{{ total_capacity }}/1.1}")ceph osd reweight {{ osd_id }} {{ weight }}"with_items: "{{ new_osds }}"
    

总结

Ceph的硬件规划需结合业务场景、预算、可扩性等因素。核心原则是:

  1. 选择合适的存储介质(SSD作为缓存层,HDD用于大容量),避免硬件单点故障。
  2. 网络划分明确且冗余,确保低延迟和高吞吐。
  3. 规划合理的PG数量和副本策略,平衡性能与成本。
  4. 预留充足空闲空间和监控资源健康状态,避免集群过载。
  5. 日志SSD:通过分离日志到高性能SSD,缓解写放大问题,尤其适用于高吞吐场景(如虚拟化)。
  6. OSD权重管理:确保新节点快速分担数据负载,减少人工干预,提升集群扩缩容的灵活性。

通过上述策略,可有效规划一个高性能、高可靠、可扩展的Ceph存储集群。

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

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

相关文章

Windows主机、虚拟机Ubuntu、开发板,三者之间文件互传

以下内容源于日常学习的整理&#xff0c;欢迎交流。 下图是Windows主机、虚拟机Ubuntu、开发者三者之间文件互传的方式示意图&#xff1a; 注意&#xff0c;下面谈及的所有方式&#xff0c;都要求两者的IP地址处于同一网段&#xff0c;涉及到的软件资源见felm。 一、Windows主…

Softmax温度调节与注意力缩放:深度神经网络中的平滑艺术

Softmax温度调节与注意力缩放&#xff1a;深度神经网络中的平滑艺术 在深度学习的精密机械中&#xff0c;有些细微的调整机制往往被视为理所当然&#xff0c;却实际上蕴含着深刻的数学洞察和巧妙的工程智慧。今天&#xff0c;我们将探讨两个看似独立却本质相通的机制&#xff…

RIP路由欺骗攻击与防御实验详解

一、基础网络配置 1. 路由器R1配置 interface GigabitEthernet0/0/0ip address 192.1.2.254 255.255.255.0 ! interface GigabitEthernet0/0/1ip address 192.1.3.254 255.255.255.0 ! router rip 1version 2network 192.1.2.0network 192.1.3.0 2. 路由器R2配置 interface…

阿里云平台Vue项目打包发布

目录&#xff1a; 1、vue项目打包2、通过ngixn发布vue的打包文件 1、vue项目打包 在你的vue项目下执行npm run build命令进行打包。 2、通过ngixn发布vue的打包文件 直接将打包的dist文件拷贝到nginx目录下即可。 修改nginx.conf的配置文件的相关配置&#xff0c;如端口或者ro…

《基于Spring Boot+Vue的智慧养老系统的设计与实现》开题报告

个人主页:@大数据蟒行探索者 一、研究背景及国内外研究现状 1.研究背景 根据1982年老龄问题世界大会联合国制定的标准,如果一个国家中超过65岁的老人占全国总人口的7%以上,或者超过60岁的老人占全国总人口的10%以上,那么这个国家将被定义为“老龄化社会”[1]。 随着国…

SpringCache @Cacheable 在同一个类中调用方法,导致缓存不生效的问题及解决办法

由于项目需要使用SpringCache来做一点缓存&#xff0c;但自己之前没有使用过&#xff08;其实是没有听过&#xff09;SpringCache&#xff0c;于是&#xff0c;必须先学习之。 显然&#xff0c;就是在同一个类中&#xff0c;MethodA 调用了 MethodB&#xff0c;那么 MethodB 上…

2025-03-20(DS复习):详细介绍一下Databricks 的Delta Lake

Delta Lake 是 Databricks 推出的一种开源存储层&#xff0c;它构建在现有数据湖&#xff08;如 Amazon S3、Azure Data Lake Storage、Google Cloud Storage&#xff09;之上&#xff0c;为数据湖提供了数据仓库级别的可靠性、性能和管理功能。Delta Lake 解决了传统数据湖的许…

在VMware上部署【Ubuntu】

镜像下载 国内各镜像站点均可下载Ubuntu镜像&#xff0c;下面例举清华网站 清华镜像站点&#xff1a;清华大学开源软件镜像站 | Tsinghua Open Source Mirror 具体下载步骤如下&#xff1a; 创建虚拟机 准备&#xff1a;在其他空间大的盘中创建存储虚拟机的目录&#xff0c…

初入ARM,点灯,按键与中断相结合

与MCU不同&#xff0c;ARM属于功能更复杂&#xff0c;更强大的SOC&#xff0c;是可以移植操作系统的&#xff0c;但是在最开始学习arm&#xff0c;需要了解arm的运行方式&#xff0c;所以现在使用的是裸机开发。arm系统有多种工作模式&#xff0c;分别是User&#xff0c;IRQ&am…

Moonlight-16B-A3B: 变革性的高效大语言模型,凭借Muon优化器打破训练效率极限

近日&#xff0c;由Moonshot AI团队推出的Moonlight-16B-A3B模型&#xff0c;再次在AI领域引发了广泛关注。这款全新的Mixture-of-Experts (MoE)架构的大型语言模型&#xff0c;凭借其创新的训练优化技术&#xff0c;特别是Muon优化器的使用&#xff0c;成功突破了训练效率的极…

风尚云网|前端|JavaScript性能优化实战:从瓶颈定位到高效执行

JavaScript性能优化实战&#xff1a;从瓶颈定位到高效执行 JavaScript性能优化 在移动优先和Web应用日益复杂化的今天&#xff0c;JavaScript性能优化已成为前端工程师的必修课。本文将通过真实场景案例&#xff0c;深入解析从性能瓶颈定位到具体优化策略的完整闭环&#xff…

强大的AI网站推荐(第一集)—— Devv AI

网站&#xff1a;Devv AI 号称&#xff1a;最懂程序员的新一代 AI 搜索引擎 博主评价&#xff1a;我的大学所有的代码都是使用它&#xff0c;极大地提升了我的学习和开发效率。 推荐指数&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x…

使用 .NET Core 的本地 DeepSeek-R1

使用 .NET 在我的 MacBook Pro 上与当地 LLM 聊天的历程。 如今&#xff0c;只需使用浏览器即可轻松使用 ChatGPT 或其他 genAI。作为开发人员&#xff0c;我们可以通过直接集成 OpenAI API 等来做更复杂的事情。如果我们想在自己的机器上运行 LLM&#xff0c;只是为了找人聊天…

将 VOC 格式 XML 转换为 YOLO 格式 TXT

目录 1. 导入必要的模块 2. 定义类别名称 3. 设置文件路径 完整代码 1. 导入必要的模块 import os import xml.etree.ElementTree as ET os&#xff1a;用于文件和目录操作&#xff0c;例如创建目录、遍历文件等。 xml.etree.ElementTree&#xff1a;用于解析XML文件&#…

Visual Studio调试的技巧

1.什么是bug&#xff1f; bug&#xff1a;程序漏洞&#xff0c;也就是程序中存在的问题。 2.什么是调试&#xff1f; 当我们发现了程序中的问题后就会解决问题&#xff0c;前提是要找到问题&#xff0c;那么进行调试&#xff08;debug&#xff09;以此来找到问题。 3.debug…

C++ 各种map对比

文章目录 特点比较1. std::map2. std::unordered_map3. std::multimap4. std::unordered_multimap5. hash_map&#xff08;SGI STL 扩展&#xff09; C 示例代码代码解释 特点比较 1. std::map 底层实现&#xff1a;基于红黑树&#xff08;一种自平衡的二叉搜索树&#xff09…

fontTools工具的使用介绍

前言 python工具库fontTools&#xff0c;我是用来压缩前端字体的&#xff0c;优化前端请求速度的&#xff1b;使用的过程中&#xff0c;遇到了不少的坑&#xff0c;把这个过程记录下来&#xff0c;防止再犯。 安装 # fontTools 4.56.0 pip install fontTools提取子字体集 方…

利用大语言模型生成的合成数据训练YOLOv12:提升商业果园苹果检测的精度与效率

之前小编分享过关于《YOLO11-CBAM集成&#xff1a;提升商业苹果园树干与树枝分割的精准度》&#xff0c;改进YOLO11算法后&#xff0c;进行苹果树的实例分割。本期文章我们将分享关于最新的YOLO12算法改进的苹果目标检测。 论文题目&#xff1a;Improved YOLOv12 with LLM-Gen…

设计模式 二、创建型设计模式

GoF是 “Gang of Four”&#xff08;四人帮&#xff09;的简称&#xff0c;它们是指4位著名的计算机科学家&#xff1a;Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides。他们合作编写了一本非常著名的关于设计模式的书籍《Design Patterns: Elements of Reusable…

redis,tar.gz安装后,接入systemctl报错解决

1. WARNING Memory overcommit must be enabled! 这种报错&#xff0c;有两种解决方法 1.1 修改系统参数 编辑 /etc/sysctl.conf 文件&#xff0c;设置 overcommit_memory 为 1 vm.overcommit_memory 11.2 修改redis的最大使用内存 修改配置文件 redis.conf maxmemory 1g…