前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用SSD增强PVE上的Ceph性能操作步骤

使用SSD增强PVE上的Ceph性能操作步骤

作者头像
用户9314062
发布于 2022-05-20 05:45:29
发布于 2022-05-20 05:45:29
4.9K00
代码可运行
举报
文章被收录于专栏:LINUX开源玩家LINUX开源玩家
运行总次数:0
代码可运行

说明

前段时间匆匆地为老PVE(Proxmox Virtual Environment)集群的CEPH增加了SSD,之后匆匆地简单对比记下了写了那篇“使用SSD增强Ceph性能的比较测试”,之后才反应过来——操作步骤和过程没写。这里补上。

如果有兴趣,请一定仔细看完再操作,里面有几个(可以绕过的)坑。

基本配置

主要硬件:

每台主机增加了一块400G的固态硬盘,型号是INTEL SSDPEDMX400G4,PCIe接口。

一台万兆以太网交换机netgear XS708E。

服务器是7台Dell R730xd,万兆以太网卡,每台配置6-8块2T/7.2/NL-SAS磁盘

主要软件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# pveversion -v
proxmox-ve: 5.4-2 (running kernel: 4.15.18-19-pve)
pve-manager: 5.4-13 (running version: 5.4-13/aee6f0ec)
pve-kernel-4.15: 5.4-7
....
ceph: 12.2.12-pve1
...
qemu-server: 5.0-54
...
zfsutils-linux: 0.7.13-pve1~bpo2

相关知识

早期ceph使用xfs文件系统存储数据,具体的做法是把一个OSD分成两个分区,默认会创建一个容量为5G的分区作为数据日志,然后剩下的磁盘空间是一个分区,用户实际使用数据都在这里。

新的ceph使用新的文件系统bluestore,划分了block.wal、block.db和数据分区

block.wal:用于BlueStore的内部日志或写前日志

block.db:用于存储BlueStore的内部元数据,基于RocksDB实现,类似索引提高性能

根分区:根分区分做两部分:

1.一个小的分区使用XFS进行格式化,并包含OSD的基本元数据。这个数据目录包含关于OSD的信息(它的标识符,它属于哪个集群,以及它的私有密匙环)。

2.设备的其余部分通常是一个大的分区,它占用了由BlueStore直接管理的设备的其余部分,其中包含所有实际的数据。

访问顺序:wal>db>根

这里就提到第一个坑:

使用pve自带的图形操作界面创建OSD,即使是在指定了”日志/数据库磁盘”为SSD的情况下,也只会在SSD上生成一个大小为1G的block.db,然后在数据盘上分出一个容量105MB的XFS分区。

所以创建OSD不能使用PVE自带的图形界面,而是直接使用命令行操作,指定预先划分好的wal和db分区。

操作步骤

纯粹的ceph集群所有操作都只能基于命令行操作,不过PVE本身做了相应图形界面,我们就尽量多用图形界面好了,毕竟简单方便不易出错。

安装SSD

关机打开服务器的盖板,把SSD插入服务器的PCIe插槽,然后重新通电开机。

这里注意,关机后ceph会认为这个节点故障,并开始数据同步复制,这显然是没必要的,所以临时关闭该功能:

在"服务器视图"下面,选择一个节点,然后在右边选择"Ceph" - "OSD"

关机前设置”noout”,点击”Set noout”;

开机后恢复功能,同一个地方点击”Unset noout”

因为是集群,所以在任一节点操作都是对整个集群生效的。

重新开机后会识别出新的块设备:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# lspci | grep -i ssd
05:00.0 Non-Volatile memory controller: Intel Corporation PCIe Data Center SSD (rev 01)
 
# ls -l /dev/nvme0n1
brw-rw---- 1 root disk 259, 0 Nov 10 22:30 /dev/nvme0n1
 
# fdisk -l /dev/nvme0n1
Disk /dev/nvme0n1: 372.6 GiB, 400088457216 bytes, 781422768 sectors
......

在SSD上创建分区

Ceph的wal和db的容量到底应该多大,网上说法不一,默认情况下, wal 和 db 的大小分别是 512 MB 和 1GB, 包括 Sage Weil 的 PPT 里面也是这样标明的。但是也有人提到2T的数据db应该20G的。我这里就按10G和40G来分了,反正SSD有这么大。

指定分区表类型

这里的分区表用msdos应该也可以,我习惯用gpt

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
parted -s /dev/nvme0n1 mktable gpt

使用创建wal分区,命令方便查看

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
parted -s /dev/nvme0n1 mkpart osd.wal1 1M 10G
parted -s /dev/nvme0n1 mkpart osd.wal2 10G 20G
parted -s /dev/nvme0n1 mkpart osd.wal3 20G 30G
parted -s /dev/nvme0n1 mkpart osd.wal4 30G 40G
parted -s /dev/nvme0n1 mkpart osd.wal5 40G 50G
parted -s /dev/nvme0n1 mkpart osd.wal6 50G 60G

使用创建db分区,命令方便查看

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
parted -s /dev/nvme0n1 mkpart osd.db1 60G 100G
parted -s /dev/nvme0n1 mkpart osd.db2 100G 140G
parted -s /dev/nvme0n1 mkpart osd.db3 140G 180G
parted -s /dev/nvme0n1 mkpart osd.db4 180G 220G
parted -s /dev/nvme0n1 mkpart osd.db5 220G 260G
parted -s /dev/nvme0n1 mkpart osd.db6 260G 300G

查看已创建的分区

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# parted -s /dev/nvme0n1 print
Model: Unknown (unknown)
Disk /dev/nvme0n1: 400GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
 
Number  Start   End     Size    File system  Name      Flags
 1      1049kB  10.0GB  9999MB               osd.wal1
 2      10.0GB  20.0GB  9999MB               osd.wal2
 3      20.0GB  30.0GB  10.0GB               osd.wal3
 4      30.0GB  40.0GB  10.0GB               osd.wal4
 5      40.0GB  50.0GB  10.0GB               osd.wal5
 6      50.0GB  60.0GB  9999MB               osd.wal6
 7      60.0GB  100GB   40.0GB               osd.db1
 8      100GB   140GB   40.0GB               osd.db2
 9      140GB   180GB   40.0GB               osd.db3
10      180GB   220GB   40.0GB               osd.db4
11      220GB   260GB   40.0GB               osd.db5
12      260GB   300GB   40.0GB               osd.db6

重建OSD

重建OSD分为三步:导出-销毁-新建,前面两步都可以通过图形界面完成。如下图:

销毁前一定要在命令行下面执行df,看看该OSD的ID对应磁盘,后面新建就用它,如下osd0对应磁盘是/dev/sdb

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mount | grep /var/lib/ceph/osd/ceph-0                                                                                                                         
/dev/sdb1 on /var/lib/ceph/osd/ceph-0 type xfs (rw,noatime,attr2,inode64,noquota)

新建OSD的时候出现一个坑:

命令行参数指定wal和db的时候不能使用ceph-disk新建,要使用ceph-volume,否则会生成一个OSD的ID,但是实际不存在,出现这种情况,可以使用命令删除。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ceph osd rm ID

被销毁的OSD上面的分区表类型标签还在,要用命令抹去,如这个OSD原来对应磁盘/dev/sdf:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DEV=/dev/sdf
dd if=/dev/zero of=$DEV bs=1024 count=1000

然后就可以新建OSD了,使用指定的数据盘、wal和db分区

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ceph-volume lvm create --bluestore --data $DEV --block.wal /dev/nvme0n1p6 --block.db /dev/nvme0n1p12

注意数据安全

操作完一个节点(一台服务器)再操作另一个节点,不要同时在多个节点上操作;

同一个节点上,一个OSD在新建的时候,可以对另一个OSD执行导出和销毁。

后附

确认导出完成

图形界面上导出完成后销毁才可用。

也可以用命令确认确认:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# ceph osd safe-to-destroy 21
Error EBUSY: OSD(s) 21 have 242 pgs currently mapped to them

持续检测:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# while ! ceph osd safe-to-destroy 16 ; do echo `date +%Y.%m.%d-%H:%M:%S`; sleep 60 ; done
Error EBUSY: OSD(s) 21 have 242 pgs currently mapped to them

导出完成后该命令会退出,否则会显示当前还有多少个pgs。

关于ceph-volume

据说ceph-volume最后会完全取代ceph-disk,毕竟更方便灵活。

ceph-volume还有些其他参数,但不是必须的,比如指定OSD的ID

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# ceph-volume lvm create --help
usage: ceph-volume lvm create [-h] --data DATA [--filestore]
                              [--journal JOURNAL] [--bluestore]
                              [--block.db BLOCK_DB] [--block.wal BLOCK_WAL]
                              [--osd-id OSD_ID] [--osd-fsid OSD_FSID]
                              [--cluster-fsid CLUSTER_FSID]
                              [--crush-device-class CRUSH_DEVICE_CLASS]
                              [--dmcrypt] [--no-systemd]
 
Create an OSD by assigning an ID and FSID, registering them with the
cluster with an ID and FSID, formatting and mounting the volume, adding
all the metadata to the logical volumes using LVM tags, and starting
the OSD daemon.
 
Existing logical volume (lv) or device:
 
    ceph-volume lvm create --data {vg name/lv name} --journal /path/to/device
 
Or:
 
    ceph-volume lvm create --data {vg name/lv name} --journal {vg name/lv name}
 
optional arguments:
  -h, --help            show this help message and exit
  --osd-id OSD_ID       Reuse an existing OSD id
  --osd-fsid OSD_FSID   Reuse an existing OSD fsid
  --cluster-fsid CLUSTER_FSID
                        Specify the cluster fsid, useful when no ceph.conf is
                        available
  --crush-device-class CRUSH_DEVICE_CLASS
                        Crush device class to assign this OSD to
  --dmcrypt             Enable device encryption via dm-crypt
  --no-systemd          Skip creating and enabling systemd units and starting
                        OSD services when activating
 
required arguments:
  --data DATA           OSD data path. A physical device or logical volume
 
filestore:
  --filestore           Use the filestore objectstore
  --journal JOURNAL     (REQUIRED) A logical volume (vg_name/lv_name), or path
                        to a device
 
bluestore:
  --bluestore           Use the bluestore objectstore
  --block.db BLOCK_DB   Path to bluestore block.db logical volume or device
  --block.wal BLOCK_WAL
                        Path to bluestore block.wal logical volume or device
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 LINUX开源玩家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Bluestore下的OSD开机自启动分析
整个Bluestore现在由官方推出的ceph-volume工具进行管理,用以替代之前的ceph-disk。回顾之前ceph-disk是通过在xfs文件系统中打上相应的attributes,之后通过制定udev rules来实现启动。无论Ceph版本如何变化,基本的OSD自启动思路都是给块设备打标签->定制开机服务去触发执行。总结一下就是 Filestore的思路是: OSD打上xfs(attr) -> 由ceph-disk 触发执行 Bluestore的思路是: OSD打上LVM(tag) -> 由ceph-volume 触发执行 因此只要搞清楚LVM的tag机制,基本上就能很快搞定OSD自启动的相关排错问题。
用户1260683
2018/07/31
2.7K0
Bluestore下的OSD开机自启动分析
ceph-luminous-bluestore
添加osd 案例1 由于Luminous里默认使用Bluestore,可以直接操作裸盘,data和block-db会使用lv。综合成本及性能,我们把block.db使用ssd的分区,osd仍然使用sas,block.wal不指定. 这里vdb作为osd盘,vdc作为block-db盘
院长技术
2020/06/11
2.5K1
Ceph:关于 Ceph 中 BlueStore 架构以及 OSD 创建的一些笔记
对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》
山河已无恙
2023/08/21
2.2K0
Ceph:关于 Ceph 中 BlueStore 架构以及 OSD 创建的一些笔记
Luminous下删除和新建OSD的正确姿势
L版本开始极大的降低了对运维操作复杂度,新增了很多命令去确保数据安全,很多新手在删除OSD的时候很容易忽视了集群PGs的状态最终导致数据丢失,因此官方加入以下几个命令
用户1260683
2018/07/31
3.2K0
ceph添加OSD故障一例
手动在目录/var/lib/ceph/bootstrap-osd/下新建删除文件正常,把ceph服务都重启了一遍还是这样。
用户9314062
2022/05/20
1.2K0
SUSE Ceph 快速部署 – Storage6
整个环境采用VMware workstation搭建,一共5台虚拟机,所有虚拟机安装SLES15SP1系统,其中一台安装apache作为仓库使用,剩余4台用于搭建Storage6集群。
星哥玩云
2022/07/28
2.5K0
SUSE Ceph 快速部署 – Storage6
SUSE Ceph 增加节点、减少节点、 删除OSD磁盘等操作 – Storage6
之前我们已快速部署好一套Ceph集群(3节点),现要测试在现有集群中在线方式增加节点
星哥玩云
2022/07/28
1.4K0
SUSE Ceph 增加节点、减少节点、 删除OSD磁盘等操作 – Storage6
外包精通--CEPH L版更换日志盘笔记
Godev
2023/06/25
5990
ceph运维操作
如果是在admin节点修改的ceph.conf,想推送到所有其他节点,则需要执行下述命令
匿名用户的日记
2022/01/05
3.4K0
处理Ceph osd的journal的uuid问题
一、前言 之前有一篇文章介绍的是,在centos7的jewel下面如果自己做的分区如何处理自动挂载的问题,当时的环境对journal的地方采取的是文件的形式处理的,这样就没有了重启后journal的磁盘偏移的问题 如果采用的是ceph自带的deploy去做分区的处理的时候,是调用的sgdisk去对磁盘做了一些处理的,然后deploy能够识别一些特殊的标记,然后去做了一些其他的工作,而自己分区的时候,是没有做这些标记的这样就可能会有其他的问题
用户2772802
2018/08/06
1.1K0
Bluestore下的SSD故障排查
线上发现L版本一个OSD down,不确定是否磁盘故障,之前的filestore排查起来比较熟,换成Bluestore以后,有些细节上的操作不一样,因为用到的是SSD,所以有了这篇排查文档。
用户1260683
2019/05/09
6.4K0
ceph存储节点系统盘损坏集群恢复
本文主要介绍ceph16版本集群节点系统磁盘故障后的集群恢复,虽然系统盘很多都是做了raid1,但从实际做的项目看,总是有很多未知意外发生,节点挂掉后,上面的mon和osd,mgr都会down掉,如果所在节点的mgr服务是激活状态,则其他节点所在的备用节点将会升级为激活状态。
没有故事的陈师傅
2022/04/05
2.2K0
ceph存储节点系统盘损坏集群恢复
Ceph 故障排查笔记 | 万字经验总结
删除当前 osd 的所有数据,并且重新加载 osd,此操作一定要保证有冗余可用的 osd,否则会造成整个 osd 数据损坏。
米开朗基杨
2021/05/11
7.9K0
ceph在信创操作系统和服务器上安装
之前想通过cephadm的方式去部署,结果发现cephadm不支持kylin v10的操作系统,那么剩下的就只有手动部署和编译安装的方式,kylin v10系统已经自带了ceph luminous版本的包,如果想用新版的ceph那只能通过编译安装的方式了
没有故事的陈师傅
2022/04/05
3.5K0
ceph在信创操作系统和服务器上安装
Ceph OSD从filestore 转换到 bluestore的方法
前段时间看到豪迈的公众号上提到了这个离线转换工具,最近看到群里有人问,找了下没什么相关文档,就自己写了一个,供参考
用户2772802
2018/08/06
1.8K0
Ceph 架构及性能优化
ceph-mon和ceph-mds需要2G内存,每个ceph-osd进程需要1G内存。
肉眼品世界
2021/04/20
8820
systemd下手工部署OSD服务-Jewel版本
Ceph自动化部署工具现状 ceph-deploy 已经处于被淘汰边缘(官方现在主推ceph-ansible),deploy新手练手可以,配置管理太弱鸡,每次overwrite-conf都需要很大勇气。 ceph-ansible 看起来很美好,但是无法完美适配手头各种差异化的部署需求,看完源码,把里面核心的模块功能抽取出来,完全可以自己做,没必要拿官方的ansible。 ceph-deploy其实也是通过ssh去控制各个节点的ceph-disk命令工具执行,但是ceph-disk又被官方弃坑,最新版本推荐使
用户1260683
2018/06/11
8050
Ceph架构概览
ceph 客户端从ceph monitor获取cluster map,然后执行在pool中的pg执行IO操作。cursh ruleset和pg的数量是决定数据对象放在哪里的核心因素。获取到最新的cluster map,ceph客户端是不知道数据对象在哪里。
用户4700054
2022/08/17
1.4K0
Ceph架构概览
Ceph安全体系概览
安全是整个存储必不可少的一环,但是很少有人能够比较全面的总结一下Ceph的安全体系,于是老司机在这里“鬼话连篇”。
用户1260683
2019/07/30
2.5K0
Ceph安全体系概览
手动部署ceph octopus集群
所有 Ceph 群集至少需要一个monitor,并且至少需要与存储在群集上的对象副本一样多的 OSD。引导初始mon是部署 Ceph 存储群集的第一步,这里我直接在node1、node2、node3创建三个mon。
没有故事的陈师傅
2021/02/01
2.7K2
相关推荐
Bluestore下的OSD开机自启动分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验