运维锅总浅析Kubernetes之Ceph

Ceph 的核心组件有哪些?Ceph读写数据流程及故障自愈是怎样的?如何对Ceph部署架构进行调优?如何用Ceph集成到kubernetes?希望本文能帮您解答这些疑惑!

一、Ceph简介

Ceph 是一个开源的分布式存储系统,旨在提供高性能、高可用性和高可扩展性的存储解决方案。它通过统一存储平台,支持对象存储、块存储和文件系统,适用于各种规模的企业和云计算环境。

Ceph 的核心组件

  1. Ceph Monitor (MON):

    • 负责维护集群的地图和状态信息,包括存储池、OSD和PG(Placement Group)的分布。
    • 确保集群的一致性和高可用性。
  2. Ceph OSD (Object Storage Daemon):

    • 负责存储实际的数据,并处理数据的读写操作。
    • 每个OSD守护进程管理一个存储设备(如硬盘或SSD)。
  3. Ceph MDS (Metadata Server):

    • 负责存储Ceph文件系统(CephFS)的元数据。
    • 提供高效的文件目录操作。
  4. Ceph Manager (MGR):

    • 提供额外的监控和管理功能。
    • 通过插件扩展,如仪表板和性能监控。

Ceph 的主要特性

  1. 高可用性和数据冗余:

    • 使用多副本(Replication)或纠删码(Erasure Coding)机制来保证数据的持久性和可靠性。
    • 在节点或硬件故障时,自动进行数据恢复和再平衡。
  2. 高扩展性:

    • 采用去中心化架构,支持水平扩展,无需中断服务。
    • 可以从小规模部署扩展到数千个节点。
  3. 统一存储:

    • 同时支持对象存储(Ceph Object Gateway,兼容S3和Swift)、块存储(RADOS Block Device,RBD)和文件系统(CephFS)。
    • 提供灵活的存储服务,满足不同的应用需求。
  4. 强一致性:

    • 通过Paxos算法确保数据一致性和高可用性。
    • 支持ACID事务,保证数据操作的原子性和一致性。
  5. 高性能:

    • 使用CRUSH(Controlled Replication Under Scalable Hashing)算法,进行数据的分布和定位,避免了单点瓶颈。
    • 支持高并发的I/O操作和低延迟的访问。

Ceph 的应用场景

  1. 云计算和虚拟化:

    • 为云平台(如OpenStack)提供持久化存储,支持虚拟机的块存储和对象存储。
    • 提供高可用、高性能的存储解决方案。
  2. 大数据和分析:

    • 支持海量数据的存储和快速访问,适用于大数据处理和分析场景。
    • 提供弹性的存储扩展能力。
  3. 容器存储:

    • 与Kubernetes集成,提供持久化存储卷(Persistent Volume,PV)和动态存储卷供应。
    • 支持容器化应用的存储需求。
  4. 企业存储:

    • 适用于企业级存储需求,如数据库、邮件系统、文件共享等。
    • 提供可靠性和高可用性的存储服务。

Ceph 的部署和管理

  1. 部署工具:

    • Ceph-deploy:一个简单的命令行工具,适用于小规模测试部署。
    • Ceph-ansible:基于Ansible的自动化部署工具,适用于生产环境和大规模部署。
    • Rook:一个在Kubernetes上运行的Ceph运维工具,简化了Ceph的部署和管理。
  2. 管理和监控:

    • Ceph Dashboard:一个基于Web的管理界面,提供集群状态、性能监控和配置管理。
    • Ceph CLI:命令行工具,用于管理和维护Ceph集群。
    • Prometheus 和 Grafana:与Ceph集成,用于性能监控和可视化。

总结

Ceph 是一个功能强大且灵活的分布式存储系统,能够满足各种存储需求。无论是对象存储、块存储还是文件系统,Ceph 都提供了高性能、高可用性和高扩展性的解决方案,是现代数据中心和云计算环境中的重要存储技术。

二、Ceph读写数据流程及故障自愈

要详细描述Ceph的读写数据流程以及故障自愈的机制,并使用Mermaid图表示,我们需要了解Ceph的几个关键组件和操作步骤。下面将分别介绍数据的写入和读取流程,并说明故障自愈机制。

Ceph 写入流程

  1. 客户端发送写请求:客户端将数据分片并发送到多个Ceph OSD守护进程。
  2. 数据分片和哈希:Ceph客户端通过CRUSH算法决定数据存储的位置。
  3. 主OSD接收请求:负责写入操作的主OSD接收到客户端的数据。
  4. 复制数据:主OSD将数据复制到其余的副本OSD。
  5. 确认写入:所有副本OSD确认数据写入成功后,主OSD向客户端发送确认消息。

Ceph 读取流程

  1. 客户端发送读请求:客户端通过CRUSH算法找到存储数据的主OSD。
  2. 主OSD响应请求:主OSD将数据返回给客户端。

Ceph 故障自愈机制

  1. 故障检测:Ceph Monitor检测到某个OSD故障。
  2. 数据恢复和重平衡:Ceph会将故障OSD上的数据重新分配到其他健康的OSD上。
  3. 状态更新:恢复和重平衡完成后,更新集群状态。

以下是用Mermaid图详细表示Ceph的读写数据流程和故障自愈机制:

Fault Tolerance and Self-healing
Read Process
Write Process
Ceph triggers data recovery and rebalancing
Monitor detects OSD failure
CRUSH algorithm redistributes data to healthy OSDs
Recovery and rebalancing complete, cluster state updated
Client uses CRUSH to find primary OSD
Client sends read request
Primary OSD returns data to Client
Client uses CRUSH to determine OSDs
Client sends write request
Primary OSD receives data
Primary OSD replicates data to replica OSDs
Replica OSDs acknowledge data write
Primary OSD sends acknowledgment to Client

详细说明

  • 写入流程

    • 客户端发送写请求:客户端应用程序将数据分成块,并将这些块发送到Ceph集群。
    • 数据分片和哈希:Ceph客户端使用CRUSH算法计算出数据块应该存储在哪些OSD上。
    • 主OSD接收请求:指定为主OSD的守护进程接收数据并开始写入过程。
    • 复制数据:主OSD将数据复制到指定数量的副本OSD上(通常是2个或更多,具体取决于集群配置)。
    • 确认写入:当所有副本OSD确认数据写入成功后,主OSD向客户端发送确认消息,表示写入操作完成。
  • 读取流程

    • 客户端发送读请求:客户端应用程序请求读取存储在Ceph集群中的数据。
    • 主OSD响应请求:客户端使用CRUSH算法找到存储数据的主OSD,主OSD将数据返回给客户端。
  • 故障自愈机制

    • 故障检测:Ceph Monitor节点持续监控集群中各个OSD的状态,并检测故障。
    • 数据恢复和重平衡:检测到OSD故障后,Ceph会自动启动数据恢复和重平衡过程,将故障OSD上的数据重新分配到其他健康的OSD上。
    • 状态更新:恢复和重平衡完成后,Ceph Monitor更新集群状态,确保集群在健康状态下运行。

总结

通过以上步骤,Ceph实现了高性能、高可用性和高可靠性的分布式存储系统,并能够在出现故障时自动进行数据恢复和重平衡,保证数据的持久性和可用性。Mermaid图提供了可视化的流程,帮助更直观地理解Ceph的工作原理和机制。

三、Ceph部署架构推荐及调优

Ceph 的部署架构和调优策略对于其性能和稳定性至关重要。以下是 Ceph 部署架构的推荐以及一些关键的调优建议。

推荐的 Ceph 部署架构

1. 基础架构设计
  • 硬件选择:

    • OSD节点: 使用高性能的磁盘(NVMe/SSD)和大容量的HDD组合。每个OSD节点应至少有一块NVMe/SSD作为日志盘。
    • MON节点: 使用高可靠性的SSD,通常3到5个MON节点以保证集群的高可用性。
    • 网络: 使用高带宽、低延迟的网络(10GbE或更高),建议使用双网络,一个用于集群内部通信(Cluster Network),一个用于客户端通信(Public Network)。
  • 节点规划:

    • Ceph OSD节点: 负责存储数据,每个节点应配置多个OSD守护进程。
    • Ceph MON节点: 维护集群状态信息,建议使用奇数个节点来避免脑裂。
    • Ceph MDS节点: 如果使用CephFS文件系统,MDS节点负责元数据操作。
    • Ceph RGW节点: 如果使用对象存储,RGW节点提供兼容S3和Swift的对象存储服务。
2. 部署示例架构
Ceph Cluster
Replication
Replication
OSD Node 2
OSD Node 1
OSD Node 3
MON Node 1
MDS Node
RGW Node

Ceph 调优建议

1. 硬件调优
  • OSD节点:

    • 使用高性能磁盘(NVMe/SSD)来提高写入和读取性能。
    • 确保OSD节点有足够的内存,每个OSD至少配备2-4GB内存。
  • 网络:

    • 使用10GbE或更高的网络,确保低延迟和高带宽。
    • 为集群网络和客户端网络使用不同的网络接口,避免网络拥塞。
2. 软件调优
  • 操作系统调优:

    • 调整文件系统参数,使用适合大数据量的文件系统(如XFS或BlueStore)。
    • 调整内核参数以优化网络和I/O性能,如增加TCP缓冲区大小。
  • Ceph配置调优:

    • OSD参数调优:

      • osd_pool_default_size:设置默认副本数量,通常为3。
      • osd_pool_default_min_size:设置最小副本数量,通常为2。
      • osd_max_backfills:增加并行回填的数量,提高恢复速度。
      • osd_recovery_max_active:增加并行恢复操作的数量,提高恢复速度。
    • 监控和管理参数:

      • mon_osd_down_out_interval:设置OSD失效后多久自动标记为out,通常为600秒。
      • mon_clock_drift_allowed:设置允许的时钟漂移,通常为0.05秒。
    • 网络参数调优:

      • ms_bind_ipv6:禁用IPv6绑定,避免网络冲突。
      • ms_dispatch_throttle_bytes:增加网络传输限制,提高吞吐量。
3. 性能监控和故障排除
  • 使用Ceph Dashboard:监控集群状态、性能指标和告警信息。
  • 使用Prometheus和Grafana:集成Prometheus进行监控,使用Grafana进行数据可视化。
  • 日志分析:定期检查Ceph日志(/var/log/ceph),及时发现并解决潜在问题。
4. 常见调优场景
  • 写入性能低:

    • 增加OSD节点数量,分散写入负载。
    • 使用高速磁盘(NVMe/SSD)作为日志盘。
    • 调整osd_op_threadsosd_recovery_op_priority参数,提高写入和恢复性能。
  • 读取性能低:

    • 使用更多的副本提高读取性能。
    • 调整osd_max_backfillsosd_recovery_max_active参数,减少恢复对读取性能的影响。
  • 恢复速度慢:

    • 增加osd_max_backfillsosd_recovery_max_active参数,提高恢复速度。
    • 增加OSD节点数量,分散恢复负载。

总结

Ceph 的部署架构应根据具体需求和硬件条件进行设计,确保高性能、高可用性和可扩展性。调优过程中,需要综合考虑硬件配置、操作系统调优和Ceph配置参数调优,通过性能监控和故障排除,持续优化Ceph集群的性能和稳定性。

四、Ceph集成kubernetes举例

将 Ceph 集成到 Kubernetes 中,可以为 Kubernetes 集群提供持久存储解决方案。Ceph 和 Kubernetes 的集成通常通过 Rook(一个开源的 Kubernetes 原生 Ceph 运维工具)来实现。下面是 Ceph 集成 Kubernetes 的详细步骤和示例。

前提条件

  1. Kubernetes 集群:已经部署好的 Kubernetes 集群。
  2. Ceph 集群:可以是现有的 Ceph 集群,也可以通过 Rook 部署新的 Ceph 集群。

使用 Rook 部署 Ceph 集群

Rook 使得在 Kubernetes 中部署和管理 Ceph 集群变得更加简单。以下是通过 Rook 部署 Ceph 集群的步骤。

1. 安装 Rook Operator

首先,安装 Rook Operator,它负责管理 Ceph 集群的生命周期。

kubectl create -f https://raw.githubusercontent.com/rook/rook/release-1.7/cluster/examples/kubernetes/ceph/common.yaml
kubectl create -f https://raw.githubusercontent.com/rook/rook/release-1.7/cluster/examples/kubernetes/ceph/operator.yaml
2. 创建 Ceph 集群

创建一个 CephCluster 自定义资源(CR),Rook Operator 会根据该资源部署和管理 Ceph 集群。

创建一个名为 cluster.yaml 的文件,内容如下:

apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:name: rook-cephnamespace: rook-ceph
spec:cephVersion:image: ceph/ceph:v15.2.13dataDirHostPath: /var/lib/rookmon:count: 3allowMultiplePerNode: falsedashboard:enabled: truenetwork:hostNetwork: falsestorage:useAllNodes: trueuseAllDevices: trueconfig:databaseSizeMB: "1024"journalSizeMB: "1024"osdsPerDevice: "1"resources:...

然后应用该文件:

kubectl apply -f cluster.yaml
3. 创建存储池

创建一个 CephBlockPool 资源来配置 Ceph 存储池。

创建一个名为 pool.yaml 的文件,内容如下:

apiVersion: ceph.rook.io/v1
kind: CephBlockPool
metadata:name: replicapoolnamespace: rook-ceph
spec:replicated:size: 3

然后应用该文件:

kubectl apply -f pool.yaml
4. 创建存储类

创建一个 StorageClass,使 Kubernetes 可以使用 Ceph 提供的存储。

创建一个名为 storageclass.yaml 的文件,内容如下:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: rook-ceph-block
provisioner: rook-ceph.rbd.csi.ceph.com
parameters:clusterID: rook-cephpool: replicapoolimageFormat: "2"imageFeatures: "layering"csi.storage.k8s.io/fstype: ext4# Specify the secrets for the provisioner to connect to the clustercsi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisionercsi.storage.k8s.io/provisioner-secret-namespace: rook-cephcsi.storage.k8s.io/controller-expand-secret-name: rook-csi-rbd-provisionercsi.storage.k8s.io/controller-expand-secret-namespace: rook-cephcsi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-nodecsi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:- discard

然后应用该文件:

kubectl apply -f storageclass.yaml

在 Kubernetes 中使用 Ceph 存储

1. 创建 PersistentVolumeClaim (PVC)

创建一个 PVC 来请求 Ceph 提供的存储。

创建一个名为 pvc.yaml 的文件,内容如下:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: ceph-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 1GistorageClassName: rook-ceph-block

然后应用该文件:

kubectl apply -f pvc.yaml
2. 使用 PVC

在一个 Pod 中使用这个 PVC。

创建一个名为 pod.yaml 的文件,内容如下:

apiVersion: v1
kind: Pod
metadata:name: ceph-test
spec:containers:- name: ceph-containerimage: busyboxcommand: [ "sleep", "3600" ]volumeMounts:- mountPath: "/mnt/storage"name: ceph-storagevolumes:- name: ceph-storagepersistentVolumeClaim:claimName: ceph-pvc

然后应用该文件:

kubectl apply -f pod.yaml

调优建议

1. 硬件调优
  • 网络: 确保 Ceph 和 Kubernetes 之间有高速网络连接(至少 10GbE)。
  • 存储设备: 使用 NVMe/SSD 作为 Ceph OSD 的日志盘,提高性能。
2. Ceph 调优
  • 调整 osd_op_threadsosd_recovery_op_priority 参数,以优化读写性能和恢复速度。
  • 确保 MON 节点和 OSD 节点有足够的内存和 CPU 资源。
3. Kubernetes 调优
  • 配置合适的 StorageClass,根据工作负载需求调整存储池策略(如副本数量和池类型)。
  • 使用资源限制和请求,确保 Pod 不会过度消耗节点资源。

总结

通过 Rook 将 Ceph 集成到 Kubernetes 中,可以为 Kubernetes 提供高性能、高可用性的持久存储解决方案。遵循上述步骤和调优建议,可以确保 Ceph 和 Kubernetes 集群的高效运行。

五、一个秘密

希望对您有所帮助!关注锅总,及时获得更多花里胡哨的运维实用操作!

图片

锅总个人博客

https://gentlewok.blog.csdn.net/

锅总微信公众号

图片

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

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

相关文章

PySide(PyQt)使用QPropertyAnimation制作动态界面

主脚本: # encoding: utf-8 import os import sysfrom PySide6.QtCore import QPropertyAnimation, QEasingCurvefrom UIS import *# 主画面类 class MainWindow(QMainWindow, animationButton_ui.Ui_MainWindow):def __init__(self):super().__init__()self.setup…

韩顺平0基础学Java——第37天

p736-758 MySQL三层结构 1.所谓安装Mysql数据库,就是在主机安装一个数据库管理系统(DBMS),这个管理程序可以管理多个数据库。DBMS(database manage system) 2.一个数据库中可以创建多个表,以保存数据(信息)。 3.数据库管理系统(DBMS)、数据库和表的关系…

Android 性能之刷新率设置和管理

目录 1. 刷新率和帧率 2. 多种刷新率 3. 基本原理 3.1 屏幕 & 显示控制器 3.2 Composer Service 4. Framework 策略 4.1基本架构 4.2 刷新率设置项的定义 4.2.1 最低刷新率 4.2.2 默认刷新率 & 默认的用户设置刷新率 4.2.2.1 设置入口 4.2.2.2 设置场景 4…

从零开始:在linux系统安装MongoDB数据完整指南 新手常用命令

1 前言 MongoDB 是为快速开发互联网应用而设计的数据库系统。MongoDB 的设计目标是极简、灵活、作为 Web 应用栈的一部分。MongoDB 的数据模型是面向文档的,所谓文档是一种类似于json的结构。 官网教程:https://www.mongodb.com/docs/manual/ 2 安装部…

【接口自动化_11课_框架实战:基于封装的框架进行实战演练-下】

目标: 在原有基础上进行框架优化,本内容不做强制要求,了解即可。 1. Faker(伪造器)模块生成数据 2. 实战:结合框架动态生成请求数据 3. 实战:响应进行动态断言处理 一、 Faker&#xff…

LoFTR关键点特征匹配算法环境构建与图像匹配测试Demo

0,LoFTR CVPR 2021论文《LoFTR: Detector-Free Local Feature Matching with Transformers》开源代码 1,项目主页 LoFTR: Detector-Free Local Feature Matching with Transformers 2,GItHub主页 GitHub - zju3dv/LoFTR: Code for "…

微软蓝屏事件对企业数字化转型有什么影响?

引言:从北京时间2024年7月19日(周五)下午2点多开始,全球大量Windows用户出现电脑崩溃、蓝屏死机、无法重启等情况。事发后,网络安全公司CrowdStrike称,收到大量关于Windows电脑出现蓝屏报告,公司…

畅游时空|虚拟世界初体验,元宇宙游戏如何开发?

在元宇宙中,用户可以通过虚拟身份进行互动、社交、工作和娱乐,体验与现实世界平行的生活和活动。元宇宙不仅仅是一个虚拟空间,更是一个融合了虚拟和现实的生态系统,具有巨大的发展潜力和应用前景。 在不断发展的数字环境中&#x…

简单几步,教你使用scikit-learn做分类和回归预测

前言 scikit-learn是基于Python的一个机器学习库,你可以在scikit-learn库中选择合适的模型,使用它训练数据集并对新数据集作出预测。 对于初学者来说,有一个共同的困惑: 怎么使用scikit-learn库中的模型做预测? 本文…

IOS微软语音转文本,lame压缩音频

在IOS开发中,用微软进行语音转文本操作,并将录音文件压缩后返回 项目中遇到了利用微软SDK进行实时录音转文本操作,如果操作失败,那么就利用原始音频文件通过网络请求操作,最终这份文件上传到阿里云保存,考…

MongoDB教程(十五):MongoDB原子操作

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言一、MongoD…

11 深度推荐模型演化中的“范式替换“灵活组合

上一课时,我们介绍了 DIEN 模型添加了 RNN中 的 GRU,使模型获得了对序列数据的建模能力;而 DSIN 模型不仅使用了 RNN 中的 bi-LSTM,还使用了 Transformer 组件。 由此可见,在新的演化模型中,根据场景和数据…

Lua脚本简单理解

目录 1.安装 2.语法 2.1Lua数据类型 2.2变量 2.3lua循环 2.4流程控制 2.5函数 2.6运算符 2.7关系运算符 3.lua脚本在redis中的使用 3.1lua脚本再redis简单编写 3.2普通锁Lua脚本 3.3可重入锁lua脚本 1.安装 centos安装 安装指令: yum -y update yum i…

本地部署VMware ESXi服务实现无公网IP远程访问管理服务器

文章目录 前言1. 下载安装ESXi2. 安装Cpolar工具3. 配置ESXi公网地址4. 远程访问ESXi5. 固定ESXi公网地址 前言 在虚拟化技术日益成熟的今天,VMware ESXi以其卓越的性能和稳定性,成为了众多企业构建虚拟化环境的首选。然而,随着远程办公和跨…

CCS光源的高输出TH2系列平面光源

光源在机器视觉系统中起着重要作用,不同环境、场景及应用合适光源都不一样,今天我们来看看高输出TH2系列平面光源。它可以对应高速化的生产线,为提高生产效率做出贡献。 TH2系列光源的特点: 1、实现了更高一级的高亮度 实现了更…

谷粒商城实战笔记-56~57-商品服务-API-三级分类-修改-拖拽功能完成

文章目录 一,56-商品服务-API-三级分类-修改-拖拽功能完成二,57-商品服务-API-三级分类-修改-批量拖拽效果1,增加按钮2,多次拖拽一次保存完整代码 在构建商品服务API中的三级分类修改功能时,拖拽排序是一个直观且高效的…

Java | Leetcode Java题解之第260题只出现一次的数字III

题目: 题解: class Solution {public int[] singleNumber(int[] nums) {int xorsum 0;for (int num : nums) {xorsum ^ num;}// 防止溢出int lsb (xorsum Integer.MIN_VALUE ? xorsum : xorsum & (-xorsum));int type1 0, type2 0;for (int n…

Prometheus配置alertmanager告警

1、拉取镜像并运行 1、配置docker镜像源 [rootlocalhost ~]# vim /etc/docker/daemon.json {"registry-mirrors": ["https://dfaad.mirror.aliyuncs.com"] } [rootlocalhost ~]# systemctl daemon-reload [rootlocalhost ~]# systemctl restart docker2、…

刷题了: 151.翻转字符串里的单词 |卡码网:55.右旋转字符串

151.翻转字符串里的单词 题目链接:https://leetcode.cn/problems/reverse-words-in-a-string/description/ 文章讲解:https://programmercarl.com/0151.%E7%BF%BB%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%87%8C%E7%9A%84%E5%8D%95%E8%AF%8D.html 视频讲解:https://www.bilibi…

vue2之jessibuca视频插件使用教程

vue2之jessibuca视频插件使用教程 jessibuca简介前期准备下载相关jsvue index.html文件引入 组件封装使用小知识 引入iconfont jessibuca简介 Jessibuca是一款开源的纯H5直播流播放器,通过Emscripten将音视频解码库编译成Js(ams.js/wasm)运行于浏览器之中…