首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

每天5分钟复习OpenStack(十五)Ceph与Bcache结合

编程知识
2024年09月04日 20:53

上一章我们成功部署了bcache,这一章我们将Ceph与Bcache结合来使用,使用Bcache来为ceph的数据盘提速。

1 ceph 架构

一个标准的ceph集群可能是如下的架构,SSD/NVME 存储元数据,而SATA盘存储数据。这样的架构下,物理介质的SATA盘读写速率上限决定了存储集群Ceph的上限(木桶效应)。如果在此架构下我们给SATA盘加上一层缓存层.


在官方文档中给出了缓存层的结构如下

其整体思路都是一样,只是缓存层的方案因此长时间没有人维护。目前还处在非生产可用阶段 。

而bcache 技术则是经过了时间的洗礼,在ceph缓存技术中是比较成熟的方案。

则采用Bcache存储架构变成了如下架构。

在此架构下我们将Bcache的模式修改为writeback模式,则在使用缓存的情况下Ceph对数据盘写入性能得到了极大的提升。在生产环境中我们只需要专注于解决增加缓存的命中率即可。实际上大多数生产环境正是这么做的。

2 部署

在第十三章中我们介绍了ceph单节点的部署,如果你还没有一个单节点的ceph环境,那赶紧跳转回去,在自己的虚拟机环境上搭建一个最小的ceph环境。
我们只需要在ceph osd部署时将 --data 盘的参数指向bcache 则即可以完成上述架构的部署

ceph-volume --cluster ceph lvm create  --bluestore \
          --data /dev/bcache0 --block.db /dev/sde1 

ceph-volume --cluster ceph lvm create  --bluestore \
          --data /dev/bcache1 --block.db /dev/sde2

ceph-volume --cluster ceph lvm create  --bluestore \
         --data /dev/bcache2 --block.db /dev/sde3

此时的--data 指定了数据盘为bcache0 、bcache1、bcache2,sde盘的分区1、2、3 则对应了block.db 。

此时在查看ceph集群的状态

3 思考

每一个数据盘都对应一个三级目录结构如下

sdd                                                                        
└─bcache0                                         
  └─ceph--f015264a--34a3--484e--b17a--1811290fea04-osd--block--c6b8e971--5246--46db--93f8--0ceda4626015

3.1 其中这一长串都是到底是什么?


知晓LVM是什么的小伙伴可以清晰看出,右边这一侧是LV(Logical Volume编号,而左边这一侧是 VG (Volume Group)编号。

我们知道,LVM --VG --PV 对应一个三级结构,因此知道了VG ,通过 vgdisplay pvdisplay 就能知晓了PV ,而PV 一般就是一个分区或磁盘,此时对应ceph集群就是BcacheX,此时X是Bcache的编号。通过Bcache的编号,在结合lsblk 就知晓了真正存储数据的后端数据盘的盘符。

注意 lsblk输出的VGLV编号分隔符是带两个--而,vgdisplaylvdisplay都是一个-做为分隔符,因此在搜索时过滤最后1段就行)

3.2 为什么我们要知晓这些?或者换一句话说知道这些有什么用了?

我们知道ceph的数据盘在ceph中表现为一个osd.2 等数字,现在问题来了,如果osd.2 坏了需要换盘,你怎么知道osd.2对应的数据盘是哪一块盘了?

总结下来就是如下图所示

从图中可以知道osd 对应编号 和磁盘的对应关系,那和VG LVM编号又有什么关系了,通过osd的安装目录就已经知晓了 磁盘和osd的对应的关系。管他什么LV VG了。

我们试想一个这样一个场景如果bcache2坏了,此时lsblk显示的ceph字段自然也不存在了?你怎么关联osd编号和磁盘的对应关系了?此时VG和PV就派上了用途。

因此作者建议在学习时,不要做一个工具人,而是要做到知其然也要知其所以然。

3.3 有没有简单命令 一眼就能看出的其对应关系的 ?

ceph-volume lvs list 命令就可以直接实现

写在最后:

目前我们已经完成了一个最小化的ceph集群,ceph作为一个分布式存储,知晓其概念,并进行维护是一项艰巨的任务,记下来我们将从理论到实践,重点阐述下ceph运维技巧。

From:https://www.cnblogs.com/alex0815/p/18397410
本文地址: http://shuzixingkong.net/article/1737
0评论
提交 加载更多评论
其他文章 【Azure Policy】使用deployIfNotExists 把 Azure Activity logs 导出保存在Storage Account
问题描述 使用Azure Policy,对订阅下的全部Activity Log配置Diagnostic Setting,要求: 在Subscription或Management Group级别,针对未启用Activity Log功能的订阅,启用Activity Log功能; 对已经启用了Activi
【Azure Policy】使用deployIfNotExists 把 Azure Activity logs 导出保存在Storage Account 【Azure Policy】使用deployIfNotExists 把 Azure Activity logs 导出保存在Storage Account 【Azure Policy】使用deployIfNotExists 把 Azure Activity logs 导出保存在Storage Account
一个开源、跨平台的.NET UI框架 - Avalonia UI
前言 今天大姚给大家分享一个开源、免费(MIT License)、跨平台的.NET UI框架:Avalonia UI。 Avalonia是一个成熟稳定的平台,用于构建桌面、嵌入式、移动的和Web应用程序。一个代码库,无限可能!!! 项目介绍 Avalonia是一个强大的框架,使开发人员能够使用.NE
一个开源、跨平台的.NET UI框架 - Avalonia UI 一个开源、跨平台的.NET UI框架 - Avalonia UI 一个开源、跨平台的.NET UI框架 - Avalonia UI
C# WebSocket高并发通信阻塞问题
项目上遇到使用WebSocket超时问题,具体情况是这样的,OTA升级过程中,解压zip文件会有解压进度事件,将解压进度通过进程通信传给另一进程,通信提示超时异常 小伙伴堂园发现大文件使用Zip解压,解压进度事件间隔竟然是1ms,简直超大频率啊 但是,解压事件超频也不应该通信异常啊,于是我通过1ms
C# WebSocket高并发通信阻塞问题 C# WebSocket高并发通信阻塞问题 C# WebSocket高并发通信阻塞问题
Centos7.9安装Docker和Docker compose
什么是docker环境 Docker环境是指在计算机中安装和配置了Docker引擎的运行环境。Docker是一种容器化平台,它提供了一种轻量级的虚拟化技术,能够将应用程序及其依赖项打包成一个独立的容器,以实现快速部署、可移植性和易于管理的优势。(Docker环境提供了一种方便、可移植和隔离的方式来管
如何调用openai的TTS模型
这是24年1月份写的了,调用代码大概率有变动,仅供参考。 1 什么是OpenAI的TTS模型 OpenAI的TTS模型是一种文本到语音(Text-to-Speech)模型,它可以将给定的文本转换为自然语音音频。TTS代表Text-to-Speech,是一种人工智能技术,它使计算机能够模拟自然语言的声
如何调用openai的TTS模型
C#自定义控件—仪表盘
C#用户控件之仪表盘 如何让温度、湿度、压力等有量程的监控值如仪表盘(DashBoard)一样显示? 思路(GDI绘图): 定义属性:(仪表盘的半径、颜色、间隙;刻度圆的半径、颜色、字体;指针的颜色、占比;文本的字体、占比;) 绘制图形:(半圆、刻度、指针、中心、文本) 定义属性(将以上属性挨个敲完
C#自定义控件—仪表盘 C#自定义控件—仪表盘 C#自定义控件—仪表盘
代码整洁之道--读书笔记(1)
代码整洁之道 简介: 本书是编程大师“Bob 大叔”40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来者引路,助其职业生涯迈上更高台阶。 本书适合所有程序员阅读,
代码整洁之道--读书笔记(1)
基于 GoFrame 框架的 Go 项目打包成镜像,并上传至 Harbor 镜像库
〇、前言 在云服务时代最流行的部署方式就是容器部署,这也是最推荐的部署方式。 对于 GoFrame 框架就不多介绍了,直接来初始化一个 demo,备用。 // 初始化一个项目:gf-demo gf init gf-demo -u // -u 参数,是否将现有 goframe 框架更新为最新版本 //
基于 GoFrame 框架的 Go 项目打包成镜像,并上传至 Harbor 镜像库 基于 GoFrame 框架的 Go 项目打包成镜像,并上传至 Harbor 镜像库 基于 GoFrame 框架的 Go 项目打包成镜像,并上传至 Harbor 镜像库