【ceph的通用解决方案】-如何同一个ceph集群分别创建ssd和hdd池

本文详细介绍了如何在同一Ceph集群中创建SSD和HDD独立存储池,以满足不同业务场景的需求。通过利用Luminous版本的crushclass功能,实现存储资源的高效管理和分配,提升关键业务的性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:【吴业亮】
博客:https://wuyeliang.blog.youkuaiyun.com/

开篇:
目前企业的业务场景多种多样,并非所有Ceph存储解决方案都是相同的,了解工作负载和容量要求对于设Ceph解决方案至关重要。Ceph可帮助企业通过统一的分布式集群提供对象存储、块存储或文件系统存储。在设计流程中,这些集群解决方案针对每项要求都进行了优化。该设计流程的首要因素包括 IOPS 或带宽要求、存储容量需求以及架构和组件选择,确保这些因素的合理性有助于完美平衡性能和成本。不同类型的工作负载需要不同的存储基础设施方案。

在这里插入图片描述
下面将从以下6个方面介绍ceph的通用解决方案

  • 性能方面:

1、如何ssd作为Ceph-osd的日志盘使用
2、如何同一个Ceph集群分别创建ssd和hdd池
3、如何将ssd作为hdd的缓存池
4、如何指定ssd盘为主osd,hdd为从osd

  • 稳定及数据安全性方面:

5、Ceph双副本如何保证宕机数据的安全性
6、Ceph纠删码理论与实践

注意:该文章同时在华云数据官方公众号上发布过

智汇华云 | Ceph的正确玩法之同一个Ceph集群分别创建SSD和HDD池(存储快慢池)

下面我们开始专题一:如何同一个Ceph集群分别创建ssd和hdd池

存储快慢池

场景:
存储节点上既有SATA盘也有SSD盘,把各节点的SSD和SATA分别整合成独立的存储池,为不同的应用供给不同性能的存储。比如常见的云环境中的虚拟机实例,对于实时数据IO性能要求高,并且都是热数据,可以把这部分的存储需求放入SSD的存储池里;而对于备份、快照等冷数据应用,相对IO性能需求比较低,因此将其可以放在普通的由SATA盘组成的存储池里。

在这里插入图片描述

方法: Luminous版本的ceph新增了一个crush class的功能,可以为新增的设备指定为类,创建rule的时候直接指定class即可。 创建一个磁盘类型的class,给磁盘标记class的统一标签,自动会根据class的类型创建一个树,根据树创建rule,根据rule创建存储池,整个操作没有动crushmap的操作 增加或修改盘的时候,设置下属性即可

该方案的优点:
该方案的优点为充分利用SSD设备高性能的优势,将关键性业务或者IO敏感型业务全部放入高性能存储池,为客户提供性能优越的存储服务。

该方案的缺点:
该方案的缺点为受到成本限制,高性能存储池存储容量规模会比较小,只能针对性地对少数关键性业务或者IO敏感型业务进行服务质量保障,且业务一经规划部署至某个存储池后,不能在两个存储池之间进行自动转换,后期进行调整开销较大。

修改前集群拓扑:

[root@storage1 ~]# ceph osd tree 
ID CLASS WEIGHT  TYPE NAME         STATUS REWEIGHT PRI-AFF 
-1       0.52734 root default                              
-3       0.17578     host storage1                         
 0   hdd 0.07809         osd.0         up  1.00000 1.00000 
 3   hdd 0.09769         osd.3         up  1.00000 1.00000 
-5       0.17578     host storage2                         
 1   hdd 0.07809         osd.1         up  1.00000 1.00000 
 4   hdd 0.09769         osd.4         up  1.00000 1.00000 
-7       0.17578     host storage3                         
 2   hdd 0.07809         osd.2         up  1.00000 1.00000 
 5   hdd 0.09769         osd.5         up  1.00000 1.00000

查看class类型

[root@storage1 ~]# ceph osd crush class ls
[
    "hdd"
]

删除默认的class

[root@storage1 ~]# for i in {0..5} ; do ceph osd crush rm-device-class osd.$i;done 
done removing class of osd(s): 0
done removing class of osd(s): 1
done removing class of osd(s): 2
done removing class of osd(s): 3
done removing class of osd(s): 4
done removing class of osd(s): 5
[root@storage1 ~]# ceph osd tree
ID CLASS WEIGHT  TYPE NAME         STATUS REWEIGHT PRI-AFF 
-1       0.52734 root default                              
-3       0.17578     host storage1                         
 0       0.07809         osd.0         up  1.00000 1.00000 
 3       0.09769         osd.3         up  1.00000 1.00000 
-5       0.17578     host storage2                         
 1       0.07809         osd.1         up  1.00000 1.00000 
 4       0.09769         osd.4         up  1.00000 1.00000 
-7       0.17578     host storage3                         
 2       0.07809         osd.2         up  1.00000 1.00000 
 5       0.09769         osd.5         up  1.00000 1.00000

将osd编号0-2标记为SAS

for i in 0 1 2;do ceph osd crush set-device-class sas osd.$i;done
[root@storage1 ~]# ceph osd tree
ID CLASS WEIGHT  TYPE NAME         STATUS REWEIGHT PRI-AFF 
-1       0.52734 root default                              
-3       0.17578     host storage1                         
 3       0.09769         osd.3         up  1.00000 1.00000 
 0   sas 0.07809         osd.0         up  1.00000 1.00000 
-5       0.17578     host storage2                         
 4       0.09769         osd.4         up  1.00000 1.00000 
 1   sas 0.07809         osd.1         up  1.00000 1.00000 
-7       0.17578     host storage3                         
 5       0.09769         osd.5         up  1.00000 1.00000 
 2   sas 0.07809         osd.2         up  1.00000 1.00000
[root@storage1 ~]# ceph osd crush class ls
[
    "sas"
]

将osd编号3-5标记为ssd

[root@storage1 ~]#  for i in {3..5} ;do ceph osd crush set-device-class ssd osd.$i;done
set osd(s) 3 to class 'ssd'
set osd(s) 4 to class 'ssd'
set osd(s) 5 to class 'ssd'
[root@storage1 ~]# ceph osd tree
ID CLASS WEIGHT  TYPE NAME         STATUS REWEIGHT PRI-AFF 
-1       0.52734 root default                              
-3       0.17578     host storage1                         
 0   sas 0.07809         osd.0         up  1.00000 1.00000 
 3   ssd 0.09769         osd.3         up  1.00000 1.00000 
-5       0.17578     host storage2                         
 1   sas 0.07809         osd.1         up  1.00000 1.00000 
 4   ssd 0.09769         osd.4         up  1.00000 1.00000 
-7       0.17578     host storage3                         
 2   sas 0.07809         osd.2         up  1.00000 1.00000 
 5   ssd 0.09769         osd.5         up  1.00000 1.00000
[root@storage1 ~]# ceph osd crush class ls
[
    "sas",
    "ssd"
]

创建个ssd规则:

[root@storage1 ~]#  ceph osd crush rule create-replicated rule-ssd default  host ssd
[root@storage1 ~]#  ceph osd crush rule create-replicated rule-sas default  host sas

格式如下:

ceph osd crush rule create-replicated <rule-name> <root> <failure-domain> <class>
[root@storage1 ~]# ceph osd crush rule ls
replicated_rule
rule-ssd

创建一个使用该rule-ssd规则的存储池:

[root@storage1 ~]# ceph osd pool create ssdpool 64 64 rule-ssd
pool 'ssdpool' created

创建一个使用该rule-sas规则的存储池:

[root@storage1 ~]# ceph osd pool create saspool 64 64 rule-sas
pool 'saspool' created

查看ssdpool的信息可以看到使用的crush_rule 为1,也就是rule-ssd

[root@storage1 ~]# ceph osd pool ls detail | grep ssdpool
pool 6 'ssdpool' replicated size 3 min_size 2 crush_rule 1 object_hash rjenkins pg_num 64 pgp_num 64 last_change 219 flags hashpspool stripe_width 0
[root@storage1 ~]# ceph osd pool ls detail | grep saspool
pool 7 'saspool' replicated size 3 min_size 2 crush_rule 2 object_hash rjenkins pg_num 64 pgp_num 64 last_change 223 flags hashpspool stripe_width 0

参考:

http://www.zphj1987.com/2017/06/28/ceph-luminous-new-osd-class/
### Ceph OSD 中 `ceph-osd --mkjournal` 的使用方法及作用 #### 1. 命令概述 `ceph-osd --mkjournal` 是 Ceph 提供的一个工具,用于初始化或重新创建一个指定 OSD 的 journal 文件。Journal 是 Ceph OSD 数据持久化的关键组件之一,主要用于记录元数据变更的历史日志,从而加速写入操作并提高系统的可靠性[^1]。 #### 2. 使用场景 该命令通常在以下情况下使用: - 修改现有 OSD 的 journal 大小。 - 更改 journal 的存储位置(例如从本地文件迁移到专用 SSD 分区)。 - 初始化新的 OSD 或修复损坏的 journal 文件。 #### 3. 参数说明 执行 `ceph-osd --mkjournal` 时,需要指定目标 OSD 的 ID (`-i`)。以下是完整的命令结构及其参数解释: ```bash ceph-osd -i <osd_id> --mkjournal ``` | 参数 | 描述 | |------------|----------------------------------------------------------------------| | `-i <osd_id>` | 指定目标 OSD 的唯一标识符,通常是整数形式,例如 `0`, `1`, 等等。 | #### 4. 实际应用案例 ##### (1)修改 Journal 大小 如果希望更改已存在的 OSD 的 journal 大小而不需完全重建整个 OSD,则可以按照如下步骤操作: 1. **停止目标 OSD** 关闭对应的目标 OSD 服务以防止数据丢失或混乱。 ```bash systemctl stop ceph-osd@<osd_id>.service ``` 2. **删除旧的 Journal 文件** 移除当前的 journal 文件。 ```bash rm /var/lib/ceph/osd/ceph-<osd_id>/journal ``` 3. **设置新的 Journal 大小** 编辑配置文件 `/etc/ceph/ceph.conf`,将 `osd_journal_size` 设置为目标大小(单位为 MB)。例如: ```ini osd_journal_size = 10240 ``` 4. **重新创建 Journal** 使用 `--mkjournal` 参数重新生成 journal 文件。 ```bash ceph-osd -i <osd_id> --mkjournal ``` 5. **重启 OSD 服务** 启动 OSD 并验证 journal 是否正常工作。 ```bash systemctl start ceph-osd@<osd_id>.service ls -lh /var/lib/ceph/osd/ceph-<osd_id>/journal ``` ##### (2)迁移 Journal 至独立分区 当需要将 journal 移动到单独的高性能 SSD 分区时,可按以下流程操作: 1. **停止目标 OSD** ```bash systemctl stop ceph-osd@<osd_id>.service ``` 2. **刷新 Journal 数据** 确保所有未提交的日志都已同步到主存储中。 ```bash ceph-osd --flush-journal -i <osd_id> ``` 3. **移除原有 Journal 链接** 删除现有的 journal 符号链接。 ```bash rm /var/lib/ceph/osd/ceph-<osd_id>/journal ``` 4. **创建指向新分区的符号链接** 假设新分区位于 `/dev/sdb1`,则可以通过以下命令完成替换: ```bash ln -s /dev/sdb1 /var/lib/ceph/osd/ceph-<osd_id>/journal ``` 5. **重新初始化 Journal** 利用 `--mkjournal` 参数更新 journal 元数据。 ```bash ceph-osd -i <osd_id> --mkjournal ``` 6. **启动 OSD 服务** 最后恢复 OSD 正常运行状态。 ```bash systemctl start ceph-osd@<osd_id>.service ``` #### 5. 注意事项 - 在线上的生产环境中进行任何涉及 journal 的改动之前,请务必做好充分备份,并确认集群处于健康状态。 - 如果计划调整 journal 的存储介质类型(如从 HDD 转向 SSD),应提前规划好分区布局并合理分配资源[^2]。 - 当前版本可能对某些功能有所限制;因此建议始终查阅官方文档获取最新指导信息[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值