[ceph 的通用解决方案] - 1.如何 ssd 作为 ceph-osd 的日志盘使用

[ceph 的通用解决方案] - 1.如何 ssd 作为 ceph-osd 的日志盘使用

开篇:
目前企业的业务场景多种多样,并非所有 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 的正确玩法之 SSD 作为 Ceph-osd 的日志盘使用

下面我们开始专题一:如何 ssd 作为 Ceph-osd 的日志盘使用

假设磁盘正在执行一个写操作,此时由于发生磁盘错误,或者系统宕机、断电等其他原因,导致只有部分数据写入成功。这种情况就会出现磁盘上的数据有一部分是旧数据,另一部分是新写入的数据,使得磁盘数据不一致。
Ceph 引入事务与日志,来实现数据写盘操作的原子性,并解决数据不一致的问题。即所谓的 “ceph 数据双写”:先把数据全部封装成一个事务,将其整体作为一条日志,写入 ceph-osd journal,然后再把数据定时回刷写入对象文件,将其持久化到 ceph-osd filestore 中。
基于以上过程,可以将 SSD 作为 ceph-osd journal 的底层存储设备,来加速写入性能。同时,由于 SSD 设备 IO 性能较高,可以将 SSD 划分成多个分区,以配比多个 HDD 设备使用。

在这里插入图片描述
该方案的优点
该方案的优点为使用高速的 SSD 设备加速 ceph-osd journal 的写入性能,尤其是对小块数据随机 IO 的场景,加速效果尤为明显。
该方案的缺点
该方案的缺点为由于 ceph-osd journal 在实现逻辑上具有循环写入、定期回刷的特性,其对 SSD 设备容量空间的利用率很低。典型场景下,SSD 设备与 HDD 设备的配比为 1:4,而每块 HDD 设备一般只使用 10GB 的 SSD 设备分区,造成了 SSD 设备容量空间的浪费。

一、准备环境

3 台 adminos7.4 环境,存储节点上两块磁盘(sda 操作系统,sdb 数据盘)

172.16.8.94 storage1
172.16.8.95 storage2
172.16.8.96 storage3

二、配置环境

1、修改主机名(对应节点上执行)

# hostnamectl  set-hostname storage1
# hostnamectl  set-hostname storage2
# hostnamectl  set-hostname storage3

2、配置 hosts 文件(每个节点上均执行)

# cat <<"EOF">/etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.8.94 storage1
172.16.8.95 storage2
172.16.8.96 storage3
EOF

3、ceph 的官方源在国外,网速比较慢,此处添加 ceph 源为清华源(每个节点上均执行)

# cat <<END >/etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/x86_64/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[Ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/noarch/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/SRPMS/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
END

4、关闭 selinux 和 firewall(各个节点)

# setenforce 0
# sed -i  "s/SELINUX=enforcing/SELINUX=permissive/g" /etc/selinux/config
# systemctl disable firewalld.service
# systemctl stop firewalld.service

5、安装 NTP(各个节点)

#  yum -y install ntp

修改配置文件 /etc/ntp.conf

server NTP-server

注意:
NTP-server 修改为自己的 NTP 服务器,如果局域网内无 NTP 服务器,此处可以用默认配置,采用 centos 官方 ntp 服务器

启动服务并设置开机启动

# systemctl start ntpd
# systemctl enable ntpd

查看 ntp 状态

# ntpq -p

注意:

如果 ntp 时钟不同步,后面 ceph 服务起不来!

三、安装和配置 ceph(以下操作均在 ceph-deploy 节点上执行)

1、配置互信

$ ssh-keygen -t dsa -f ~/.ssh/id_dsa -N ""
$ ssh-copy-id 172.16.8.93
$ ssh-copy-id 172.16.8.94
$ ssh-copy-id 172.16.8.95
exit

2、安装 ceph-deploy 包

$ sudo yum -y install ceph-deploy

注意:最新版的 ceph-deploy 是 2.0,安装操作系统用 mimal 的 ISo 会报如下错误,需要安装 python-setuptools

[root@storage1 ceph]# ceph-deploy  --help
Traceback (most recent call last):
  File "/bin/ceph-deploy", line 18, in <module>
    from ceph_deploy.cli import main
  File "/usr/lib/python2.7/site-packages/ceph_deploy/cli.py", line 1, in <module>
    import pkg_resources
ImportError: No module named pkg_resources

# yum install python-setuptools

3、创建配置文件目录

$ mkdir /etc/ceph

4、创建集群

$ cd /etc/ceph
$ ceph-deploy new storage1 storage2 storage3

注意:如果需要指定网络,创建命令跟以下参数

--cluster-network
--public-network

关于 ceph 的网络拓扑如下:
在这里插入图片描述
5、在各个节点上安装 ceph 包

# yum -y install ceph ceph-radosgw

6、、设置 monitor 和 key
$ ceph-deploy mon create-initial
注意:执行完成后会在 /etc/ceph 目录多以下内容:

ceph.client.admin.keyring
ceph.bootstrap-mgr.keyring
ceph.bootstrap-osd.keyring
ceph.bootstrap-mds.keyring
ceph.bootstrap-rgw.keyring
ceph.bootstrap-rbd.keyring
ceph.bootstrap-rbd-mirror.keyring

7、将 ceph.client.admin.keyring 拷贝到各个节点上

# ceph-deploy admin  storage1 storage2 storage3

8、安装 MGR

# ceph-deploy mgr create  storage1 storage2 storage3

9、创建 OSD(支持 filestore 和 bluestore)

使用 filestore

9.1.1、使用 filestore 采用 journal 模式(每个节点数据盘需要两块盘或两个分区) 创建逻辑卷

vgcreate data /dev/sdb
lvcreate --size 00G --name log data

9.1.2、创建 OSD

# ceph-deploy osd create  --filestore   --fs-type xfs --data /dev/sdc  --journal data/log   storage1
# ceph-deploy osd create  --filestore   --fs-type xfs --data /dev/sdc  --journal data/log   storage2
# ceph-deploy osd create  --filestore   --fs-type xfs --data /dev/sdc  --journal data/log   storage3

使用 bluestore

9.2.1、创建逻辑卷

vgcreate cache /dev/sdb
lvcreate --size 100G --name db-lv-0 cache

vgcreate cache /dev/sdb
lvcreate --size 100G --name wal-lv-0 cache

9.2.2、创建 OSD

# ceph-deploy osd create   --bluestore storage1 --data /dev/sdc --block-db cache/db-lv-0 --block-wal cache/wal-lv-0
# ceph-deploy osd create   --bluestore storage2 --data /dev/sdc --block-db cache/db-lv-0 --block-wal cache/wal-lv-0
# ceph-deploy osd create   --bluestore storage3 --data /dev/sdc --block-db cache/db-lv-0 --block-wal cache/wal-lv-0

关于 filestore 和 bluestore 的区别这篇文章做了详细的说明,在有 ssd 的情况下 bluestore 优势比较明显。

http://www.yuncunchu.org/portal.php?mod=view&aid=74

wal & db 的大小问题

使用混合机械和固态硬盘设置时,block.db 为 Bluestore 创建足够大的逻辑卷非常重要 。通常,block.db 应该具有 尽可能大的逻辑卷。 建议 block.db 尺寸不小于 4% block。例如,如果 block 大小为 1TB,则 block.db 不应小于 40GB。 如果不使用快速和慢速设备的混合,则不需要为 block.db(或 block.wal)创建单独的逻辑卷。Bluestore 将在空间内自动管理这些内容 block。

10、验证

$ ceph health
HEALTH_OK

转自:https://blog.csdn.net/wylfengyujiancheng/article/details/88298708

### Ceph OSD 中 `ceph-osd --mkjournal` 的使用方法及作用 #### 1. 命令概述 `ceph-osd --mkjournal` 是 Ceph 提供的一个工具,用于初始化或重新创建一个指定 OSDjournal 文件。JournalCeph OSD 数据持久化的关键组件之一,主要用于记录元数据变更的历史日志,从而加速写入操作并提高系统的可靠性[^1]。 #### 2. 使用场景 该命令通常在以下情况下使用- 修改现有 OSDjournal 大小。 - 更改 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 大小 如果希望更改已存在的 OSDjournal 大小而不需完全重建整个 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]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值