管理指南 - suse enterprise storage 6 · ldap 身份验证的访问令牌244 17.10...

471
管理指南 SUSE Enterprise Storage 6

Upload: others

Post on 26-Aug-2020

27 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

管理指南

SUSE Enterprise Storage 6

Page 2: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

管理指南SUSE Enterprise Storage 6作者:Tomáš Bažant、Jana Haláčková、Alexandra Settle、Sven Seeberg

出版日期:2020-05-22

SUSE LLC

1800 South Novell Place

Provo, UT 84606

USA

https://documentation.suse.com

Copyright © 2020 SUSE LLC

版权所有 © 2016,RedHat, Inc 和贡献者。

本文档中的文本和插图已获 Creative Commons Attribution-Share Alike 4.0 International(简称“CC-BY-

SA”)授权。http://creativecommons.org/licenses/by-sa/4.0/legalcode 上提供了 CC-BY-SA 的说明。根

据 CC-BY-SA 的政策,如果您分发本文档或对其进行改编,则必须提供原始版本的 URL。

Red Hat、Red Hat Enterprise Linux、Shadowman 徽标、JBoss、MetaMatrix、Fedora、Infinity 徽标和

RHCE 是 Red Hat, Inc. 在美国和其他国家/地区的注册商标。Linux® 是 Linus Torvalds 在美国和其他国家/

地区的注册商标。Java® 是 Oracle 和/或其附属公司的注册商标。XFS® 是 Silicon Graphics International

Corp. 或其子公司在美国和/或其他国家/地区的商标。其他所有商标都是其相应所有者的财产。

有关 SUSE 商标,请参见 http://www.suse.com/company/legal/ 。所有其它第三方商标是其各自所有者

的财产。商标符号(®、™ 等)代表 SUSE 及其附属公司的商标。星号 (*) 代表第三方商标。

Page 3: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

本指南力求涵盖所有详细信息。但这并不确保本指南准确无误。SUSE LLC 及其附属公司、作者和译者对于

可能出现的错误或由此造成的后果皆不承担责任。

Page 4: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

目录

关于本指南 xviii

I 集群管理 1

1 用户权限和命令提示 21.1 与 Salt/DeepSea 相关的命令 2

1.2 与 Ceph 相关的命令 2

1.3 一般的 Linux 命令 3

1.4 其他信息 3

2 Salt 集群管理 4

2.1 添加新的集群节点 4

2.2 为节点添加新的角色 6

2.3 删除和重新安装集群节点 7

2.4 重新部署 Monitor 节点 9

2.5 向节点添加 OSD 磁盘 11

2.6 删除 OSD 11

删除多个 OSD 11 • 删除主机上的所有 OSD 12 • 强制删除已中止的

OSD 13 • 验证 OSD LVM 元数据 13

2.7 更换 OSD 磁盘 15

2.8 恢复重新安装的 OSD 节点 16

2.9 将管理节点移至新服务器 17

iv 管理指南

Page 5: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

2.10 通过 Salt 实现自动安装 18

2.11 更新集群节点 19

软件储存库 19 • 储存库暂存 19 • zypper patch 或 zypper

dup 20 • 集群节点重引导 20 • Ceph 服务停机时间 20 • 运行更

新 20

2.12 停止或重引导集群 21

2.13 使用自定义设置调整 ceph.conf 22

覆盖默认值 23 • 包括配置文件 25

2.14 启用 AppArmor 配置 25

2.15 停用经调整的配置 26

2.16 删除整个 Ceph 集群 26

3 备份集群配置和数据 28

3.1 备份 Ceph 配置 28

3.2 备份 Salt 配置 28

3.3 备份 DeepSea 配置 28

3.4 备份自定义配置 29

II 操作集群 30

4 简介 31

5 操作 Ceph 服务 32

5.1 使用 systemd 操作与 Ceph Cluster 相关的服务 32

使用目标启动、停止和重启动服务 32 • 启动、停止和重启动个别服

务 33 • 识别个别服务 33 • 服务状态 34

5.2 使用 DeepSea 重启动 Ceph 服务 34

重启动所有服务 35 • 重启动特定服务 35

v 管理指南

Page 6: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

5.3 正常关闭整个 Ceph 集群 36

6 确定集群状态 37

6.1 检查集群的状态 37

6.2 检查集群健康状况 38

6.3 监视集群 47

6.4 检查集群的用量统计数字 48

6.5 检查 OSD 状态 50

6.6 检查填满的 OSD 51

6.7 检查 Monitor 状态 52

6.8 检查归置组状态 53

6.9 使用管理套接字 53

6.10 存储容量 53

6.11 监视 OSD 和归置组 56

监视 OSD 56 • 归置组集 57 • 建立互联 58 • 监视归置组状

态 59 • 识别存在问题的归置组 63 • 查找对象位置 64

6.12 OSD 未在运行 65

OSD 不启动 65 • OSD 发生故障 65 • 无可用磁盘空间 66

7 监控和警告 68

7.1 Pillar 变量 68

7.2 Grafana 69

7.3 Prometheus 70

7.4 Alertmanager 70

配置文件 70 • 自定义警告 85 • SNMP 陷阱接收器 88

vi 管理指南

Page 7: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

8 使用 cephx 进行身份验证 89

8.1 身份验证体系结构 89

8.2 密钥管理 91

背景信息 92 • 管理用户 94 • 密钥环管理 99 • 命令行用法 102

9 存储的数据管理 103

9.1 设备 104

设备类型 104

9.2 存储桶 112

9.3 规则组 115

在节点树中迭代 117 • firstn 和 indep 119

9.4 置放群组 120

归置组的使用方式 120 • 确定 PG_NUM 的值 122 • 设置归置组数

量 123 • 获取归置组数量 123 • 获取集群的 PG 统计数据 123 • 获

取卡住的 PG 统计数据 124 • 获取归置组索引 124 • 获取归置组统

计数据 124 • 洗刷归置组 125 • 设置归置组回填和恢复的优先顺

序 125 • 还原丢失的对象 125

9.5 CRUSH 索引操作 126

编辑 CRUSH 索引 126 • 添加/移动 OSD 127 • ceph osd reweight 与

ceph osd crush reweight 之间的差异 128 • 删除 OSD 129 • 添加

存储桶 129 • 移动存储桶 129 • 删除存储桶 129

9.6 洗刷 130

10 Ceph Manager 扩展模块 133

10.1 平衡器 134

“crush-compat”模式 134 • 数据平衡的规划和执行 134

10.2 遥测扩展模块 136

vii 管理指南

Page 8: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

11 管理存储池 138

11.1 将存储池与应用关联 138

11.2 操作存储池 139

列出存储池 139 • 创建存储池 139 • 设置存储池配额 140 • 删除存储

池 141 • 重命名存储池 142 • 显示存储池统计数字 142 • 获取存储池

的值 144 • 设置存储池的值 145 • 设置对象副本数 148

11.3 存储池迁移 149

使用缓存层迁移 149 • 迁移 RADOS 块设备映像 152

11.4 存储池快照 153

创建存储池快照 153 • 列出存储池的快照 154 • 删除存储池快照 154

11.5 数据压缩 154

启用压缩 155 • 存储池压缩选项 155 • 全局压缩选项 156

12 RADOS 块设备 158

12.1 块设备命令 158

在副本存储池中创建块设备映像 158 • 在纠删码存储池中创建块设备映

像 159 • 列出块设备映像 159 • 检索映像信息 159 • 调整块设备映像

的大小 160 • 删除块设备映像 160

12.2 装入和卸载 160

rbdmap:在引导时映射 RBD 设备 163 • 增大 RBD 设备的大小 164

12.3 快照 164

Cephx 注意事项 165 • 快照基础知识 165 • 分层 167

12.4 镜像 171

rbd-mirror 守护进程 171 • 存储池配置 172 • 映像配置 173 • 镜像状

态 176

12.5 缓存设置 177

12.6 QoS 设置 178

viii 管理指南

Page 9: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

12.7 预读设置 179

12.8 高级功能 180

12.9 使用旧内核客户端映射 RBD 181

13 纠删码存储池 183

13.1 纠删码存储池的先决条件 183

13.2 创建示例纠删码存储池 183

13.3 纠删码配置 184

创建新纠删码配置 186 • 删除纠删码配置 187 • 显示纠删码配置的详细信

息 188 • 列出纠删码配置 188

13.4 含 RADOS 块设备的纠删码存储池 188

14 缓存分层 189

14.1 分层存储的相关术语 189

14.2 需考虑的要点 189

14.3 何时使用缓存分层 190

14.4 缓存模式 190

14.5 纠删码存储池和缓存分层 191

14.6 设置示例分层存储 191

14.7 配置缓存层 193

命中集 194 • 缓存大小调整 195 • 缓存期限 197 • 示例 197

15 使用 LVM 缓存提升性能 199

15.1 先决条件 199

15.2 需考虑的要点 199

15.3 准备 200

ix 管理指南

Page 10: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

15.4 配置 LVM 缓存 201

添加 LVM 缓存 201 • 删除 LVM 缓存 201 • 设置 LVM 缓存模式 201

15.5 处理故障 202

15.6 常见问题 (FAQ) 202

16 Ceph 集群配置 203

16.1 运行时配置 203

16.2 Ceph OSD 和 BlueStore 204

自动调整缓存大小 204

16.3 Ceph 对象网关 205

一般设置 205 • HTTP 前端 214

III 访问集群数据 217

17 Ceph 对象网关 21817.1 对象网关限制和命名限制 218

存储桶限制 218 • 存储的对象的限制 218 • HTTP 报头限制 219

17.2 部署对象网关 219

17.3 操作对象网关服务 219

17.4 配置选项 220

17.5 管理对象网关的访问方式 220

访问对象网关 220 • 管理 S3 和 Swift 帐户 222

17.6 HTTP 前端 226

17.7 为对象网关启用 HTTPS/SSL 227

创建自我签名证书 227 • 简单的 HTTPS 配置 228 • 高级 HTTPS 配

置 229

x 管理指南

Page 11: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

17.8 同步扩展模块 229

常规配置 230 • 同步区域 231 • ElasticSearch 同步扩展模块 232 • 云

同步扩展模块 236 • 存档同步扩展模块 240

17.9 LDAP 身份验证 241

身份验证机制 241 • 要求 241 • 将对象网关配置为使用 LDAP 身份验

证 242 • 使用自定义搜索过滤器来限制用户访问权限 243 • 生成用于

LDAP 身份验证的访问令牌 244

17.10 存储桶索引分片 244

存储桶索引重分片 244 • 新存储桶的存储桶索引分片 247

17.11 集成 OpenStack Keystone 249

配置 OpenStack 249 • 配置 Ceph 对象网关 250

17.12 存储池归置和存储类别 252

归置目标 252 • 存储类别 252 • 区域组/区域配置 253 • 自定义归

置 255 • 使用存储类别 257

17.13 多站点对象网关 257

术语 258 • 示例集群设置 258 • 系统密钥 258 • 命名约定 259 • 默

认存储池 259 • 创建领域 260 • 删除默认区域组 260 • 创建主区域

组 261 • 创建主区域 261 • 创建次要区域 266 • 将对象网关添加到第

二个集群 270 • 故障转移和灾难恢复 275

17.14 使用 HAProxy 在对象网关服务器间实现负载平衡 276

18 Ceph iSCSI 网关 278

18.1 连接 ceph-iscsi 管理的目标 278

Linux (open-iscsi) 278 • Microsoft Windows(Microsoft iSCSI 授权

人) 282 • VMware 289

18.2 结论 294

xi 管理指南

Page 12: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

19 集群文件系统 295

19.1 装入 CephFS 295

客户端准备 295 • 创建机密文件 295 • 装入 CephFS 296

19.2 卸载 CephFS 297

19.3 /etc/fstab 中的 CephFS 297

19.4 多个工作的 MDS 守护进程(主动/主动 MDS) 298

何时使用主动/主动 MDS 298 • 增加 MDS 工作集群的大小 298 • 减小级

别数 299 • 手动将目录树关联到级别 301

19.5 管理故障转移 301

配置待机守护进程 301 • 示例 303

19.6 设置 CephFS 配额 303

限制 303 • 配置 304

19.7 管理 CephFS 快照 305

创建快照 305 • 删除快照 306

20 通过 Samba 导出 Ceph 数据 307

20.1 通过 Samba 共享导出 CephFS 307

Samba 相关的包安装 307 • 单个网关示例 307 • 高可用性配置 310

20.2 将 Samba 网关加入 Active Directory 中 314

准备 315 • 确认 DNS 315 • 解析 SRV 记录 316 • 配置

Kerberos 316 • 本地主机名解析 317 • 配置 Samba 317 • 加入 Active

Directory 域 320 • 配置名称服务开关 321 • 启动服务 321 • 测试

winbindd 连接性 322

21 NFS Ganesha:通过 NFS 导出 Ceph 数据 323

21.1 安装 323

21.2 配置 323

服务配置 324 • 导出项配置 326

xii 管理指南

Page 13: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

21.3 自定义 NFS Ganesha 角色 328

NFS Ganesha 的不同对象网关用户 329 • 分隔 CephFS 和对象网关

FSAL 330 • 支持的操作 332

21.4 启动或重启动 NFS Ganesha 332

21.5 设置日志级别 333

21.6 校验导出的 NFS 共享 333

21.7 装入导出的 NFS 共享 333

IV 使用 GUI 工具管理集群 334

22 Ceph Dashboard 33522.1 仪表盘的 Web 用户界面 335

登录 335 • 实用程序菜单 337 • 主菜单 338 • 内容窗格 338 • 常用

Web UI 功能 338 • 仪表盘控件 339

22.2 管理仪表盘用户和角色 341

列出用户 342 • 添加新用户 342 • 编辑用户 342 • 删除用

户 343 • 列出用户角色 343 • 添加自定义角色 343 • 编辑自定义角

色 345 • 删除自定义角色 345

22.3 查看集群内部 345

集群节点 345 • Ceph Monitor 346 • Ceph OSD 346 • 集群配

置 349 • CRUSH 索引 350 • Manager 扩展模块 351 • 日志 352

22.4 管理存储池 352

添加新存储池 353 • 删除存储池 354 • 编辑存储池的选项 354

22.5 管理 RADOS 块设备 354

查看有关 RBD 的详细信息 355 • 查看 RBD 的配置 355 • 创建

RBD 356 • 删除 RBD 358 • RADOS 块设备快照 358 • 管理 iSCSI 网

关 359 • RBD 服务质量 (QoS) 362 • RBD 镜像 364

xiii 管理指南

Page 14: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

22.6 管理 NFS Ganesha 372

添加 NFS 导出项 373 • 删除 NFS 导出项 375 • 编辑 NFS 导出项 375

22.7 管理 Ceph 文件系统 376

查看 CephFS 概览 377

22.8 管理对象网关 377

查看对象网关 378 • 管理对象网关用户 378 • 管理对象网关存储桶 381

22.9 手动配置 383

TLS/SSL 支持 383 • 主机名和端口号 385 • 用户名和口令 386 • 启用对

象网关管理前端 386 • 启用单点登录 387

22.10 在命令行上管理用户和角色 389

用户帐户 389 • 用户角色和权限 390 • 反向代理 394 • 审计 394

V 与虚拟化工具集成 396

23 将 libvirt 与 Ceph 搭配使用 39723.1 配置 Ceph 397

23.2 准备 VM 管理器 398

23.3 创建 VM 399

23.4 配置 VM 399

23.5 总结 402

24 Ceph 用作 QEMU KVM 实例的后端 403

24.1 安装 403

24.2 用法 403

24.3 使用 QEMU 创建映像 403

24.4 使用 QEMU 调整映像大小 404

24.5 使用 QEMU 检索映像信息 404

xiv 管理指南

Page 15: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

24.6 使用 RBD 运行 QEMU 405

24.7 启用丢弃功能/TRIM 405

24.8 QEMU 缓存选项 406

VI FAQ、提示和故障诊断 407

25 技巧与提示 40825.1 识别孤立分区 408

25.2 调整洗刷 408

25.3 在不重新平衡的情况下停止 OSD 409

25.4 节点时间同步 409

25.5 检查不均衡的数据写入 411

25.6 Ceph Monitor 节点上 /var/lib/ceph 的 Btrfs 子卷 412

要求 412 • 部署新集群时所需执行的步骤 413 • 升级集群时所需执行的步

骤 414 • 手动安装 414 • 更多信息 415

25.7 增加文件描述符 415

25.8 与虚拟化软件集成 415

在 Ceph 集群中存储 KVM 磁盘 415 • 在 Ceph 集群中存储 libvirt 磁

盘 416 • 在 Ceph 集群中存储 Xen 磁盘 416

25.9 Ceph 的防火墙设置 417

25.10 测试网络性能 418

25.11 如何查找使用 LED 灯的物理磁盘 419

26 常见问题 (FAQ) 425

26.1 归置组数量对集群的性能有何影响? 425

26.2 是否可以在同一集群上使用 SSD 和普通硬盘? 425

xv 管理指南

Page 16: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

26.3 在 SSD 上使用日记存在哪些利弊? 426

26.4 磁盘出现故障时会发生什么情况? 426

26.5 日记磁盘出现故障时会发生什么情况? 426

27 查错 428

27.1 报告软件问题 428

27.2 使用 rados 发送大型对象失败并显示“OSD 已满” 428

27.3 XFS 文件系统损坏 429

27.4 “每个 OSD 的 PG 数过多”状态讯息 429

27.5 “nn pg 停滞在非工作状态”状态讯息 430

27.6 OSD 权重为 0 430

27.7 OSD 停机 431

27.8 查找运行缓慢的 OSD 432

27.9 解决时钟偏差警告 432

27.10 网络问题导致集群性能不佳 433

27.11 /var 空间不足 434

A DeepSea 阶段 1 自定义示例 436

B SUSE Enterprise Storage 6 的默认警告 437

C 基于上游“Nautilus”小版本的 Ceph 维护更新 442

术语表 445

D 文档更新 448

D.1 SUSE Enterprise Storage 6 的维护更新文档 448

xvi 管理指南

Page 17: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

D.2 2019 年 6 月(SUSE Enterprise Storage 6 发布) 450

xvii 管理指南

Page 18: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

关于本指南

SUSE Enterprise Storage 6 是 SUSE Linux Enterprise 15 SP1 的扩展。它融合了 Ceph (http://

ceph.com/ ) 存储项目的功能与 SUSE 的企业工程和支持。借助 SUSE Enterprise Storage 6,IT

组织能够部署可以支持一些使用市售硬件平台的用例的分布式存储体系结构。

本指南可帮助您了解 SUSE Enterprise Storage 6 的概念,并重点介绍如何管理 Ceph 基础架

构。它还说明了如何将 Ceph 与其他相关解决方案(例如 OpenStack 或 KVM)搭配使用。

本手册中的许多章节中都包含指向附加文档资源的链接。其中包括系统上提供的附加文档以及

因特网上提供的文档。

有关该产品可用文档的概述和最新文档更新,请参见 http://www.suse.com/

documentation 。

1 可用文档针对本产品提供的手册如下:

管理指南

该指南说明了安装后通常需要执行的各项管理任务。该指南还介绍了将 Ceph 与

libvirt、Xen 或 KVM 等虚拟化解决方案集成的步骤,以及通过 iSCSI 和 RADOS 网关访

问集群中存储的对象的方法。

《部署指南》

引导您完成 Ceph 集群及 Ceph 所有相关服务的安装步骤。该指南还阐述了基本 Ceph 集群

结构,并提供了相关的术语。

在已安装系统的 /usr/share/doc/manual 下提供了 HTML 版本的产品手册。在 http://

www.suse.com/documentation 上提供了最新的文档更新,您可以在此处下载多种格式的产

品文档。

2 反馈我们提供了多种反馈渠道:

xviii 可用文档 SES 6

Page 19: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

错误和增强请求

有关产品可用的服务和支持选项,请参见 http://www.suse.com/support/ 。

要报告产品组件的错误,请从 http://www.suse.com/support/ 登录 Novell Customer

Center,然后选择 My Support(我的支持) Service Request(服务请求)。

用户意见

我们希望收到您对本手册和本产品随附的其他文档的意见和建议。请使用联机文档每页底

部的“用户注释”功能或转到 http://www.suse.com/documentation/feedback.html 并在

此处输入注释。

邮件

如有对本产品文档的反馈,也可以发送邮件至 [email protected]。请确保反馈中含有

文档标题、产品版本和文档发布日期。要报告错误或给出增强建议,请提供问题的简要说

明并指出相应章节编号和页码(或 URL)。

3 文档约定以下是本手册中使用的版式约定:

/etc/passwd:目录名称和文件名

placeholder:将 placeholder 替换为实际值

PATH:环境变量 PATH

ls、 --help:命令、选项和参数

user:用户和组

Alt 、 Alt – F1 :按键或组合键;这些键以大写形式显示,如在键盘上一样

文件、文件 另存为:菜单项,按钮

跳舞的企鹅(企鹅一章,↑其他手册):此内容参见自其他手册中的一章。

xix 文档约定 SES 6

Page 20: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

4 关于本手册的制作本书用 GeekoDoc(DocBook 的子集,请参见 http://www.docbook.org )编写。XML 源文件

采用 xmllint 校验、经过 xsltproc 处理,并使用 Norman Walsh 的样式表的自定义版本

转换为 XSL-FO。最终的 PDF 可通过 Apache 开发的 FOP 或 RenderX 开发的 XEP 编排格式。包

daps 中提供了用于制作此手册的创作和发布工具。DocBook Authoring and Publishing Suite

(DAPS) 以开源软件的形式开发。有关详细信息,请参见 http://daps.sf.net/ 。

5 Ceph 贡献者Ceph 项目及其文档是数百个贡献者和组织辛勤工作的成果。有关详细信息,请参见 https://

ceph.com/contributors/ 。

xx 关于本手册的制作 SES 6

Page 21: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

I 集群管理

1 用户权限和命令提示 2

2 Salt 集群管理 4

3 备份集群配置和数据 28

Page 22: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

1 用户权限和命令提示

作为 Ceph 集群管理员,您需要通过运行特定命令来配置和调整集群行为。您将需要运行以下几

种类型的命令:

1.1 与 Salt/DeepSea 相关的命令这些命令可帮助您部署或升级 Ceph 集群、同时在数个(或所有)集群节点上运行命令,它

们还可在您添加或删除集群节点时为您提供协助。最常用的命令是 salt、 salt-run 和

deepsea。您需要以 root 身份在 Salt Master 节点上运行 Salt 命令(有关详细信息,请参

见《部署指南》, 第 5 章 “使用 DeepSea/Salt 部署”, 第 5.2 节 “DeepSea 简介”)。通过以下提示

符来引入这些命令:

root@master #

例如:

root@master # salt '*.example.net' test.ping

1.2 与 Ceph 相关的命令这些是更低级别的命令,可在命令行上配置和微调集群及其网关的所有方面,例

如, ceph、 rbd、 radosgw-admin 或 crushtool。

要运行与 Ceph 相关的命令,您需要拥有 Ceph 密钥的读取访问权限,而密钥的用户权限则定义

您在 Ceph 环境内的权限。一种方案是以 root 身份(或通过 sudo)运行 Ceph 命令,并使

用不受限的默认密钥环“ceph.client.admin.key”。

建议您使用更安全的方案,即为每个管理员用户创建限制性更高的单独密钥,并将其存放在用

户可读取的目录中,例如:

~/.ceph/ceph.client.USERNAME.keyring

2 与 Salt/DeepSea 相关的命令 SES 6

Page 23: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

提示:Ceph 密钥的路径要使用自定义管理员用户和密钥环,每次运行 ceph 命令(使用 -n

client.USER_NAME 和 --keyring PATH/TO/KEYRING 选项)时,都需要指定该密

钥的用户名和路径。

要避免此情况,请在 CEPH_ARGS 变量(位于各用户的 ~/.bashrc 文件中)中包含这

些选项。

尽管您可以在任何集群节点上运行与 Ceph 相关的命令,但我们建议您在管理节点上运行。此文

档使用 cephadm 用户来运行命令,因此通过以下提示符来引入命令:

cephadm@adm >

例如:

cephadm@adm > ceph auth list

提示:特定节点的命令如果文档指示您在集群节点上以特定角色来运行命令,应通过该提示符来寻址。例如:

cephadm@mon >

1.3 一般的 Linux 命令与 Ceph 或 DeepSea 无关的 Linux 命令(例如 mount、 cat 或 openssl)通过

cephadm@adm > 或者 root # 提示符引入,具体使用哪个提示符取决于相关命令所需的权

限。

1.4 其他信息有关 Ceph 密钥管理的详细信息,请参见第 8.2 节 “密钥管理”。

3 一般的 Linux 命令 SES 6

Page 24: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

2 Salt 集群管理

部署 Ceph 集群之后,您可能偶尔需要对其进行若干修改。这些修改包括添加或删除新的节点、

磁盘或服务。本章介绍该如何完成这些管理任务。

2.1 添加新的集群节点为集群添加新节点的过程与《部署指南》, 第 5 章 “使用 DeepSea/Salt 部署”中所述的初始集群

节点部署过程几乎完全相同。

提示:防止重新平衡将 OSD 添加到现有集群时请注意,集群将在此后的一段时间内进行重新平衡。为了最大

限度地缩短重新平衡的时间,请一次即添加所有要添加的 OSD。

另一种方法是在添加 OSD 之前,在 ceph.conf 文件中设置 osd crush initial

weight = 0 选项:

1. 在 /srv/salt/ceph/configuration/files/ceph.conf.d/

global.conf 中添加 osd crush initial weight = 0。

2. 在 Salt Master 节点上创建新配置:

root@master # salt 'SALT_MASTER_NODE' state.apply

ceph.configuration.create

3. 将新配置应用到目标 OSD Minion:

root@master # salt 'OSD_MINIONS' state.apply ceph.configuration

4. 添加新 OSD 之后,根据需要使用 ceph osd crush reweight 命令调整其权

重。

4 添加新的集群节点 SES 6

Page 25: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

1. 在新节点上安装 SUSE Linux Enterprise Server 15 SP1,并配置其网络设置,使它能够正

确解析 Salt Master 主机名。确认其正确连接到公共网络和集群网络,并且为其正确配置

了时间同步。然后安装 salt-minion 包:

root@minion > zypper in salt-minion

如果 Salt Master 的主机名不是 salt,请编辑 /etc/salt/minion 并添加下面一行:

master: DNS_name_of_your_salt_master

如果您对上面提到的配置文件进行了任何更改,请重启动 salt.minion 服务:

root@minion > systemctl restart salt-minion.service

2. 在 Salt Master 上接受新节点的 Salt 密钥:

root@master # salt-key --accept NEW_NODE_KEY

3. 确认 /srv/pillar/ceph/deepsea_minions.sls 针对的是新 Salt Minion,以及/

或者设置了正确的 DeepSea 粒度。有关更多详细信息,请参见《部署指南》, 第 5 章 “使

用 DeepSea/Salt 部署”, 第 5.2.2.1 节 “匹配 Minion 名称”或《部署指南》, 第 5 章 “使用

DeepSea/Salt 部署”, 第 5.3 节 “集群部署”, 运行部署阶段。

4. 运行准备阶段。该阶段会同步扩展模块和粒度,以使新 Minion 可以提供 DeepSea 所需的

所有信息。

root@master # salt-run state.orch ceph.stage.0

重要:可能需要重启动 DeepSea 阶段 0如果 Salt Master 在其内核更新之后进行了重引导,则您需要重启动 DeepSea 阶段

0。

5. 运行发现阶段。该阶段将在 /srv/pillar/ceph/proposals 目录中写入新的文件

项,您可在其中编辑相关的 .yml 文件:

root@master # salt-run state.orch ceph.stage.1

5 添加新的集群节点 SES 6

Page 26: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

6. (可选)如果新添加的主机与现有命名模式不匹配,请更改 /srv/pillar/ceph/

proposals/policy.cfg。有关详细信息,请参见《部署指南》, 第 5 章 “使用

DeepSea/Salt 部署”, 第 5.5.1 节 “policy.cfg 文件”。

7. 运行配置阶段。该阶段会读取 /srv/pillar/ceph 下的所有内容,并相应地更新

Pillar:

root@master # salt-run state.orch ceph.stage.2

Pillar 用于存储可以使用以下命令访问的数据:

root@master # salt target pillar.items

提示:修改 OSD 的布局如果您要修改默认的 OSD 布局并更改 DriveGroups 配置,请执行《部署指南》,

第 5 章 “使用 DeepSea/Salt 部署”, 第 5.5.2 节 “DriveGroups”中所述的过程。

8. 配置和部署阶段包含新添加的节点:

root@master # salt-run state.orch ceph.stage.3

root@master # salt-run state.orch ceph.stage.4

2.2 为节点添加新的角色您可通过 DeepSea 部署所有受支持的角色类型。有关受支持角色类型的更多信息以及匹配示

例,请参见《部署指南》, 第 5 章 “使用 DeepSea/Salt 部署”, 第 5.5.1.2 节 “角色指定”。

要将新服务添加到现有节点,请执行下列步骤:

1. 修改 /srv/pillar/ceph/proposals/policy.cfg,以使现有主机与新角色匹

配。有关详细信息,请参见《部署指南》, 第 5 章 “使用 DeepSea/Salt 部署”, 第 5.5.1 节

“policy.cfg 文件”。例如,如果您需要在 MON 节点上运行对象网关,命令行类似下方

所示:

role-rgw/xx/x/example.mon-1.sls

6 为节点添加新的角色 SES 6

Page 27: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

2. 运行阶段 2 以更新 Pillar:

root@master # salt-run state.orch ceph.stage.2

3. 运行阶段 3 以部署核心服务,或者运行阶段 4 以部署可选服务。同时运行这两个阶段也没

有问题。

2.3 删除和重新安装集群节点

提示:临时删除集群节点Salt Master 预期集群中的所有 Minion 都已启动且能够响应。如果某个 Minion 由于中断

而不再能够响应,将会导致 Salt 基础架构(主要是 DeepSea 和 Ceph Dashboard)产生

问题。

修复该 Minion 之前,请暂时从 Salt Master 中删除其密钥:

root@master # salt-key -d MINION_HOST_NAME

修复 Minion 之后,请再次将其密钥添加到 Salt Master 中:

root@master # salt-key -a MINION_HOST_NAME

要从集群中删除角色,请编辑 /srv/pillar/ceph/proposals/policy.cfg 并删除相应

的行。然后按《部署指南》, 第 5 章 “使用 DeepSea/Salt 部署”, 第 5.3 节 “集群部署”中所述运行

阶段 2 和 5。

注意:从集群中删除 OSD如果您需要从集群中删除特定 OSD 节点,请确保集群的可用磁盘空间多于要删除的磁盘

空间。切记,删除 OSD 会导致整个集群进行重新平衡。

运行阶段 5 以执行实际删除之前,始终应检查 DeepSea 将要删除的是哪些 OSD:

root@master # salt-run rescinded.ids

7 删除和重新安装集群节点 SES 6

Page 28: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

从 Minion 中删除角色时,其目的是撤销与该角色相关的所有更改。对于大部分角色,要实现该

任务都很简单,但可能会存在包依赖项问题。如果包被卸装,其依赖项并不会被卸装。

删除的 OSD 会显示为空白驱动器。相关任务除了会擦除分区表外,还会重写文件系统的开头并

删除备份分区。

注意:将保留通过其他方法创建的分区先前通过其他方法(例如 ceph-deploy)配置的磁盘驱动器可能仍然包含分

区。DeepSea 不会自动销毁这些分区。管理员必须手动回收这些驱动器。

例 2.1︰ 从集群中删除 SALT MINION

举例来说,如果您的存储 Minion 名为“data1.ceph”、“data2.ceph”...“data6.ceph”,则

policy.cfg 中的相关行类似下方所示:

[...]

# Hardware Profile

role-storage/cluster/data*.sls

[...]

要删除 Salt Minion“data2.ceph”,请将这些行更改为:

[...]

# Hardware Profile

role-storage/cluster/data[1,3-6]*.sls

[...]

此外,请记得调整 drive_groups.yml 文件以匹配新目标。

[...]

drive_group_name:

target: 'data[1,3-6]*'

[...]

然后运行阶段 2,检查将要删除的是哪些 OSD,最后运行阶段 5 以完成该过程:

root@master # salt-run state.orch ceph.stage.2

root@master # salt-run rescinded.ids

root@master # salt-run state.orch ceph.stage.5

8 删除和重新安装集群节点 SES 6

Page 29: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

例 2.2︰ 迁移节点

假设出现下面的情况:在全新安装集群期间,您(管理员)在等待网关硬件就绪时,将其

中一个存储节点分配为独立的对象网关。现在,当网关的永久硬件就绪时,您就可以将所

需角色最终指定给备用存储节点并删除网关角色。

在针对新硬件运行阶段 0 和 1(请参见《部署指南》, 第 5 章 “使用 DeepSea/Salt 部署”,

第 5.3 节 “集群部署”, 运行部署阶段)之后,您将新网关命名为 rgw1。如果节点 data8

需要删除对象网关角色并添加存储角色,且当前的 policy.cfg 类似下方所示:

# Hardware Profile

role-storage/cluster/data[1-7]*.sls

# Roles

role-rgw/cluster/data8*.sls

则将它更改为:

# Hardware Profile

role-storage/cluster/data[1-8]*.sls

# Roles

role-rgw/cluster/rgw1*.sls

运行阶段 2 到 4,检查可能要删除的是哪些 OSD,然后运行阶段 5 以完成该过程。阶段 3

会将 data8 添加为存储节点。稍候片刻, data8 将同时具有两个角色。阶段 4 将会为

rgw1 添加对象网关角色,而阶段 5 将会从 data8 中删除对象网关角色:

root@master # salt-run state.orch ceph.stage.2

root@master # salt-run state.orch ceph.stage.3

root@master # salt-run state.orch ceph.stage.4

root@master # salt-run rescinded.ids

root@master # salt-run state.orch ceph.stage.5

2.4 重新部署 Monitor 节点一个或多个 Monitor 节点发生故障且不响应时,您需要将发生故障的 Monitor 从集群中删除,

然后再添加回集群(如有需要)。

9 重新部署 Monitor 节点 SES 6

Page 30: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

重要:至少须有三个 Monitor 节点Monitor 节点的数量不能少于 3。如果某个 Monitor 节点发生故障,导致您的集群中

只有两个 Monitor 节点,在重新部署发生故障的 Monitor 节点之前,您需要暂时将其

Monitor 角色指定给其他集群节点。重新部署发生故障的 Monitor 节点后,便可以卸装临

时 Monitor 角色。

有关向 Ceph 集群添加新节点/角色的详细信息,请参见第 2.1 节 “添加新的集群节

点”和第 2.2 节 “为节点添加新的角色”。

有关删除集群节点的详细信息,请参见第 2.3 节 “删除和重新安装集群节点”。

Ceph 节点故障分为以下两种基本程度:

Salt Minion 主机发生硬件或 OS 级别损坏,无法响应 salt 'minion_name'

test.ping 调用。在此情况下,您需要按照《部署指南》, 第 5 章 “使用 DeepSea/Salt 部

署”, 第 5.3 节 “集群部署”中的相关说明,对服务器进行彻底的重新部署。

Monitor 相关服务失败并拒绝恢复,但主机会响应 salt 'minion_name' test.ping

调用。在此情况下,请执行以下步骤:

1. 编辑 Salt Master 上的 /srv/pillar/ceph/proposals/policy.cfg,删除或更新

发生故障的 Monitor 节点对应的行,使它们现在指向正常工作的 Monitor 节点。例如:

[...]

# MON

#role-mon/cluster/ses-example-failed1.sls

#role-mon/cluster/ses-example-failed2.sls

role-mon/cluster/ses-example-new1.sls

role-mon/cluster/ses-example-new2.sls

[...]

2. 运行 DeepSea 阶段 2 到 5 以应用这些更改:

root@master # deepsea stage run ceph.stage.2

root@master # deepsea stage run ceph.stage.3

root@master # deepsea stage run ceph.stage.4

root@master # deepsea stage run ceph.stage.5

10 重新部署 Monitor 节点 SES 6

Page 31: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

2.5 向节点添加 OSD 磁盘要向现有 OSD 节点添加磁盘,请校验是否已删除并擦除磁盘上的所有分区。有关详细信息,请

参见《部署指南》, 第 5 章 “使用 DeepSea/Salt 部署”, 第 5.3 节 “集群部署”中的步骤 12。相应地

调整 /srv/salt/ceph/configuration/files/drive_groups.yml(有关详细信息,

请参见《部署指南》, 第 5 章 “使用 DeepSea/Salt 部署”, 第 5.5.2 节 “DriveGroups”)。保存文件

后,运行 DeepSea 的阶段 3:

root@master # deepsea stage run ceph.stage.3

2.6 删除 OSD您可以通过运行以下命令从集群中删除 Ceph OSD:

root@master # salt-run osd.remove OSD_ID

OSD_ID 必须是 OSD 的编号,不含 osd. 前缀。例如,对于 osd.3,仅使用数字 3。

2.6.1 删除多个 OSD

使用第 2.6 节 “删除 OSD”中所述的相同过程,但只需提供多个 OSD ID:

root@master # salt-run osd.remove 2 6 11 15

Removing osd 2 on host data1

Draining the OSD

Waiting for ceph to catch up.

osd.2 is safe to destroy

Purging from the crushmap

Zapping the device

Removing osd 6 on host data1

Draining the OSD

Waiting for ceph to catch up.

11 向节点添加 OSD 磁盘 SES 6

Page 32: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

osd.6 is safe to destroy

Purging from the crushmap

Zapping the device

Removing osd 11 on host data1

Draining the OSD

Waiting for ceph to catch up.

osd.11 is safe to destroy

Purging from the crushmap

Zapping the device

Removing osd 15 on host data1

Draining the OSD

Waiting for ceph to catch up.

osd.15 is safe to destroy

Purging from the crushmap

Zapping the device

2:

True

6:

True

11:

True

15:

True

2.6.2 删除主机上的所有 OSD

要删除特定主机上的所有 OSD,请运行以下命令:

root@master # salt-run osd.remove OSD_HOST_NAME

12 删除主机上的所有 OSD SES 6

Page 33: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

2.6.3 强制删除已中止的 OSD

有时会出现无法正常删除 OSD 的情况(请参见第 2.6 节 “删除 OSD”)。例如,如果 OSD 或其

日志、WAL 或 DB 损坏、I/O 操作挂起或 OSD 磁盘无法卸载,可能就会发生这种情况。

root@master # salt-run osd.remove OSD_ID force=True

提示:挂起的装入如果正在删除的磁盘上仍装载着分区,命令将退出,并显示“卸载失败 - 请检查 DEVICE

上的进程”讯息。然后,您可以使用 fuser -m DEVICE 列出访问文件系统的所有进

程。如果 fuser 未返回任何内容,请尝试手动执行 unmount DEVICE,然后查看

dmesg 或 journalctl 命令的输出。

2.6.4 验证 OSD LVM 元数据

使用 salt-run osd.remove ID 或通过其他 ceph 命令删除 OSD 之后,可能无法完全删除

LVM 元数据。这意味着如果您想要重新部署一个新 OSD,系统却会使用旧 LVM 元数据。

1. 首先检查 OSD 是否已删除:

cephadm@osd > ceph-volume lvm list

即使某个 OSD 已成功删除,也仍可能会列出。例如,如果您删除了 osd.2,输出内容将

如下所示:

====== osd.2 =======

[block] /dev/ceph-a2189611-4380-46f7-b9a2-8b0080a1f9fd/osd-data-

ddc508bc-6cee-4890-9a42-250e30a72380

block device /dev/ceph-a2189611-4380-46f7-b9a2-8b0080a1f9fd/osd-data-

ddc508bc-6cee-4890-9a42-250e30a72380

block uuid kH9aNy-vnCT-ExmQ-cAsI-H7Gw-LupE-cvSJO9

cephx lockbox secret

cluster fsid 6b6bbac4-eb11-45cc-b325-637e3ff9fa0c

13 强制删除已中止的 OSD SES 6

Page 34: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cluster name ceph

crush device class None

encrypted 0

osd fsid aac51485-131c-442b-a243-47c9186067db

osd id 2

type block

vdo 0

devices /dev/sda

在此示例中,您可以看到 osd.2 仍然位于 /dev/sda 中。

2. 验证 OSD 节点上的 LVM 元数据:

cephadm@osd > ceph-volume inventory

运行 ceph-volume inventory 命令生成的输出中将 /dev/sda 可用性标记为

False。例如:

Device Path Size rotates available Model name

/dev/sda 40.00 GB True False QEMU HARDDISK

/dev/sdb 40.00 GB True False QEMU HARDDISK

/dev/sdc 40.00 GB True False QEMU HARDDISK

/dev/sdd 40.00 GB True False QEMU HARDDISK

/dev/sde 40.00 GB True False QEMU HARDDISK

/dev/sdf 40.00 GB True False QEMU HARDDISK

/dev/vda 25.00 GB True False

3. 在 OSD 节点上运行以下命令,以完全删除 LVM 元数据:

cephadm@osd > ceph-volume lvm zap --osd-id ID --destroy

4. 再次运行 inventory 命令,以确认 /dev/sda 可用性是否返回 True。例如:

cephadm@osd > ceph-volume inventory

Device Path Size rotates available Model name

/dev/sda 40.00 GB True True QEMU HARDDISK

/dev/sdb 40.00 GB True False QEMU HARDDISK

/dev/sdc 40.00 GB True False QEMU HARDDISK

/dev/sdd 40.00 GB True False QEMU HARDDISK

14 验证 OSD LVM 元数据 SES 6

Page 35: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

/dev/sde 40.00 GB True False QEMU HARDDISK

/dev/sdf 40.00 GB True False QEMU HARDDISK

/dev/vda 25.00 GB True False

LVM 元数据现已删除。现在可以安全地对设备执行 dd 命令。

5. 现在可以重新部署 OSD,而无需重引导 OSD 节点:

root@master # salt-run state.orch ceph.stage.2

root@master # salt-run state.orch ceph.stage.3

2.7 更换 OSD 磁盘有多种原因会导致您可能需要更换 OSD 磁盘,例如:

根据 SMART 信息,OSD 磁盘已发生故障或很快将发生故障,并且将不再能用来安全地存

储数据。

您需要升级 OSD 磁盘,例如增加其大小。

这两种情况的更换过程相同,对于默认 CRUSH 索引和自定义 CRUSH 索引也同样适用。

1. 例如,假设其磁盘需要更换的 OSD 的 ID 为“5”。以下命令会在 CRUSH 索引中将其标记为

destroyed,但会保留其原始 ID:

root@master # salt-run osd.replace 5

提示:osd.replace 和 osd.removeSalt 的 osd.replace 和 osd.remove(请参见第 2.6 节 “删除 OSD”)命令作

用相同,只不过 osd.replace 会在 CRUSH 索引中将 OSD 保留为“destroyed”状

态,而 osd.remove 会从 CRUSH 索引中删除所有痕迹。

2. 手动更换发生故障/升级的 OSD 驱动器。

3. 如果您要修改默认的 OSD 布局并更改 DriveGroups 配置,请执行《部署指南》, 第 5 章

“使用 DeepSea/Salt 部署”, 第 5.5.2 节 “DriveGroups”中所述的过程。

15 更换 OSD 磁盘 SES 6

Page 36: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

4. 运行部署阶段 3,以部署更换的 OSD 磁盘:

root@master # salt-run state.orch ceph.stage.3

2.8 恢复重新安装的 OSD 节点如果您的某个 OSD 节点上的操作系统损坏且无法恢复,请执行以下步骤恢复该节点,并在集群

数据保持不变的情况下重新部署该节点的 OSD 角色:

1. 在其 OS 已损坏的节点上重新安装基本 SUSE Linux Enterprise 操作系统。在 OSD 节点上

安装 salt-minion 包,删除 Salt Master 上的旧 Salt Minion 密钥,并在 Salt Master 中

注册新 Salt Minion 的密钥。有关初始部署的详细信息,请参见《部署指南》, 第 5 章 “使

用 DeepSea/Salt 部署”, 第 5.3 节 “集群部署”。

2. 不要运行整个阶段 0,而是运行以下部分:

root@master # salt 'osd_node' state.apply ceph.sync

root@master # salt 'osd_node' state.apply ceph.packages.common

root@master # salt 'osd_node' state.apply ceph.mines

root@master # salt 'osd_node' state.apply ceph.updates

3. 运行 DeepSea 阶段 1 到 5:

root@master # salt-run state.orch ceph.stage.1

root@master # salt-run state.orch ceph.stage.2

root@master # salt-run state.orch ceph.stage.3

root@master # salt-run state.orch ceph.stage.4

root@master # salt-run state.orch ceph.stage.5

4. 运行 DeepSea 阶段 0:

root@master # salt-run state.orch ceph.stage.0

5. 重引导相关的 OSD 节点。系统将重新发现并重新使用所有 OSD 磁盘。

6. 安装/运行 Prometheus 的节点导出程序:

root@master # salt 'RECOVERED_MINION' \

16 恢复重新安装的 OSD 节点 SES 6

Page 37: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

state.apply ceph.monitoring.prometheus.exporters.node_exporter

7. 更新 Salt 粒度:

root@master # salt 'RECOVERED_MINION' osd.retain

2.9 将管理节点移至新服务器如果您需要将管理节点主机更换为新主机,则需要移动 Salt Master 和 DeepSea 文件。使

用您偏好的同步工具传输文件。在此过程中,我们使用的是 rsync,因为它是 SUSE Linux

Enterprise Server 15 SP1 软件储存库中提供的标准工具。

1. 停止旧管理节点上的 salt-master 和 salt-minion 服务:

root@master # systemctl stop salt-master.service

root@master # systemctl stop salt-minion.service

2. 在新管理节点上配置 Salt,以使 Salt Master 与 Salt Minions 可以通讯。有关详细信息,

请参见《部署指南》, 第 5 章 “使用 DeepSea/Salt 部署”, 第 5.3 节 “集群部署”。

提示:转换 Salt Minion为便于将 Salt Minion 转换到新管理节点,请从每个 Salt Minion 中删除原来的 Salt

Master 的公共密钥:

root@minion > rm /etc/salt/pki/minion/minion_master.pub

root@minion > systemctl restart salt-minion.service

3. 确认是否已安装 deepsea 包,如果没有,则予以安装。

root@master # zypper install deepsea

4. 更改 role-master 一行以自定义 policy.cfg 文件。有关详细信息,请参见《部署

指南》, 第 5 章 “使用 DeepSea/Salt 部署”, 第 5.5.1 节 “policy.cfg 文件”。

5. 将旧管理节点上的 /srv/pillar 和 /srv/salt 目录同步到新管理节点。

17 将管理节点移至新服务器 SES 6

Page 38: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

提示:rsync 试运行和符号链接如果可能,请先通过试运行试验文件同步,以确定将传输的是哪些文件( rsync

的选项 -n)。此外,请包含符号链接( rsync 的选项 -a)。使用 rsync 的同

步命令将如下所示:

root@master # rsync -avn /srv/pillar/ NEW-ADMIN-HOSTNAME:/srv/pillar

6. 如果您对 /srv/pillar 和 /srv/salt 外部的文件(例如 /etc/salt/master 或

/etc/salt/master.d)进行过自定义更改,请一并同步这些文件。

7. 现在,您便可从新管理节点上运行 DeepSea 阶段。有关其详细说明,请参见《部署指

南》, 第 5 章 “使用 DeepSea/Salt 部署”, 第 5.2 节 “DeepSea 简介”。

2.10 通过 Salt 实现自动安装通过使用 Salt 反应器可让安装自动进行。对于虚拟环境或一致的硬件环境,此配置将允许创建

具有指定行为的 Ceph 集群。

警告Salt 无法根据反应器事件执行依赖项检查。存在可能使 Salt Master 过载而无法响应的风

险。

自动安装需要:

正确创建的 /srv/pillar/ceph/proposals/policy.cfg。

准备好并已放入 /srv/pillar/ceph/stack 目录中的自定义配置。

默认反应器配置只会运行阶段 0 和 1。如此不必等待后续阶段完成即可测试反应器。

第一个 salt-minion 启动时,阶段 0 即会开始。使用锁定可防止有多个实例。所有 Minion 都完

成阶段 0 后,阶段 1 将会开始。

18 通过 Salt 实现自动安装 SES 6

Page 39: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

如果正确执行了操作,请编辑文件

/etc/salt/master.d/reactor.conf

并将下面一行

- /srv/salt/ceph/reactor/discovery.sls

替换成

- /srv/salt/ceph/reactor/all_stages.sls

确认该行未被注释掉。

2.11 更新集群节点定期应用滚动更新,以使 Ceph 集群节点保持最新。

2.11.1 软件储存库

使用最新的软件包增补集群之前,请确认集群的所有节点均可访问相关的储存库。有关所需储

存库的完整列表,请参见《部署指南》, 第 6 章 “从旧版本升级”, 第 6.8.1 节 “使用安装程序 DVD

手动升级节点”。

2.11.2 储存库暂存

如果您使用向集群节点提供软件储存库的暂存工具(例如 SUSE Manager、订阅管理工具或储存

库镜像工具),请确认 SUSE Linux Enterprise Server 和 SUSE Enterprise Storage 的“更新”储存

库的阶段都是在同一时刻创建的。

我们强烈建议使用暂存工具来应用增补程序级别为冻结/暂存的增补程序。这样可确保加入集群

的新节点具有与已在集群中运行的节点相同的增补程序级别。通过这种方法,您无需向集群的

所有节点都应用最新增补程序,新节点也能加入集群。

19 更新集群节点 SES 6

Page 40: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

2.11.3 zypper patch 或 zypper dup

集群节点默认通过 zypper dup 命令升级。如果您更喜欢使用 zypper patch 命令来更新

系统,请编辑 /srv/pillar/ceph/stack/global.yml,在其中添加下面一行:

update_method_init: zypper-patch

2.11.4 集群节点重引导

如果更新进程在更新期间升级了集群节点的内核,则您可以选择重引导节点。如果您要避免强

制重引导节点(可能是所有节点)的可能性,请确认 Ceph 节点上已安装且正在运行最新的内

核,或者如《部署指南》, 第 7 章 “自定义默认配置”, 第 7.1.5 节 “阶段 0 期间的更新和重引导”中

所述禁用节点自动重引导。

2.11.5 Ceph 服务停机时间

如第 2.11.4 节 “集群节点重引导”中所述,集群节点可能会在更新期间重引导,具体视配置而

定。如果对象网关、Samba 网关、NFS Ganesha 或 iSCSI 等服务存在单一故障点,客户端计算

机可能会暂时与相应节点正在重引导的服务断开连接。

2.11.6 运行更新

要将集群的所有节点上的软件包更新到最新版本,请执行以下步骤:

1. 在 Salt Master 上更新 deepsea 、 salt-master和 salt-minion 包,并重启动相

关服务:

root@master # salt -I 'roles:master' state.apply ceph.updates.master

2. 在集群的所有节点上更新并重启动 salt-minion 包:

root@master # salt -I 'cluster:ceph' state.apply ceph.updates.salt

3. 在集群上更新所有其他软件包:

20 zypper patch 或 zypper dup SES 6

Page 41: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

root@master # salt-run state.orch ceph.maintenance.upgrade

2.12 停止或重引导集群在某些情况下,可能需要停止或重引导整个集群。建议您仔细检查运行中服务的依赖项。下列

步骤概要说明如何停止和启动集群:

1. 告知 Ceph 集群不要将 OSD 标记为 out:

cephadm@adm > ceph osd set noout

2. 按下面的顺序停止守护进程和节点:

1. 存储客户端

2. 网关,例如 NFS Ganesha 或对象网关

3. 元数据服务器

4. Ceph OSD

5. Ceph Manager

6. Ceph Monitor

3. 根据需要执行维护任务。

4. 以与关闭过程相反的顺序启动节点和服务器:

1. Ceph Monitor

2. Ceph Manager

3. Ceph OSD

4. 元数据服务器

5. 网关,例如 NFS Ganesha 或对象网关

6. 存储客户端

21 停止或重引导集群 SES 6

Page 42: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

5. 删除 noout 标志:

cephadm@adm > ceph osd unset noout

2.13 使用自定义设置调整 ceph.conf如果您需要将自定义设置放入 ceph.conf 文件中,可通过修改 /srv/salt/ceph/

configuration/files/ceph.conf.d 目录中的配置文件来实现:

global.conf

mon.conf

mgr.conf

mds.conf

osd.conf

client.conf

rgw.conf

注意:独特的 rgw.conf对象网关提供了很大的灵活性,而且具有 ceph.conf 的其他段落所没有的独特之处。

所有其他 Ceph 组件都包含静态标题,例如 [mon] 或 [osd]。对象网关具有独特的标

题,例如 [client.rgw.rgw1]。也就是说, rgw.conf 文件需要有标题项。有关示

例,请参见

/srv/salt/ceph/configuration/files/rgw.conf

或者

/srv/salt/ceph/configuration/files/rgw-ssl.conf

22 使用自定义设置调整 ceph.conf SES 6

Page 43: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

重要:运行阶段 3对上述配置文件进行自定义更改后,运行阶段 3 和 4 以将这些更改应用到集群节点:

root@master # salt-run state.orch ceph.stage.3

root@master # salt-run state.orch ceph.stage.4

这些文件通过 /srv/salt/ceph/configuration/files/ceph.conf.j2 模板文件加

入,与 Ceph 配置文件接受的不同段落相对应。将配置片段放入正确的文件,可让 DeepSea 将

其放入正确的段落。您不需要添加任何段落标题。

提示要将任何配置选项仅应用于守护进程的特定实例,请添加标题,例如 [osd.1]。以下配

置选项将只应用于 ID 为 1 的 OSD 守护进程。

2.13.1 覆盖默认值

段落中位于后面的语句会重写前面的语句。因此,可以按照 /srv/salt/ceph/

configuration/files/ceph.conf.j2 模板中指定的内容来覆盖默认配置。例如,要

关闭 cephx 身份验证,可将下面三行添加到 /srv/salt/ceph/configuration/files/

ceph.conf.d/global.conf 文件:

auth cluster required = none

auth service required = none

auth client required = none

重新定义默认值时,与 Ceph 相关的工具(例如 rados)可能会发出警告,指出

ceph.conf.j2 中的特定值已在 global.conf 中重新定义。这些警告之所以出现,是因为

在最终的 ceph.conf 中将一个参数指定了两次。

要解决这种特定情况,请执行以下步骤:

1. 将当前目录切换到 /srv/salt/ceph/configuration/create:

23 覆盖默认值 SES 6

Page 44: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

root@master # cd /srv/salt/ceph/configuration/create

2. 将 default.sls 复制到 custom.sls:

root@master # cp default.sls custom.sls

3. 编辑 custom.sls,并将 ceph.conf.j2 更改为 custom-ceph.conf.j2。

4. 将当前目录切换到 /srv/salt/ceph/configuration/files:

root@master # cd /srv/salt/ceph/configuration/files

5. 将 ceph.conf.j2 复制到 custom-ceph.conf.j2:

root@master # cp ceph.conf.j2 custom-ceph.conf.j2

6. 编辑 custom-ceph.conf.j2,删除下面一行:

{% include "ceph/configuration/files/rbd.conf" %}

编辑 global.yml,添加下面一行:

configuration_create: custom

7. 刷新 Pillar:

root@master # salt target saltutil.pillar_refresh

8. 运行阶段 3:

root@master # salt-run state.orch ceph.stage.3

现在,每个值定义便应该只有一项了。要重新创建配置,请运行以下命令:

root@master # salt-run state.orch ceph.configuration.create

然后确认 /srv/salt/ceph/configuration/cache/ceph.conf 的内容。

24 覆盖默认值 SES 6

Page 45: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

2.13.2 包括配置文件

如果您需要应用许多自定义配置,请在自定义配置文件中使用以下 include 语句来让文件管理更

轻松。下面是 osd.conf 文件的示例:

[osd.1]

{% include "ceph/configuration/files/ceph.conf.d/osd1.conf" ignore missing %}

[osd.2]

{% include "ceph/configuration/files/ceph.conf.d/osd2.conf" ignore missing %}

[osd.3]

{% include "ceph/configuration/files/ceph.conf.d/osd3.conf" ignore missing %}

[osd.4]

{% include "ceph/configuration/files/ceph.conf.d/osd4.conf" ignore missing %}

在前面的示例中, osd1.conf、 osd2.conf、 osd3.conf 和 osd4.conf 文件包含特定

于相关 OSD 的配置选项。

提示:运行时配置对 Ceph 配置文件所做的更改将在相关 Ceph 守护进程重启动之后生效。有关更改 Ceph

运行时配置的详细信息,请参见第 16.1 节 “运行时配置”。

2.14 启用 AppArmor 配置AppArmor 是一套通过特定配置对程序进行限制的安全解决方案。有关详细信息,请参见

https://www.suse.com/documentation/sles-15/book_security/data/part_apparmor.html 。

DeepSea 针对 AppArmor 配置提供了以下三种状态:“强制”、“控诉”和“禁用”。要激活某种

AppArmor 状态,请运行以下命令:

salt -I "deepsea_minions:*" state.apply ceph.apparmor.default-STATE

要将 AppArmor 配置置于“强制”状态,请运行以下命令:

root@master # salt -I "deepsea_minions:*" state.apply ceph.apparmor.default-

enforce

要将 AppArmor 配置置于“控诉”状态,请运行以下命令:

25 包括配置文件 SES 6

Page 46: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

root@master # salt -I "deepsea_minions:*" state.apply ceph.apparmor.default-

complain

要禁用 AppArmor 配置,请运行以下命令:

root@master # salt -I "deepsea_minions:*" state.apply ceph.apparmor.default-

disable

提示:启用 AppArmor 服务上面调用的三个命令都会确认 AppArmor 是否已安装,如果未安装,将会安装该软件,

然后启动并启用相关的 systemd 服务。如果 AppArmor 是通过另一种方式安装并启动/

启用的,会导致在没有 DeepSea 配置的情况下运行,对此 DeepSea 将会向您发出警告。

2.15 停用经调整的配置默认情况下,DeepSea 会使用 Ceph Monitor、Ceph Manager 和 Ceph OSD 上工作的经调整配

置来部署 Ceph 集群。在某些情况下,您可能需要永久停用经调整的配置。要完成此操作,请在

/srv/pillar/ceph/stack/global.yml 中添加下面几行,然后重新运行阶段 3:

alternative_defaults:

tuned_mgr_init: default-off

tuned_mon_init: default-off

tuned_osd_init: default-off

root@master # salt-run state.orch ceph.stage.3

2.16 删除整个 Ceph 集群ceph.purge 运行程序会删除整个 Ceph 集群。这样,您便可以在测试不同的设置时清理集群

环境。 ceph.purge 完成之后,Salt 集群将还原至 DeepSea 阶段 1 结束时的状态。然后,您

便可以更改 policy.cfg(请参见《部署指南》, 第 5 章 “使用 DeepSea/Salt 部署”, 第 5.5.1 节

“policy.cfg 文件”),或对该设置继续执行 DeepSea 阶段 2。

26 停用经调整的配置 SES 6

Page 47: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

为防止意外删除,编制流程会检查是否解除了安全措施。您可以通过运行以下命令来解除安全

措施并删除 Ceph 集群:

root@master # salt-run disengage.safety

root@master # salt-run state.orch ceph.purge

提示:禁止删除 Ceph 集群如果您要阻止任何人运行 ceph.purge 运行程序,请在 /srv/salt/ceph/purge

目录中创建名为 disabled.sls 的文件,然后在 /srv/pillar/ceph/stack/

global.yml 文件中插入下面一行:

purge_init: disabled

重要:撤消自定义角色如果您之前为 Ceph Dashboard 创建了自定义角色(有关详细信息,请参见第 22.2.6 节

“添加自定义角色”和第 22.10.2 节 “用户角色和权限”),在运行 ceph.purge 运行程序

之前,您需要执行一些手动步骤将这些角色清除。例如,如果对象网关的自定义角色名

为“us-east-1”,请执行以下步骤:

root@master # cd /srv/salt/ceph/rescind

root@master # rsync -a rgw/ us-east-1

root@master # sed -i 's!rgw!us-east-1!' us-east-1/*.sls

27 删除整个 Ceph 集群 SES 6

Page 48: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

3 备份集群配置和数据

本章说明您应当备份 Ceph 集群的哪些部分才能恢复集群功能。

3.1 备份 Ceph 配置备份 /etc/ceph 目录。该目录包含至关重要的集群配置。比如,当您需要更换管理节点时,

就需要备份 /etc/ceph。

3.2 备份 Salt 配置您需要备份 /etc/salt/ 目录。该目录包含 Salt 配置文件,例如 Salt Master 密钥和已接受的

客户端密钥。

从严格意义上来说,备份管理节点并不需要备份 Salt 文件,但这些文件能够简化 Salt 集群的重

新部署。如果不备份这些文件,就需要在新管理节点上重新注册 Salt Minion。

注意:Salt Master 私用密钥的安全性务必将 Salt Master 私用密钥的备份存储在安全位置。Salt Master 密钥可用于操纵所有集

群节点。

从备份恢复 /etc/salt 目录后,请重启动 Salt 服务:

root@master # systemctl restart salt-master

root@master # systemctl restart salt-minion

3.3 备份 DeepSea 配置DeepSea 所需的所有文件都存储在 /srv/pillar/、 /srv/salt/ 和 /etc/salt/

master.d 中。

28 备份 Ceph 配置 SES 6

Page 49: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

如果您需要重新部署管理节点,请在新节点上安装 DeepSea 包,并将备份的数据移回这些目

录。然后,无需做出更多更改,即可再次使用 DeepSea。在再次使用 DeepSea 之前,请确保已

在管理节点上正确注册所有 Salt Minion。

3.4 备份自定义配置

Prometheus 数据和自定义。

Grafana 自定义。

确认您拥有现有 openATTIC 用户的记录,这样您才能在 Ceph Dashboard 中为这些用户创

建新帐户。

在 DeepSea 之外手动对 ceph.conf 进行的更改。

在 DeepSea 之外手动对 iSCSI 配置进行的更改。

Ceph 密钥。

CRUSH 索引和 CRUSH 规则。通过运行以下命令将包含 CRUSH 规则的反编译 CRUSH 索引

保存到 crushmap-backup.txt 中:

cephadm@adm > ceph osd getcrushmap | crushtool -d - -o crushmap-backup.txt

Samba 网关配置。如果您使用的是单个网关,请备份 /etc/samba/smb.conf。如果您

使用的是 HA 设置,另请备份 CTDB 和 Pacemaker 配置文件。有关 Samba 网关所使用配

置的详细信息,请参见第 20 章 “通过 Samba 导出 Ceph 数据”。

NFS Ganesha 配置。仅当使用 HA 设置时需要备份。有关 NFS Ganesha 所使用配置的详细

信息,请参见第 21 章 “NFS Ganesha:通过 NFS 导出 Ceph 数据”。

29 备份自定义配置 SES 6

Page 50: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

II 操作集群

4 简介 31

5 操作 Ceph 服务 32

6 确定集群状态 37

7 监控和警告 68

8 使用 cephx 进行身份验证 89

9 存储的数据管理 103

10 Ceph Manager 扩展模块 133

11 管理存储池 138

12 RADOS 块设备 158

13 纠删码存储池 183

14 缓存分层 189

15 使用 LVM 缓存提升性能 199

16 Ceph 集群配置 203

Page 51: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

4 简介

在本手册的这一部分,您将了解如何启动或停止 Ceph 服务、监视集群的状态、使用和修改

CRUSH 索引或管理存储池。

指南中还包含了高级主题,例如通常如何管理用户和身份验证、如何管理存储池和 RADOS 设备

快照、如何设置纠删码存储池,如何通过缓存分层提高集群性能。

31 SES 6

Page 52: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

5 操作 Ceph 服务

您可以使用 systemd 或通过 DeepSea 来操作 Ceph 服务。

5.1 使用 systemd 操作与 Ceph Cluster 相关的服务使用 systemctl 命令操作所有与 Ceph 相关的服务。操作在您当前登录的节点上进行。您需

要具备 root 特权才能操作 Ceph 服务。

5.1.1 使用目标启动、停止和重启动服务

为了简化启动、停止和重启动节点上特定类型的所有服务(例如所有 Ceph 服务、所有 MON 或

所有 OSD)的操作,Ceph 提供了以下 systemd 单元文件:

cephadm@adm > ls /usr/lib/systemd/system/ceph*.target

ceph.target

ceph-osd.target

ceph-mon.target

ceph-mgr.target

ceph-mds.target

ceph-radosgw.target

ceph-rbd-mirror.target

要启动/停止/重启动节点上的所有 Ceph 服务,请运行以下命令:

root # systemctl start ceph.target

root # systemctl stop ceph.target

root # systemctl restart ceph.target

要启动/停止/重启动节点上的所有 OSD,请运行以下命令:

root # systemctl start ceph-osd.target

root # systemctl stop ceph-osd.target

root # systemctl restart ceph-osd.target

32 使用 systemd 操作与 Ceph Cluster 相关的服务 SES 6

Page 53: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

针对其他目标的命令与此类似。

5.1.2 启动、停止和重启动个别服务

可以使用以下参数化 systemd 单元文件操作个别服务:

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

要使用这些命令,首先需要确定要操作的服务的名称。请参见第 5.1.3 节 “识别个别服务”了解有

关如何识别服务的更多信息。

要启动/停止/重启动 osd.1 服务,请运行以下命令:

root # systemctl start [email protected]

root # systemctl stop [email protected]

root # systemctl restart [email protected]

针对其他服务类型的命令与此类似。

5.1.3 识别个别服务

您可以通过以下几种方式获得某种服务类型的名称/编号。以下命令提供 ceph* 服务的结果。

您可以在 Ceph 集群的任何节点上运行这些命令。

要列出 ceph* 类型的所有(甚至是非活跃)服务,请运行以下命令:

root # systemctl list-units --all --type=service ceph*

如果只想列出非活跃服务,请运行以下命令:

root # systemctl list-units --all --state=inactive --type=service ceph*

您也可以使用 salt 查询多个节点上的服务:

33 启动、停止和重启动个别服务 SES 6

Page 54: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

root@master # salt TARGET cmd.shell \

"systemctl list-units --all --type=service ceph* | sed -e '/^$/,$ d'"

仅查询存储节点:

root@master # salt -I 'roles:storage' cmd.shell \

'systemctl list-units --all --type=service ceph*'

5.1.4 服务状态

可以查询 systemd 来了解服务的状态。例如:

root # systemctl status [email protected]

root # systemctl status [email protected]

请将 HOSTNAME 替换为运行守护进程的主机名。

如果您不知道服务的确切名称/编号,请参见第 5.1.3 节 “识别个别服务”。

5.2 使用 DeepSea 重启动 Ceph 服务将更新应用到集群节点后,需要重启动与 Ceph 相关的受影响服务。通常情况下,DeepSea 会

自动执行重启动操作。本节介绍如何手动重启动服务。

提示:检查重启动重启动集群的过程可能需要一段时间。可通过运行以下命令来使用 Salt 事件总线检查事

件:

root@master # salt-run state.event pretty=True

另一个用于监视活跃作业的命令为:

root@master # salt-run jobs.active

34 服务状态 SES 6

Page 55: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

5.2.1 重启动所有服务

警告:服务中断如果与 Ceph 相关的服务(特别是 iSCSI 或 NFS Ganesha)配置为单点访问,并且未设置

高可用性,重启动这些服务将导致从客户端进行查看时会出现暂时中断现象。

提示:Samba 不受 DeepSea 管理由于 DeepSea 和 Ceph Dashboard 当前不支持 Samba 部署,您需要手动管理与 Samba

相关的服务。有关细节,请参见第 20 章 “通过 Samba 导出 Ceph 数据”。

要重启动集群上的所有服务,请运行以下命令:

root@master # salt-run state.orch ceph.restart

如果 DeepSea 版本低于 0.8.4,则元数据服务器、iSCSI 网关、对象网关和 NFS Ganesha

服务将并行重启动。

如果 DeepSea 为 0.8.4 或更高版本,您已配置的所有角色将按以下顺序重启动:Ceph

Monitor、Ceph Manager、Ceph OSD、元数据服务器、对象网关、iSCSI 网关、NFS

Ganesha。为了保持较短的停机时间并尽早发现潜在问题,请按顺序重启动各节点。例

如,一次只重启动一个监视节点。

如果集群处于降级、非健康状况,该命令会等待集群恢复。

5.2.2 重启动特定服务

要重启动集群上的特定服务,请运行以下命令:

root@master # salt-run state.orch ceph.restart.service_name

例如,要重启动所有对象网关,请运行以下命令:

root@master # salt-run state.orch ceph.restart.rgw

35 重启动所有服务 SES 6

Page 56: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

您可以使用以下目标:

root@master # salt-run state.orch ceph.restart.mon

root@master # salt-run state.orch ceph.restart.mgr

root@master # salt-run state.orch ceph.restart.osd

root@master # salt-run state.orch ceph.restart.mds

root@master # salt-run state.orch ceph.restart.rgw

root@master # salt-run state.orch ceph.restart.igw

root@master # salt-run state.orch ceph.restart.ganesha

5.3 正常关闭整个 Ceph 集群在某些情况下,您需要按建议的顺序停止集群中所有与 Ceph 相关的服务,然后才能再次按任意

顺序将其启动。例如,发生计划停电的情况时。

要关闭整个 Ceph 集群,请禁用安全措施并运行 ceph.shutdown 运行程序:

root@master # salt-run disengage.safety

root@master # salt-run state.orch ceph.shutdown

要启动整个 Ceph 集群,请运行 ceph.startup 运行程序:

root@master # salt-run state.orch ceph.startup

36 正常关闭整个 Ceph 集群 SES 6

Page 57: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

6 确定集群状态

当集群正在运行时,您可以使用 ceph 工具来监视它。要确定集群状态,通常需要检查 Ceph

OSD、Ceph Monitor、归置组和元数据服务器的状态。

提示:交互方式要以交互模式运行 ceph 工具,请不带任何自变量在命令行中键入 ceph。如果要在一

行中输入多条 ceph 命令,则使用交互模式较为方便。例如:

cephadm@adm > ceph

ceph> health

ceph> status

ceph> quorum_status

ceph> mon_status

6.1 检查集群的状态要检查集群的状态,请执行以下命令:

cephadm@adm > ceph status

或者

cephadm@adm > ceph -s

在交互模式下,键入 status,然后按 Enter 。

ceph> status

Ceph 将列显集群状态。例如,由一个 Monitor 和两个 OSD 组成的微型 Ceph 集群可能会列显

以下内容:

cluster b370a29d-9287-4ca3-ab57-3d824f65e339

health HEALTH_OK

37 检查集群的状态 SES 6

Page 58: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

monmap e1: 1 mons at {ceph1=10.0.0.8:6789/0}, election epoch 2, quorum 0 ceph1

osdmap e63: 2 osds: 2 up, 2 in

pgmap v41332: 952 pgs, 20 pools, 17130 MB data, 2199 objects

115 GB used, 167 GB / 297 GB avail

1 active+clean+scrubbing+deep

951 active+clean

6.2 检查集群健康状况在启动集群后到开始读取和/或写入数据期间,检查集群的健康状况:

cephadm@adm > ceph health

HEALTH_WARN 10 pgs degraded; 100 pgs stuck unclean; 1 mons down, quorum 0,2 \

node-1,node-2,node-3

提示如果之前为您的配置或密钥环指定了非默认位置,则此时可以指定它们的位置:

cephadm@adm > ceph -c /path/to/conf -k /path/to/keyring health

Ceph 集群会返回下列健康状况代码之一:

OSD_DOWN

一个或多个 OSD 标记为已停机。OSD 守护进程可能已停止,或同伴 OSD 可能无法通过网

络连接 OSD。常见原因包括守护进程已停止或已崩溃、主机已停机或网络中断。

校验主机是否运行良好,守护进程是否已启动,并且网络是否正常工作。如果守护进程已

崩溃,守护进程日志文件 ( /var/log/ceph/ceph-osd.* ) 可能会包含调试信息。

OSD_ crush type _DOWN,例如 OSD_HOST_DOWN

特定 CRUSH 子树中的所有 OSD 均标记为已停机,例如主机上的所有 OSD。

OSD_ORPHAN

在 CRUSH 索引层次结构中引用了 OSD,但它不存在。可使用以下命令从 CRUSH 层次结构

中删除 OSD:

38 检查集群健康状况 SES 6

Page 59: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > ceph osd crush rm osd.ID

OSD_OUT_OF_ORDER_FULL

以下项的使用率阈值未按升序排列:backfillfull(默认值为 0.90)、nearfull(默认

值为 0.85)、full(默认值为 0.95)、failsafe_full。特别是,我们需要 backfillfull <

nearfull,nearfull < full 且 full < failsafe_full。

要读取最新的值,请运行以下命令:

cephadm@adm > ceph health detail

HEALTH_ERR 1 full osd(s); 1 backfillfull osd(s); 1 nearfull osd(s)

osd.3 is full at 97%

osd.4 is backfill full at 91%

osd.2 is near full at 87%

可以使用以下命令调整阈值:

cephadm@adm > ceph osd set-backfillfull-ratio ratio

cephadm@adm > ceph osd set-nearfull-ratio ratio

cephadm@adm > ceph osd set-full-ratio ratio

OSD_FULL

一个或多个 OSD 超出了 full 阈值,阻止集群处理写入操作。可使用以下命令检查各存储池

的用量:

cephadm@adm > ceph df

可使用以下命令查看当前定义的 full 比例:

cephadm@adm > ceph osd dump | grep full_ratio

恢复写入可用性的临时解决方法是稍稍提高 full 阈值:

cephadm@adm > ceph osd set-full-ratio ratio

请通过部署更多 OSD 将新的存储添加到集群,或者删除现有数据来腾出空间。

OSD_BACKFILLFULL

一个或多个 OSD 超出了 backfillfull 阈值,因而不允许将数据重新平衡到此设备。这是一

条预警,意味着重新平衡可能无法完成,并且集群将满。可使用以下命令检查各存储池的

用量:

39 检查集群健康状况 SES 6

Page 60: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > ceph df

OSD_NEARFULL

一个或多个 OSD 超出了 nearfull 阈值。这是一条预警,意味着集群将满。可使用以下命令

检查各存储池的用量:

cephadm@adm > ceph df

OSDMAP_FLAGS

已设置一个或多个所需的集群标志。可使用以下命令设置或清除这些标志(full 除外):

cephadm@adm > ceph osd set flag

cephadm@adm > ceph osd unset flag

这些标志包括:

full

集群标记为已满,无法处理写入操作。

pauserd、pausewr

已暂停读取或写入。

noup

不允许 OSD 启动。

nodown

将会忽略 OSD 故障报告,如此 Monitor 便不会将 OSD 标记为 down。

noin

先前标记为 out 的 OSD 在启动时将不会重新标记为 in。

noout

停机的 OSD 在配置间隔过后将不会自动标记为 out。

nobackfill、norecover、norebalance

恢复或数据重新平衡进程已暂停。

noscrub、nodeep_scrub

洗刷进程已禁用(请参见第 9.6 节 “洗刷”)。

40 检查集群健康状况 SES 6

Page 61: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

notieragent

缓存分层活动已暂停。

OSD_FLAGS

一个或多个 OSD 设置了所需的每 OSD 标志。这些标志包括:

noup

不允许 OSD 启动。

nodown

将会忽略此 OSD 的故障报告。

noin

如果此 OSD 先前在发生故障后自动标记为 out,当它启动时将不会标记为 in。

noout

如果此 OSD 已停机,则在配置的间隔过后,它将不会自动标记为 out。

可使用以下命令来设置和清除每 OSD 标志:

cephadm@adm > ceph osd add-flag osd-ID

cephadm@adm > ceph osd rm-flag osd-ID

OLD_CRUSH_TUNABLES

CRUSH 索引目前使用的设置很旧,应予以更

新。 mon_crush_min_required_version 配置选项可确定使用时不会触发此健康状

况警告的最旧可调变量(即能够连接到集群的最旧客户端版本)。

OLD_CRUSH_STRAW_CALC_VERSION

CRUSH 索引目前使用较旧的非最佳方法来计算 straw 存储桶的中间权重值。应该更新

CRUSH 索引以使用较新的方法 ( straw_calc_version =1)。

CACHE_POOL_NO_HIT_SET

一个或多个缓存池未配置命中集来跟踪用量,这使分层代理无法识别要从缓存中刷新和赶

出的冷对象。可使用以下命令对缓存池配置命中集:

cephadm@adm > ceph osd pool set poolname hit_set_type type

cephadm@adm > ceph osd pool set poolname hit_set_period period-in-seconds

cephadm@adm > ceph osd pool set poolname hit_set_count number-of-hitsets

41 检查集群健康状况 SES 6

Page 62: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > ceph osd pool set poolname hit_set_fpp target-false-positive-

rate

有关缓存分层的详细信息,请参见第 14 章 “缓存分层”。

OSD_NO_SORTBITWISE

未在运行早于 Luminous 12 版本的 OSD,但是尚未设置 sortbitwise 标志。您需要先

设置 sortbitwise 标志,Luminous 12 或更新版本的 OSD 才能启动:

cephadm@adm > ceph osd set sortbitwise

POOL_FULL

一个或多个存储池已达到其配额,不再允许写入。可使用以下命令设置存储池配额和用

量:

cephadm@adm > ceph df detail

您可以使用以下命令提高存储池配额

cephadm@adm > ceph osd pool set-quota poolname max_objects num-objects

cephadm@adm > ceph osd pool set-quota poolname max_bytes num-bytes

或者删除一些现有数据以减少用量。

PG_AVAILABILITY

数据可用性下降,这意味着集群无法处理针对集群中某些数据的潜在读取或写入请求。具

体而言,一个或多个 PG 处于不允许处理 I/O 请求的状态。有问题的 PG 状态包括正在互

联、过时、不完整和不工作(如果这些状况不迅速解决)。运行以下命令可获得有关哪些

PG 受影响的详细信息:

cephadm@adm > ceph health detail

大多数情况下,出现此情形的根本原因在于一个或多个 OSD 当前已停机。可使用以下命令

查询特定的有问题 PG 的状态:

cephadm@adm > ceph tell pgid query

PG_DEGRADED

42 检查集群健康状况 SES 6

Page 63: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

某些数据的数据冗余降低,这意味着集群没有所需数量的副本用于所有数据(对于副本存

储池)或纠删码分段(对于纠删码存储池)。具体而言,一个或多个 PG 设置了 degraded

或 undersized 标志(集群中没有该归置组的足够实例),或者有一段时间未设置 clean 标

志。运行以下命令可获得有关哪些 PG 受影响的详细信息:

cephadm@adm > ceph health detail

大多数情况下,出现此情形的根本原因在于一个或多个 OSD 当前已停机。可使用以下命令

查询特定的有问题 PG 的状态:

cephadm@adm > ceph tell pgid query

PG_DEGRADED_FULL

由于集群中的可用空间不足,某些数据的数据冗余可能已降低或面临风险。具体而言,一

个或多个 PG 设置了 backfill_toofull 或 recovery_tooful 标志,这意味着集群无法迁移或恢

复数据,原因是一个或多个 OSD 高于 backfillfull 阈值。

PG_DAMAGED

数据洗刷(请参见第 9.6 节 “洗刷”)进程发现集群中存在某些数据一致性问题。具体而

言,一个或多个 PG 设置了 inconsistent 或 snaptrim_error 标志(表示某个较早的洗刷操

作发现问题),或者设置了 repair 标志(表示当前正在修复此类不一致问题)。

OSD_SCRUB_ERRORS

最近的 OSD 洗刷操作发现了不一致问题。

CACHE_POOL_NEAR_FULL

缓存层池将满。在此环境中,“满”由缓存池的 target_max_bytes 和 target_max_objects 属

性确定。池达到目标阈值时,如果正在从缓存刷新并赶出数据,写入池的请求可能会被阻

止,出现常会导致延迟很高且性能变差的状态。可使用以下命令调整缓存池目标大小:

cephadm@adm > ceph osd pool set cache-pool-name target_max_bytes bytes

cephadm@adm > ceph osd pool set cache-pool-name target_max_objects objects

正常的缓存刷新和赶出活动还可能因基础层可用性或性能下降或者集群的整体负载较高而

受到限制。

有关缓存分层的详细信息,请参见第 14 章 “缓存分层”。

TOO_FEW_PGS

43 检查集群健康状况 SES 6

Page 64: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

使用中的 PG 数量低于每个 OSD 的 PG 数的可配置阈值 mon_pg_warn_min_per_osd。

这可能导致集群中各 OSD 间的数据分布和平衡未达到最佳,以致降低整体性能。

TOO_MANY_PGS

使用中的 PG 数量高于每个 OSD 的 PG 数的可配置阈值 mon_pg_warn_max_per_osd。

这可能导致 OSD 守护进程的内存用量较高,集群状态更改(例如 OSD 重启动、添加或删

除)之后互联速度降低,并且 Ceph Manager 和 Ceph Monitor 上的负载较高。

虽然不能降低现有存储池的 pg_num 值,但是可以降低 pgp_num 值。这样可有效

地在同组 OSD 上并置一些 PG,从而减轻上述的一些负面影响。可使用以下命令调整

pgp_num 值:

cephadm@adm > ceph osd pool set pool pgp_num value

SMALLER_PGP_NUM

一个或多个存储池的 pgp_num 值小于 pg_num。这通常表示 PG 计数有所提高,但未同

时提升归置行为。使用以下命令设置 pgp_num,使其与触发数据迁移的 pg_num 相匹

配,通常便可解决此问题:

cephadm@adm > ceph osd pool set pool pgp_num pg_num_value

MANY_OBJECTS_PER_PG

一个或多个存储池的每 PG 平均对象数大大高于集群的整体平均值。该特定阈值通过

mon_pg_warn_max_object_skew 配置值控制。这通常表示包含集群中大部分数据的

存储池具有的 PG 太少,以及/或者不包含这么多数据的其他存储池具有的 PG 太多。可通

过调整 Monitor 上的 mon_pg_warn_max_object_skew 配置选项提高阈值,来消除该

健康状况警告。

POOL_APP_NOT_ENABLED¶

存在包含一个或多个对象但尚未标记为供特定应用使用的存储池。将存储池标记为供某个

应用使用即可消除此警告。例如,如果存储池由 RBD 使用:

cephadm@adm > rbd pool init pool_name

如果存储池正由自定义应用“foo”使用,您还可以使用低级别命令标记它:

cephadm@adm > ceph osd pool application enable foo

POOL_FULL

44 检查集群健康状况 SES 6

Page 65: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

一个或多个存储池已达到(或几乎要达到)其配额。触发此错误状况的阈值通过

mon_pool_quota_crit_threshold 配置选项控制。可使用以下命令上调、下调(或

删除)存储池配额:

cephadm@adm > ceph osd pool set-quota pool max_bytes bytes

cephadm@adm > ceph osd pool set-quota pool max_objects objects

将配额值设置为 0 将禁用配额。

POOL_NEAR_FULL

一个或多个存储池接近其配额。触发此警告状况的阈值通过

mon_pool_quota_warn_threshold 配置选项控制。可使用以下命令上调、下调(或

删除)存储池配额:

cephadm@adm > ceph osd osd pool set-quota pool max_bytes bytes

cephadm@adm > ceph osd osd pool set-quota pool max_objects objects

将配额值设置为 0 将禁用配额。

OBJECT_MISPLACED

集群中的一个或多个对象未存储在集群希望存储的节点上。这表示集群最近的某项更改导

致的数据迁移尚未完成。误放的数据本质上不属于危险状况。数据一致性方面永远不会有

风险,仅当所需位置放置了对象所需份数的新副本之后,系统才会删除对象的旧副本。

OBJECT_UNFOUND

找不到集群中的一个或多个对象。具体而言,OSD 知道对象的新副本或更新副本应该存

在,但在当前启用的 OSD 上却找不到该版对象的副本。系统将阻止对“未找到”对象的读取

或写入请求。从理论上讲,可以将具有未找到对象最近副本的已停用 OSD 重新启用。可通

过负责处理未找到对象的 PG 的互联状态识别候选 OSD:

cephadm@adm > ceph tell pgid query

REQUEST_SLOW

正花费很长的时间处理一个或多个 OSD 请求。这可能表示负载极重、存储设备速度缓慢或

有软件错误。可以从 OSD 主机执行以下命令来查询有问题的 OSD 上的请求队列:

cephadm@adm > ceph daemon osd.id ops

可以查看近期最慢的请求摘要:

45 检查集群健康状况 SES 6

Page 66: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > ceph daemon osd.id dump_historic_ops

可使用以下命令查找 OSD 的位置:

cephadm@adm > ceph osd find osd.id

REQUEST_STUCK

一个或多个 OSD 请求已被阻止一段相当长的时间,例如 4096 秒。这表示集群已有很长一

段时间处于非健康状况(例如,没有足够的运行中 OSD 或非活跃 PG),或者 OSD 存在某

种内部问题。

PG_NOT_SCRUBBED

最近未洗刷(请参见第 9.6 节 “洗刷”)一个或多个 PG。通常每 mon_scrub_interval

秒洗刷一次 PG,当 mon_warn_not_scrubbed 这类间隔已过但未进行洗刷时,就会触

发此警告。如果 PG 未标记为清理,系统将不会洗刷它们。如果 PG 放置错误或已降级,

就会出现这种情况(请参见上文中的 PG_AVAILABILITY 和 PG_DEGRADED)。您可以使用

以下命令手动对标记为清理的 PG 启动洗刷:

cephadm@adm > ceph pg scrub pgid

PG_NOT_DEEP_SCRUBBED

最近未深层洗刷(请参见第 9.6 节 “洗刷”)一个或多个 PG。通常每

osd_deep_scrub_interval 秒洗刷一次 PG,当 mon_warn_not_deep_scrubbed

秒已过但未进行洗刷时,就会触发此警告。如果 PG 未标记为清理,系统将不会(深

层)洗刷它们。如果 PG 放置错误或已降级,就会出现这种情况(请参见上文中的

PG_AVAILABILITY 和 PG_DEGRADED)。您可以使用以下命令手动对标记为清理的 PG 启

动洗刷:

cephadm@adm > ceph pg deep-scrub pgid

提示如果之前为您的配置或密钥环指定了非默认位置,则此时可以指定它们的位置:

root # ceph -c /path/to/conf -k /path/to/keyring health

46 检查集群健康状况 SES 6

Page 67: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

6.3 监视集群可以使用 ceph -s 了解集群的即时状态。例如,由一个 Monitor 和两个 OSD 组成的微型

Ceph 集群可在某工作负载正在运行时列显以下内容:

cephadm@adm > ceph -s

cluster:

id: ea4cf6ce-80c6-3583-bb5e-95fa303c893f

health: HEALTH_WARN

too many PGs per OSD (408 > max 300)

services:

mon: 3 daemons, quorum ses5min1,ses5min3,ses5min2

mgr: ses5min1(active), standbys: ses5min3, ses5min2

mds: cephfs-1/1/1 up {0=ses5min3=up:active}

osd: 4 osds: 4 up, 4 in

rgw: 1 daemon active

data:

pools: 8 pools, 544 pgs

objects: 253 objects, 3821 bytes

usage: 6252 MB used, 13823 MB / 20075 MB avail

pgs: 544 active+clean

输出内容提供了以下信息:

集群 ID

集群健康状况状态

Monitor 索引版本号和 Monitor 仲裁的状态

OSD 索引版本号和 OSD 的状态

Ceph Manager 的状态

对象网关的状态

归置组索引版本

归置组和存储池数量

47 监视集群 SES 6

Page 68: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

理论上存储的数据量和存储的对象数量

存储的数据总量

提示:Ceph 计算数据用量的方式used 值反映实际使用的原始存储量。 xxx GB / xxx GB 值表示集群的可用容量(两

者中较小的数字),以及集群的整体存储容量。理论数量反映在复制、克隆所存储数据或

创建其快照前这些数据的大小。因此,实际存储的数据量通常会超出理论上的存储量,因

为 Ceph 会创建数据的副本,可能还会将存储容量用于克隆和创建快照。

显示即时状态信息的其他命令如下:

ceph pg stat

ceph osd pool stats

ceph df

ceph df detail

要实时更新信息,请在 watch 命令中以自变量的方式使用以上任意命令(包括 ceph -s):

root # watch -n 10 'ceph -s'

如果您看累了,请按 Ctrl – C 。

6.4 检查集群的用量统计数字要查看集群的数据使用率以及数据在多个存储池之间的分布,请使用 ceph df 命令。要获取

更多详细信息,请使用 ceph df detail。

cephadm@adm > ceph df

RAW STORAGE:

CLASS SIZE AVAIL USED RAW USED %RAW USED

hdd 40 GiB 32 GiB 137 MiB 8.1 GiB 20.33

TOTAL 40 GiB 32 GiB 137 MiB 8.1 GiB 20.33

48 检查集群的用量统计数字 SES 6

Page 69: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

POOLS:

POOL ID STORED OBJECTS USED %USED MAX AVAIL

iscsi-images 1 3.9 KiB 8 769 KiB 0 10 GiB

cephfs_data 2 1.6 KiB 5 960 KiB 0 10 GiB

cephfs_metadata 3 54 KiB 22 1.5 MiB 0 10 GiB

[...]

输出中的 RAW STORAGE 段落提供集群用于数据的存储空间容量概览。

CLASS:设备的存储类别。有关设备类型的更多详细信息,请参见第 9.1.1 节 “设备类

型”。

SIZE:集群的整体存储容量。

AVAIL:集群中可以使用的可用空间容量。

USED:单纯为块设备中保存的数据对象分配的空间(所有 OSD 上的累计空间)。

RAW USED:“USED”空间与块设备上为实现 Ceph 而分配/预留的空间(例如 BlueStore 的

BlueFS 部分)之和。

% RAW USED:已用的原始存储量百分比。将此数字与 full ratio 和 near full

ratio 搭配使用,可确保您不会用完集群的容量。有关其他详细信息,请参见第 6.10 节

“存储容量”。

注意:集群填充程度当原始存储填满级别接近 100% 时,您需要向集群添加新存储空间。较高的用量可

能导致单个 OSD 填满,集群健康状况出现问题。

使用命令 ceph osd df tree 可列出所有 OSD 的填充程度。

输出内容的 POOLS 段落提供了存储池列表和每个存储池的理论用量。此段落的输出不反映副

本、克隆数据或快照。例如,如果您存储含 1MB 数据的对象,理论用量将是 1MB,但是根据副

本、克隆数据或快照数量,实际用量可能是 2MB 或更多。

POOL:存储池的名称。

ID:存储池 ID。

49 检查集群的用量统计数字 SES 6

Page 70: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

STORED:用户存储的数据量。

OBJECTS:每个存储池的理论已存储对象数。

USED:所有 OSD 节点单纯为数据分配的空间容量,以 kB 为单位。

%USED:每个存储池的理论已用存储百分比。

MAX AVAIL:给定存储池中的最大可用空间。

注意POOLS 段落中的数字是理论上的。它们不包括副本、快照或克隆数量。因此, USED 与

% USED 数量之和不会加总到输出内容 RAW STORAGE 段落中的 RAW USED 和 %RAW

USED 数量中。

6.5 检查 OSD 状态可通过执行以下命令来检查 OSD,以确保它们已启动且正在运行:

cephadm@adm > ceph osd stat

或者

cephadm@adm > ceph osd dump

还可以根据 OSD 在 CRUSH 索引中的位置查看 OSD。

cephadm@adm > ceph osd tree

Ceph 将列显 CRUSH 树及主机、它的 OSD、OSD 是否已启动及其权重。

# id weight type name up/down reweight

-1 3 pool default

-3 3 rack mainrack

-2 3 host osd-host

0 1 osd.0 up 1

1 1 osd.1 up 1

50 检查 OSD 状态 SES 6

Page 71: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

2 1 osd.2 up 1

6.6 检查填满的 OSDCeph 可阻止您向填满的 OSD 写入数据,以防丢失数据。在正常运行的集群中,当集群接近其

填满比例时,您会收到警告。 mon osd full ratio 默认设为容量的 0.95 (95%),达到该

比例后,集群会阻止客户端写入数据。 mon osd nearfull ratio 默认设为容量的 0.85

(85%),达到该比例时,集群会生成健康状况警告。

可通过 ceph health 命令报告填满的 OSD 节点:

cephadm@adm > ceph health

HEALTH_WARN 1 nearfull osds

osd.2 is near full at 85%

或者

cephadm@adm > ceph health

HEALTH_ERR 1 nearfull osds, 1 full osds

osd.2 is near full at 85%

osd.3 is full at 97%

处理填满的集群的最佳方法是添加新的 OSD 主机/磁盘,以便让集群将数据重新分布到新的可用

存储空间。

提示:防止 OSD 填满OSD 变满(即用完 100% 的磁盘空间)之后,往往会迅速崩溃而不发出警告。管理 OSD

节点时需记住下面几点提示。

每个 OSD 的磁盘空间(通常装入在 /var/lib/ceph/osd/osd-{1,2..} 下)

需放置在专用的底层磁盘或分区上。

检查 Ceph 配置文件,确保 Ceph 不会将其日志文件存储在专供 OSD 使用的磁盘/分

区上。

确保没有其他进程写入专供 OSD 使用的磁盘/分区。

51 检查填满的 OSD SES 6

Page 72: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

6.7 检查 Monitor 状态启动集群后,请在第一次读取和/或写入数据之前检查 Ceph Monitor 的仲裁状态。如果集群已

在处理请求,请定期检查 Ceph Monitor 的状态,确保其正在运行。

要显示 Monitor 索引,请执行以下命令:

cephadm@adm > ceph mon stat

或者

cephadm@adm > ceph mon dump

要检查 Monitor 集群的仲裁状态,请执行以下命令:

cephadm@adm > ceph quorum_status

Ceph 将返回仲裁状态。例如,由三个 Monitor 组成的 Ceph 集群可能返回以下内容:

{ "election_epoch": 10,

"quorum": [

0,

1,

2],

"monmap": { "epoch": 1,

"fsid": "444b489c-4f16-4b75-83f0-cb8097468898",

"modified": "2011-12-12 13:28:27.505520",

"created": "2011-12-12 13:28:27.505520",

"mons": [

{ "rank": 0,

"name": "a",

"addr": "192.168.1.10:6789\/0"},

{ "rank": 1,

"name": "b",

"addr": "192.168.1.11:6789\/0"},

{ "rank": 2,

"name": "c",

"addr": "192.168.1.12:6789\/0"}

]

52 检查 Monitor 状态 SES 6

Page 73: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

}

}

6.8 检查归置组状态归置组会将对象映射到 OSD。监视归置组时,您希望它们处于 active 和 clean 状态。有关

详细内容,请参见第 6.11 节 “监视 OSD 和归置组”。

6.9 使用管理套接字Ceph 管理套接字可让您通过套接字接口查询守护进程。默认情况下,Ceph 套接字驻留在 /

var/run/ceph 下。要通过管理套接字访问守护进程,请登录运行守护进程的主机,并使用以

下命令:

cephadm@adm > ceph --admin-daemon /var/run/ceph/socket-name

要查看可用的管理套接字命令,请执行以下命令:

cephadm@adm > ceph --admin-daemon /var/run/ceph/socket-name help

管理套接字命令可让您在运行时显示和设置您的配置。有关详细信息,请参见第 16.1 节 “运行

时配置”。

另外,您也可以直接在运行时设置配置(管理套接字会绕过 Monitor,这与 ceph tell

daemon-type . id injectargs 不同,后者依赖于 Monitor,但不需要您直接登录有问题的主

机)。

6.10 存储容量作为防止数据丢失的安全措施,当 Ceph 存储集群接近其容量上限时,Ceph 将阻止您向 Ceph

OSD 写入或从中读取数据。因此,让生产集群接近其填满比例不是一种好的做法,因为这样会

牺牲高可用性。默认的填满比例设置为 0.95,即容量的 95%。对于所含 OSD 数量较少的测试集

群而言,如此设置是非常激进的。

53 检查归置组状态 SES 6

Page 74: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

提示:增加存储容量在监视集群时,请注意与 nearfull 比例有关的警告。出现该警告表示,如果一个或多

个 OSD 发生故障,某些 OSD 的故障可能会导致服务暂时中断。请考虑添加更多 OSD 以

增加存储容量。

测试集群的一种常见情境是系统管理员从 Ceph 存储集群中删除 Ceph OSD,等待集群重新达到

平衡。然后再删除另一个 Ceph OSD,以此类推,直到集群最终达到填满比例并锁死。我们建

议即使使用测试集群时也进行一定的容量规划。通过规划,您可以预估维持高可用性所需的备

用容量。从理论上讲,您需要规划能够应对一系列 Ceph OSD 发生故障的情况的方案,使集群

无需立即替换这些 Ceph OSD 也可恢复到 active + clean 状态。您可以运行 active +

degraded 状态的集群,但这不适合正常运行状况。

下图展示了一个包含 33 个 Ceph 节点的简化 Ceph 存储集群,其中每个主机有一个 Ceph

OSD,每个 Ceph OSD 从 3 TB 驱动器读取以及向其中写入数据。此示例集群实际的容量上限为

99 TB。 mon osd full ratio 选项设置为 0.95。如果集群的剩余容量降至 5 TB,集群将不

允许客户端读取和写入数据。因此,存储集群的运行容量为 95 TB,而不是 99 TB。

图 6.1︰ CEPH 集群

在这样的集群中,有一个或两个 OSD 发生故障属于正常现象。一种不常发生但合乎常理的情

况是机柜的路由器或电源发生故障,导致多个 OSD(例如 OSD 7-12)同时停用。在这种情况

下,您仍然应该设法使集群保持正常运行并达到 active + clean 状态,即使这意味着需要

立即添加一些主机及额外的 OSD。如果容量使用率过高,您可能不会丢失数据。但是,如果集

群的容量使用率超过填满比例,您虽然解决了故障域内发生的中断问题,却可能会损失数据可

用性。因此,我们建议至少进行大致的容量规划。

54 存储容量 SES 6

Page 75: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

针对您的集群确定以下两个数值:

1. OSD 的数量。

2. 集群的总容量。

如果您将集群的总容量除以集群中的 OSD 数量,将得到集群内单个 OSD 的平均容量。将该数值

与您预期正常运行期间将同时发生故障的 OSD 数量(一个相对较小的数值)相乘。最后,将集

群容量与填满比例相乘得到运行容量上限。然后,减去您预期将发生故障的 OSD 中的数据量,

即可得到一个合理的填满比例。使用更高的 OSD 故障数(一整个机柜的 OSD)重复上述过程,

即可得到一个合理的接近填满比例数值。

以下设置仅在创建集群时才会应用,随后会存储在 OSD 索引中:

[global]

mon osd full ratio = .80

mon osd backfillfull ratio = .75

mon osd nearfull ratio = .70

提示仅在创建集群时才会应用这些设置。此后,需要使用 ceph osd set-nearfull-

ratio 和 ceph osd set-full-ratio 命令在 OSD 索引中更改这些设置。

mon osd full ratio

在将 OSD 视为满之前使用的磁盘空间百分比。默认值为 0.95

mon osd backfillfull ratio

在将 OSD 视为过满而无法回填之前使用的磁盘空间百分比。默认值为 0.90

mon osd nearfull ratio

在将 OSD 视为将满之前使用的磁盘空间百分比。默认值为 0.85

提示:检查 OSD 权重如果某些 OSD 将满,但其他 OSD 的容量充足,则表示将满 OSD 的 CRUSH 权重可能有

问题。

55 存储容量 SES 6

Page 76: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

6.11 监视 OSD 和归置组高可用性和高可靠性要求采用容错方法来管理硬件和软件问题。Ceph 没有单一故障点,可以

在“已降级”模式下处理数据请求。Ceph 的数据归置引入了一个间接层,以确保数据不会与特定

OSD 地址直接绑定。这表示跟踪系统故障原因需要找到属于问题根源的归置组和底层 OSD。

提示:发生故障时的访问如果集群的某个部分发生故障,集群可能会阻止您访问特定对象,但这并不意味着您无

法访问其他对象。遇到故障时,请执行相关步骤来监视 OSD 和归置组。然后开始进行查

错。

Ceph 一般情况下会进行自我修复。但如果问题仍然存在,监视 OSD 和归置组将有助于您找到

问题所在。

6.11.1 监视 OSD

OSD 可能处于在集群内(“in”)状态,也可能处于在集群外(“out”)状态。同时,它也可能处

于启用并运行(“up”)或停用且未运行(“down”)状态。如果某个 OSD 处于“up”状态,则它可

能在集群内(您可以读取和写入数据),也可能在集群外。如果该 OSD 之前在集群内,最近已

移出集群,则 Ceph 会将归置组迁移到其他 OSD。如果某个 OSD 在集群外,CRUSH 将不会为其

指定归置组。如果某个 OSD 处于“down”状态,则它应该也处于“out”状态。

注意:不健康状态如果某个 OSD 处于“down”和“in”状态,则表示存在问题,并且集群将处于不健康状态。

如果您执行 ceph health、 ceph -s 或 ceph -w 等命令,可能会注意到集群并非始终回

显 HEALTH OK。对于 OSD,您应当预期集群在以下情况下不会回显 HEALTH OK:

您尚未启动集群(它不会响应)。

您刚启动或重启动了集群,但它尚未准备就绪,因为系统正在创建归置组,并且 OSD 正在

互联。

56 监视 OSD 和归置组 SES 6

Page 77: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

您刚添加或删除了某个 OSD。

您刚修改了集群索引。

监视 OSD 的一个重要目的是确保当集群已启用且在运行时,集群中的所有 OSD 也已启用且在运

行。要确定是否所有 OSD 都在运行,请执行以下命令:

root # ceph osd stat

x osds: y up, z in; epoch: eNNNN

结果应显示 OSD 总数 (x)、处于“up”状态的 OSD 数量 (y)、处于“in”状态的 OSD 数量 (z),以及索

引版本号 (eNNNN)。如果在集群内(“in”)的 OSD数量大于处于“up”状态的 OSD 数量,请执行

以下命令确定未在运行的 ceph-osd 守护进程:

root # ceph osd tree

#ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF

-1 2.00000 pool openstack

-3 2.00000 rack dell-2950-rack-A

-2 2.00000 host dell-2950-A1

0 ssd 1.00000 osd.0 up 1.00000 1.00000

1 ssd 1.00000 osd.1 down 1.00000 1.00000

如果某个 OSD(例如 ID 为 1 的 OSD)停用,请将其启动:

cephadm@osd > sudo systemctl start [email protected]

有关与已停止或不会重启动的 OSD 相关的问题,请参见第 6.12 节 “OSD 未在运行”。

6.11.2 归置组集

CRUSH 向 OSD 指定归置组时,会查看存储池的副本数量,然后再为 OSD 指定归置组,以便将

每个归置组副本都指定给不同的 OSD。例如,如果存储池需要三个归置组副本,CRUSH 可能会

将这三个副本分别指定给 osd.1、 osd.2 和 osd.3。CRUSH 实际上会寻找一种伪随机归置

方法,这种方法会将您在 CRUSH 索引中设置的故障域纳入考量,因此在大型集群中,您很少会

看到归置组被指定给最邻近的 OSD 的情况。我们将应包含特定归置组的副本的 OSD 集称为在任

集。在某些情况下,在任集中的 OSD 会处于停用状态,或者无法处理要访问归置组中对象的请

求。当以下其中一种情况发生时,可能会出现这些情况:

57 归置组集 SES 6

Page 78: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

您添加或删除了某个 OSD。CRUSH 随后会将归置组重新指定给其他 OSD,因而更改了在

任集的组成部分,导致系统通过“回填”过程迁移数据。

某个 OSD 之前处于“down”状态、之前进行了重启动,而现在正在恢复。

在任集中的某个 OSD 处于“down”状态,或者无法处理请求,并且另一个 OSD 已暂代其

职。

Ceph 使用启用集来处理客户端请求,启用集是实际处理请求的 OSD 集。在大多数情况

下,启用集和在任集几乎完全相同。当两者不同时,可能表示 Ceph 正在迁移数据、某个

OSD 正在恢复,或者集群存在问题(例如,在此类情况下,Ceph 通常会回显 HEALTH

WARN 状态及“stuck stale”讯息)。

要检索归置组列表,请运行以下命令:

cephadm@adm > ;ceph pg dump

要查看哪些 OSD 在给定归置组的在任集或启用集内,请运行以下命令:

cephadm@adm > ceph pg mapPG_NUM

osdmap eNNN pg RAW_PG_NUM (PG_NUM) -> up [0,1,2] acting [0,1,2]

结果应该会显示 OSD 索引版本号 (eNNN)、归置组数量 ( PG_NUM )、启用集(“up”)中的

OSD,以及在任集(“acting”)中的 OSD:

提示:集群问题指示符如果启用集与在任集不一致,则可能表示集群正在自我重新平衡,或者集群可能存在问

题。

6.11.3 建立互联

归置组必须处于“active”及“clean”状态,您才能将数据写入其中。为了让 Ceph 确定某个归置组

的当前状态,该归置组的主 OSD(在任集中的第一个 OSD)会与第二个和第三个 OSD 建立互

联,以便就归置组的当前状态达成一致(假设存储池包含三个归置组副本)。

58 建立互联 SES 6

Page 79: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 6.2︰ 互联纲要

6.11.4 监视归置组状态

如果您执行 ceph health、 ceph -s 或 ceph -w 等命令,可能会注意到集群并非始终回

显 HEALTH OK 讯息。检查 OSD 是否正在运行之后,还应检查归置组状态。

在一些与归置组互联相关的情况下,集群预期将不会回显 HEALTH OK:

您刚创建了存储池,并且归置组尚未互联。

归置组正在恢复。

您刚向集群添加了 OSD,或刚从集群中删除了 OSD。

您刚修改了 CRUSH 索引,并且您的归置组正在迁移。

在不同的归置组副本中存在数据不一致的情况。

Ceph 正在洗刷归置组的副本。

Ceph 的存储容量不足,无法完成回填操作。

如果上述其中一种情况导致 Ceph 回显 HEALTH WARN,请不要惊慌。集群在许多情况下都会

自行恢复。在有些情况下,您可能需要采取措施。监视归置组的一个重要目的是确保当集群已

启用并运行时,所有归置组都处于“active”状态并且最好处于“clean”状态。要查看所有归置组的

状态,请运行以下命令:

59 监视归置组状态 SES 6

Page 80: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > ceph pg stat

x pgs: y active+clean; z bytes data, aa MB used, bb GB / cc GB avail

结果应该会显示归置组总数 (x)、处于特定状态(例如“active+clean”)的归置组数量 (y),以及

存储的数据量 (z)。

除了归置组状态以外,Ceph 还会回显使用的存储容量 (aa)、剩余的存储容量 (bb),以及归置组

的总存储容量。在以下情况下,这些数值可能非常重要:

已达到 near full ratio 或 full ratio。

由于您的 CRUSH 配置中存在错误,您的数据未在集群中分布。

提示:归置组 ID归置组 ID 由存储池编号(并非存储池名称)加一个句点 (.) 和归置组 ID(一个十六进制

数)组成。您可以在 ceph osd lspools 的输出中查看存储池编号及其名称。例如,

默认存储池 rbd 与存储池编号 0 对应。完全限定的归置组 ID 的格式如下:

POOL_NUM.PG_ID

通常显示如下:

0.1f

要检索归置组列表,请运行以下命令:

cephadm@adm > ceph pg dump

您还可以将输出内容设置为 JSON 格式,并将其保存到文件中:

cephadm@adm > ceph pg dump -o FILE_NAME --format=json

要查询特定归置组,请运行以下命令:

cephadm@adm > ceph pg POOL_NUM.PG_ID query

以下列表详细说明了常见的归置组状态。

60 监视归置组状态 SES 6

Page 81: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

CREATING(正在创建)

当您创建存储池时,Ceph 会创建您指定数量的归置组。Ceph 会在创建一个或多个归置

组时回显“creating”。创建归置组之后,属于归置组在任集的各 OSD 将会互联。完成互联

过程时,归置组状态应该为“active+clean”,这表示 Ceph 客户端可以开始向归置组写入数

据。

图 6.3︰ 归置组状态

PEERING(正在互联)

当 Ceph 在对归置组执行互联操作时,会在存储归置组副本的各 OSD 之间就该归置组中

的对象和元数据的状态达成一致。当 Ceph 完成互联过程时,便表示存储归置组的各 OSD

之间就归置组的当前状态达成一致。不过,完成互联过程并不表示每个副本都有最新的内

容。

注意:权威历史在在任集的所有 OSD 都持续进行写入操作之前,Ceph 将不会向客户端确认写入操

作。这样做可确保在上次成功完成互联操作之后,至少有一个在任集成员将拥有每

个确认的写入操作的记录。

通过准确记录每个确认的写入操作,Ceph 可以构建并扩展一个新的权威归置组历

史,即一个完整且完全有序的在任集,如果执行该在任集,会将 OSD 的归置组副本

更新到最新状态。

ACTIVE(工作)

当 Ceph 完成互联过程时,归置组可能会变为“active”状态。“Active”状态表示归置组中的

数据通常可在主归置组和副本中用于读取和写入操作。

CLEAN(正常)

如果归置组处于“clean”状态,则表示主 OSD 和副本 OSD 已成功互联,并且该归置组没有

流浪副本。Ceph 已将归置组中的所有对象复制正确的次数。

DEGRADED(已降级)

61 监视归置组状态 SES 6

Page 82: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

当客户端将对象写入主 OSD 时,该主 OSD 负责将副本写入副本 OSD。主 OSD 将对象写

入存储空间之后,归置组将保持“degraded”状态,直到主 OSD 收到了副本 OSD 发送的

Ceph 已成功创建副本对象的确认讯息。

归置组有可能处于“active+degraded”状态,这是因为即使 OSD 尚未存储所有对象,它也

可能处于“active”状态。如果某个 OSD 变成停用状态,Ceph 会将指定给该 OSD 的每个归

置组都标记为“degraded”。当该 OSD 恢复启用状态后,各 OSD 必须再次互联。不过,如

果某个已降级归置组处于“active”状态,客户端仍然可以将新对象写入该归置组。

如果某个 OSD 处于“down”状态,并且持续保持“degraded”状况,Ceph 可能会将该停用

的 OSD 标记为“out”(表示移出集群),并将停用(“down”)的 OSD 的数据重新映射到另

一个 OSD。从将 OSD 标记为“down”到将其标记为“out”相隔的时间通过 mon osd down

out interval 选项控制,该选项默认设置为 600 秒。

归置组也可能处于“degraded”状态,当 Ceph 找不到应在归置组中的一个或多个对象

时便会发生此情况。虽然您无法读取未找到的对象或向其写入数据,却仍然可以访

问“degraded”状态的归置组中的所有其他对象。

RECOVERING(正在恢复)

Ceph 设计用于在发生硬件和软件问题时进行大规模容错。当 OSD 变成“down”状态时,其

内容可能落后于归置组中其他副本的当前状态。当 OSD 恢复“up”状态时,必须更新归置组

的内容以反映最新状态。在此期间,OSD 可能会显现出“recovering”状态。

恢复并非总是无足轻重的,因为硬件故障可能会导致多个 OSD 发生级联故障。例如,一个

机架或机柜的网络交换机可能会发生故障,这可能会导致一些主机的 OSD 落后于集群的当

前状态。解决故障之后,必须恢复每个 OSD。

Ceph 提供了一些设置,用来平衡新服务请求与恢复数据对象并将归置组恢复到最新状态

的需求之间的资源争用。 osd recovery delay start 设置允许 OSD 在启动恢复过程

之前重启动、重新互联,甚至处理一些重放请求。 osd recovery thread timeout

用于设置线程超时,因为有可能会有多个 OSD 交错发生故障、重启动以及重新互联。 osd

recovery max active 设置用于限制 OSD 将同时处理的恢复请求数,以防止 OSD 无

法处理请求。 osd recovery max chunk 设置用于限制恢复的数据块大小,以防出现

网络拥塞。

BACK FILLING(正在回填)

当新 OSD 加入集群时,CRUSH 会将集群中 OSD 的归置组重新指定给新添加的 OSD。强制

新 OSD 立即接受重新指定的归置组可能会使新 OSD 过载。向 OSD 回填归置组可让此过程

在后台开始。回填完成后,新 OSD 将在准备就绪时开始处理请求。

62 监视归置组状态 SES 6

Page 83: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

在执行回填操作期间,系统可能会显示以下其中一种状态:“backfill_wait”表示回填操作

待处理,但尚未执行;“backfill”表示正在进行回填操作;“backfill_too_full”表示已请求进

行回填操作,但由于存储容量不足而无法完成。如果某个归置组无法回填,则可能会被视

为“incomplete”。

Ceph 提供了一些设置来管理与向某个 OSD(尤其是新 OSD)重新指定归置组有关的负

载。默认情况下, osd max backfills 将向或从一个 OSD 同时进行的最大回填数设

置为 10。 backfill full ratio 允许 OSD 在接近其填满比例(默认为 90%)时拒

绝回填请求,并使用 ceph osd set-backfillfull-ratio 命令进行更改。如果某

个 OSD 拒绝回填请求, osd backfill retry interval 可让 OSD 重试请求(默认

在 10 秒后)。OSD 还可以设置 osd backfill scan min 和 osd backfill scan

max,以管理扫描间隔(默认值分别为 64 和 512)。

REMAPPED(已重新映射)

当用于处理归置组的在任集发生变化时,数据会从旧在任集迁移到新在任集。新主 OSD 可

能需要一段时间才能处理请求。因此,新主 OSD 可能会要求旧主 OSD 继续处理请求,直

到归置组迁移完成。数据迁移完成时,映射将使用新在任集的主 OSD。

STALE(过时)

尽管 Ceph 使用检测信号来确保主机和守护进程正在运行,但 ceph-osd 守护进程也

可能会卡住,无法及时报告统计数据(例如,当发生暂时的网络故障时)。默认情况

下,OSD 守护进程每半秒钟 (0.5) 报告一次其归置组、引导及故障统计数据,这个频率高

于检测信号阈值。如果某个归置组在任集的主 OSD 未能向 Monitor 报告,或者其他 OSD

已将该主 OSD 报告为“down”,则 Monitor 会将该归置组标记为“stale”。

当您启动集群后,集群常常会在互联过程完成之前显示为“stale”状态。集群运行一段时间

之后,如果归置组显示为“stale”状态,则表示这些归置组的主 OSD 处于停用状态,或者未

向 Monitor 报告归置组统计数据。

6.11.5 识别存在问题的归置组

如前文所述,状态不是“active+clean”的归置组未必存在问题。一般而言,当归置组卡住

后,Ceph 的自我修复功能可能就无法起作用。卡住的状态包括:

63 识别存在问题的归置组 SES 6

Page 84: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

Unclean(不正常):归置组包含未复制所需次数的对象。这些归置组应该正在恢复。

Inactive(不活跃):归置组无法处理读取或写入操作,因为它们正在等待某个具有最新数

据的 OSD 恢复启用状态。

Stale(过时):归置组处于未知状态,因为托管它们的 OSD 已有一段时间未向 Monitor

集群报告(通过 mon osd report timeout 选项配置)。

要识别卡住的归置组,请运行以下命令:

cephadm@adm > ceph pg dump_stuck [unclean|inactive|stale|undersized|degraded]

6.11.6 查找对象位置

要在 Ceph 对象存储中存储对象数据,Ceph 客户端需要设置对象名称并指定相关的存储

池。Ceph 客户端会检索最新的集群索引,并且 CRUSH 算法会计算如何将对象映射到归置组,

然后计算如何以动态方式将该归置组指定给 OSD。要查找对象位置,您只需知道对象名称和存

储池名称。例如:

cephadm@adm > ceph osd map POOL_NAME OBJECT_NAME [NAMESPACE]

例 6.1︰ 查找对象

作为示范,我们来创建一个对象。在命令行上使用 rados put 命令指定对象名称“test-

object-1”、包含一些对象数据的示例文件“testfile.txt”的路径,以及存储池名称“data”。

cephadm@adm > rados put test-object-1 testfile.txt --pool=data

要确认 Ceph 对象存储是否已存储对象,请运行以下命令:

cephadm@adm > rados -p data ls

现在,我们来确定对象位置。Ceph 将会输出对象的位置:

cephadm@adm > ceph osd map data test-object-1

osdmap e537 pool 'data' (0) object 'test-object-1' -> pg 0.d1743484 \

(0.4) -> up ([1,0], p0) acting ([1,0], p0)

64 查找对象位置 SES 6

Page 85: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

要移除示例对象,只需使用 rados rm 命令将其删除:

cephadm@adm > rados rm test-object-1 --pool=data

6.12 OSD 未在运行在正常情况下,只需重启动 ceph-osd 守护进程便可让 OSD 重新加入集群并恢复。

6.12.1 OSD 不启动

如果您启动集群后,某个 OSD 不启动,请检查以下几项:

配置文件:如果您无法通过执行全新安装让 OSD 保持运行状态,请检查配置文件以确保其

符合标准(例如,使用 host 而非 hostname)。

检查路径:检查您的配置中的路径以及数据和日志的实际路径。如果您将 OSD 数据与日志

数据分开存放,并且您的配置文件或实际装入项中存在错误,则可能无法启动 OSD。如果

要在块设备上存储日志,则需要将日志磁盘分区,并向每个 OSD 指定一个分区。

检查最大线程计数:如果您的某个节点具有大量 OSD,您可能会达到默认的最大线程数

(通常是 32,000),在恢复期间更是如此。您可以使用 sysctl 命令来增加线程数,看

看将最大线程数增至允许的最大可能线程数(例如 4194303)是否会有所帮助:

root # sysctl -w kernel.pid_max=4194303

如果通过增加最大线程计数能够解决问题,您可以在 /etc/sysctl.conf 文件中指定

kernel.pid_max 设置,以便永久使用该配置。

kernel.pid_max = 4194303

6.12.2 OSD 发生故障

当 ceph-osd 进程非正常终止时,Monitor 将通过正常运行的 ceph-osd 守护进程了解故障

情况,并使用 ceph health 命令报告该信息:

65 OSD 未在运行 SES 6

Page 86: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > ceph health

HEALTH_WARN 1/3 in osds are down

具体而言,当有 ceph-osd 进程标记为“in”和“down”时,您将收到警告。您可以通过以下命令

确定已停用的 ceph-osd:

cephadm@adm > ceph health detail

HEALTH_WARN 1/3 in osds are down

osd.0 is down since epoch 23, last address 192.168.106.220:6800/11080

如果发生阻止 ceph-osd 正常运行或重启动的磁盘故障或其他故障, /var/log/ceph 下该

OSD 的日志文件中应该会出现相应的错误讯息。

如果由于检测信号故障导致守护进程停止,底层内核文件系统可能无法响应。请检查 dmesg 命

令的输出内容,确定是磁盘错误还是其他内核错误。

6.12.3 无可用磁盘空间

Ceph 会阻止您向填满的 OSD 写入数据,以防数据丢失。在正常运行的集群中,当集群接近其

填满比例时,您会收到警告。 mon osd full ratio 选项默认设为容量的 0.95 (95%),达

到该比例时,集群会阻止客户端写入数据。 mon osd backfillfull ratio 默认设为容量

的 0.90 (90%),达到该比例时,集群会阻止回填过程开始。OSD nearfull ratio 默认设为容量的

0.85 (85%),达到该比例时,集群会生成健康状况警告。您可以使用以下命令更改“nearfull”的

值:

cephadm@adm > ceph osd set-nearfull-ratio 0.0 to 1.0

在小型集群上测试 Ceph 如何处理 OSD 故障时,通常会出现集群填满问题。如果有一个节点的

集群数据百分比很高,集群很容易就会立即超过“nearfull”和“full”比例。如果您在小型集群上

测试 Ceph 如何应对 OSD 故障,则应留出充足的可用磁盘空间,并考虑使用以下命令暂时降低

OSD full ratio、OSD backfillfull ratio 和 OSD nearfull ratio:

cephadm@adm > ceph osd set-nearfull-ratio 0.0 to 1.0

cephadm@adm > ceph osd set-full-ratio 0.0 to 1.0

cephadm@adm > ceph osd set-backfillfull-ratio 0.0 to 1.0

可通过 ceph health 命令报告填满的 Ceph OSD:

66 无可用磁盘空间 SES 6

Page 87: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > ceph health

HEALTH_WARN 1 nearfull osd(s)

或者

cephadm@adm > ceph health detail

HEALTH_ERR 1 full osd(s); 1 backfillfull osd(s); 1 nearfull osd(s)

osd.3 is full at 97%

osd.4 is backfill full at 91%

osd.2 is near full at 87%

处理填满的集群的最佳方法是添加新的 Ceph OSD,以便让集群将数据重新分布到新的可用存

储。

如果 OSD 因填满而无法启动,您可以通过删除已满 OSD 中的一些归置组目录来删除一些数据。

重要:删除归置组目录如果您选择删除某个填满的 OSD 上的归置组目录,请不要删除其他填满的 OSD 上的同一

归置组目录,否则可能会出现数据丢失。您必须至少在一个 OSD 上保留至少一个数据副

本。

67 无可用磁盘空间 SES 6

Page 88: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

7 监控和警告

在 SUSE Enterprise Storage 6 中,DeepSea 不再在 Salt Master 上部署监控和警告堆栈。用户必

须定义用于 Prometheus 和 Alertmanager 的 Prometheus 角色,以及用于 Grafana 的 Grafana

角色。当为多个节点分配 Prometheus 或 Grafana 角色后,即部署好了高度可用的设置。

Prometheus 是监控和警告工具箱。

Alertmanager 用于处理 Prometheus 服务器发送的警告。

Grafana 是虚拟化和警告软件。

prometheus-node_exporter 是所有 Salt Minion 上运行的服务。

DeepSea 会自动设置 Prometheus 配置和抓取目标(导出守护进程)。它还会部署默认警告列

表,例如 health error、 10% OSDs down 或 pgs inactive。

7.1 Pillar 变量Salt Pillar 是用于向 Minion 提供信息和配置值的键值存储区。它可用于所有 Minion,每个

Minion 的内容都不同。Salt Pillar 会预填充默认值,您可以通过以下两种不同的方式进行自定

义:

/srv/pillar/ceph/stack/global.yml:可更改所有节点的 Pillar 值。

/srv/pillar/ceph/stack/CLUSTER_NAME/minions/HOST:可更改特定 Minion

的配置。

下面的 Pillar 变量默认可用于所有节点:

monitoring:

alertmanager:

config: salt://path/to/config

additional_flags: ''

grafana:

ssl_cert: False # self-signed certs are created by default

68 Pillar 变量 SES 6

Page 89: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

ssl_key: False # self-signed certs are created by default

prometheus:

# pass additional configration to prometheus

additional_flags: ''

alert_relabel_config: []

rule_files: []

# per exporter config variables

scrape_interval:

ceph: 10

node_exporter: 10

prometheus: 10

grafana: 10

relabel_config:

alertmanager: []

ceph: []

node_exporter: []

prometheus: []

grafana: []

metric_relabel_config:

ceph: []

node_exporter: []

prometheus: []

grafana: []

target_partition:

ceph: '1/1'

node_exporter: '1/1'

prometheus: '1/1'

grafana: '1/1'

7.2 Grafana所有流量均通过 Grafana 加密。您可以提供自己的 SSL 证书,或者创建一个自我签名证书。

Grafana 使用下列变量:

ssl_cert

ssl_key

69 Grafana SES 6

Page 90: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

有关提供自己的 SSL 证书的详细信息,请参见第 22.9.1.2 节 “CA 签名的证书”;若要创建自己的

证书,请参见第 22.9.1.1 节 “自我签名证书”。

7.3 Prometheus基于导出程序的配置,可通过 Pillar 传递。这些组映射到提供数据的导出程序。节点导出程

序存在于所有节点上,Ceph 由 Ceph Manager 节点导出,Prometheus 和 Grafana 由相应的

Prometheus 和 Grafana 节点导出。

Prometheus 使用下列变量:

scrape_interval:更改抓取间隔,即抓取导出程序的频率。

target_partition:当部署了多个 Prometheus 实例时,分割抓取目标,让某些

Prometheus 实例仅抓取一部分导出程序实例。

relabel_config:在抓取目标前动态重写目标的标签集。每个抓取配置可以配置多个

重新添加标签步骤。

metrics_relabel_config:在引入前的最后一步时应用于示例。

7.4 AlertmanagerAlertmanager 处理 Prometheus 服务器发送的警告。它负责重复信息删除、分组,并将它们路

由到正确的接收器。它还负责禁止警告。通过命令行标志和用于定义禁止规则、通知路由及通

知接收器的配置文件来配置 Alertmanager。

7.4.1 配置文件

每个部署的 Alertmanager 配置都是不同的。因此,DeepSea 不会提供任何相关的默认值。您

需要提供自己的 alertmanager.yml 配置文件。默认情况下, alertmanager 包会安装 /

etc/prometheus/alertmanager.yml 配置文件,该文件可作为示例配置使用。如果您更

喜欢通过 DeepSea 来管理您的 Alertmanager 配置,请将下面的键添加到 Pillar 中,例如,添加

到 /srv/pillar/ceph/stack/ceph/minions/YOUR_SALT_MASTER_MINION_ID.sls

文件中:

70 Prometheus SES 6

Page 91: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

有关完整的 Alertmanager 配置文件示例,请参见附录 B “SUSE Enterprise Storage 6 的默认警

告”。

monitoring:

alertmanager_config:

/path/to/your/alertmanager/config.yml

Alertmanager 配置文件采用 YAML 格式撰写。它遵循下面所述的模式。方括号中的参数是可选

参数。对于非列表参数,将使用默认值。模式中将使用下列通用占位符:

DURATION

与正则表达式 [0-9]+(ms|[smhdwy]) 匹配的时长

LABELNAME

与正则表达式 [a-zA-Z_][a-zA-Z0-9_]* 匹配的字符串

LABELVALUE

采用 Unicode 字符的字符串。

FILEPATH

当前工作目录中的有效路径。

BOOLEAN

接受“true”或“false”值的布尔。

STRING

常规字符串。

SECRET

属于机密的常规字符串,例如密码。

TMPL_STRING

使模板在使用前显示为展开状态的字符串。

TMPL_SECRET

使模板在使用前显示为展开状态的机密字符串。

例 7.1︰ 全局配置

global: 配置中的参数在所有其他配置环境中均有效。它们还可用作其他配置段落的默

认值。

71 配置文件 SES 6

Page 92: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

global:

# the time after which an alert is declared resolved if it has not been

updated

[ resolve_timeout: DURATION | default = 5m ]

# The default SMTP From header field.

[ smtp_from: TMPL_STRING ]

# The default SMTP smarthost used for sending emails, including port

number.

# Port number usually is 25, or 587 for SMTP over TLS

# (sometimes referred to as STARTTLS).

# Example: smtp.example.org:587

[ smtp_smarthost: STRING ]

# The default host name to identify to the SMTP server.

[ smtp_hello: STRING | default = "localhost" ]

[ smtp_auth_username: STRING ]

# SMTP Auth using LOGIN and PLAIN.

[ smtp_auth_password: SECRET ]

# SMTP Auth using PLAIN.

[ smtp_auth_identity: STRING ]

# SMTP Auth using CRAM-MD5.

[ smtp_auth_secret: SECRET ]

# The default SMTP TLS requirement.

[ smtp_require_tls: BOOL | default = true ]

# The API URL to use for Slack notifications.

[ slack_api_url: STRING ]

[ victorops_api_key: STRING ]

[ victorops_api_url: STRING | default = "https://victorops.example.com/

integrations/alert/" ]

[ pagerduty_url: STRING | default = "https://pagerduty.example.com/v2/

enqueue" ]

[ opsgenie_api_key: STRING ]

[ opsgenie_api_url: STRING | default = "https://opsgenie.example.com/" ]

[ hipchat_api_url: STRING | default = "https://hipchat.example.com/" ]

[ hipchat_auth_token: SECRET ]

[ wechat_api_url: STRING | default = "https://wechat.example.com/cgi-

bin/" ]

72 配置文件 SES 6

Page 93: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

[ wechat_api_secret: SECRET ]

[ wechat_api_corp_id: STRING ]

# The default HTTP client configuration

[ http_config: HTTP_CONFIG ]

# Files from which custom notification template definitions are read.

# The last component may use a wildcard matcher, e.g. 'templates/*.tmpl'.

templates:

[ - FILEPATH ... ]

# The root node of the routing tree.

route: ROUTE

# A list of notification receivers.

receivers:

- RECEIVER ...

# A list of inhibition rules.

inhibit_rules:

[ - INHIBIT_RULE ... ]

例 7.2︰ ROUTE

ROUTE 块定义路由树中的节点。对于未指定的参数,会继承其父节点的设置。每条警告

都会进入路由树中所配置的顶层路由,该层路由需要匹配所有警告。然后,警告会遍历子

节点。如果 continue 选项设置为“false”,会在找到第一个匹配的子节点后停止遍历。

如果匹配的节点上将该选项设置为“true”,警告将继续匹配后续同级节点。如果警告未匹

配节点的任何子节点,将根据当前节点的配置参数处理警告。

[ receiver: STRING ]

[ group_by: '[' LABELNAME, ... ']' ]

# If an alert should continue matching subsequent sibling nodes.

[ continue: BOOLEAN | default = false ]

# A set of equality matchers an alert has to fulfill to match a node.

match:

[ LABELNAME: LABELVALUE, ... ]

73 配置文件 SES 6

Page 94: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

# A set of regex-matchers an alert has to fulfill to match a node.

match_re:

[ LABELNAME: REGEX, ... ]

# Time to wait before sending a notification for a group of alerts.

[ group_wait: DURATION | default = 30s ]

# Time to wait before sending a notification about new alerts

# added to a group of alerts for which an initial notification has

# already been sent.

[ group_interval: DURATION | default = 5m ]

# Time to wait before re-sending a notification

[ repeat_interval: DURATION | default = 4h ]

# Possible child routes.

routes:

[ - ROUTE ... ]

例 7.3︰ INHIBIT_RULE

如果存在匹配一组匹配程序的来源警告,禁止规则会将匹配另一组匹配程序的目标警告静

音。对于 equal 列表中的标签名称,两个警告需要共用相同的标签值。

这样两个警告便可匹配,从而自行禁止。请勿撰写警告与来源和目标均匹配的禁止规则。

# Matchers that need to be fulfilled for the alerts to be muted.

target_match:

[ LABELNAME: LABELVALUE, ... ]

target_match_re:

[ LABELNAME: REGEX, ... ]

# Matchers for which at least one alert needs to exist so that the

# inhibition occurs.

source_match:

[ LABELNAME: LABELVALUE, ... ]

source_match_re:

[ LABELNAME: REGEX, ... ]

74 配置文件 SES 6

Page 95: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

# Labels with an equal value in the source and target

# alert for the inhibition to take effect.

[ equal: '[' LABELNAME, ... ']' ]

例 7.4︰ HTTP_CONFIG

HTTP_CONFIG 配置接收器用于与 API 服务通讯的 HTTP 客户端。

请注意, basic_auth、 bearer_token 和 bearer_token_file 选项是互斥的。

# Sets the 'Authorization' header with the user name and password.

basic_auth:

[ username: STRING ]

[ password: SECRET ]

# Sets the 'Authorization' header with the bearer token.

[ bearer_token: SECRET ]

# Sets the 'Authorization' header with the bearer token read from a file.

[ bearer_token_file: FILEPATH ]

# TLS settings.

tls_config:

# CA certificate to validate the server certificate with.

[ ca_file: FILEPATH ]

# Certificate and key files for client cert authentication to the server.

[ cert_file: FILEPATH ]

[ key_file: FILEPATH ]

# ServerName extension to indicate the name of the server.

# http://tools.ietf.org/html/rfc4366#section-3.1

[ server_name: STRING ]

# Disable validation of the server certificate.

[ insecure_skip_verify: BOOLEAN | default = false]

# Optional proxy URL.

[ proxy_url: STRING ]

例 7.5︰ RECEIVER

接收器是一个或多个通知集成的命名配置。

75 配置文件 SES 6

Page 96: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

我们建议不要添加新接收器,而应使用 Webhook 接收器实施自定义通知集成(请参

见例 7.15 “WEBHOOK_CONFIG”)。

# The unique name of the receiver.

name: STRING

# Configurations for several notification integrations.

email_configs:

[ - EMAIL_CONFIG, ... ]

hipchat_configs:

[ - HIPCHAT_CONFIG, ... ]

pagerduty_configs:

[ - PAGERDUTY_CONFIG, ... ]

pushover_configs:

[ - PUSHOVER_CONFIG, ... ]

slack_configs:

[ - SLACK_CONFIG, ... ]

opsgenie_configs:

[ - OPSGENIE_CONFIG, ... ]

webhook_configs:

[ - WEBHOOK_CONFIG, ... ]

victorops_configs:

[ - VICTOROPS_CONFIG, ... ]

wechat_configs:

[ - WECHAT_CONFIG, ... ]

例 7.6︰ EMAIL_CONFIG

# Whether to notify about resolved alerts.

[ send_resolved: BOOLEAN | default = false ]

# The email address to send notifications to.

to: TMPL_STRING

# The sender address.

[ from: TMPL_STRING | default = global.smtp_from ]

# The SMTP host through which emails are sent.

[ smarthost: STRING | default = global.smtp_smarthost ]

76 配置文件 SES 6

Page 97: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

# The host name to identify to the SMTP server.

[ hello: STRING | default = global.smtp_hello ]

# SMTP authentication details.

[ auth_username: STRING | default = global.smtp_auth_username ]

[ auth_password: SECRET | default = global.smtp_auth_password ]

[ auth_secret: SECRET | default = global.smtp_auth_secret ]

[ auth_identity: STRING | default = global.smtp_auth_identity ]

# The SMTP TLS requirement.

[ require_tls: BOOL | default = global.smtp_require_tls ]

# The HTML body of the email notification.

[ html: TMPL_STRING | default = '{{ template "email.default.html" . }}' ]

# The text body of the email notification.

[ text: TMPL_STRING ]

# Further headers email header key/value pairs. Overrides any headers

# previously set by the notification implementation.

[ headers: { STRING: TMPL_STRING, ... } ]

例 7.7︰ HIPCHAT_CONFIG

# Whether or not to notify about resolved alerts.

[ send_resolved: BOOLEAN | default = false ]

# The HipChat Room ID.

room_id: TMPL_STRING

# The authentication token.

[ auth_token: SECRET | default = global.hipchat_auth_token ]

# The URL to send API requests to.

[ api_url: STRING | default = global.hipchat_api_url ]

# A label to be shown in addition to the sender's name.

[ from: TMPL_STRING | default = '{{ template "hipchat.default.from" . }}' ]

# The message body.

[ message: TMPL_STRING | default = '{{ template

"hipchat.default.message" . }}' ]

77 配置文件 SES 6

Page 98: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

# Whether this message will trigger a user notification.

[ notify: BOOLEAN | default = false ]

# Determines how the message is treated by the alertmanager and rendered inside

HipChat. Valid values are 'text' and 'html'.

[ message_format: STRING | default = 'text' ]

# Background color for message.

[ color: TMPL_STRING | default = '{{ if eq .Status

"firing" }}red{{ else }}green{{ end }}' ]

# Configuration of the HTTP client.

[ http_config: HTTP_CONFIG | default = global.http_config ]

例 7.8︰ PAGERDUTY_CONFIG

routing_key 和 service_key 选项是互斥的。

# Whether or not to notify about resolved alerts.

[ send_resolved: BOOLEAN | default = true ]

# The PagerDuty integration key (when using 'Events API v2').

routing_key: TMPL_SECRET

# The PagerDuty integration key (when using 'Prometheus').

service_key: TMPL_SECRET

# The URL to send API requests to.

[ url: STRING | default = global.pagerduty_url ]

# The client identification of the Alertmanager.

[ client: TMPL_STRING | default = '{{ template

"pagerduty.default.client" . }}' ]

# A backlink to the notification sender.

[ client_url: TMPL_STRING | default = '{{ template

"pagerduty.default.clientURL" . }}' ]

# The incident description.

[ description: TMPL_STRING | default = '{{ template

"pagerduty.default.description" .}}' ]

# Severity of the incident.

[ severity: TMPL_STRING | default = 'error' ]

78 配置文件 SES 6

Page 99: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

# A set of arbitrary key/value pairs that provide further details.

[ details: { STRING: TMPL_STRING, ... } | default = {

firing: '{{ template

"pagerduty.default.instances" .Alerts.Firing }}'

resolved: '{{ template

"pagerduty.default.instances" .Alerts.Resolved }}'

num_firing: '{{ .Alerts.Firing | len }}'

num_resolved: '{{ .Alerts.Resolved | len }}'

} ]

# The HTTP client's configuration.

[ http_config: HTTP_CONFIG | default = global.http_config ]

例 7.9︰ PUSHOVER_CONFIG

# Whether or not to notify about resolved alerts.

[ send_resolved: BOOLEAN | default = true ]

# The recipient user key.

user_key: SECRET

# Registered application’s API token.

token: SECRET

# Notification title.

[ title: TMPL_STRING | default = '{{ template "pushover.default.title" . }}' ]

# Notification message.

[ message: TMPL_STRING | default = '{{ template

"pushover.default.message" . }}' ]

# A supplementary URL displayed together with the message.

[ url: TMPL_STRING | default = '{{ template "pushover.default.url" . }}' ]

# Priority.

[ priority: TMPL_STRING | default = '{{ if eq .Status

"firing" }}2{{ else }}0{{ end }}' ]

79 配置文件 SES 6

Page 100: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

# How often the Pushover servers will send the same notification (at least 30

seconds).

[ retry: DURATION | default = 1m ]

# How long your notification will continue to be retried (unless the user

# acknowledges the notification).

[ expire: DURATION | default = 1h ]

# Configuration of the HTTP client.

[ http_config: HTTP_CONFIG | default = global.http_config ]

例 7.10︰ SLACK_CONFIG

# Whether or not to notify about resolved alerts.

[ send_resolved: BOOLEAN | default = false ]

# The Slack webhook URL.

[ api_url: SECRET | default = global.slack_api_url ]

# The channel or user to send notifications to.

channel: TMPL_STRING

# API request data as defined by the Slack webhook API.

[ icon_emoji: TMPL_STRING ]

[ icon_url: TMPL_STRING ]

[ link_names: BOOLEAN | default = false ]

[ username: TMPL_STRING | default = '{{ template

"slack.default.username" . }}' ]

# The following parameters define the attachment.

actions:

[ ACTION_CONFIG ... ]

[ color: TMPL_STRING | default = '{{ if eq .Status

"firing" }}danger{{ else }}good{{ end }}' ]

[ fallback: TMPL_STRING | default = '{{ template

"slack.default.fallback" . }}' ]

fields:

[ FIELD_CONFIG ... ]

[ footer: TMPL_STRING | default = '{{ template "slack.default.footer" . }}' ]

[ pretext: TMPL_STRING | default = '{{ template "slack.default.pretext" . }}' ]

80 配置文件 SES 6

Page 101: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

[ short_fields: BOOLEAN | default = false ]

[ text: TMPL_STRING | default = '{{ template "slack.default.text" . }}' ]

[ title: TMPL_STRING | default = '{{ template "slack.default.title" . }}' ]

[ title_link: TMPL_STRING | default = '{{ template

"slack.default.titlelink" . }}' ]

[ image_url: TMPL_STRING ]

[ thumb_url: TMPL_STRING ]

# Configuration of the HTTP client.

[ http_config: HTTP_CONFIG | default = global.http_config ]

例 7.11︰ SLACK_CONFIG 的 ACTION_CONFIG

# Provide a button to tell Slack you want to render a button.

type: TMPL_STRING

# Label for the button.

text: TMPL_STRING

# http or https URL to deliver users to. If you specify invalid URLs, the

message will be posted with no button.

url: TMPL_STRING

# If set to 'primary', the button will be green, indicating the best forward

action to take

# 'danger' turns the button red, indicating a destructive action.

[ style: TMPL_STRING [ default = '' ]

例 7.12︰ SLACK_CONFIG 的 FIELD_CONFIG

# A bold heading without markup above the value text.

title: TMPL_STRING

# The text of the field. It can span across several lines.

value: TMPL_STRING

# A flag indicating if value is short enough to be displayed together with other

values.

[ short: BOOLEAN | default = slack_config.short_fields ]

例 7.13︰ OPSGENIE_CONFIG

# Whether or not to notify about resolved alerts.

81 配置文件 SES 6

Page 102: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

[ send_resolved: BOOLEAN | default = true ]

# The API key to use with the OpsGenie API.

[ api_key: SECRET | default = global.opsgenie_api_key ]

# The host to send OpsGenie API requests to.

[ api_url: STRING | default = global.opsgenie_api_url ]

# Alert text (maximum is 130 characters).

[ message: TMPL_STRING ]

# A description of the incident.

[ description: TMPL_STRING | default = '{{ template

"opsgenie.default.description" . }}' ]

# A backlink to the sender.

[ source: TMPL_STRING | default = '{{ template "opsgenie.default.source" . }}' ]

# A set of arbitrary key/value pairs that provide further detail.

[ details: { STRING: TMPL_STRING, ... } ]

# Comma separated list of team responsible for notifications.

[ teams: TMPL_STRING ]

# Comma separated list of tags attached to the notifications.

[ tags: TMPL_STRING ]

# Additional alert note.

[ note: TMPL_STRING ]

# Priority level of alert, one of P1, P2, P3, P4, and P5.

[ priority: TMPL_STRING ]

# Configuration of the HTTP.

[ http_config: HTTP_CONFIG | default = global.http_config ]

例 7.14︰ VICTOROPS_CONFIG

# Whether or not to notify about resolved alerts.

82 配置文件 SES 6

Page 103: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

[ send_resolved: BOOLEAN | default = true ]

# The API key for talking to the VictorOps API.

[ api_key: SECRET | default = global.victorops_api_key ]

# The VictorOps API URL.

[ api_url: STRING | default = global.victorops_api_url ]

# A key used to map the alert to a team.

routing_key: TMPL_STRING

# Describes the behavior of the alert (one of 'CRITICAL', 'WARNING', 'INFO').

[ message_type: TMPL_STRING | default = 'CRITICAL' ]

# Summary of the alerted problem.

[ entity_display_name: TMPL_STRING | default = '{{ template

"victorops.default.entity_display_name" . }}' ]

# Long explanation of the alerted problem.

[ state_message: TMPL_STRING | default = '{{ template

"victorops.default.state_message" . }}' ]

# The monitoring tool the state message is from.

[ monitoring_tool: TMPL_STRING | default = '{{ template

"victorops.default.monitoring_tool" . }}' ]

# Configuration of the HTTP client.

[ http_config: HTTP_CONFIG | default = global.http_config ]

例 7.15︰ WEBHOOK_CONFIG

您可以使用 Webhook 接收器来配置通用接收器。

# Whether or not to notify about resolved alerts.

[ send_resolved: BOOLEAN | default = true ]

# The endpoint for sending HTTP POST requests.

url: STRING

83 配置文件 SES 6

Page 104: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

# Configuration of the HTTP client.

[ http_config: HTTP_CONFIG | default = global.http_config ]

Alertmanager 会发送以下 JSON 格式的 HTTP POST 请求:

{

"version": "4",

"groupKey": STRING, // identifycation of the group of alerts (to

deduplicate)

"status": "<resolved|firing>",

"receiver": STRING,

"groupLabels": OBJECT,

"commonLabels": OBJECT,

"commonAnnotations": OBJECT,

"externalURL": STRING, // backlink to Alertmanager.

"alerts": [

{

"status": "<resolved|firing>",

"labels": OBJECT,

"annotations": OBJECT,

"startsAt": "<rfc3339>",

"endsAt": "<rfc3339>",

"generatorURL": STRING // identifies the entity that caused the alert

},

...

]

}

Webhook 接收器允许与以下通知机制集成:

DingTalk (https://github.com/timonwong/prometheus-webhook-dingtalk)

IRC Bot (https://github.com/multimfi/bot)

JIRAlert (https://github.com/free/jiralert)

Phabricator / Maniphest (https://github.com/knyar/phalerts)

prom2teams:将通知转发给 Microsoft Teams (https://github.com/idealista/

prom2teams)

84 配置文件 SES 6

Page 105: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

SMS:支持多个提供者 (https://github.com/messagebird/sachet)

Telegram bot (https://github.com/inCaller/prometheus_bot)

SNMP 陷阱 (https://github.com/SUSE/prometheus-webhook-snmp)

例 7.16︰ WECHAT_CONFIG

# Whether or not to notify about resolved alerts.

[ send_resolved: BOOLEAN | default = false ]

# The API key to use for the WeChat API.

[ api_secret: SECRET | default = global.wechat_api_secret ]

# The WeChat API URL.

[ api_url: STRING | default = global.wechat_api_url ]

# The corp id used to authenticate.

[ corp_id: STRING | default = global.wechat_api_corp_id ]

# API request data as defined by the WeChat API.

[ message: TMPL_STRING | default = '{{ template "wechat.default.message" . }}' ]

[ agent_id: STRING | default = '{{ template "wechat.default.agent_id" . }}' ]

[ to_user: STRING | default = '{{ template "wechat.default.to_user" . }}' ]

[ to_party: STRING | default = '{{ template "wechat.default.to_party" . }}' ]

[ to_tag: STRING | default = '{{ template "wechat.default.to_tag" . }}' ]

7.4.2 自定义警告

您可以定义自定义警告条件,以将通知发送到外部服务。Prometheus 使用自己的表达式语言来

定义自定义警告。下面是一个含警告的规则示例:

groups:

- name: example

rules:

# alert on high deviation from average PG count

- alert: high pg count deviation

expr: abs(((ceph_osd_pgs > 0) - on (job) group_left avg(ceph_osd_pgs > 0) by

(job)) / on (job) group_left avg(ceph_osd_pgs > 0) by (job)) > 0.35

85 自定义警告 SES 6

Page 106: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

for: 5m

labels:

severity: warning

type: ses_default

annotations:

description: >

OSD {{ $labels.osd }} deviates by more then 30% from average PG count

for 子句(可选)指定 Prometheus 从第一次遇到新表达式输出矢量元素到将警告视为触发需

等待的时间。在此情况下,Prometheus 将检查警告是否持续保持活跃状态 5 分钟,然后再触发

警告。待处理的元素视为处于活跃状态,但尚未触发。

labels 子句指定要附加至警告的一组额外的标签。冲突的标签将会被重写。可以为标签设置

模板(有关设置模板的更多详细信息,请参见第 7.4.2.1 节 “模板”)。

annotations 子句指定信息性标签。您可以使用注释存储额外的信息,例如警告描述或

Runbook 链接。可以为注释设置模板(有关设置模板的更多详细信息,请参见第 7.4.2.1 节 “模

板”)。

要向 SUSE Enterprise Storage 6 添加自定义警告,请

将包含自定义警告的 YAML 文件放在 /etc/prometheus/alerts 目录中

或者

在 Pillar 中的 monitoring:custom_alerts 键下提供自定义警告文件

的路径列表。DeepSea 阶段 2 或 salt SALT_MASTER state.apply

ceph.monitoring.prometheus 命令会将您的警告文件添加到正确的位置。

例 7.17︰ 向 SUSE ENTERPRISE STORAGE 添加自定义警告

包含自定义警告的文件存放在 Salt Master 上的 /root/my_alerts/

my_alerts.yml 中。如果您将

monitoring:

custom_alerts:

- /root/my_alerts/my_alerts.yml

86 自定义警告 SES 6

Page 107: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

添加到 /srv/pillar/ceph/cluster/YOUR_SALT_MASTER_MINION_ID.sls

文件中,DeepSea 将会创建 /etc/prometheus/alerts/my_alerts.yml 文件

并重启动 Prometheus。

7.4.2.1 模板

您可以使用模板来提供标签和注释值。 $labels 变量包含警告实例的标签键/值对,而

$value 则存放警告实例的计算值。

下面的示例将插入一个触发的元素标签和值:

{{ $labels.LABELNAME }}

{{ $value }}

7.4.2.2 运行时检查警告

如果您需要确认哪些警告处于活跃状态,可以采用以下几种方式:

导航到 Prometheus 的警告选项卡。该选项卡会显示所定义警告处于活跃状态的确切标签

集。Prometheus 还会存储待处理和触发警告的合成时间系列。它们的格式如下:

ALERTS{alertname="ALERT_NAME", alertstate="pending|

firing", ADDITIONAL_ALERT_LABELS}

如果警告处于活跃状态(待处理或触发),则示例值为 1。当警告处于非活跃状态时,该

系列会标记为“stale”。

在 Prometheus Web 界面(URL 地址为 http:// PROMETHEUS_HOST_IP :9090/alerts)

中,检查警告及其状态(非活跃、待处理或触发)。

在 Alertmanager Web 界面(URL 地址为 http:// PROMETHEUS_HOST_IP :9093/#/

alerts)中,检查警告并根据需要将其禁止。

87 自定义警告 SES 6

Page 108: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

7.4.3 SNMP 陷阱接收器

如果您想通过 SNMP 陷阱接收有关 Prometheus 警告的通知,可以通过 DeepSea 安装

Prometheus Alertmanager SNMP 陷阱接收器。要实现此目的,您需要在 Pillar 中的

monitoring:alertmanager_receiver_snmp:enabled 键下启用相应设置。接收器的配

置必须在 monitoring:alertmanager_receiver_snmp:config 键下设置。DeepSea 阶

段 2 或 salt SALT_MASTER state.apply ceph.monitoring.alertmanager 命令将

会在相应位置安装并配置接收器。

例 7.18︰ SNMP 陷阱配置

monitoring:

alertmanager:

receiver:

snmp:

enabled: True

config:

host: localhost

port: 9099

snmp_host: snmp.foo-bar.com

snmp_community: private

metrics: True

请参见 https://github.com/SUSE/prometheus-webhook-snmp#global-configuration-

file 上的接收器手册,以了解有关配置选项的更多详细信息。

88 SNMP 陷阱接收器 SES 6

Page 109: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

8 使用 cephx 进行身份验证

为了识别客户端并防范中间人攻击,Ceph 提供了 cephx 身份验证系统。在此环境中,客户

端表示人类用户(例如 admin 用户)或 Ceph 相关的服务/守护进程(例如 OSD、Monitor 或对

象网关)。

注意cephx 协议不会处理 TLS/SSL 之类的传输中数据加密。

8.1 身份验证体系结构cephx 使用共享秘密密钥进行身份验证,这意味着客户端和 Ceph Monitor 都有客户端秘密密

钥的副本。身份验证协议可让双方互相证明各自持有密钥的副本,且无需真正透露密钥。这样

就实现了相互身份验证,即,集群可确保用户拥有秘密密钥,而用户亦可确保集群持有秘密密

钥的副本。

Ceph 的一项重要可伸缩性功能就是可免于通过集中式界面与 Ceph 对象存储交互。这意味

着,Ceph 客户端可直接与 OSD 交互。为了保护数据,Ceph 提供了 cephx 身份验证系统来对

Ceph 客户端进行身份验证。

每个 Monitor 都可对客户端进行身份验证并分发密钥,因此,在使用 cephx 时,不会出现单

一故障点或瓶颈。Monitor 会返回身份验证数据结构,其中包含获取 Ceph 服务时要用到的会

话密钥。此会话密钥本身已使用客户端的永久秘密密钥进行了加密,因此,只有客户端才能向

Ceph Monitor 请求服务。然后,客户端使用会话密钥向 Monitor 请求所需的服务,Monitor 会

为客户端提供一个票据,用于向实际处理数据的 OSD 验证客户端身份。Ceph Monitor 和 OSD

共享一个机密,因此,客户端使用 Monitor 提供的票据向集群中的任何 OSD 或元数据服务器表

明身份。 cephx 票据有失效时间,因此,攻击者无法使用已失效的票据或以不当方式获取的会

话密钥。

要使用 cephx,管理员必须先设置客户端/用户。在下图中, client.admin 用户从命

令行调用 ceph auth get-or-create-key 来生成用户名和秘密密钥。Ceph 的 auth

子系统会生成该用户名和密钥,在 Monitor 中存储一个副本,并将该用户的机密传回给

client.admin 用户。这意味着,客户端和 Monitor 共享一个秘密密钥。

89 身份验证体系结构 SES 6

Page 110: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 8.1︰ cephx 的基本身份验证

要在 Monitor 中进行身份验证,客户端需将用户名传递给 Monitor。Monitor 会生成一个会话密

钥,并使用与该用户名关联的秘密密钥来加密该会话密钥,然后将加密的票据传回给客户端。

之后,客户端会使用共享的秘密密钥解密数据,以获取会话密钥。会话密钥可识别当前会话的

用户。然后,客户端请求与该用户相关、由会话密钥签名的票据。Monitor 会生成一个票据,使

用用户的秘密密钥进行加密,然后将其传回给客户端。客户端解密该票据,并使用它对发往整

个集群中的 OSD 和元数据服务器的请求进行签名。

图 8.2︰ cephx 身份验证

cephx 协议会对客户端计算机与 Ceph 服务器之间进行的通讯进行身份验证。完成初始身份验

证后,将使用 Monitor、OSD 和元数据服务器可通过共享密钥进行校验的票据,来对客户端与

服务器之间发送的每条讯息进行签名。

90 身份验证体系结构 SES 6

Page 111: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 8.3︰ cephx 身份验证 - MDS 和 OSD

重要这种身份验证提供的保护仅限于 Ceph 客户端与 Ceph 集群主机之间,身份验证不会扩展

到 Ceph 客户端以外。如果用户从远程主机访问 Ceph 客户端,则不会对用户主机与客户

端主机之间的连接应用 Ceph 身份验证。

8.2 密钥管理本节介绍 Ceph 客户端用户,以及如何在 Ceph 存储集群中对其进行身份验证和授权。用户是指

使用 Ceph 客户端来与 Ceph 存储集群守护进程交互的个人或系统参与者(例如应用)。

Ceph 在启用身份验证和授权(默认启用)的情况下运行时,您必须指定一个用户名,以及包含

所指定用户的秘密密钥的密钥环(通常通过命令行指定)。如果您未指定用户名,Ceph 将使用

client.admin 作为默认用户名。如果您未指定密钥环,Ceph 将通过 Ceph 配置文件中的密

钥环设置来查找密钥环。例如,如果您在未指定用户名或密钥环的情况下执行 ceph health

命令,Ceph 将按如下所示解释该命令:

91 密钥管理 SES 6

Page 112: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > ceph -n client.admin --keyring=/etc/ceph/ceph.client.admin.keyring

health

或者,您可以使用 CEPH_ARGS 环境变量来避免重复输入用户名和机密。

8.2.1 背景信息

无论 Ceph 客户端是何类型(例如,块设备、对象存储、文件系统、本机 API),Ceph 都会

在存储池中将所有数据存储为对象。Ceph 用户需要拥有存储池访问权限才能读取和写入数据。

此外,Ceph 用户必须拥有执行权限才能使用 Ceph 的管理命令。以下概念可帮助您理解 Ceph

用户管理。

8.2.1.1 用户

用户是指个人或系统参与者(例如应用)。通过创建用户,可以控制谁(或哪个参与者)能够

访问您的 Ceph 存储集群、其存储池及存储池中的数据。

Ceph 使用多种类型的用户。进行用户管理时,将始终使用 client 类型。Ceph 通过句点 (.)

分隔格式来标识用户,该格式由用户类型和用户 ID 组成。例如, TYPE.ID、 client.admin

或 client.user1。区分用户类型的原因在于,Ceph Monitor、OSD 和元数据服务器也使用

cephx 协议,但它们并非客户端。区分用户类型有助于将客户端用户与其他用户区分开来,从而

简化访问控制、用户监视和可追溯性。

有时,Ceph 的用户类型可能会令人混淆,因为根据命令行用法的不同,Ceph 命令行允许您指

定具有类型的用户或不具有类型的用户。如果您指定 --user 或 --id,则可以省略类型。因

此,可将 client.user1 简单地输入为 user1。如果您指定的是 --name 或 -n,则必须

指定类型和名称,例如 client.user1。作为最佳实践,我们建议尽可能使用类型和名称。

注意Ceph 存储集群用户与 Ceph 对象存储用户或 Ceph 文件系统用户均不同。Ceph 对象网关

使用 Ceph 存储集群用户在网关守护进程与存储集群之间通讯,但网关有自己的用户管理

功能来管理最终用户。Ceph 文件系统使用 POSIX 语义。与它关联的用户空间与 Ceph 存

储集群用户不同。

92 背景信息 SES 6

Page 113: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

8.2.1.2 授权和用户权限

Ceph 使用“用户权限”(caps) 术语来描述对已经过身份验证的用户授权,允许其运用

Monitor、OSD 和元数据服务器的功能。用户权限还可限制对存储池或存储池名称空间内的数据

的访问。Ceph 管理用户可在创建或更新用户时设置用户的权限。

用户权限语法的格式如下:

daemon-type 'allow capability' [...]

下面是每个服务类型的用户权限列表:

Monitor 用户权限

包括 r、 w、 x 和 allow profile cap。

mon 'allow rwx'

mon 'allow profile osd'

OSD 用户权限

包括 r、 w、 x、 class-read、 class-write 和 profile osd。此外,OSD 用户

权限还允许进行存储池和名称空间设置。

osd 'allow capability' [pool=poolname] [namespace=namespace-name]

MDS 用户权限

只需要 allow,或留空。

mds 'allow'

以下各项描述了每项用户权限:

allow

需先于守护进程的访问设置指定。仅对 MDS 表示 rw。

r

向用户授予读取权限。访问 Monitor 以检索 CRUSH 索引时需具有此用户权限。

w

向用户授予针对对象的写入权限。

93 背景信息 SES 6

Page 114: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

x

授予用户调用类方法(包括读取和写入)的能力,以及在 Monitor 中执行 auth 操作的能

力。

class-read

授予用户调用类读取方法的能力。 x 的子集。

class-write

授予用户调用类写入方法的能力。 x 的子集。

*

授予用户对特定守护进程/存储池的读取、写入和执行权限,以及执行管理命令的能力。

profile osd

授予用户以某个 OSD 身份连接到其他 OSD 或 Monitor 的权限。授予 OSD 权限,使 OSD

能够处理复制检测信号流量和状态报告。

profile mds

授予用户以某个 MDS 身份连接到其他 MDS 或 Monitor 的权限。

profile bootstrap-osd

授予用户引导 OSD 的权限。授权给部署工具,使其在引导 OSD 时有权添加密钥。

profile bootstrap-mds

授予用户引导元数据服务器的权限。授权给部署工具,使其在引导元数据服务器时有权添

加密钥。

8.2.1.3 存储池

存储池是指用户在其中存储数据的逻辑分区。在 Ceph 部署中,常见的做法是为相似类型的数据

创建一个存储池作为逻辑分区。例如,将 Ceph 部署为 OpenStack 的后端时,典型的部署方式

是为卷、映像、备份和虚拟机以及用户(如 client.glance 或 client.cinder)创建相

应的存储池。

8.2.2 管理用户

用户管理功能可让 Ceph 集群管理员能够直接在 Ceph 集群中创建、更新和删除用户。

94 管理用户 SES 6

Page 115: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

在 Ceph 集群中创建或删除用户时,可能需要将密钥分发到客户端,以便将密钥添加到密钥环。

有关详细信息,请参见第 8.2.3 节 “密钥环管理”。

8.2.2.1 列出用户

要列出集群中的用户,请执行以下命令:

cephadm@adm > ceph auth list

Ceph 将列出您集群中的所有用户。例如,在包含两个节点的集群中, ceph auth list 输出

类似下方所示:

installed auth entries:

osd.0

key: AQCvCbtToC6MDhAATtuT70Sl+DymPCfDSsyV4w==

caps: [mon] allow profile osd

caps: [osd] allow *

osd.1

key: AQC4CbtTCFJBChAAVq5spj0ff4eHZICxIOVZeA==

caps: [mon] allow profile osd

caps: [osd] allow *

client.admin

key: AQBHCbtT6APDHhAA5W00cBchwkQjh3dkKsyPjw==

caps: [mds] allow

caps: [mon] allow *

caps: [osd] allow *

client.bootstrap-mds

key: AQBICbtTOK9uGBAAdbe5zcIGHZL3T/u2g6EBww==

caps: [mon] allow profile bootstrap-mds

client.bootstrap-osd

key: AQBHCbtT4GxqORAADE5u7RkpCN/oo4e5W0uBtw==

caps: [mon] allow profile bootstrap-osd

95 管理用户 SES 6

Page 116: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

注意:TYPE.ID 表示法请注意,针对用户采用 TYPE.ID 表示法,例如, osd.0 指定 osd 类型的用户,其 ID

为 0。 client.admin 是 client 类型的用户,其 ID 为 admin。另请注意,每个项

包含一个 key: 值项,以及一个或多个 caps: 项。

可以结合使用 -o 文件名选项和 ceph auth list 将输出保存到某个文件。

8.2.2.2 获取有关用户的信息

要检索特定的用户、密钥和用户权限,请执行以下命令:

cephadm@adm > ceph auth get TYPE.ID

例如:

cephadm@adm > ceph auth get client.admin

exported keyring for client.admin

[client.admin]

key = AQA19uZUqIwkHxAAFuUwvq0eJD4S173oFRxe0g==

caps mds = "allow"

caps mon = "allow *"

caps osd = "allow *"

开发人员也可以执行以下命令:

cephadm@adm > ceph auth export TYPE.ID

auth export 命令与 auth get 相同,不过它还会列显内部身份验证 ID。

8.2.2.3 添加用户

添加一个用户会创建用户名 ( TYPE.ID )、秘密密钥,以及包含在命令中用于创建该用户的所有

用户权限。

用户可使用其密钥向 Ceph 存储集群进行身份验证。用户的用户权限授予该用户在 Ceph

Monitor (mon)、Ceph OSD (osd) 或 Ceph 元数据服务器 (mds) 上进行读取、写入或执行的能

力。

96 管理用户 SES 6

Page 117: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

可以使用以下几个命令来添加用户:

ceph auth add

此命令是添加用户的规范方法。它会创建用户、生成密钥,并添加所有指定的用户权限。

ceph auth get-or-create

此命令往往是创建用户的最简便方式,因为它会返回包含用户名(在方括号中)和密钥的

密钥文件格式。如果该用户已存在,此命令只以密钥文件格式返回用户名和密钥。您可以

使用 -o 文件名选项将输出保存到某个文件。

ceph auth get-or-create-key

此命令是创建用户并仅返回用户密钥的简便方式。对于只需要密钥的客户端(例如

libvirt),此命令非常有用。如果该用户已存在,此命令只返回密钥。您可以使用 -o

文件名选项将输出保存到某个文件。

创建客户端用户时,可以创建不具有用户权限的用户。不具有用户权限的用户可以进行身份验

证,但不能执行其他操作。此类客户端无法从 Monitor 检索集群索引。但是,如果您希望稍后

再添加用户权限,可以使用 ceph auth caps 命令创建一个不具有用户权限的用户。

典型的用户至少对 Ceph Monitor 具有读取功能,并对 Ceph OSD 具有读取和写入功能。此外,

用户的 OSD 权限通常限制为只能访问特定的存储池。

cephadm@adm > ceph auth add client.john mon 'allow r' osd \

'allow rw pool=liverpool'

cephadm@adm > ceph auth get-or-create client.paul mon 'allow r' osd \

'allow rw pool=liverpool'

cephadm@adm > ceph auth get-or-create client.george mon 'allow r' osd \

'allow rw pool=liverpool' -o george.keyring

cephadm@adm > ceph auth get-or-create-key client.ringo mon 'allow r' osd \

'allow rw pool=liverpool' -o ringo.key

重要如果您为某个用户提供了对 OSD 的用户权限,但未限制只能访问特定存储池,则该用户

将有权访问集群中的所有存储池。

97 管理用户 SES 6

Page 118: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

8.2.2.4 修改用户权限

使用 ceph auth caps 命令可以指定用户以及更改该用户的权限。设置新用户权限会重写当

前的用户权限。要查看当前用户权限,请运行 ceph auth get USERTYPE.USERID。要添

加用户权限,使用以下格式时还需要指定现有用户权限:

cephadm@adm > ceph auth caps USERTYPE.USERID daemon 'allow [r|w|x|*|...] \

[pool=pool-name] [namespace=namespace-name]' [daemon 'allow [r|w|x|*|...] \

[pool=pool-name] [namespace=namespace-name]']

例如:

cephadm@adm > ceph auth get client.john

cephadm@adm > ceph auth caps client.john mon 'allow r' osd 'allow rw

pool=prague'

cephadm@adm > ceph auth caps client.paul mon 'allow rw' osd 'allow r

pool=prague'

cephadm@adm > ceph auth caps client.brian-manager mon 'allow *' osd 'allow *'

要删除某个用户权限,可重设置该用户权限。如果希望用户无权访问以前设置的特定守护进

程,请指定一个空字符串:

cephadm@adm > ceph auth caps client.ringo mon ' ' osd ' '

8.2.2.5 删除用户

要删除用户,请使用 ceph auth del:

cephadm@adm > ceph auth del TYPE.ID

其中, TYPE 是 client、 osd、 mon 或 mds 之一, ID 是用户名或守护进程的 ID。

如果您创建了仅对不再存在的存储池具有许可权限的用户,则应该考虑也删除那些用户。

8.2.2.6 列显用户的密钥

要将用户的身份验证密钥列显到标准输出,请执行以下命令:

98 管理用户 SES 6

Page 119: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > ceph auth print-key TYPE.ID

其中, TYPE 是 client、 osd、 mon 或 mds 之一, ID 是用户名或守护进程的 ID。

需要在客户端软件(例如 libvirt)中填充某个用户的密钥时,列显用户的密钥非常有帮助,

如以下示例所示:

root # mount -t ceph host:/ mount_point \

-o name=client.user,secret=`ceph auth print-key client.user`

8.2.2.7 导入用户

要导入一个或多个用户,请使用 ceph auth import 并指定密钥环:

cephadm@adm > ceph auth import -i /etc/ceph/ceph.keyring

注意Ceph 存储集群将添加新用户及其密钥和用户权限,并更新现有用户及其密钥和用户权

限。

8.2.3 密钥环管理

当您通过 Ceph 客户端访问 Ceph 时,该客户端会查找本地密钥环。默认情况下,Ceph 会使用

以下四个密钥环名称预设置密钥环设置,因此,除非您要覆盖默认值,否则无需在 Ceph 配置文

件中设置这些名称:

/etc/ceph/cluster.name.keyring

/etc/ceph/cluster.keyring

/etc/ceph/keyring

/etc/ceph/keyring.bin

cluster 元变量是根据 Ceph 配置文件名称定义的 Ceph 集群名称。 ceph.conf 表示集群名

称为 ceph,因此密钥环名称为 ceph.keyring。 name 元变量是用户类型和用户 ID(例如

client.admin),因此密钥环名称为 ceph.client.admin.keyring。

99 密钥环管理 SES 6

Page 120: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

创建用户(例如 client.ringo)之后,必须获取密钥并将其添加到 Ceph 客户端上的密钥

环,以使该用户能够访问 Ceph 存储集群。

第 8.2 节 “密钥管理”详细介绍了如何直接在 Ceph 存储集群中列出、获取、添加、修改和删除用

户。不过,Ceph 还提供了 ceph-authtool 实用程序,可让您从 Ceph 客户端管理密钥环。

8.2.3.1 创建密钥环

当您执行第 8.2 节 “密钥管理”中的过程创建用户时,需要向 Ceph 客户端提供用户密钥,以使客

户端能检索指定用户的密钥,并向 Ceph 存储集群进行身份验证。Ceph 客户端将访问钥环,以

查找用户名并检索用户的密钥:

cephadm@adm > ceph-authtool --create-keyring /path/to/keyring

创建包含多个用户的密钥环时,我们建议使用集群名称(例如 cluster .keyring)作为密

钥环文件名,并将其保存在 /etc/ceph 目录中,如此,您无需在 Ceph 配置文件的本地副

本中指定文件名,密钥环配置默认设置就会选取正确的文件名。例如,可执行以下命令创建

ceph.keyring:

cephadm@adm > ceph-authtool -C /etc/ceph/ceph.keyring

创建包含单个用户的密钥环时,我们建议使用集群名称、用户类型和用户名,

并将其保存在 /etc/ceph 目录中。例如,为 client.admin 用户创建

ceph.client.admin.keyring。

8.2.3.2 将用户添加到密钥环

将某个用户添加到 Ceph 存储集群时(请参见第 8.2.2.3 节 “添加用户”),可以检索该用户、密

钥和用户权限,并将该用户保存到密钥环。

如果您只想对每个密钥环使用一个用户,可以结合 -o 选项使用 ceph auth get 命令以密钥

环文件格式保存输出。例如,要为 client.admin 用户创建密钥环,请执行以下命令:

cephadm@adm > ceph auth get client.admin -o /etc/ceph/ceph.client.admin.keyring

想要将用户导入到密钥环时,可以使用 ceph-authtool 指定目标密钥环和源密钥环:

100 密钥环管理 SES 6

Page 121: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > ceph-authtool /etc/ceph/ceph.keyring \

--import-keyring /etc/ceph/ceph.client.admin.keyring

8.2.3.3 创建用户

Ceph 提供 ceph auth add 命令用于直接在 Ceph 存储集群中创建用户。但是,您也可以直

接在 Ceph 客户端密钥环中创建用户、密钥和用户权限。然后,可将用户导入到 Ceph 存储集

群:

cephadm@adm > ceph-authtool -n client.ringo --cap osd 'allow rwx' \

--cap mon 'allow rwx' /etc/ceph/ceph.keyring

您也可以在创建密钥环的同时将新用户添加到该密钥环:

cephadm@adm > ceph-authtool -C /etc/ceph/ceph.keyring -n client.ringo \

--cap osd 'allow rwx' --cap mon 'allow rwx' --gen-key

在前面的方案中,新用户 client.ringo 仅存放在密钥环中。要将该新用户添加到 Ceph 存储

集群,仍必须手动添加:

cephadm@adm > ceph auth add client.ringo -i /etc/ceph/ceph.keyring

8.2.3.4 修改用户

要修改密钥环中某条用户记录的用户权限,请指定该密钥环和用户,然后指定用户权限:

cephadm@adm > ceph-authtool /etc/ceph/ceph.keyring -n client.ringo \

--cap osd 'allow rwx' --cap mon 'allow rwx'

要在 Ceph 集群环境中更新已修改的用户,必须将密钥环中的更改导入到 Ceph 集群中的用户

项:

cephadm@adm > ceph auth import -i /etc/ceph/ceph.keyring

请参见第 8.2.2.7 节 “导入用户”,了解有关根据密钥环更新 Ceph 存储集群用户的详细信息。

101 密钥环管理 SES 6

Page 122: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

8.2.4 命令行用法

ceph 命令支持以下与用户名和机密操作相关的选项:

--id 或 --user

Ceph 使用类型和 ID(类型 . ID,例如 client.admin 或 client.user1)来标

识用户。使用 id、 name 和 -n 选项可以指定用户名的 ID 部分(例如 admin 或

user1)。可以使用 --id 指定用户,并省略类型。例如,要指定用户 client.foo,请输入

以下命令:

cephadm@adm > ceph --id foo --keyring /path/to/keyring health

cephadm@adm > ceph --user foo --keyring /path/to/keyring health

--name 或 -n

Ceph 使用类型和 ID(类型 . ID,例如 client.admin 或 client.user1)来标识用

户。使用 --name 和 -n 选项可以指定完全限定的用户名。必须指定用户类型(通常是

client)和用户 ID:

cephadm@adm > ceph --name client.foo --keyring /path/to/keyring health

cephadm@adm > ceph -n client.foo --keyring /path/to/keyring health

--keyring

包含一个或多个用户名和机密的密钥环的路径。 --secret 选项提供相同的功能,但它不

适用于对象网关,该网关将 --secret 用于其他目的。可以使用 ceph auth get-or-

create 检索密钥环并将其存储在本地。这是首选的做法,因为无需切换密钥环路径就能

切换用户名:

cephadm@adm > rbd map --id foo --keyring /path/to/keyring mypool/myimage

102 命令行用法 SES 6

Page 123: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

9 存储的数据管理

CRUSH 算法通过计算数据存储位置来确定如何存储和检索数据。使用 CRUSH,Ceph 客户端

无需通过中心服务器或中介程序,即可直接与 OSD 通讯。借助算法确定的数据存储和检索方

法,Ceph 可避免单一故障点、性能瓶颈和可伸缩性物理限制。

CRUSH 需要获取集群的索引,它使用 CRUSH 索引以伪随机的方式在 OSD 中存储和检索数据,

并以一致的方式在整个集群中分布数据。

CRUSH 索引包含一个 OSD 列表、一个用于将设备聚合到物理位置的“存储桶”列表,以及一个

告知 CRUSH 应如何在 Ceph 集群存储池中复制数据的规则列表。通过反映安装的底层物理组

织,CRUSH 可对相关设备故障的潜在根源建模,从而解决故障的根源。典型的根源包括物理接

近、共用电源和共用网络。通过将这些信息编码到集群索引中,CRUSH 归置策略可将对象副本

分隔在不同的故障域中,同时维持所需的分布方式。例如,为了消除可能的并发故障,可能需

要确保数据副本位于使用不同机架、机柜、电源、控制器和/或物理位置的设备上。

部署 Ceph 集群后,将会生成默认的 CRUSH 索引。这种模式适合 Ceph 沙箱环境。但是,在

部署大规模的数据集群时,强烈建议您考虑创建自定义 CRUSH 索引,因为这样做有助于管理

Ceph 集群、提高性能并确保数据安全。

例如,如果某个 OSD 停机,而您需要使用现场支持或更换硬件,则 CRUSH 索引可帮助您定位

到发生 OSD 故障的主机所在的物理数据中心、机房、设备排和机柜。

同样,CRUSH 可以帮助您更快地确定故障。例如,如果特定机柜中的所有 OSD 同时停机,故障

可能是由某个网络交换机或者机柜或网络交换机的电源所致,而不是发生在 OSD 自身上。

当与故障主机关联的归置组(请参见第 9.4 节 “置放群组”)处于降级状态时,自定义 CRUSH 索

引还可帮助您确定 Ceph 存储数据冗余副本的物理位置。

CRUSH 索引包括三个主要部分。

设备包括与 ceph-osd 守护进程对应的任何对象存储设备。

存储桶由存储位置(例如设备排、机柜、主机等)及为其指定的权重的分层聚合组成。

规则组由存储桶选择方式组成。

103 SES 6

Page 124: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

9.1 设备为了将归置组映射到 OSD,CRUSH 索引需要 OSD 设备(OSD 守护进程的名称)的列表。设备

列表显示在 CRUSH 索引的最前面。

#devices

device NUM osd.OSD_NAME class CLASS_NAME

例如:

#devices

device 0 osd.0 class hdd

device 1 osd.1 class ssd

device 2 osd.2 class nvme

device 3 osd.3class ssd

一般而言,一个 OSD 守护进程映射到一个磁盘。

9.1.1 设备类型

Ceph 的优势之一是 CRUSH 索引能够灵活控制数据归置。这也是集群最难管理的环节之一。设

备类型可自动对 CRUSH 索引进行最常见的更改,而这些在以前都必须由管理员手动进行。

9.1.1.1 CRUSH 管理问题

Ceph 集群常由多种存储设备构建而成:HDD、SSD、NVMe,甚至是以上这些类型的混合。我

们将这些不同的存储设备类型称为设备类型,以避免与 CRUSH 桶的类型属性(例如 host、rack

和 row,请参见第 9.2 节 “存储桶”了解更多详细信息)产生混淆。受 SSD 支持的 Ceph OSD 比

受旋转磁盘支持的 OSD 速度快得多,因此更适合特定工作负载。借助 Ceph,您可轻松为不同

数据集或工作负载创建 RADOS 存储池,以及指定不同的 CRUSH 规则来控制这些存储池的数据

归置。

104 设备 SES 6

Page 125: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 9.1︰ 具有混合设备类型的 OSD

不过,通过设置 CRUSH 规则将数据仅归置到特定类型的设备这个过程十分枯燥。规则是针对

CRUSH 层次结构运作的,但如果将某些设备混合到同一主机或机柜中(如上面的层次结构示例

所示),则这些设备默认会混合在一起并显示在层次结构的同一子树中。要手动将它们分隔到

单独的树中,需要针对先前版本的 SUSE Enterprise Storage 中的每个设备类型,为每个中间节

点创建多个版本。

9.1.1.2 设备类型

Ceph 提供了一个较佳的解决方案,就是为每个 OSD 添加一个名为设备类型的属性。

默认情况下,OSD 会根据 Linux 内核所公开的硬件属性,自动将自己的设备类型设置

为“hdd”、“ssd”或“nvme”。 ceph osd tree 命令输出的新列中会报告这些设备类型:

cephadm@adm > ceph osd tree

ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF

-1 83.17899 root default

-4 23.86200 host cpach

2 hdd 1.81898 osd.2 up 1.00000 1.00000

3 hdd 1.81898 osd.3 up 1.00000 1.00000

4 hdd 1.81898 osd.4 up 1.00000 1.00000

5 hdd 1.81898 osd.5 up 1.00000 1.00000

6 hdd 1.81898 osd.6 up 1.00000 1.00000

7 hdd 1.81898 osd.7 up 1.00000 1.00000

8 hdd 1.81898 osd.8 up 1.00000 1.00000

15 hdd 1.81898 osd.15 up 1.00000 1.00000

105 设备类型 SES 6

Page 126: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

10 nvme 0.93100 osd.10 up 1.00000 1.00000

0 ssd 0.93100 osd.0 up 1.00000 1.00000

9 ssd 0.93100 osd.9 up 1.00000 1.00000

如果设备类型自动检测失败(例如由于未通过 /sys/block 正确向设备驱动程序公开设备的相

关信息而导致失败),您可以使用命令行调整设备类型:

cephadm@adm > ceph osd crush rm-device-class osd.2 osd.3

done removing class of osd(s): 2,3

cephadm@adm > ceph osd crush set-device-class ssd osd.2 osd.3

set osd(s) 2,3 to class 'ssd'

9.1.1.3 CRUSH 归置规则

CRUSH 规则可限制对特定设备类型执行归置操作。例如,您可以通过运行以下命令来创建仅将

数据分布在 SSD 磁盘上的“fast”副本存储池:

cephadm@adm > ceph osd crush rule create-

replicated RULE_NAME ROOT FAILURE_DOMAIN_TYPE DEVICE_CLASS

例如:

cephadm@adm > ceph osd crush rule create-replicated fast default host ssd

创建名为“fast_pool”的存储池并将其分配给“fast”规则:

cephadm@adm > ceph osd pool create fast_pool 128 128 replicated fast

创建纠删码规则的过程略有不同。首先,创建包含所需设备类型对应属性的纠删码配置。然

后,在创建纠删码存储池时使用该配置:

cephadm@adm > ceph osd erasure-code-profile set myprofile \

k=4 m=2 crush-device-class=ssd crush-failure-domain=host

cephadm@adm > ceph osd pool create mypool 64 erasure myprofile

为应对您需要手动编辑 CRUSH 索引来自定义规则的情况,该语法已经过扩展,允许指定设备类

型。例如,上述命令生成的 CRUSH 规则如下所示:

rule ecpool {

106 设备类型 SES 6

Page 127: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

id 2

type erasure

min_size 3

max_size 6

step set_chooseleaf_tries 5

step set_choose_tries 100

step take default class ssd

step chooseleaf indep 0 type host

step emit

}

此处的重要差别是“take”命令包含额外的“class 类型名称 ”后缀。

9.1.1.4 其他命令

要列出 CRUSH 索引中使用的设备类型,请运行以下命令:

cephadm@adm > ceph osd crush class ls

[

"hdd",

"ssd"

]

要列出现有的 CRUSH 规则,请运行以下命令:

cephadm@adm > ceph osd crush rule ls

replicated_rule

fast

要查看名为“fast”的 CRUSH 规则的详细信息,请运行以下命令:

cephadm@adm > ceph osd crush rule dump fast

{

"rule_id": 1,

"rule_name": "fast",

"ruleset": 1,

"type": 1,

"min_size": 1,

"max_size": 10,

107 设备类型 SES 6

Page 128: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

"steps": [

{

"op": "take",

"item": -21,

"item_name": "default~ssd"

},

{

"op": "chooseleaf_firstn",

"num": 0,

"type": "host"

},

{

"op": "emit"

}

]

}

要列出属于“ssd”类型的 OSD,请运行以下命令:

cephadm@adm > ceph osd crush class ls-osd ssd

0

1

9.1.1.5 从旧版 SSD 规则迁移到设备类型

在早于版本 5 的 SUSE Enterprise Storage 中,要写入适用于设备的规则,您需要手动编辑

CRUSH 索引并为每个具体的设备类型(例如 SSD)维护并行的层次结构。自 SUSE Enterprise

Storage 5 起,设备类型特性透明地实现了这一目的。

您可以使用 crushtool 命令将旧版规则和层次结构转换为基于类型的新版规则。系统提供以

下几种转换类型:

crushtool --reclassify-root 根名称 设备类型

此命令会获取根名称下的层次结构中的所有内容,并将通过

take ROOT_NAME

引用该根的所有规则调整为

108 设备类型 SES 6

Page 129: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

take ROOT_NAME class DEVICE_CLASS

它会对存储桶重新编号,以便为指定类型的“shadow tree”使用旧 ID。因此,数据不会发

生移动。

例 9.1︰ crushtool --reclassify-root

假设有以下现有规则:

rule replicated_ruleset {

id 0

type replicated

min_size 1

max_size 10

step take default

step chooseleaf firstn 0 type rack

step emit

}

如果您将根“default”重新分类为“hdd”类型,规则将变为

rule replicated_ruleset {

id 0

type replicated

min_size 1

max_size 10

step take default class hdd

step chooseleaf firstn 0 type rack

step emit

}

crushtool --set-subtree-class 存储桶名称 设备类型

此方法会将根目录为存储桶名称的子树中的每个设备标记为指定的设备类型。

--set-subtree-class 通常与 --reclassify-root 选项结合使用,以确保该根中

的所有设备均标为正确的类型。不过,其中一些设备可能特意使用了不同的类型,因此您

不需要重新对它们进行标记。在此类情况下,请勿使用 --set-subtree-class 选项。

请记住,这样的重新映射并不完美,因为之前的规则是跨多个类型的设备分发的,而调整

后的规则将仅映射到指定设备类型的设备。

109 设备类型 SES 6

Page 130: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

crushtool --reclassify-bucket 匹配模式 设备类型 默认模式

此方法允许将特定于类型的并行层次结构与常规层次结构合并。例如,许多用户会有类似

以下的 CRUSH 索引:

例 9.2︰ crushtool --reclassify-bucket

host node1 {

id -2 # do not change unnecessarily

# weight 109.152

alg straw

hash 0 # rjenkins1

item osd.0 weight 9.096

item osd.1 weight 9.096

item osd.2 weight 9.096

item osd.3 weight 9.096

item osd.4 weight 9.096

item osd.5 weight 9.096

[...]

}

host node1-ssd {

id -10 # do not change unnecessarily

# weight 2.000

alg straw

hash 0 # rjenkins1

item osd.80 weight 2.000

[...]

}

root default {

id -1 # do not change unnecessarily

alg straw

hash 0 # rjenkins1

item node1 weight 110.967

[...]

}

root ssd {

id -18 # do not change unnecessarily

110 设备类型 SES 6

Page 131: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

# weight 16.000

alg straw

hash 0 # rjenkins1

item node1-ssd weight 2.000

[...]

}

此函数会将与给定模式相匹配的每个存储桶重新分类。模式的格式可能为 %后缀或前

缀%。在上面的示例中,您需要使用 %-ssd 模式。对于每个匹配的存储桶,与“%”通配

符相匹配的名称的其余部分指定了基本存储桶。所匹配存储桶中的所有设备都会标记为指

定的设备类型,随后会移至基本存储桶中。如果基本存储桶不存在(例如,如果“node12-

ssd”存在,但“node12”不存在),则系统会创建基本存储桶,并将其关联到指定的默认父

存储桶下。系统会为新的阴影存储桶保留旧的存储桶 ID,以防数据移动。系统会对包含引

用旧存储桶的 take 步骤的规则进行调整。

crushtool --reclassify-bucket 存储桶名称 设备类型 基本存储桶

您可以使用不包含通配符的 --reclassify-bucket 选项来映射单个存储桶。例如,在

上面的示例中,我们希望将“ssd”存储桶映射到默认存储桶。

用于转换由上述片段组成的索引的最后一个命令将如下所示:

cephadm@adm > ceph osd getcrushmap -o original

cephadm@adm > crushtool -i original --reclassify \

--set-subtree-class default hdd \

--reclassify-root default hdd \

--reclassify-bucket %-ssd ssd default \

--reclassify-bucket ssd ssd default \

-o adjusted

要确认转换是否正确,可以使用 --compare 选项。该选项会测试大量对 CRUSH 索引的

输入,并比较是否会产生相同的结果。这些输入通过适用于 --test 的相同选项来控制。

对于上面的示例,命令将如下所示:

cephadm@adm > crushtool -i original --compare adjusted

rule 0 had 0/10240 mismatched mappings (0)

rule 1 had 0/10240 mismatched mappings (0)

maps appear equivalent

111 设备类型 SES 6

Page 132: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

提示如果存在差异,括号中将会显示重新映射的输入比率。

如果您对调整后的 CRUSH 索引满意,便可将其应用于集群:

cephadm@adm > ceph osd setcrushmap -i adjusted

9.1.1.6 更多信息

有关 CRUSH 索引的更多详细信息,请参见第 9.5 节 “CRUSH 索引操作”。

有关 Ceph 存储池的更多一般详细信息,请参见第 11 章 “管理存储池”

有关纠删码存储池的更多详细信息,请参见第 13 章 “纠删码存储池”。

9.2 存储桶CRUSH 索引包含 OSD 的列表,可将这些 OSD 组织成“存储桶”,以便将设备聚合到物理位置。

0 osd OSD 守护进程(osd.1、osd.2 等)。

1 host 包含一个或多个 OSD 的主机名。

2 chassis 组成机柜的机箱。

3 rack 计算机机柜。默认值为 unknownrack。

4 row 由一系列机柜组成的设备排。

5 pdu 电源分配单元。

6 pod

7 room 包含主机机柜和主机排的机房。

8 datacenter 包含机房的物理数据中心。

112 存储桶 SES 6

Page 133: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

9 region

10 root

提示您可以修改现有类型,以及创建自己的存储桶类型。

Ceph 的部署工具可生成 CRUSH 索引,其中包含每个主机的存储桶,以及名为“default”的根

(可用于默认的 rbd 存储池)。剩余的存储桶类型提供了一种存储有关节点/存储桶的物理位

置信息的方法,当 OSD、主机或网络硬件发生故障,并且管理员需要访问物理硬件时,这种方

法可大大简化集群管理工作。

存储桶具有类型、唯一的名称(字符串)、以负整数表示的唯一 ID、相对于其项目总容

量/权限的权重、存储桶算法(默认为 straw2)和哈希(默认为 0,代表 CRUSH 哈希

rjenkins1)。一个存储桶可以包含一个或多个项目。项目可由其他存储桶或 OSD 组成。项

目可能会有一个权重来反映该项目的相对权重。

[bucket-type] [bucket-name] {

id [a unique negative numeric ID]

weight [the relative capacity/capability of the item(s)]

alg [the bucket type: uniform | list | tree | straw2 | straw ]

hash [the hash type: 0 by default]

item [item-name] weight [weight]

}

下面的示例说明如何使用存储桶来聚合存储池,以及诸如数据中心、机房、机柜和设备排的物

理位置。

host ceph-osd-server-1 {

id -17

alg straw2

hash 0

item osd.0 weight 0.546

item osd.1 weight 0.546

}

row rack-1-row-1 {

113 存储桶 SES 6

Page 134: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

id -16

alg straw2

hash 0

item ceph-osd-server-1 weight 2.00

}

rack rack-3 {

id -15

alg straw2

hash 0

item rack-3-row-1 weight 2.00

item rack-3-row-2 weight 2.00

item rack-3-row-3 weight 2.00

item rack-3-row-4 weight 2.00

item rack-3-row-5 weight 2.00

}

rack rack-2 {

id -14

alg straw2

hash 0

item rack-2-row-1 weight 2.00

item rack-2-row-2 weight 2.00

item rack-2-row-3 weight 2.00

item rack-2-row-4 weight 2.00

item rack-2-row-5 weight 2.00

}

rack rack-1 {

id -13

alg straw2

hash 0

item rack-1-row-1 weight 2.00

item rack-1-row-2 weight 2.00

item rack-1-row-3 weight 2.00

item rack-1-row-4 weight 2.00

item rack-1-row-5 weight 2.00

}

114 存储桶 SES 6

Page 135: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

room server-room-1 {

id -12

alg straw2

hash 0

item rack-1 weight 10.00

item rack-2 weight 10.00

item rack-3 weight 10.00

}

datacenter dc-1 {

id -11

alg straw2

hash 0

item server-room-1 weight 30.00

item server-room-2 weight 30.00

}

root data {

id -10

alg straw2

hash 0

item dc-1 weight 60.00

item dc-2 weight 60.00

}

9.3 规则组CRUSH 索引支持“CRUSH 规则”概念,这些规则确定存储池的数据归置。对于大型集群,您可能

会创建许多存储池,其中每个存储池各自可能具有自己的 CRUSH 规则组和规则。默认 CRUSH

索引具有适用于默认根的规则。如果您想使用更多根和更多规则,则需稍后自行创建,或者在

创建新存储池时让系统自动创建。

注意大多数情况下,无需修改默认规则。创建新存储池时,该存储池的默认规则组为 0。

115 规则组 SES 6

Page 136: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

规则采用以下格式:

rule rulename {

ruleset ruleset

type type

min_size min-size

max_size max-size

step step

}

ruleset

一个整数。将规则分类,使其属于一个规则组。通过在存储池中设置规则组来激活。必须

指定此选项。默认值为 0。

type

一个字符串。描述了适用于“副本”或“纠删码”存储池的规则。必须指定此选项。默认值为

replicated。

min_size

一个整数。如果存储池组创建的副本数小于此数字,CRUSH 将不选择此规则。必须指定此

选项。默认值为 2。

max_size

一个整数。如果存储池组创建的副本数大于此数字,CRUSH 将不选择此规则。必须指定此

选项。默认值为 10。

step take bucket

采用以名称指定的存储桶,并开始在树中向下迭代。必须指定此选项。有关在树中迭代的

说明,请参见第 9.3.1 节 “在节点树中迭代”。

step target mode num type bucket-type

target 可以是 choose 或 chooseleaf。如果设置为 choose,则会选择许多存储

桶。 chooseleaf 直接从存储桶集的每个存储桶的子树中选择 OSD(叶节点)。

mode 可以是 firstn 或 indep。请参见第 9.3.2 节 “firstn 和 indep”。

116 规则组 SES 6

Page 137: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

选择给定类型的存储桶的数量。其中,N 是可用选项的数量,如果 num > 0 且 < N,则选

择该数量的存储桶;如果 num < 0,则表示 N - num;如果 num == 0,则选择 N 个存储

桶(全部可用)。跟在 step take 或 step choose 后使用。

step emit

输出当前值并清空堆栈。通常在规则的末尾使用,但也可在同一规则中用来构成不同的

树。跟在 step choose 后使用。

9.3.1 在节点树中迭代

可采用节点树的形式来查看使用存储桶定义的结构。在此树中,存储桶是节点,OSD 是叶。

CRUSH 索引中的规则定义如何从此树中选择 OSD。规则从某个节点开始,然后在树中向下迭

代,以返回一组 OSD。无法定义需要选择哪个分支。CRUSH 算法可确保 OSD 集能够满足复制

要求并均衡分布数据。

使用 step take bucket 时,节点树中的迭代从给定的存储桶(而不是存储桶类型)开

始。如果要返回树中所有分支上的 OSD,该存储桶必须是根存储桶。否则,以下步骤只会在子

树中迭代。

完成 step take 后,接下来会执行规则定义中的一个或多个 step choose 项。每个 step

choose 项从前面选定的上层节点中选择定义数量的节点(或分支)。

最后,使用 step emit 返回选定的 OSD。

step chooseleaf 是一个便捷函数,可直接从给定存储桶的分支中选择 OSD。

图 9.2 “示例树”中提供了说明如何使用 step 在树中迭代的示例。在下面的规则定义中,橙色箭

头和数字与 example1a 和 example1b 对应,蓝色箭头和数字与 example2 对应。

117 在节点树中迭代 SES 6

Page 138: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 9.2︰ 示例树

# orange arrows

rule example1a {

ruleset 0

type replicated

min_size 2

max_size 10

# orange (1)

step take rack1

# orange (2)

step choose firstn 0 host

# orange (3)

step choose firstn 1 osd

step emit

}

rule example1b {

ruleset 0

type replicated

min_size 2

max_size 10

# orange (1)

118 在节点树中迭代 SES 6

Page 139: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

step take rack1

# orange (2) + (3)

step chooseleaf firstn 0 host

step emit

}

# blue arrows

rule example2 {

ruleset 0

type replicated

min_size 2

max_size 10

# blue (1)

step take room1

# blue (2)

step chooseleaf firstn 0 rack

step emit

}

9.3.2 firstn 和 indep

CRUSH 规则定义有故障节点或 OSD 的替换项(请参见第 9.3 节 “规则组”)。关键字 step 要

求使用 firstn 或 indep 参数。图 9.3 “节点替换方法”提供了示例。

firstn 将替换节点添加到工作节点列表的末尾。如果某个节点发生故障,其后的正常节点会

移位到左侧,以填充有故障节点留下的空缺。这是副本存储池的默认方法,也是需要采取的方

法,因为次要节点已包含所有数据,因此可立即接管主要节点的职责。

indep 为每个工作节点选择固定的替换节点。替换有故障节点不会更改剩余节点的顺序。这对

于纠删码存储池而言是所需的行为。在纠删码存储池中,节点上存储的数据取决于在选择节点

时它所在的位置。如果节点的顺序发生变化,受影响节点上的所有数据都需要重新放置。

119 firstn 和 indep SES 6

Page 140: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 9.3︰ 节点替换方法

9.4 置放群组Ceph 会将对象映射到归置组 (PG)。归置组是指逻辑对象存储池的分片或片段,可将对象以组形

式归置到 OSD 中。归置组可减少 Ceph 将数据存储到 OSD 中时每个对象的元数据量。如果归置

组的数量较多(例如,每个 OSD 有 100 个归置组),将能实现较佳的平衡。

9.4.1 归置组的使用方式

归置组 (PG) 聚合了存储池内的对象。主要原因是基于每个对象来跟踪对象归置和元数据的计算

成本较高。例如,包含数百万个对象的系统无法直接跟踪各个对象的归置。

120 置放群组 SES 6

Page 141: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 9.4︰ 存储池中的归置组

Ceph 客户端负责计算对象将属于哪个归置组。它会对对象 ID 进行哈希处理,并根据所定义存

储池中的 PG 数及存储池的 ID 来应用操作。

归置组内的对象内容存储在一组 OSD 中。例如,在大小为 2 的副本存储池中,每个归置组将对

象存储到两个 OSD 中:

图 9.5︰ 归置组和 OSD

如果 OSD 2 发生故障,则系统会将另一个 OSD 指定给归置组 1,并在该 OSD 中填充 OSD 1 内

所有对象的副本。如果存储池大小从 2 变为 3,则系统会向归置组另外再分配一个 OSD,并在

该 OSD 中填充归置组内所有对象的副本。

归置组并不拥有 OSD,它们与同一存储池甚至其他存储池内的其他归置组共享 OSD。如果 OSD

2 发生故障,归置组 2 也将需要使用 OSD 3 来恢复对象的副本。

当归置组的数量增加时,系统会向新归置组分配 OSD。CRUSH 函数的结果也会发生更改,而且

系统会将之前的归置组的部分对象复制到新归置组并将它们从旧归置组删除。

121 归置组的使用方式 SES 6

Page 142: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

9.4.2 确定 PG_NUM 的值

创建新存储池时,必须选择 PG_NUM 的值:

root # ceph osd pool create POOL_NAME PG_NUM

PG_NUM 无法自动计算得出。以下是一些常用的值,选择哪个值取决于集群中的 OSD 数量:

少于 5 个 OSD:

将 PG_NUM 设置为 128。

5 到 10 个 OSD:

将 PG_NUM 设置为 512。

10 到 50 个 OSD:

将 PG_NUM 设置为 1024。

随着 OSD 数量的增加,选择正确的 PG_NUM 值也变得愈加重要。 PG_NUM 对集群的行为以及

OSD 发生故障时的数据持久性具有很大影响。

9.4.2.1 超过 50 个 OSD 时的归置组数

如果 OSD 数量低于 50,请使用第 9.4.2 节 “确定 PG_NUM 的值”中所述的预选值。如果 OSD 数

量超过 50,建议为每个 OSD 使用约 50 到 100 个归置组,以平衡资源的使用、数据持久性和数

据分布。对于单个对象存储池,您可以使用以下公式来计算基线数量:

total PGs = (OSDs * 100) / POOL_SIZE

其中, POOL_SIZE 是副本的个数(如果是副本存储池)或 ceph osd erasure-code-

profile get 命令所返回的“k”和“m”之和(如果是纠删码存储池)。应将结果舍入到最接近的

2 的幂。对于 CRUSH 算法,建议进行舍入,以便均衡归置组之间的对象数。

例如,如果集群包含 200 个 OSD 和大小为 3 个副本的存储池,您需要按如下方式预估 PG 数:

(200 * 100) / 3 = 6667

最接近的 2 的幂为 8192。

122 确定 PG_NUM 的值 SES 6

Page 143: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

使用多个数据存储池存储对象时,您需要确保在每个存储池的归置组数与每个 OSD 的归置组数

之间取得平衡。您需要采用合理的归置组总数,在不过度占用系统资源或导致互联过程过慢的

前提下,确保每个 OSD 的差异保持在合理的较低水平。

例如,如果集群包含 10 个存储池,每个存储池有 512 个归置组(位于 10 个 OSD 中),则表示

共有 5,120 个归置组分布于 10 个 OSD 中,即每个 OSD 有 512 个归置组。这样的设置不会使用

过多资源。但是,如果创建了 1000 个存储池,且每个存储池有 512 个归置组,那么每个 OSD

需要处理约 50,000 个归置组,这样完成互联所需的资源和时间便会显著增加。

9.4.3 设置归置组数量

要设置存储池内的归置组数量,您需要在创建存储池时指定归置组数量(请参见第 11.2.2 节 “创

建存储池”)。为存储池设置归置组后,您可以增加归置组的数量,但不能减少其数量。要增加

归置组的数量,请运行以下命令:

root # ceph osd pool set POOL_NAME pg_num PG_NUM

增加归置组数量后,您还需要增加要归置的归置组数量 ( PGP_NUM ),以便您的集群重新达到平

衡。 PGP_NUM 是考虑要通过 CRUSH 算法归置的归置组数。增加 PG_NUM 会分割归置组,但

在增加 PGP_NUM 之前数据不会迁移到较新的归置组。 PGP_NUM 应等于 PG_NUM。要增加应

归置的归置组数量,请运行以下命令:

root # ceph osd pool set POOL_NAME pgp_num PGP_NUM

9.4.4 获取归置组数量

要获取存储池内的归置组数量,请运行以下命令:

root # ceph osd pool get POOL_NAME pg_num

9.4.5 获取集群的 PG 统计数据

要获取集群内归置组的统计数据,请运行以下命令:

123 设置归置组数量 SES 6

Page 144: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

root # ceph pg dump [--format FORMAT]

有效格式为“plain”(默认值)和“json”。

9.4.6 获取卡住的 PG 统计数据

要获取所有卡在指定状态的归置组的统计数据,请运行以下命令:

root # ceph pg dump_stuck STATE \

[--format FORMAT] [--threshold THRESHOLD]

可能的状态有:“inactive”(PG 由于在等待拥有最新数据的 OSD 恢复启用状态而无法处理读取

或写入)、“unclean”(PG 包含未复制所需次数的对象)、“stale”(PG 处于未知状态,即托管

PG 的 OSD 未在 mon_osd_report_timeout 选项所指定的时间间隔内向 Monitor 集群报告

相关信息)、“undersized”或“degraded”。

有效格式为“plain”(默认值)和“json”。

该阈值定义归置组至少卡住多少秒(默认为 300 秒)后系统会将其包含到返回的统计数据中。

9.4.7 获取归置组索引

要获取特定归置组的索引,请运行以下命令:

root # ceph pg map PG_ID

Ceph 将返回归置组索引、归置组和 OSD 状态:

root # ceph pg map 1.6c

osdmap e13 pg 1.6c (1.6c) -> up [1,0] acting [1,0]

9.4.8 获取归置组统计数据

要检索特定归置组的统计数据,请运行以下命令:

root # ceph pg PG_ID query

124 获取卡住的 PG 统计数据 SES 6

Page 145: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

9.4.9 洗刷归置组

要洗刷(第 9.6 节 “洗刷”)归置组,请运行以下命令:

root # ceph pg scrub PG_ID

Ceph 会检查主节点和副本节点、生成归置组内所有对象的编目,并对它们进行比较,以确保没

有缺少或不匹配的对象且对象的内容均一致。假设所有副本均匹配,最后的语义整理便可确保

所有与快照相关的对象元数据均一致。错误通过日志来报告。

9.4.10 设置归置组回填和恢复的优先顺序

您可能会遇到数个归置组需要恢复和/或回填,而其中一些归置组存储的数据比其他归置组更为

重要的情况。例如,这些 PG 可能存储着运行中计算机所使用的映像数据,其他 PG 则可能存储

的是由非活跃计算机使用的数据或相关度较低的数据。在该情况下,您可能需要优先恢复这些

归置组,以便更早地恢复存储在这些归置组中的数据的性能和可用性。要将特定归置组标记为

在回填或恢复过程中优先处理,请运行以下命令:

root # ceph pg force-recovery PG_ID1 [PG_ID2 ... ]

root # ceph pg force-backfill PG_ID1 [PG_ID2 ... ]

这将导致 Ceph 先对指定归置组执行恢复或回填,然后再处理其他归置组。这并不会中断当前正

在进行的回填或恢复,而是会使指定的 PG 尽快得到处理。如果您改变了主意或将错误的归置组

设为优先处理,请使用以下命令取消优先顺序:

root # ceph pg cancel-force-recovery PG_ID1 [PG_ID2 ... ]

root # ceph pg cancel-force-backfill PG_ID1 [PG_ID2 ... ]

cancel-* 命令会删除 PG 的“force”标志,使其按默认顺序接受处理。同样,这并不会影响当

前正在处理的归置组,只会影响仍在排队的归置组。完成归置组恢复或回填后,系统即会自动

清除“force”标志。

9.4.11 还原丢失的对象

如果集群丢失了一个或多个对象,而您已决定放弃搜索丢失的数据,则需要将未找到的对象标

记为“lost”。

125 洗刷归置组 SES 6

Page 146: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

如果在查询过所有可能的位置后仍未找到这些对象,您可能需要放弃这些丢失的对象。这可能

是由于几种故障同时发生(这种情况很少见)导致的,致使集群在写入本身恢复之前便得知写

入已执行。

目前唯一支持的选项为“revert”,该选项会回滚到对象的先前版本,或在有新对象时完全忽略丢

失的对象。要将“未找到”的对象标记为“lost”,请运行以下命令:

root # ceph pg PG_ID mark_unfound_lost revert|delete

9.5 CRUSH 索引操作本节介绍基本的 CRUSH 索引操作方法,例如编辑 CRUSH 索引、更改 CRUSH 索引参数,以及添

加/移动/删除 OSD。

9.5.1 编辑 CRUSH 索引

要编辑现有的 CRUSH 索引,请执行以下操作:

1. 获取 CRUSH 索引。要获取集群的 CRUSH 索引,请执行以下命令:

cephadm@adm > ceph osd getcrushmap -o compiled-crushmap-filename

Ceph 会将编译的 CRUSH 索引输出 ( -o ) 到您指定名称的文件。由于该 CRUSH 索引采用

编译格式,您必须先将其反编译,然后才能对其进行编辑。

2. 反编译 CRUSH 索引。要反编译 CRUSH 索引,请执行以下命令:

cephadm@adm > crushtool -d compiled-crushmap-filename \

-o decompiled-crushmap-filename

Ceph 将对已编译的 CRUSH 索引进行反编译 ( -d ),并将其输出 ( -o ) 到您指定名称的文

件。

3. 至少编辑“设备”、“存储桶”和“规则”中的其中一个参数。

4. 编译 CRUSH 索引。要编译 CRUSH 索引,请执行以下命令:

126 CRUSH 索引操作 SES 6

Page 147: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > crushtool -c decompiled-crush-map-filename \

-o compiled-crush-map-filename

Ceph 会将编译的 CRUSH 索引存储到您指定名称的文件。

5. 设置 CRUSH 索引。要设置集群的 CRUSH 索引,请执行以下命令:

cephadm@adm > ceph osd setcrushmap -i compiled-crushmap-filename

Ceph 将输入您所指定文件名的已编译 CRUSH 索引,作为集群的 CRUSH 索引。

提示:使用版本控制系统请为导出并修改过的 CRUSH 索引文件使用 git 或 svn 这样的版本控制系统。这可以让可

能发生的回滚变得简单。

提示:测试新 CRUSH 索引请使用 crushtool --test 命令测试经过调整的新 CRUSH 索引,并与应用新 CRUSH

索引之前的状态进行比较。以下命令开关十分有用: --show-statistics、 --

show-mappings、 --show-bad-mappings、 --show-utilization、 --show-

utilization-all、 --show-choose-tries

9.5.2 添加/移动 OSD

要在运行中集群的 CRUSH 索引中添加或移动 OSD,请执行以下命令:

cephadm@adm > ceph osd crush set id_or_name weight root=pool-name

bucket-type=bucket-name ...

id

一个整数。OSD 的数字 ID。必须指定此选项。

name

一个字符串。OSD 的全名。必须指定此选项。

127 添加/移动 OSD SES 6

Page 148: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

weight

一个双精度值。OSD 的 CRUSH 权重。必须指定此选项。

root

一个键/值对。默认情况下,CRUSH 层次结构包含 default 存储池作为根。必须指定此选

项。

bucket-type

键/值对。可在 CRUSH 层次结构中指定 OSD 的位置。

下面的示例将 osd.0 添加到层次结构,或移动之前某个位置的 OSD。

cephadm@adm > ceph osd crush set osd.0 1.0 root=data datacenter=dc1 room=room1 \

row=foo rack=bar host=foo-bar-1

9.5.3 ceph osd reweight 与 ceph osd crush reweight之间的差异

有两个相似的命令都可更改 Ceph OSD 的权重。它们的使用情境不同,可能会造成混淆。

9.5.3.1 ceph osd reweight

用法:

cephadm@adm > ceph osd reweight OSD_NAME NEW_WEIGHT

ceph osd reweight 用于对 Ceph OSD 设置覆盖权重。此值介于 0 到 1 之间,会强制

CRUSH 重新放置将以其他方式存储于此驱动器上的数据。该命令不会更改为 OSD 上方的存储

桶指定的权重,它是一种在正常 CRUSH 分布出现问题时的纠正措施。例如,如果您的其中一个

OSD 处于 90%,而其他 OSD 处于 40%,则您可缩小此权重,以尝试对其进行补偿。

注意:OSD 权重是暂时的请注意, ceph osd reweight 并非永久性设置。当某个 OSD 被标记为“out”时,它的

权重会被设置为 0,当它一旦重新被标记为“in”,其权重又会更改为 1。

128 ceph osd reweight 与 ceph osd crush reweight 之间的差异 SES 6

Page 149: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

9.5.3.2 ceph osd crush reweight

用法:

cephadm@adm > ceph osd crush reweight OSD_NAME NEW_WEIGHT

ceph osd crush reweight 用于设置 OSD 的 CRUSH 权重。此权重可以是任意值(通常是

以 TB 为单位的磁盘大小),用于控制系统尝试分配给 OSD 的数据量。

9.5.4 删除 OSD要从运行中集群的 CRUSH 索引中删除 OSD,请执行以下命令:

cephadm@adm > ceph osd crush remove OSD_NAME

9.5.5 添加存储桶要向运行中集群的 CRUSH 索引添加某个存储桶,请执行 ceph osd crush add-bucket 命

令:

cephadm@adm > ceph osd crush add-bucket BUCKET_NAME BUCKET_TYPE

9.5.6 移动存储桶要将某个存储桶移到 CRUSH 索引层次结构中的不同位置,请执行以下命令:

cephadm@adm > ceph osd crush move BUCKET_NAME BUCKET_TYPE=BUCKET_NAME [...]

例如:

cephadm@adm > ceph osd crush move bucket1 datacenter=dc1 room=room1 row=foo

rack=bar host=foo-bar-1

9.5.7 删除存储桶要从 CRUSH 索引层次结构中删除某个存储桶,请执行以下命令:

129 删除 OSD SES 6

Page 150: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > ceph osd crush remove BUCKET_NAME

注意:仅限空存储桶从 CRUSH 层次结构中只能删除空存储桶。

9.6 洗刷除了为对象创建多个副本外,Ceph 还可通过洗刷归置组来确保数据完整性(请参见《部署指

南》, 第 1 章 “SUSE Enterprise Storage 6 和 Ceph”, 第 1.3.2 节 “归置组”了解有关归置组的详细

信息)。Ceph 的洗刷类似于在对象存储层运行 fsck。对于每个归置组,Ceph 都会生成一个

包含所有对象的编目,并比较每个主对象及其副本,以确保不会有缺失或不匹配的对象。每天

的浅层洗刷会检查对象大小和属性,而每周的深层洗刷则会读取数据并使用校验和来确保数据

完整性。

洗刷对于维护数据完整性非常重要,但该操作可能会降低性能。您可以通过调整以下设置来增

加或减少洗刷操作:

osd max scrubs

同时针对一个 Ceph OSD 执行的洗刷操作数量上限。默认值为 1。

osd scrub begin hour、 osd scrub end hour

按小时定义的一天内可以执行洗刷的时间段(0 到 24)。默认开始时间为 0,结束时间为

24。

重要如果归置组的洗刷间隔超出 osd scrub max interval 设置的值,则无论您定

义的洗刷时间段为何,都将执行洗刷。

osd scrub during recovery

允许恢复期间执行洗刷。如果将此选项设置为“false”,则当存在工作的恢复进程时,将禁

止安排新的洗刷。已在运行的洗刷将继续执行。此选项有助于降低忙碌集群上的负载。默

认值为“true”。

130 洗刷 SES 6

Page 151: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

osd scrub thread timeout

洗刷线程超时前的最长时间(以秒为单位)。默认值为 60。

osd scrub finalize thread timeout

洗刷完成线程超时前的最长时间(以秒为单位)。默认值为 60*10。

osd scrub load threshold

规范化的最大负载。当系统负载(由 getloadavg() 与 online cpus 数量之比定

义)高于此数字时,Ceph 将不会执行洗刷。默认值为 0.5。

osd scrub min interval

当 Ceph 集群负载较低时洗刷 Ceph OSD 的最短间隔(以秒为单位)。默认值为

60*60*24(一天一次)。

osd scrub max interval

无论集群负载如何都洗刷 Ceph OSD 的最长间隔(以秒为单位)。默认值为

7*60*60*24(一周一次)。

osd scrub chunk min

单次操作期间要洗刷的对象存储块数量下限。洗刷期间,Ceph 会阻止向单个块写入数

据。默认值为 5。

osd scrub chunk max

单次操作期间要洗刷的对象存储块数量上限。默认值为 25。

osd scrub sleep

洗刷下一组块之前休眠的时间。增大此值会降低整个洗刷操作的速度,但对客户端操作的

影响较小。默认值为 0。

osd deep scrub interval

深层洗刷(完整读取所有数据)的间隔。 osd scrub load threshold 选项不会影响

此设置。默认值为 60*60*24*7(一周一次)。

osd scrub interval randomize ratio

在安排归置组的下一次洗刷作业时,为 osd scrub min interval 值增加一个随

机延迟。该延迟为一个随机的值,小于 osd scrub min interval * osd scrub

interval randomized ratio 所得结果。因此,该默认设置实际上是将洗刷随机地安

排在允许的时间段 [1, 1.5] * osd scrub min interval 内执行。默认值为 0.5。

131 洗刷 SES 6

Page 152: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

osd deep scrub stride

执行深层洗刷时读取的大小。默认值为 524288 (512 kB)。

132 洗刷 SES 6

Page 153: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

10 Ceph Manager 扩展模块

Ceph Manager 的体系结构(请参见《部署指南》, 第 1 章 “SUSE Enterprise Storage 6 和

Ceph”, 第 1.2.3 节 “Ceph 节点和守护进程”中的简短介绍)允许您通过“仪表盘”(请参见第 22 章

“Ceph Dashboard”)、“prometheus”(请参见第 7 章 “监控和警告”)或“平衡器”等扩展模块来

扩展它的功能。

要列出所有可用的扩展模块,请运行:

cephadm@adm > ceph mgr module ls

{

"enabled_modules": [

"restful",

"status"

],

"disabled_modules": [

"dashboard"

]

}

要启用或禁用特定扩展模块,请运行:

cephadm@adm > ceph mgr module enable MODULE-NAME

例如:

cephadm@adm > ceph mgr module disable dashboard

要列出已启用扩展模块所提供的服务,请运行:

cephadm@adm > ceph mgr services

{

"dashboard": "http://myserver.com:7789/",

"restful": "https://myserver.com:8789/"

}

133 SES 6

Page 154: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

10.1 平衡器平衡器扩展模块可优化各 OSD 之间的归置组 (PG) 分布,以实现更平衡的部署。尽管默认会激活

该扩展模块,但它并不会处于工作状态。它支持“crush-compat”和“upmap”这两种模式。

提示:当前平衡器配置要查看当前的平衡器配置,请运行以下命令:

cephadm@adm > ceph config-key dump

重要:支持的模式我们目前仅支持“crush-compat”模式,因为“upmap”模式要求启用能够阻止所有早于

Luminous 版本的 OSD 连接到集群的 OSD 特性。

10.1.1 “crush-compat”模式

在“crush-compat”模式下,平衡器会调整 OSD 的重设权重集,从而改进数据分布。它会将 PG

在 OSD 之间移动,因此会暂时出现由 PG 错放所导致的 HEALTH_WARN 集群状态。

提示:模式激活尽管“crush-compat”为默认模式,但我们仍建议明确将其激活:

cephadm@adm > ceph balancer mode crush-compat

10.1.2 数据平衡的规划和执行

您可以使用平衡器扩展模块创建数据平衡计划。随后,您可以手动执行该计划,或让平衡器持

续平衡 PG。

134 平衡器 SES 6

Page 155: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

要决定是以手动还是自动模式来运行平衡器,需要考虑诸如当前数据的不平衡情况、集群大

小、PG 个数或 I/O 活动等多项因素。建议您选择在集群中的 I/O 负载较低时创建和执行初始计

划。原因是初始的不平衡情况可能会非常严重,因此最好将对客户端的影响保持在较低程度。

初始的手动运行完成后,建议您激活自动模式并监控正常 I/O 负载下的重新平衡流量。需要对

照平衡器所导致的重新平衡流量来权衡 PG 分布的改进。

提示:归置组 (PG) 的可移动部分在平衡过程中,平衡器扩展模块会限制 PG 的移动,以便仅移动可配置的 PG 部分。该部

分默认为 5%,您可通过运行以下命令调整该部分(例如,调整为 9%):

cephadm@adm > ceph config set mgr target_max_misplaced_ratio .09

要创建和执行平衡计划,请执行以下步骤:

1. 查看当前集群分数:

cephadm@adm > ceph balancer eval

2. 创建计划,例如“great_plan”:

cephadm@adm > ceph balancer optimize great_plan

3. 查看“great_plan”将引发的更改:

cephadm@adm > ceph balancer show great_plan

4. 查看潜在的集群分数(如果您决定应用“great_plan”):

cephadm@adm > ceph balancer eval great_plan

5. 执行“great_plan”一次:

cephadm@adm > ceph balancer execute great_plan

6. 使用 ceph -s 命令观察集群平衡情况。如果您对结果满意,请激活自动平衡:

135 数据平衡的规划和执行 SES 6

Page 156: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > ceph balancer on

如果您稍后决定停用自动平衡,请运行:

cephadm@adm > ceph balancer off

提示:在不执行初始计划的情况下激活自动平衡您可以不执行初始计划,直接激活自动平衡。在此情况下,归置组的重新平衡用时可能会

非常长。

10.2 遥测扩展模块遥测插件可发送有关运行它的集群的 Ceph 项目匿名数据。

此(选择性接受)组件包含有关集群部署方式、Ceph 版本、主机分布以及其他有助于项目更好

地了解 Ceph 使用方式的参数的计数器和统计数据。它不包含任何诸如存储池名称、对象名称、

对象内容或主机名等敏感数据。

遥测扩展模块用于为开发人员提供自动化反馈环,以帮助其量化采用率、跟踪情况,或指出为

避免出现不良后果而需在配置期间以更佳方式进行解释或验证的内容。

注意遥测扩展模块需要 Ceph Manager 节点能够通过 HTTPS 将数据推送到上游服务器。请确

保您的公司防火墙允许此操作。

1. 要启用遥测扩展模块,请运行以下命令:

cephadm@adm > ceph mgr module enable telemetry

注意此命令只能让您在本地查看您的数据。它并不会将您的数据共享到 Ceph 社区。

136 遥测扩展模块 SES 6

Page 157: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

2. 要允许遥测扩展模块开始共享数据,请运行以下命令:

cephadm@adm > ceph telemetry on

3. 要禁用遥测数据共享,请运行以下命令:

cephadm@adm > ceph telemetry off

4. 要生成可打印的 JSON 报告,请运行以下命令:

cephadm@adm > ceph telemetry show

5. 要向报告添加联系信息和描述,请运行以下命令:

cephadm@adm > ceph config set mgr mgr/telemetry/contact ‘John

Doe [email protected]

cephadm@adm > ceph config set mgr mgr/telemetry/description ‘My first Ceph

cluster’

6. 该扩展模块默认每 24 小时编译并发送一次新报告。要调整此间隔,请运行以下命令:

cephadm@adm > ceph config set mgr mgr/telemetry/interval HOURS

137 遥测扩展模块 SES 6

Page 158: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

11 管理存储池

Ceph 将数据存储在存储池中。存储池是用于存储对象的逻辑组。如果您先部署集群而不创建存

储池,Ceph 会使用默认存储池来存储数据。下面着重指出与 Ceph 存储池有关的重要特性:

恢复能力:您可以设置允许多少个 OSD、存储桶或叶发生故障而不会丢失数据。对于副本

存储池,它是对象的所需副本数。创建新存储池时,会将默认副本数设置为 3。对于纠删

码存储池,该计数为编码块数(在纠删码配置中,设置为 m=2)。

归置组:用于跨 OSD 将数据存储在某个存储池中的内部数据结构。CRUSH 索引中定义了

Ceph 将数据存储到 PG 中的方式。创建存储池时,您可以为其设置归置组数量。典型配置

为每个 OSD 使用约 100 个归置组,以提供最佳平衡而又不会耗费太多计算资源。设置多

个存储池时,请务将存储池和集群作为整体考虑,确保设置合理的归置组数。每个存储池

的 Ceph PG 数计算器 (https://ceph.com/pgcalc/) 可为您提供帮助。

CRUSH 规则:在存储池中存储数据时,系统会根据映射到该存储池的 CRUSH 规则集来放

置对象及其副本或块(如果是纠删码存储池)。您可为存储池创建自定义 CRUSH 规则。

快照:使用 ceph osd pool mksnap 创建快照时,可高效创建特定存储池的快照。

要将数据组织到存储池中,可以列出、创建和删除存储池。您还可以查看每个存储池的用量统

计数字。

11.1 将存储池与应用关联在使用存储池之前,需要将它们与应用关联。将与 CephFS 搭配使用或由对象网关自动创建的存

储池会自动关联。

对于其他情况,可以手动将自由格式的应用名称与存储池关联:

cephadm@adm > ceph osd pool application enable pool_name application_name

提示:默认应用名称CephFS 使用应用名称 cephfs,RADOS 块设备使用 rbd,对象网关使用 rgw。

138 将存储池与应用关联 SES 6

Page 159: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

一个存储池可以与多个应用关联,每个应用都可具有自己的元数据。可使用以下命令显示给定

存储池的应用元数据:

cephadm@adm > ceph osd pool application get pool_name

11.2 操作存储池本节介绍对存储池执行基本任务的特定信息。您可以了解如何列出、创建和删除存储池,以及

如何显示存储池统计数字或管理存储池快照。

11.2.1 列出存储池

要列出集群的存储池,请执行以下命令:

cephadm@adm > ceph osd pool ls

11.2.2 创建存储池

可以创建“replicated”(用于保留对象的多个副本,以便从发生故障的 OSD 恢复)

或“erasure”(用于获得某种通用 RAID6 功能)类型的存储池。副本存储池所需的原始存储空间

较多,而纠删码存储池所需的原始存储空间较少。默认值是“replicated”。

要创建副本存储池,请执行以下命令:

cephadm@adm > ceph osd pool create pool_name pg_num pgp_num

replicated crush_ruleset_name \

expected_num_objects

要创建纠删码存储池,请执行以下命令:

cephadm@adm > ceph osd pool create pool_name pg_num pgp_num

erasure erasure_code_profile \

crush_ruleset_name expected_num_objects

如果超出每个 OSD 的归置组限制,则 ceph osd pool create 可能会失败。该限制通过

mon_max_pg_per_osd 选项设置。

139 操作存储池 SES 6

Page 160: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

pool_name

存储池的名称,必须唯一。必须指定此选项。

pg_num

存储池的归置组总数。必须指定此选项。默认值为 8。

pgp_num

用于归置数据的归置组总数。此数量应该与归置组总数相等,归置组拆分情况除外。必须

指定此选项。默认值为 8。

crush_ruleset_name

此存储池的 crush 规则组的名称。如果所指定的规则集不存在,则创建副本存储池的操

作将会失败,并显示 -ENOENT。对于副本存储池,该规则集是 osd pool default

crush replicated ruleset 配置变量所指定的规则集。此规则集必须存在。

对于纠删码存储池,如果使用默认纠删码配置,则规则集为“erasure-code”,否则为

POOL_NAME。如果此规则集尚不存在,系统将隐式创建该规则集。

erasure_code_profile=profile

仅适用于纠删码存储池。使用纠删码配置。该配置必须是 osd erasure-code-

profile set 所定义的现有配置。

创建存储池时,请将归置组数设置为合理的值。还需考虑每个 OSD 的归置组总数。归置组

在计算方面的开销很高,因此如果您的许多存储池都包含很多归置组(例如有 50 个池,

每个池各有 100 个归置组),性能将会下降。

有关计算存储池的适当归置组数的详细信息,请参见第 9.4 节 “置放群组”。

expected_num_objects

此存储池的预期对象数。如果设置此值(与一个为负数的 filestore merge

threshold 值),系统在创建存储池时会分割 PG 文件夹。这可避免因运行时文件夹拆

分导致的延迟影响。

11.2.3 设置存储池配额

您可以设置存储池配额,限定每个存储池的最大字节数和/或最大对象数。

cephadm@adm > ceph osd pool set-quota pool-name max_objects obj-

count max_bytes bytes

140 设置存储池配额 SES 6

Page 161: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

例如:

cephadm@adm > ceph osd pool set-quota data max_objects 10000

要删除配额,请将其值设置为 0。

11.2.4 删除存储池

警告:删除存储池的操作不可逆存储池中可能包含重要数据。删除存储池会导致存储池中的所有数据消失,且无法恢复。

不小心删除存储池十分危险,因此 Ceph 实施了两个机制来防止删除存储池。要删除存储池,必

须先禁用这两个机制。

第一个机制是 NODELETE 标志。每个存储池都有这个标志,其默认值是“false”。要确定某个存

储池的此标志值,请运行以下命令:

cephadm@adm > ceph osd pool get pool_name nodelete

如果命令输出 nodelete: true,则只有在使用以下命令更改该标志后,才能删除存储池:

cephadm@adm > ceph osd pool set pool_name nodelete false

第二个机制是集群范围的配置参数 mon allow pool delete,其默认值为“false”。这表示

默认不能删除存储池。显示的错误讯息是:

Error EPERM: pool deletion is disabled; you must first set the

mon_allow_pool_delete config option to true before you can destroy a pool

若要规避此安全设置删除存储池,可以临时将 mon allow pool delete 设置为“true”,删

除存储池,然后将该参数恢复为“false”:

cephadm@adm > ceph tell mon.* injectargs --mon-allow-pool-delete=true

cephadm@adm > ceph osd pool delete pool_name pool_name --yes-i-really-really-

mean-it

cephadm@adm > ceph tell mon.* injectargs --mon-allow-pool-delete=false

141 删除存储池 SES 6

Page 162: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

injectargs 命令会显示以下讯息:

injectargs:mon_allow_pool_delete = 'true' (not observed, change may require

restart)

这主要用于确认该命令已成功执行。它不是错误。

如果为您创建的存储池创建了自己的规则组和规则,则应该考虑在不再需要该存储池时删除规

则组和规则。

11.2.5 重命名存储池

要重命名存储池,请执行以下命令:

cephadm@adm > ceph osd pool rename current-pool-name new-pool-name

如果重命名了存储池,且为经过身份验证的用户使用了按存储池功能,则必须用新的存储池名

称更新用户的功能。

11.2.6 显示存储池统计数字

要显示存储池的用量统计数字,请执行以下命令:

cephadm@adm > rados df

POOL_NAME USED OBJECTS CLONES COPIES MISSING_ON_PRIMARY

UNFOUND DEGRADED RD_OPS RD WR_OPS WR USED COMPR UNDER COMPR

.rgw.root 768 KiB 4 0 12 0

0 0 44 44 KiB 4 4 KiB 0 B 0 B

cephfs_data 960 KiB 5 0 15 0

0 0 5502 2.1 MiB 14 11 KiB 0 B 0 B

cephfs_metadata 1.5 MiB 22 0 66 0

0 0 26 78 KiB 176 147 KiB 0 B 0 B

default.rgw.buckets.index 0 B 1 0 3 0

0 0 4 4 KiB 1 0 B 0 B 0 B

default.rgw.control 0 B 8 0 24 0

0 0 0 0 B 0 0 B 0 B 0 B

default.rgw.log 0 B 207 0 621 0

0 0 5372132 5.1 GiB 3579618 0 B 0 B 0 B

142 重命名存储池 SES 6

Page 163: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

default.rgw.meta 961 KiB 6 0 18 0

0 0 155 140 KiB 14 7 KiB 0 B 0 B

example_rbd_pool 2.1 MiB 18 0 54 0

0 0 3350841 2.7 GiB 118 98 KiB 0 B 0 B

iscsi-images 769 KiB 8 0 24 0

0 0 1559261 1.3 GiB 61 42 KiB 0 B 0 B

mirrored-pool 1.1 MiB 10 0 30 0

0 0 475724 395 MiB 54 48 KiB 0 B 0 B

pool2 0 B 0 0 0 0

0 0 0 0 B 0 0 B 0 B 0 B

pool3 333 MiB 37 0 111 0

0 0 3169308 2.5 GiB 14847 118 MiB 0 B 0 B

pool4 1.1 MiB 13 0 39 0

0 0 1379568 1.1 GiB 16840 16 MiB 0 B 0 B

各列的说明如下:

USED

存储池使用的字节数。

OBJECTS

存储池中存储的对象数。

CLONES

存储池中存储的克隆数。如果在创建快照时某个客户端向对象写入数据,系统将会创建原

始对象的克隆,而不是对该对象进行修改,这样便不会修改已截取快照的原始对象内容。

COPIES

对象副本的数量。例如,如果某个复制系数为 3 的副本存储池有“x”个对象,它通常将会有

3 * x 个副本。

MISSING_ON_PRIMARY

当主 OSD 上的副本缺失时,处于降级状态(不是所有副本都存在)的对象的数量。

UNFOUND

未找到的对象数。

DEGRADED

已降级的对象数。

143 显示存储池统计数字 SES 6

Page 164: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

RD_OPS

针对此存储池请求的读取操作总数。

RD

从此存储池读取的字节总数。

WR_OPS

针对此存储池请求的写入操作总数。

WR

写入存储池的字节总数。请注意,该数值与存储池的用量不同,因为您可能会多次写入同

一对象。如此一来,存储池的用量虽然不变,但写入存储池的字节数会增长。

USED COMPR

为压缩数据分配的字节数。

UNDER COMPR

压缩数据在未压缩时占用的字节数。

11.2.7 获取存储池的值

要获取存储池中的值,请执行以下命令:

cephadm@adm > ceph osd pool get pool-name key

您可以获取第 11.2.8 节 “设置存储池的值”中所列键以及下列键的值:

pg_num

存储池的归置组数。

pgp_num

计算数据归置时要使用的归置组的有效数量。有效范围小于或等于 pg_num。

提示:存储池的所有值要列出与特定存储池相关的所有值,请运行以下命令:

cephadm@adm > ceph osd pool get POOL_NAME all

144 获取存储池的值 SES 6

Page 165: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

11.2.8 设置存储池的值

要设置存储池的值,请执行以下命令:

cephadm@adm > ceph osd pool set pool-name key value

您可以设置以下键的值:

size

设置存储池中对象的副本数。有关更多详细信息,请参见第 11.2.9 节 “设置对象副本数”。

仅用于副本存储池。

min_size

设置 I/O 所需的最小副本数。有关更多详细信息,请参见第 11.2.9 节 “设置对象副本数”。

仅用于副本存储池。

crash_replay_interval

允许客户端重放已确认但未提交的请求的秒数。

pg_num

存储池的归置组数。如果您将新 OSD 添加到集群,请确认所有存储池上专用于新 OSD 的

归置组的值。

pgp_num

计算数据归置时要使用的归置组的有效数量。

crush_ruleset

用于在集群中映射对象归置的规则组。

hashpspool

为给定存储池设置 (1) 或取消设置 (0) HASHPSPOOL 标志。启用此标志会更改算法,以采

用更佳的方式将 PG 分配到 OSD 之间。对之前 HASHPSPOOL 标志设为默认值 0 的存储池

启用此标志后,集群会开始回填,以使所有 PG 恢复正确归置状态。请注意,此操作可能

会在集群上产生大量 I/O 负载,因此请勿对负载较高的生产集群启用该标志(由 0 更改为

1)。

nodelete

防止删除存储池。

145 设置存储池的值 SES 6

Page 166: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

nopgchange

防止更改存储池的 pg_num 和 pgp_num。

nosizechange

防止更改存储池的大小。

write_fadvise_dontneed

对给定存储池设置/取消设置 WRITE_FADVISE_DONTNEED 标志。

noscrub、nodeep-scrub

禁用(深层)洗刷特定存储池的数据以解决临时高 I/O 负载问题。

hit_set_type

对缓存池启用命中集跟踪。请参见布隆过滤器 (http://en.wikipedia.org/

wiki/Bloom_filter) 以了解更多信息。此选项可用的值如

下: bloom、 explicit_hash、 explicit_object。默认值为 bloom,其他值仅

用于测试。

hit_set_count

要为缓存池存储的命中集数。该数值越高, ceph-osd 守护进程耗用的 RAM 越多。默认

值为 0。

hit_set_period

缓存池的命中集期间的时长(以秒为单位)。该数值越高, ceph-osd 守护进程耗用的

RAM 越多。

hit_set_fpp

布隆命中集类型的误报率。请参见布隆过滤器 (http://en.wikipedia.org/wiki/

Bloom_filter) 以了解更多信息。有效范围是 0.0 - 1.0,默认值为 0.05

use_gmt_hitset

为缓存分层创建命中集时,强制 OSD 使用 GMT(格林威治标准时间)时戳。这可确保在

不同时区中的节点返回相同的结果。默认值为 1。不应该更改此值。

cache_target_dirty_ratio

在缓存分层代理将已修改(脏)对象刷新到后备存储池之前,包含此类对象的缓存池百分

比。默认值为 0.4。

cache_target_dirty_high_ratio

146 设置存储池的值 SES 6

Page 167: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

在缓存分层代理将已修改(脏)对象刷新到速度更快的后备存储池之前,包含此类对象的

缓存池百分比。默认值为 0.6。

cache_target_full_ratio

在缓存分层代理将未修改(正常)对象从缓存池赶出之前,包含此类对象的缓存池百分

比。默认值为 0.8。

target_max_bytes

触发 max_bytes 阈值后,Ceph 将会开始刷新或赶出对象。

target_max_objects

触发 max_objects 阈值时,Ceph 将开始刷新或赶出对象。

hit_set_grade_decay_rate

两次连续的 hit_set 之间的温度降低率。默认值为 20。

hit_set_search_last_n

计算温度时在 hit_set 中对出现的项最多计 N 次。默认值为 1。

cache_min_flush_age

在缓存分层代理将对象从缓存池刷新到存储池之前的时间(秒)。

cache_min_evict_age

在缓存分层代理将对象从缓存池中赶出之前的时间(秒)。

fast_read

如果对纠删码存储池启用此标志,则读取请求会向所有分片发出子读取命令,并一直等到

接收到足够解码的分片,才会为客户端提供服务。对于 jerasure 和 isa 纠删插件,前 K 个

副本返回时,就会使用从这些副本解码的数据立即处理客户端的请求。采用此方法会产生

较高的 CPU 负载,而磁盘/网络负载则较低。目前,此标志仅支持用于纠删码存储池。默

认值为 0。

scrub_min_interval

集群负载低时洗刷存储池的最小间隔(秒)。默认值 0 表示使用来自 Ceph 配置文件的

osd_scrub_min_interval 值。

scrub_max_interval

不论集群负载如何都洗刷存储池的最大间隔(秒)。默认值 0 表示使用来自 Ceph 配置文

件的 osd_scrub_max_interval 值。

147 设置存储池的值 SES 6

Page 168: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

deep_scrub_interval

深层洗刷存储池的间隔(秒)。默认值 0 表示使用来自 Ceph 配置文件的

osd_deep_scrub 值。

11.2.9 设置对象副本数

要设置副本存储池上的对象副本数,请执行以下命令:

cephadm@adm > ceph osd pool set poolname size num-replicas

num-replicas 包括对象本身。例如,如果您想用对象和对象的两个副本组成对象的三个实

例,请指定 3。

警告:设置的副本不能少于 3 个如果将 num-replicas 设置为 2,数据将只有一个副本。例如,如果一个对象实例发生

故障,则需要在恢复期间确定自上次洗刷后,另一个副本没有损坏(有关详细信息,请参

见第 9.6 节 “洗刷”)。

将存储池设置为具有一个副本意味着存储池中的数据对象只有一个实例。如果 OSD 发生

故障,您将丢失数据。如果要短时间存储临时数据,可能就会用到只有一个副本的存储

池。

提示:设置 3 个以上的副本为存储池设置 4 个副本可将可靠性提高 25%。

如果有两个数据中心,您至少需要为存储池设置 4 个副本,使每个数据中心都有两个副

本。如此,当其中一个数据中心发生故障时,仍有两个副本存在,并且如果又有一个磁盘

发生故障,您仍可确保不会丢失数据。

注意对象可以接受降级模式下副本数量低于 pool size 的 I/O。要设置 I/O 所需副本的最小

数目,应该使用 min_size 设置。例如:

cephadm@adm > ceph osd pool set data min_size 2

148 设置对象副本数 SES 6

Page 169: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

这可确保数据池中没有对象会接收到副本数量低于 min_size 的 I/O。

提示:获取对象副本数要获取对象副本数,请执行以下命令:

cephadm@adm > ceph osd dump | grep 'replicated size'

Ceph 将列出存储池,并高亮显示 replicated size 属性。Ceph 默认会创建对象的

两个副本(共三个副本,或者大小为 3)。

11.3 存储池迁移创建存储池(请参见第 11.2.2 节 “创建存储池”)时,您需要指定存储池的初始参数,例如存储

池类型或归置组数量。如果您稍后决定更改其中的任一参数(例如将副本存储池转换为纠删码

存储池,或者减少归置组数量),您需要将存储池数据迁移到其参数适合您的部署的另一个存

储池。

迁移存储池的方法有多种。我们建议使用缓存层,因为此方法是透明的,能够减少集群停机时

间并避免复制整个存储池的数据。

11.3.1 使用缓存层迁移

提示:仅迁移副本存储池您可以使用缓存层方法从副本存储池迁移到纠删码存储池或另一个副本存储池。不支持从

纠删码存储池迁移。

该方法的原理十分简单,只需将需要迁移的存储池按相反的顺序加入缓存层中即可。有关缓存

层的详细信息,请参见第 14 章 “缓存分层”。下面是将名为“testpool”的副本存储池迁移到纠删

码存储池的示例:

149 存储池迁移 SES 6

Page 170: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

过程 11.1︰ 将副本存储池迁移到纠删码存储池

1. 创建一个名为“newpool”的新纠删码存储池。有关存储池创建参数的详细说明,请参

见第 11.2.2 节 “创建存储池”。

cephadm@adm > ceph osd pool create newpool PG_NUM PGP_NUM erasure default

确认使用的客户端密钥环提供的针对“newpool”的用户权限至少与“testpool”的相同。

您现在有两个池,即装满数据的原始副本存储池“testpool”和新的空纠删码存储

池“newpool”:

图 11.1︰ 迁移前的存储池

2. 设置缓存层,并将副本存储池“testpool”配置为缓存池。通过使用 -force-nonempty 选

项,即使存储池已有数据,您也可以添加缓存层:

cephadm@adm > ceph tell mon.* injectargs \

'--mon_debug_unsafe_allow_tier_with_nonempty_snaps=1'

cephadm@adm > ceph osd tier add newpool testpool --force-nonempty

cephadm@adm > ceph osd tier cache-mode testpool proxy

图 11.2︰ 缓存层设置

3. 强制缓存池将所有对象移到新池中:

cephadm@adm > rados -p testpool cache-flush-evict-all

150 使用缓存层迁移 SES 6

Page 171: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 11.3︰ 数据刷新

4. 您需要指定一个覆盖层,以便在旧池中搜索对象,直到所有数据都已刷新到新的纠删码存

储池。

cephadm@adm > ceph osd tier set-overlay newpool testpool

有了覆盖层,所有操作都会转到旧的副本存储池“testpool”:

图 11.4︰ 设置覆盖层

现在,您可以将所有客户端都切换为访问新池中的对象。

5. 所有数据都迁移到纠删码存储池“newpool”后,删除覆盖层和旧超速缓冲池“testpool”:

cephadm@adm > ceph osd tier remove-overlay newpool

cephadm@adm > ceph osd tier remove newpool testpool

图 11.5︰ 迁移完成

6. 运行

151 使用缓存层迁移 SES 6

Page 172: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > ceph tell mon.* injectargs \

'--mon_debug_unsafe_allow_tier_with_nonempty_snaps=0'

警告:您无法将 RBD 映像和 CephFS 导出项迁移到纠删码存储池您无法将 RBD 映像和 CephFS 导出项从副本存储池迁移到纠删码存储池。纠删码存储池

可以存储数据,但无法存储元数据。系统将无法清理 RBD 的报头对象。这一点对 CephFS

同样适用。

11.3.2 迁移 RADOS 块设备映像

建议采用如下方式将 RBD 映像从一个副本存储池迁移到另一个副本存储池。

1. 禁止客户端(例如虚拟机)访问 RBD 映像。

2. 在目标存储池中创建新映像,将其父项设置为源映像:

cephadm@adm > rbd migration prepare SRC_POOL/IMAGE TARGET_POOL/IMAGE

提示:仅将数据迁移到纠删码存储池如果您只需将映像数据迁移到新纠删码存储池,而将元数据保留在原始副本存储池

中,请改为运行以下命令:

cephadm@adm > rbd migration prepare SRC_POOL/IMAGE \

--data-pool TARGET_POOL/IMAGE

152 迁移 RADOS 块设备映像 SES 6

Page 173: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

注意:客户端支持和停机时间使用 rbd migration 方法可确保在迁移映像时最大限度地减少客户端停机时

间。您只需要在“准备”步骤之前停止客户端,在此之后便可将其启动。请注意,只

有支持此特性的 librbd 客户端(Ceph Nautilus 或更新版本)才能在“准备”步骤

之后打开映像,而较旧的 librbd 客户端或 krbd 客户端在执行“提交”步骤之前

将无法打开映像。

3. 让客户端访问目标存储池中的映像。

4. 将数据迁移到目标存储池:

cephadm@adm > rbd migration execute SRC_POOL/IMAGE

5. 删除旧映像:

cephadm@adm > rbd migration commit SRC_POOL/IMAGE

11.4 存储池快照存储池快照是整个 Ceph 存储池的状态快照。通过存储池快照,可以保留存储池状态的历史。创

建存储池快照会占用与存储池大小成正比的存储空间。在创建存储池快照之前,始终需要检查

相关存储是否有足够的磁盘空间。

11.4.1 创建存储池快照

要创建存储池快照,请运行以下命令:

cephadm@adm > ceph osd pool mksnap POOL-NAME SNAP-NAME

例如:

cephadm@adm > ceph osd pool mksnap pool1 snap1

153 存储池快照 SES 6

Page 174: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

created pool pool1 snap snap1

11.4.2 列出存储池的快照

要列出存储池的现有快照,请运行以下命令:

cephadm@adm > rados lssnap -p POOL_NAME

例如:

cephadm@adm > rados lssnap -p pool1

1 snap1 2018.12.13 09:36:20

2 snap2 2018.12.13 09:46:03

2 snaps

11.4.3 删除存储池快照

要删除存储池的某个快照,请运行以下命令:

cephadm@adm > ceph osd pool rmsnap POOL-NAME SNAP-NAME

11.5 数据压缩BlueStore(有关更多详细信息,请参见《部署指南》, 第 1 章 “SUSE Enterprise Storage 6 和

Ceph”, 第 1.4 节 “BlueStore”)提供即时数据压缩,以节省磁盘空间。压缩率取决于系统中存储

的数据。请注意,压缩/解压缩需要额外的 CPU 资源。

您可以全局配置数据压缩(请参见第 11.5.3 节 “全局压缩选项”),然后覆盖各个存储池的特定

压缩设置。

无论存储池是否包含数据,您都可以启用或禁用存储池数据压缩,或者随时更改压缩算法和模

式。

启用存储池压缩之后,将不会向现有数据应用压缩。

禁用某个存储池的压缩之后,将会解压缩该存储池的所有数据。

154 列出存储池的快照 SES 6

Page 175: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

11.5.1 启用压缩

要对名为 POOL_NAME 的存储池启用数据压缩,请运行以下命令:

cephadm@adm > ceph osd pool set POOL_NAME

compression_algorithm COMPRESSION_ALGORITHM

cephadm@adm > ceph osd pool set POOL_NAME compression_mode COMPRESSION_MODE

提示:禁用存储池压缩要对存储池禁用数据压缩,请使用“none”压缩算法:

cephadm@adm > ceph osd pool set POOL_NAME compression_algorithm none

11.5.2 存储池压缩选项

完整的压缩设置列表:

compression_algorithm

可用的值有 none、 zstd、 snappy。默认值为 snappy。

使用的压缩算法取决于特定使用情形。以下是一些相关的建议:

只要您没有充分的理由更改默认值 snappy,就请使用该值。

zstd 可提供较佳的压缩率,但当压缩少量数据时,会导致 CPU 开销较高。

针对实际数据的样本运行这些算法的基准测试,观察集群的 CPU 和内存使用率。

compression_mode

可用的值有 none、 aggressive、 passive、 force。默认值为 none。

none:从不压缩

passive:如果提示 COMPRESSIBLE,则压缩

aggressive:除非提示 INCOMPRESSIBLE,才压缩

force:始终压缩

155 启用压缩 SES 6

Page 176: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

compression_required_ratio

值:双精度型,比例 = SIZE_COMPRESSED / SIZE_ORIGINAL。默认值为 0.875,这表示

如果压缩未将占用空间至少减少 12.5%,将不会压缩对象。

由于净增益低,存储高于此比例的对象时不会压缩。

compression_max_blob_size

值:无符号整数,大小以字节为单位。默认值: 0

所压缩对象的最大大小。

compression_min_blob_size

值:无符号整数,大小以字节为单位。默认值: 0

所压缩对象的最小大小。

11.5.3 全局压缩选项

可在 Ceph 配置中设置以下配置选项,并将其应用于所有 OSD 而不仅仅是单个存储

池。第 11.5.2 节 “存储池压缩选项”中列出的存储池特定配置优先。

bluestore_compression_algorithm

请参见compression_algorithm

bluestore_compression_mode

请参见compression_mode

bluestore_compression_required_ratio

请参见compression_required_ratio

bluestore_compression_min_blob_size

值:无符号整数,大小以字节为单位。默认值: 0

所压缩对象的最小大小。系统默认会忽略该设置,并使用

bluestore_compression_min_blob_size_hdd 和

bluestore_compression_min_blob_size_ssd 的值。如果设置为非零值,则该设

置优先。

bluestore_compression_max_blob_size

值:无符号整数,大小以字节为单位。默认值: 0

156 全局压缩选项 SES 6

Page 177: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

在将对象分割为更小的块之前所压缩对象的最大大小。系统默认会忽略该

设置,并使用 bluestore_compression_max_blob_size_hdd 和

bluestore_compression_max_blob_size_ssd 的值。如果设置为非零值,则该设

置优先。

bluestore_compression_min_blob_size_ssd

值:无符号整数,大小以字节为单位。默认值: 8K

压缩并存储在固态硬盘上的对象的最小大小。

bluestore_compression_max_blob_size_ssd

值:无符号整数,大小以字节为单位。默认值: 64K

在将对象分割为更小的块之前压缩并存储在固态硬盘上的对象的最大大小。

bluestore_compression_min_blob_size_hdd

值:无符号整数,大小以字节为单位。默认值: 128K

压缩并存储在普通硬盘上的对象的最小大小。

bluestore_compression_max_blob_size_hdd

值:无符号整数,大小以字节为单位。默认值: 512K

在将对象分割为更小的块之前压缩并存储在硬盘上的对象的最大大小。

157 全局压缩选项 SES 6

Page 178: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

12 RADOS 块设备

一个块就是由若干字节组成的序列,例如 4 MB 的数据块。基于块的存储接口是使用旋转媒体

(例如硬盘、CD、软盘)存储数据最常见的方式。块设备接口的普及,也使得虚拟块设备成为

与大量数据存储系统(例如 Ceph)进行交互的理想选择。

Ceph 块设备允许共享物理资源,并且可以调整大小。它们会在 Ceph 集群中的多个 OSD 上等量

存储数据。Ceph 块设备会利用 RADOS 功能,例如创建快照、复制和一致性。Ceph 的 RADOS

块设备 (RBD) 使用内核扩展模块或 librbd 库与 OSD 交互。

图 12.1︰ RADOS 协议

Ceph 的块设备为内核扩展模块提供高性能及无限的可扩展性。它们支持虚拟化解决方案(例如

QEMU)或依赖于 libvirt 的基于云的计算系统(例如 OpenStack)。您可以使用同一个集

群来同时操作对象网关、CephFS 和 RADOS 块设备。

12.1 块设备命令rbd 命令可让您创建、列出、内省和删除块设备映像。您还可以使用它来执行其他操作,例

如,克隆映像、创建快照、将映像回滚到快照或查看快照。

12.1.1 在副本存储池中创建块设备映像

将块设备添加到客户端之前,您需要在现有存储池中创建一个相关的映像(请参见第 11 章 “管

理存储池”):

cephadm@adm > rbd create --size MEGABYTES POOL-NAME/IMAGE-NAME

例如,要创建名为“myimage”的 1 GB 映像,并使其将信息存储在名为“mypool”的存储池中,请

执行以下命令:

cephadm@adm > rbd create --size 1024 mypool/myimage

158 块设备命令 SES 6

Page 179: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

提示:映像大小单位如果您省略了大小单位缩写(“G”或“T”),映像大小将以兆字节为单位。请在大小数值之

后使用“G”或“T”来指定千兆字节或太字节。

12.1.2 在纠删码存储池中创建块设备映像

自 SUSE Enterprise Storage 5 起,可以将块设备映像的数据直接存储在纠删码 (EC) 存储池

中。RADOS 块设备映像由数据和元数据两部分组成。您只能将 RADOS 块设备映像的“数据”部分

存储在 EC 存储池中。要这么做,存储池的“overwrite”标志需要设置为 true,并且用于存储存储

池的所有 OSD 都必须使用 BlueStore。

不能将映像的“元数据”部分存储在 EC 存储池中。您需要使用 rbd create 命令的 --pool=

选项来指定用于存储映像元数据的副本存储池。

通过以下步骤可在新创建的 EC 存储池中创建 RBD 映像:

cephadm@adm > ceph osd pool create POOL_NAME 12 12 erasure

cephadm@adm > ceph osd pool set POOL_NAME allow_ec_overwrites true

#Metadata will reside in pool "OTHER_POOL", and data in pool "POOL_NAME"

cephadm@adm > rbd create IMAGE_NAME --size=1G --data-pool POOL_NAME --

pool=OTHER_POOL

12.1.3 列出块设备映像

要列出名为“mypool”的存储池中的块设备,请执行以下命令:

cephadm@adm > rbd ls mypool

12.1.4 检索映像信息

要从名为“mypool”的存储池内的映像“myimage”检索信息,请运行以下命令:

cephadm@adm > rbd info mypool/myimage

159 在纠删码存储池中创建块设备映像 SES 6

Page 180: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

12.1.5 调整块设备映像的大小

RADOS 块设备映像是瘦配置 — 在您开始将数据保存到这些映像之前,它们实际上并不会使用任

何物理存储。但是,这些映像具有您使用 --size 选项设置的最大容量。如果您要增大(或减

小)映像的最大大小,请运行以下命令:

cephadm@adm > rbd resize --size 2048 POOL_NAME/IMAGE_NAME # to increase

cephadm@adm > rbd resize --size 2048 POOL_NAME/IMAGE_NAME --allow-shrink # to

decrease

12.1.6 删除块设备映像

要删除与“mypool”存储池内的映像“myimage”对应的块设备,请运行以下命令:

cephadm@adm > rbd rm mypool/myimage

12.2 装入和卸载创建 RADOS 块设备之后,便可以像任何其他磁盘设备一样使用它:进行格式化、将其装入以便

能够交换文件,以及在完成时将其卸载。

1. 确保您的 Ceph 集群的存储池中包含要映射的磁盘映像。假设存储池名为 mypool,映像

名为 myimage。

cephadm@adm > rbd list mypool

2. 将映像映射到新的块设备。

cephadm@adm > rbd map --pool mypool myimage

提示:用户名和身份验证要指定用户名,请使用 --id 用户名。如果您使用 cephx 身份验证,则还需要

指定密钥。该机密可能来自密钥环,或某个包含机密的文件:

160 调整块设备映像的大小 SES 6

Page 181: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > rbd map --pool rbd myimage --id admin --keyring /path/

to/keyring

或者

cephadm@adm > rbd map --pool rbd myimage --id admin --keyfile /path/

to/file

3. 列出所有映射的设备:

cephadm@adm > rbd showmapped

id pool image snap device

0 mypool myimage - /dev/rbd0

我们要使用的设备是 /dev/rbd0。

提示:RBD 设备路径您可以使用 /dev/rbd/存储池名称/映像名称作为永久设备路径来代替 /dev/

rbd设备编号。例如:

/dev/rbd/mypool/myimage

4. 在 /dev/rbd0 设备上创建 XFS 文件系统。

root # mkfs.xfs /dev/rbd0

log stripe unit (4194304 bytes) is too large (maximum is 256KiB)

log stripe unit adjusted to 32KiB

meta-data=/dev/rbd0 isize=256 agcount=9, agsize=261120

blks

= sectsz=512 attr=2, projid32bit=1

= crc=0 finobt=0

data = bsize=4096 blocks=2097152, imaxpct=25

= sunit=1024 swidth=1024 blks

naming =version 2 bsize=4096 ascii-ci=0 ftype=0

log =internal log bsize=4096 blocks=2560, version=2

161 装入和卸载 SES 6

Page 182: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

= sectsz=512 sunit=8 blks, lazy-count=1

realtime =none extsz=4096 blocks=0, rtextents=0

5. 装入设备并检查它是否已正确装入。将 /mnt 替换为您的装入点。

root # mount /dev/rbd0 /mnt

root # mount | grep rbd0

/dev/rbd0 on /mnt type xfs (rw,relatime,attr2,inode64,sunit=8192,...

现在,您便可以将数据移入/移出设备,就如同它是本地目录一样。

提示:增大 RBD 设备的大小如果您发现 RBD 设备的大小不再够用,可以轻松增大大小。

1. 增大 RBD 映像的大小,例如增大到 10GB。

cephadm@adm > rbd resize --size 10000 mypool/myimage

Resizing image: 100% complete...done.

2. 扩大文件系统以填入设备的新大小。

root # xfs_growfs /mnt

[...]

data blocks changed from 2097152 to 2560000

6. 当您访问完设备后,可以将其取消映射并卸载。

cephadm@adm > rbd unmap /dev/rbd0

root # unmount /mnt

提示:手动装入(卸载)因为在引导之后手动映射和装入 RBD 映像以及在关机之前卸载和取消映射会非常麻烦,

我们提供了 rbdmap 脚本和 systemd 单元。请参考第 12.2.1 节 “rbdmap:在引导时

映射 RBD 设备”。

162 装入和卸载 SES 6

Page 183: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

12.2.1 rbdmap:在引导时映射 RBD 设备

rbdmap 是一个外壳脚本,可对一个或多个 RBD 映像自动执行 rbd map 和 rbd unmap 操

作。虽然您随时都可以手动运行该脚本,但其主要优势是在引导时自动映射和装入 RBD 映像

(以及在关机时卸载和取消映射),此操作由 Init 系统触发。 ceph-common 包中随附了一个

systemd 单元文件 rbdmap.service 用于执行此操作。

该脚本使用单个自变量,可以是 map 或 unmap。使用任一自变量时,该脚本都会分析配置文

件。它默认为 /etc/ceph/rbdmap,但可通过环境变量 rbdmapFILE 覆盖。该配置文件的

每一行相当于一个要映射或取消映射的 RBD 映像。

配置文件采用以下格式:

image_specification rbd_options

image_specification

存储池中映像的路径。以 pool_name / image_name 格式指定。

rbd_options

要传递给底层 rbd map 命令的参数的可选列表。这些参数及其值应该以逗号分隔的字符

串形式指定,例如:

PARAM1=VAL1,PARAM2=VAL2,...

该示例让 rbdmap 脚本运行以下命令:

cephadm@adm > rbd map POOL_NAME/IMAGE_NAME --PARAM1 VAL1 --PARAM2 VAL2

下面的示例中介绍了如何使用相应的密钥指定用户名和密钥环:

cephadm@adm > rbdmap map mypool/myimage id=rbd_user,keyring=/etc/ceph/

ceph.client.rbd.keyring

以 rbdmap map 形式运行时,该脚本会分析配置文件,并且对于每个指定的 RBD 映像,它会

尝试先映射映像(使用 rbd map 命令),再装入映像。

以 rbdmap unmap 形式运行时,配置文件中列出的映像将卸载并取消映射。

rbdmap unmap-all 会尝试卸载然后取消映射所有当前已映射的 RBD 映像,而不论它们是否

列在配置文件中。

163 rbdmap:在引导时映射 RBD 设备 SES 6

Page 184: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

如果成功,rbd map 操作会将映像映射到 /dev/rbdX 设备,此时会触发 udev 规则,以创建易记

设备名称符号链接 /dev/rbd/pool_name/image_name,该链接指向实际映射的设备。

为了装入和卸载成功,易记设备名称在 /etc/fstab 中需有对应项。写入 RBD 映像的 /etc/

fstab 项时,指定“noauto”(或“nofail”)装入选项。这可防止 Init 系统过早(尚未出现有问

题的设备时)尝试装入设备,因为 rbdmap.service 通常是在引导序列中相当靠后的时间触

发。

有关 rbd 选项的完整列表,请参见 rbd 手册页 ( man 8 rbd )。

有关 rbdmap 用法的示例,请参见 rbdmap 手册页 ( man 8 rbdmap )。

12.2.2 增大 RBD 设备的大小

如果您发现 RBD 设备的大小不再够用,可以轻松增大大小。

1. 增大 RBD 映像的大小,例如增大到 10GB。

cephadm@adm > rbd resize --size 10000 mypool/myimage

Resizing image: 100% complete...done.

2. 扩大文件系统以填入设备的新大小。

root # xfs_growfs /mnt

[...]

data blocks changed from 2097152 to 2560000

12.3 快照RBD 快照是 RADOS 块设备映像的快照。通过快照,您可以保留映像状态的历史。Ceph 还支

持快照分层,这可让您轻松快速地克隆 VM 映像。Ceph 使用 rbd 命令和许多高级接口(包括

QEMU、 libvirt、OpenStack 和 CloudStack)支持块设备快照。

164 增大 RBD 设备的大小 SES 6

Page 185: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

注意在创建映像的快照之前,请停止输入和输出操作,并刷新所有待处理写操作。如果映像包

含文件系统,则在创建快照时,文件系统必须处于一致状态。

12.3.1 Cephx 注意事项

如果启用了 cephx,则必须指定用户名或 ID,以及包含用户相应密钥的密钥环的路径。有关详

细信息,请参见 第 8 章 “使用 cephx 进行身份验证”。您还可以添加 CEPH_ARGS 环境变量,

以免重新输入以下参数。

cephadm@adm > rbd --id user-ID --keyring=/path/to/secret commands

cephadm@adm > rbd --name username --keyring=/path/to/secret commands

例如:

cephadm@adm > rbd --id admin --keyring=/etc/ceph/ceph.keyring commands

cephadm@adm > rbd --name client.admin --keyring=/etc/ceph/ceph.keyring commands

提示将用户和机密添加到 CEPH_ARGS 环境变量,如此您便无需每次都输入它们。

12.3.2 快照基础知识

下面的过程说明如何在命令行上使用 rbd 命令创建、列出和删除快照。

12.3.2.1 创建快照

要使用 rbd 创建快照,请指定 snap create 选项、存储池名称和映像名称。

cephadm@adm > rbd --pool pool-name snap create --snap snap-name image-name

cephadm@adm > rbd snap create pool-name/image-name@snap-name

例如:

165 Cephx 注意事项 SES 6

Page 186: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > rbd --pool rbd snap create --snap snapshot1 image1

cephadm@adm > rbd snap create rbd/image1@snapshot1

12.3.2.2 列出快照

要列出映像的快照,请指定存储池名称和映像名称。

cephadm@adm > rbd --pool pool-name snap ls image-name

cephadm@adm > rbd snap ls pool-name/image-name

例如:

cephadm@adm > rbd --pool rbd snap ls image1

cephadm@adm > rbd snap ls rbd/image1

12.3.2.3 回滚快照

要使用 rbd 回滚快照,请指定 snap rollback 选项、存储池名称、映像名称和快照名称。

cephadm@adm > rbd --pool pool-name snap rollback --snap snap-name image-name

cephadm@adm > rbd snap rollback pool-name/image-name@snap-name

例如:

cephadm@adm > rbd --pool pool1 snap rollback --snap snapshot1 image1

cephadm@adm > rbd snap rollback pool1/image1@snapshot1

注意将映像回滚到快照意味着会使用快照中的数据重写当前版本的映像。执行回滚所需的时间

将随映像大小的增加而延长。从快照克隆较快,而从映像到快照的回滚较慢,因此克隆是

返回先前存在状态的首选方法。

12.3.2.4 删除快照

要使用 rbd 删除快照,请指定 snap rm 选项、存储池名称、映像名称和用户名。

166 快照基础知识 SES 6

Page 187: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > rbd --pool pool-name snap rm --snap snap-name image-name

cephadm@adm > rbd snap rm pool-name/image-name@snap-name

例如:

cephadm@adm > rbd --pool pool1 snap rm --snap snapshot1 image1

cephadm@adm > rbd snap rm pool1/image1@snapshot1

注意Ceph OSD 会以异步方式删除数据,因此删除快照不能立即释放磁盘空间。

12.3.2.5 清除快照

要使用 rbd 删除映像的所有快照,请指定 snap purge 选项和映像名称。

cephadm@adm > rbd --pool pool-name snap purge image-name

cephadm@adm > rbd snap purge pool-name/image-name

例如:

cephadm@adm > rbd --pool pool1 snap purge image1

cephadm@adm > rbd snap purge pool1/image1

12.3.3 分层

Ceph 支持为一个块设备快照创建多个写入时复制 (COW) 克隆的功能。快照分层可让 Ceph 块设

备客户端能够极快地创建映像。例如,您可以创建块设备映像并将 Linux VM 写入其中,然后创

建映像的快照、保护快照,并创建您所需数量的“写入时复制”克隆。快照是只读的,因此克隆快

照简化了语义,如此可快速创建克隆。

注意下面的命令行示例中提到的“父”和“子”这两个术语是指 Ceph 块设备快照(父)和从快照

克隆的相应映像(子)。

167 分层 SES 6

Page 188: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

每个克隆的映像(子)都存储了对其父映像的引用,这可让克隆的映像打开父快照并读取其内

容。

快照的 COW 克隆的行为方式与任何其他 Ceph 块设备映像完全相同。可针对克隆的映像执行读

取、写入、克隆和调整大小操作。系统对克隆的映像没有特殊限制。但是,快照的写入时复制

克隆会引用快照,因此您必须在克隆快照之前保护快照。

注意:不支持 --image-format 1您无法为通过弃用的 rbd create --image-format 1 选项创建的映像创建快

照。Ceph 仅支持克隆默认的 format 2 映像。

12.3.3.1 分层入门

Ceph 块设备分层是一个简单的过程。您必须有一个映像。您必须创建映像的快照。您必须保护

快照。在您执行这些步骤之后,就可以开始克隆快照了。

克隆的映像具有对父快照的引用,并且包含存储池 ID、映像 ID 和快照 ID。包含存储池 ID 意味

着您可以将快照从一个存储池克隆到另一个存储池中的映像。

映像模板:一种常见的块设备分层用例是创建主映像和用作克隆模板的快照。例如,用户

可为 Linux 发行套件(如 SUSE Linux Enterprise Server)创建映像并为它创建快照。用户

可以定期更新映像和创建新的快照(例如,先执行 zypper ref && zypper patch,

接着执行 rbd snap create)。随着映像日趋成熟,用户可以克隆任何一个快照。

扩展模板:更高级的用例包括扩展比基本映像提供的信息更多的模板映像。例如,用户可

以克隆映像(VM 模板)并安装其他软件(例如,数据库、内容管理系统或分析系统),

然后创建扩展映像的快照,这个扩展映像可以如基本映像一样更新。

模板池:使用块设备分层的一种方法是创建包含主映像(用作模板)的池,然后创建这些

模板的快照。之后,您便可以扩大用户的只读特权,使他们可以克隆快照,却不能写入存

储池或在存储池中执行。

映像迁移/恢复:使用块设备分层的一种方法是将数据从一个存储池迁移或恢复到另一个存

储池。

168 分层 SES 6

Page 189: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

12.3.3.2 保护快照

克隆会访问父快照。如果用户意外删除了父快照,则所有克隆都会损坏。为了防止数据丢失,

您需要先保护快照,然后才能克隆它。

cephadm@adm > rbd --pool pool-name snap protect \

--image image-name --snap snapshot-name

cephadm@adm > rbd snap protect pool-name/image-name@snapshot-name

例如:

cephadm@adm > rbd --pool pool1 snap protect --image image1 --snap snapshot1

cephadm@adm > rbd snap protect pool1/image1@snapshot1

注意您无法删除受保护的快照。

12.3.3.3 克隆快照

要克隆快照,您需要指定父存储池、映像、快照、子存储池和映像名称。您需要先保护快照,

然后才能克隆它。

cephadm@adm > rbd clone --pool pool-name --image parent-image \

--snap snap-name --dest-pool pool-name \

--dest child-image

cephadm@adm > rbd clone pool-name/parent-image@snap-name \

pool-name/child-image-name

例如:

cephadm@adm > rbd clone pool1/image1@snapshot1 pool1/image2

注意您可以将快照从一个存储池克隆到另一个存储池中的映像。例如,可以在一个存储池中将

只读映像和快照作为模板维护,而在另一个存储池中维护可写入克隆。

169 分层 SES 6

Page 190: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

12.3.3.4 取消保护快照

必须先取消保护快照,然后才能删除它。另外,您无法删除克隆所引用的快照。您需要先平展

快照的每个克隆,然后才能删除快照。

cephadm@adm > rbd --pool pool-name snap unprotect --image image-name \

--snap snapshot-name

cephadm@adm > rbd snap unprotect pool-name/image-name@snapshot-name

例如:

cephadm@adm > rbd --pool pool1 snap unprotect --image image1 --snap snapshot1

cephadm@adm > rbd snap unprotect pool1/image1@snapshot1

12.3.3.5 列出快照的子项

要列出快照的子项,请执行以下命令:

cephadm@adm > rbd --pool pool-name children --image image-name --snap snap-name

cephadm@adm > rbd children pool-name/image-name@snapshot-name

例如:

cephadm@adm > rbd --pool pool1 children --image image1 --snap snapshot1

cephadm@adm > rbd children pool1/image1@snapshot1

12.3.3.6 平展克隆的映像

克隆的映像会保留对父快照的引用。删除子克隆对父快照的引用时,可通过将信息从快照复制

到克隆,高效“平展”映像。平展克隆所需的时间随着映像大小的增加而延长。要删除快照,必须

先平展子映像。

cephadm@adm > rbd --pool pool-name flatten --image image-name

cephadm@adm > rbd flatten pool-name/image-name

例如:

cephadm@adm > rbd --pool pool1 flatten --image image1

170 分层 SES 6

Page 191: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > rbd flatten pool1/image1

注意由于平展的映像包含快照中的所有信息,平展的映像占用的存储空间将比分层克隆多。

12.4 镜像RBD 映像可以在两个 Ceph 集群之间异步镜像。此功能使用 RBD 日志映像功能来确保集群之间

的复制在崩溃时保持一致。镜像在同伴集群中逐池配置,并且可以配置为自动镜像池中的所有

映像或仅镜像特定的映像子集。镜像使用 rbd 命令进行配置。 rbd-mirror 守护进程负责从

远程同伴集群提取映像更新,并将它们应用于本地集群中的映像。

注意:rbd-mirror 守护进程要使用 RBD 镜像,您需要有两个 Ceph 集群,每个集群都运行 rbd-mirror 守护进

程。

重要:通过 iSCSI 导出的 RADOS 块设备您无法使用基于内核的 iSCSI 网关镜像通过 iSCSI 导出的 RBD 设备。

有关 iSCSI 的更多详细信息,请参见第 18 章 “Ceph iSCSI 网关”。

12.4.1 rbd-mirror 守护进程

两个 rbd-mirror 守护进程负责检查远程同伴集群上的映像日记并针对本地集群重放日记事

件。RBD 映像日志功能会按发生的顺序记录对映像进行的所有修改。如此可确保远程映像崩溃

状态一致的镜像可在本地使用。

rbd-mirror 守护进程在 rbd-mirror 包中提供。您可以在 OSD 节点、网关节点甚至是专

用节点上安装该包。不建议您将 rbd-mirror 安装在管理节点上。安装、启用和启动 rbd-

mirror:

root@minion > zypper install rbd-mirror

171 镜像 SES 6

Page 192: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

root@minion > systemctl enable ceph-rbd-mirror@server_name.service

root@minion > systemctl start ceph-rbd-mirror@server_name.service

重要每个 rbd-mirror 守护进程都必须能够同时连接到两个集群。

12.4.2 存储池配置

以下过程说明如何使用 rbd 命令来执行配置镜像的基本管理任务。镜像在 Ceph 集群中逐池进

行配置。

您需要在两个同伴集群上执行存储池配置步骤。为清楚起见,这些过程假设名

为“local”和“remote”的两个集群可从单台主机访问。

有关如何连接到不同的 Ceph 集群的更多详细信息,请参见 rbd 手册页 ( man 8 rbd )。

提示:多个集群在下面的示例中,集群名称与同名的 Ceph 配置文件 /etc/ceph/remote.conf 相对

应。

12.4.2.1 在存储池上启用镜像

要针对存储池启用镜像,请指定 mirror pool enable 子命令、存储池名称和镜像模式。镜

像模式可以是存储池或映像:

pool

将会镜像启用了日志特性的存储池中的所有映像。

image

需要针对每个映像明确启用镜像。有关详细信息,请参见第 12.4.3.2 节 “启用映像镜像”。

例如:

cephadm@adm > rbd --cluster local mirror pool enable POOL_NAME pool

cephadm@adm > rbd --cluster remote mirror pool enable POOL_NAME pool

172 存储池配置 SES 6

Page 193: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

12.4.2.2 禁用镜像

要对存储池禁用镜像,请指定 mirror pool disable 子命令和存储池名称。使用这种方法

对存储池禁用镜像时,还会对已为其明确启用镜像的所有映像(该存储池中)禁用镜像。

cephadm@adm > rbd --cluster local mirror pool disable POOL_NAME

cephadm@adm > rbd --cluster remote mirror pool disable POOL_NAME

12.4.2.3 添加集群同伴

为了让 rbd-mirror 守护进程发现它的同伴集群,需要向存储池注册该同伴集群。要添加镜像

同伴集群,请指定 mirror pool peer add 子命令、存储池名称和集群规格:

cephadm@adm > rbd --cluster local mirror pool peer add POOL_NAME

client.remote@remote

cephadm@adm > rbd --cluster remote mirror pool peer add POOL_NAME

client.local@local

12.4.2.4 删除集群同伴

要删除镜像同伴集群,请指定 mirror pool peer remove 子命令、存储池名称和对等

UUID(可通过 rbd mirror pool info 命令获得):

cephadm@adm > rbd --cluster local mirror pool peer remove POOL_NAME \

55672766-c02b-4729-8567-f13a66893445

cephadm@adm > rbd --cluster remote mirror pool peer remove POOL_NAME \

60c0e299-b38f-4234-91f6-eed0a367be08

12.4.3 映像配置

与存储池配置不同,映像配置只需要针对单个镜像同伴 Ceph 集群执行。

系统会将镜像的 RBD 映像指定为主要或非主要。这是映像的属性,而不是存储池的属性。不能

修改指定为非主要的映像。

173 映像配置 SES 6

Page 194: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

当首次对某个映像启用镜像时(如果存储池镜像模式是“存储池”并且映像已启用日志映像功能,

则为隐式启用,或可通过 rbd 命令显式启用(请参见第 12.4.3.2 节 “启用映像镜像”)),映像

会自动升级为主要映像。

12.4.3.1 映像日志支持

RBD 镜像使用 RBD 日志功能来确保复制的映像始终在崩溃时保持一致状态。在将映像镜

像到同伴集群之前,必须启用日志功能。可以在创建映像时通过将 --image-feature

exclusive-lock,journaling 选项提供给 rbd 命令来启用该功能。

或者,日志功能可以针对预先存在的 RBD 映像动态启用。要启用日记,请指定 feature

enable 子命令、存储池和映像名称以及功能名称:

cephadm@adm > rbd --cluster local feature enable POOL_NAME/IMAGE_NAME journaling

注意:选项依赖性journaling 功能依赖于 exclusive-lock 功能。如果 exclusive-lock 功能尚

未启用,则您需要先启用它,再启用 journaling 功能。

警告:针对所有新映像启用日志您可以在 Ceph 配置文件中的 rbd default features 选项中追加 journaling

值,以便默认对所有新映像启用日志。例如:

rbd default features = layering,exclusive-lock,object-map,deep-

flatten,journaling

应用此更改之前,请慎重考虑对所有新映像启用日志是否适合您的部署,因为这样做可能

会对性能产生负面影响。

12.4.3.2 启用映像镜像

如果镜像配置为“映像”模式,则需要为存储池中的每个映像明确启用镜像。要为特定映像启用镜

像,请指定 mirror image enable 子命令以及存储池和映像名称:

174 映像配置 SES 6

Page 195: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > rbd --cluster local mirror image enable POOL_NAME/IMAGE_NAME

12.4.3.3 禁用映像镜像

要为特定映像禁用镜像,请指定 mirror image disable 子命令以及存储池和映像名称:

cephadm@adm > rbd --cluster local mirror image disable POOL_NAME/IMAGE_NAME

12.4.3.4 映像升级和降级

在需要将主要指定移动到同伴集群中映像的故障转移情况下,您需要停止访问主要映像、降级

当前主要映像、升级新的主要映像,然后继续访问替代集群上的映像。

注意:强制升级可以使用 --force 选项强制升级。降级不能传播到同伴集群时(例如,当集群发生故

障或通讯中断时),就需要强制升级。这将导致两个同伴集群之间出现节点分裂情况,并

且映像不再同步,直到发出了 resync 子命令。

要将特定映像降级为非主要映像,请指定 mirror image demote 子命令以及存储池和映像

名称:

cephadm@adm > rbd --cluster local mirror image demote POOL_NAME/IMAGE_NAME

要将存储池中的所有主要映像都降级为非主要映像,请指定 mirror pool demote 子命令以

及存储池名称:

cephadm@adm > rbd --cluster local mirror pool demote POOL_NAME

要将特定映像升级为主要映像,请指定 mirror image promote 子命令以及存储池和映像名

称:

cephadm@adm > rbd --cluster remote mirror image promote POOL_NAME/IMAGE_NAME

175 映像配置 SES 6

Page 196: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

要将存储池中的所有非主要映像都升级为主要映像,请指定 mirror pool promote 子命令

以及存储池名称:

cephadm@adm > rbd --cluster local mirror pool promote POOL_NAME

提示:拆分 I/O 负载因为主要或非主要状态是针对映像的,所以可以使用两个集群来分割 I/O 负载并进行故障

转移或故障回复。

12.4.3.5 强制映像重新同步

如果 rbd-mirror 守护进程检测到分区事件,则在该情况解决之前,它不会尝试镜像受影响的

映像。要继续镜像映像,请先降级确定过期的映像,然后请求与主要映像重新同步。要请求映

像重新同步,请指定 mirror image resync 子命令以及存储池和映像名称:

cephadm@adm > rbd mirror image resync POOL_NAME/IMAGE_NAME

12.4.4 镜像状态

系统会存储每个主要镜像映像的同伴集群复制状态。此状态可使用 mirror image status

和 mirror pool status 子命令检索:

要请求镜像映像状态,请指定 mirror image status 子命令以及存储池和映像名称:

cephadm@adm > rbd mirror image status POOL_NAME/IMAGE_NAME

要请求镜像存储池摘要状态,请指定 mirror pool status 子命令以及存储池名称:

cephadm@adm > rbd mirror pool status POOL_NAME

提示:将 --verbose 选项添加到 mirror pool status 子命令会额外地输出存储池中每

个镜像映像的状态详细信息。

176 镜像状态 SES 6

Page 197: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

12.5 缓存设置Ceph 块设备的用户空间实现 ( librbd ) 无法利用 Linux 页面缓存。因此,它具有自己的内存中

缓存。RBD 缓存的行为与硬盘缓存类似。当 OS 发送屏障或刷新请求时,所有“脏”数据都会写入

OSD。这意味着只要虚拟机可以正确发送刷新请求,使用写回缓存与使用运行良好的物理硬盘

一样安全。该缓存运用最久未使用 (LRU) 算法,并且在写回模式下可以合并相邻请求以提高吞吐

量。

Ceph 支持为 RBD 提供写回缓存。要启用该缓存,请将

[client]

...

rbd cache = true

添加到 ceph.conf 文件的 [client] 段落。 librbd 默认不会执行任何缓存。写和读都

直接到达存储集群,并且只有当数据的所有副本都写入磁盘后写操作才会返回。如果启用了缓

存,写操作会立即返回,除非未刷新的字节数大于 rbd cache max dirty 选项中设置的数

值。在此情况下,写操作会触发写回机制并一直阻塞,直至有足够多的字节得到刷新。

Ceph 支持为 RBD 提供直写缓存。您可以设置缓存的大小,以及从写回缓存切换到直写缓存的

目标和限值。要启用直写模式,请设置

rbd cache max dirty = 0

这意味着只有当数据的所有副本都写入磁盘后写操作才会返回,但可能会从缓存中读取数据。

缓存信息保存在客户端的内存中,并且每个 RBD 都有自己的缓存。由于对客户端而言缓存位

于本地,因此如果有其他客户端访问映像,不会存在缓存一致性的问题。如果启用了缓存,在

RBD 上将不能运行 GFS 或 OCFS。

RBD 的设置应位于 ceph.conf 配置文件的 [client] 段落下。其设置包括:

rbd cache

对 RADOS 块设备 (RBD) 启用缓存。默认值为“true”。

rbd cache size

RBD 缓存大小(以字节为单位)。默认值为 32 MB。

rbd cache max dirty

使缓存触发写回机制的“脏”数据上限(以字节为单位)。 rbd cache max dirty 的值

必须小于 rbd cache size 的值。如果设置为 0,将使用直写缓存。默认值为 24 MB。

177 缓存设置 SES 6

Page 198: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

rbd cache target dirty

达到该“脏数据目标”后,缓存即会开始向数据存储空间写入数据。该设置不会使写入缓存

的操作阻塞。默认值为 16 MB。

rbd cache max dirty age

写回开始前,脏数据在缓存中暂存的时间(以秒为单位)。默认值为 1。

rbd cache writethrough until flush

开始进入直写模式,在收到第一条刷新请求后切换到写回模式。启用此设置虽然较为保

守,但却是一种安全的做法,如此可应对在 rbd 上运行的虚拟机太旧而无法发送刷新请

求的情况(例如,内核低于 2.6.32 的 Linux 中的 Virtio 驱动程序)。默认值为“true”。

12.6 QoS 设置一般而言,服务质量 (QoS) 指的是流量优先级设置和资源预留方法。它对于具有特殊要求的流

量传输尤为重要。

重要:不受 iSCSI 支持下列 QoS 设置仅由用户空间 RBD 实现 librbd 使用, kRBD 实现不使用这些设置。由

于 iSCSI 使用的是 kRBD,因此不使用 QoS 设置。不过,对于 iSCSI,您可以使用标准内

核工具在内核块设备层上配置 QoS。

rbd qos iops limit

指定的每秒 I/O 操作次数上限。默认值为 0(无限制)。

rbd qos bps limit

指定的每秒 I/O 字节数上限。默认值为 0(无限制)。

rbd qos read iops limit

指定的每秒读操作次数上限。默认值为 0(无限制)。

rbd qos write iops limit

指定的每秒写操作次数上限。默认值为 0(无限制)。

rbd qos read bps limit

178 QoS 设置 SES 6

Page 199: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

指定的每秒内读取的字节数上限。默认值为 0(无限制)。

rbd qos write bps limit

指定的每秒内写入的字节数上限。默认值为 0(无限制)。

rbd qos iops burst

指定的 I/O 操作次数突发上限。默认值为 0(无限制)。

rbd qos bps burst

指定的 I/O 字节数突发上限。默认值为 0(无限制)。

rbd qos read iops burst

指定的读操作次数突发上限。默认值为 0(无限制)。

rbd qos write iops burst

指定的写操作次数突发上限。默认值为 0(无限制)。

rbd qos read bps burst

指定的读取的字节数突发上限。默认值为 0(无限制)。

rbd qos write bps burst

指定的写入的字节数突发上限。默认值为 0(无限制)。

rbd qos schedule tick min

QoS 的最小时间表刻度(以毫秒为单位)。默认值为 50。

12.7 预读设置RADOS 块设备支持预读/预提取功能,以优化小块的顺序读取。如果使用虚拟机,此操作通常应

由 guest 操作系统处理,但引导加载程序可能不会发出有效的读请求。如果禁用缓存,则会自动

禁用预读功能。

rbd readahead trigger requests

触发预读所必需的顺序读取请求数。默认值为 10。

rbd readahead max bytes

预读请求的最大大小。如果设置为 0,则会禁用预读功能。默认值为 512kB。

rbd readahead disable after bytes

179 预读设置 SES 6

Page 200: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

从 RBD 映像读取该数量的字节后,该映像的预读功能将会禁用,直至其关闭。使用此设

置,guest 操作系统引导时便可接管预读工作。如果设置为 0,预读将始终处于启用状态。

默认值为 50 MB。

12.8 高级功能RADOS 块设备支持可增强 RBD 映像功能的高级特性。您可以在创建 RBD 映像时在命令行上指

定这些特性,或者在 Ceph 配置文件中使用 rbd_default_features 选项来指定。

您可以通过以下两种方式指定 rbd_default_features 选项的值:

指定为相应特性的内部值之和。每项特性都有自己的内部值,例如,“layering”的内部值为

1,“fast-diff”的内部值为 16。因此,若要默认激活这两项特性,请指定以下选项:

rbd_default_features = 17

指定为各特性的逗号分隔列表。上面的示例应如下所示:

rbd_default_features = layering,fast-diff

注意:iSCSI 不支持的特性iSCSI 不支持具有以下特性的 RBD 映像: deep-flatten、 object-

map、 journaling、 fast-diff、 striping

以下是 RBD 的高级特性列表:

layering

分层允许您使用克隆。

内部值为 1,默认值为“yes”。

striping

条带特性会将数据分布在多个对象之间,有助于提升顺序读取/写入工作负载的并行度。它

可防止大型或繁忙的 RADOS 块设备出现单节点瓶颈。

内部值为 2,默认值为“yes”。

exclusive-lock

180 高级功能 SES 6

Page 201: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

如果启用,客户端需要在写入数据之前锁定对象。仅当一次只有一个客户端在访问映像时

才应启用互斥锁。内部值为 4。默认值为“yes”。

object-map

对象映射支持依赖于互斥锁支持。块设备采用的是精简供给,也就是说这些设备只存储实

际存在的数据。对象映射支持有助于跟踪哪些对象实际存在(在驱动器上存储了数据)。

启用对象映射支持可以加快克隆、导入和导出数据稀疏的映像以及删除所需的 I/O 操作。

内部值为 8,默认值为“yes”。

fast-diff

Fast-diff 支持依赖于对象映射支持和互斥锁支持。它会向对象映射添加另一个属性,使其

更快地生成映像各快照之间的差异以及快照的实际数据使用率。

内部值为 16,默认值为“yes”。

deep-flatten

Deep-flatten 使 rbd flatten(请参见第 12.3.3.6 节 “平展克隆的映像”)除了对映像

本身有效外,还对映像的所有快照有效。如果没有该特性,映像的快照将仍然依赖于其父

映像,因而如果未删除快照,您将无法删除父映像。Deep-flatten 使父映像可独立于其克

隆,即使这些克隆有快照也不例外。

内部值为 32,默认值为“yes”。

journaling

日志支持依赖于互斥锁支持。日志会按修改发生的顺序记录映像的所有修改。RBD 镜像

(请参见第 12.4 节 “镜像”)会使用日志将崩溃一致性映像复制到远程集群。

内部值为 64,默认值为“no”。

12.9 使用旧内核客户端映射 RBD旧客户端(例如 SLE11 SP4)可能无法映射 RBD 映像,因为使用 SUSE Enterprise Storage 6 部

署的集群会强制执行一些旧客户端不支持的特性(RBD 映像级特性和 RADOS 级特性)。发生此

情况时,OSD 日志将显示类似如下的讯息:

2019-05-17 16:11:33.739133 7fcb83a2e700 0 -- 192.168.122.221:0/1006830 >> \

192.168.122.152:6789/0 pipe(0x65d4e0 sd=3 :57323 s=1 pgs=0 cs=0 l=1

c=0x65d770).connect \

181 使用旧内核客户端映射 RBD SES 6

Page 202: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

protocol feature mismatch, my 2fffffffffff < peer 4010ff8ffacffff missing

401000000000000

警告:更改 CRUSH 索引存储桶类型将导致大规模重新平衡如果您打算在 CRUSH 索引存储桶类型“straw”与“straw2”之间切换,请做好相应规划。这

样做预计会对集群负载产生重大影响,因为更改存储桶类型将导致集群大规模重新平衡。

1. 禁用任何不支持的 RBD 映像特性。例如:

cephadm@adm > rbd feature disable pool1/image1 object-map

cephadm@adm > rbd feature disable pool1/image1 exclusive-lock

2. 将 CRUSH 索引存储桶类型由“straw2”更改为“straw”:

a. 保存 CRUSH 索引:

cephadm@adm > ceph osd getcrushmap -o crushmap.original

b. 反编译 CRUSH 索引:

cephadm@adm > crushtool -d crushmap.original -o crushmap.txt

c. 编辑 CRUSH 索引,并用“straw”替换“straw2”。

d. 重新编译 CRUSH 索引:

cephadm@adm > crushtool -c crushmap.txt -o crushmap.new

e. 设置新 CRUSH 索引:

cephadm@adm > ceph osd setcrushmap -i crushmap.new

182 使用旧内核客户端映射 RBD SES 6

Page 203: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

13 纠删码存储池

Ceph 提供了一种在存储池中正常复制数据的替代方案,称为纠删存储池或纠删码存储池。纠删

码存储池不能提供副本存储池的所有功能(例如,它们无法存储 RBD 存储池的元数据),但其

所需的原始存储空间更少。一个能够存储 1 TB 数据的默认纠删码存储池需要 1.5 TB 的原始存储

空间,以应对发生单个磁盘故障的情况。从这方面而言,纠删码存储池优于副本存储池,因为

后者需要 2 TB 的原始存储空间才能实现相同目的。

有关纠删码的背景信息,请参见 https://en.wikipedia.org/wiki/Erasure_code 。

注意使用 FileStore 时,除非已配置缓存层,否则无法通过 RBD 接口访问纠删码存储

池。请参见第 14.5 节 “纠删码存储池和缓存分层”了解更多详细信息,或使用默认

BlueStore(请参见《部署指南》, 第 1 章 “SUSE Enterprise Storage 6 和 Ceph”, 第 1.4 节

“BlueStore”)。

13.1 纠删码存储池的先决条件要使用纠删码,您需要:

在 CRUSH 索引中定义纠删码规则。

定义指定要使用的编码算法的纠删码配置。

创建使用上述规则和配置的存储池。

请记住,一旦创建好存储池且存储池中包含数据,便无法更改配置和配置中的详细信息。

确保纠删码存储池的 CRUSH 规则对 step 使用 indep。有关详细信息,请参见第 9.3.2 节

“firstn 和 indep”。

13.2 创建示例纠删码存储池最简单的纠删码存储池相当于 RAID5,至少需要三个主机。以下过程介绍如何创建用于测试的

存储池。

183 纠删码存储池的先决条件 SES 6

Page 204: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

1. 命令 ceph osd pool create 用于创建类型为纠删的存储池。 12 表示归置组的数

量。使用默认参数时,该存储池能够处理一个 OSD 的故障。

cephadm@adm > ceph osd pool create ecpool 12 12 erasure

pool 'ecpool' created

2. 字符串 ABCDEFGHI 将写入名为 NYAN 的对象。

cephadm@adm > echo ABCDEFGHI | rados --pool ecpool put NYAN -

3. 为了进行测试,现在可以禁用 OSD,例如,断开其网络连接。

4. 要测试该存储池是否可以处理多台设备发生故障的情况,可以使用 rados 命令来访问文

件的内容。

cephadm@adm > rados --pool ecpool get NYAN -

ABCDEFGHI

13.3 纠删码配置调用 ceph osd pool create 命令来创建纠删码存储池时,除非指定了其他配置,否则会使

用默认的配置。配置定义数据冗余。要进行这种定义,可以设置随意命名为 k 和 m 的两个参

数。k 和 m 定义要将数据片段拆分成多少个块,以及要创建多少个编码块。然后,冗余块将存

储在不同的 OSD 上。

纠删池配置所需的定义:

chunk

如果调用该编码函数,它会返回相同大小的块:可串联起来以重构造原始对象的数据块,

以及可用于重构建丢失的块的编码块。

k

数据块的数量,即要将原始对象分割成的块数量。例如,如果 k = 2,则会将一个 10 kB

对象分割成各为 5 kB 的 k 个对象。纠删码存储池的默认 min_size 为 k + 1。不过,

我们建议将 min_size 设置为 k + 2 或更大的值,以防丢失写入和数据。

m

184 纠删码配置 SES 6

Page 205: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

编码块的数量,即编码函数计算的额外块的数量。如果有 2 个编码块,则表示可以移出 2

个 OSD,而不会丢失数据。

crush-failure-domain

定义要将块分布到的设备。其值需要设置为某个存储桶类型。有关所有的存储桶类型,请

参见第 9.2 节 “存储桶”。如果故障域为机柜,则会将块存储在不同的机柜上,以提高机柜

发生故障时的恢复能力。请记住,这需要 k+m 个机柜。

使用第 13.2 节 “创建示例纠删码存储池”中所用的默认纠删码配置时,如果单个 OSD 或主机发生

故障,将不会丢失集群数据。因此,要存储 1 TB 数据,需要额外提供 0.5 TB 原始存储空间。也

就是说,需要 1.5 TB 原始存储空间才能存储 1 TB 的数据(因为 k=2、m=1)。这相当于常见的

RAID 5 配置。作为对比,副本存储池需要 2 TB 原始存储空间才能存储 1 TB 数据。

可使用以下命令显示默认配置的设置:

cephadm@adm > ceph osd erasure-code-profile get default

directory=.libs

k=2

m=1

plugin=jerasure

crush-failure-domain=host

technique=reed_sol_van

选择适当的配置非常重要,因为在创建存储池后便无法修改配置。需要创建使用不同配置的新

存储池,并将之前的存储池中的所有对象移到新存储池(请参见第 11.3 节 “存储池迁移”)。

最重要的几个配置参数是 k、 m 和 crush-failure-domain,因为它们定义存储开销和数

据持久性。例如,如果在两个机柜发生故障并且存储开销达到 66% 的情况下,必须能够维系

所需的体系结构,可定义以下配置。请注意,这仅适用于拥有“rack”类型的存储桶的 CRUSH 索

引:

cephadm@adm > ceph osd erasure-code-profile set myprofile \

k=3 \

m=2 \

crush-failure-domain=rack

对于此新配置,可以重复第 13.2 节 “创建示例纠删码存储池”中的示例:

cephadm@adm > ceph osd pool create ecpool 12 12 erasure myprofile

185 纠删码配置 SES 6

Page 206: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > echo ABCDEFGHI | rados --pool ecpool put NYAN -

cephadm@adm > rados --pool ecpool get NYAN -

ABCDEFGHI

NYAN 对象将分割成三个 ( k=3 ),并将创建两个额外的块 ( m=2 )。 m 值定义可以同时丢失多少

个 OSD 而不会丢失任何数据。 crush-failure-domain==rack 将创建一个 CRUSH 规则

组,用于确保不会将两个块存储在同一个机柜中。

13.3.1 创建新纠删码配置

以下命令可创建新纠删码配置:

root # ceph osd erasure-code-profile set NAME \

186 创建新纠删码配置 SES 6

Page 207: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

directory=DIRECTORY \

plugin=PLUGIN \

stripe_unit=STRIPE_UNIT \

KEY=VALUE ... \

--force

DIRECTORY

可选。设置从中加载纠删码插件的目录名称。默认为 /usr/lib/ceph/erasure-

code。

PLUGIN

可选。使用纠删码插件可计算编码块和恢复缺失的块。可用的插件

有“jerasure”、“isa”、“lrc”和“shes”。默认为“jerasure”。

STRIPE_UNIT

可选。数据块中每个条带的数据量。例如,如果配置拥有 2 个数据块且 stripe_unit 等于

4K,则会将范围 0-4K 的数据置于块 0 中,将 4K-8K 置于块 1 中,然后再将 8K-12K 置于块

0 中。需要有多个 4K 才能实现最佳性能。默认值取自创建存储池时的 Monitor 配置选项

osd_pool_erasure_code_stripe_unit。使用此配置的存储池的“stripe_width”等于

数据块的数量乘以此“stripe_unit”。

KEY=VALUE

专用于选定纠删码插件的选项键/值对。

--force

可选。覆盖名称相同的现有配置,并允许设置不按 4K 对齐的 stripe_unit。

13.3.2 删除纠删码配置

以下命令可按 NAME 所标识的纠删码配置删除相应配置:

root # ceph osd erasure-code-profile rm NAME

重要如果某个存储池引用了该配置,则删除将会失败。

187 删除纠删码配置 SES 6

Page 208: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

13.3.3 显示纠删码配置的详细信息

以下命令可按 NAME 所标识的纠删码配置显示其详细信息:

root # ceph osd erasure-code-profile get NAME

13.3.4 列出纠删码配置

以下命令可列出所有纠删码配置的名称:

root # ceph osd erasure-code-profile ls

13.4 含 RADOS 块设备的纠删码存储池要将 EC 池标记为 RBD 池,请对其进行相应标记:

cephadm@adm > ceph osd pool application enable rbd ec_pool_name

RBD 可在 EC 池中存储映像数据。但是,映像报头和元数据仍需要存储在副本存储池中。为此,

假设您的存储池命名为“rbd”:

cephadm@adm > rbd create rbd/image_name --size 1T --data-pool ec_pool_name

您可以像使用任何其他映像一样正常使用该映像,只不过所有数据都将存储在 ec_pool_name

池而非“rbd”池中。

188 显示纠删码配置的详细信息 SES 6

Page 209: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

14 缓存分层

缓存层是在客户端与标准存储之间实施的附加存储层。该层用于加快访问低速硬盘中存储的存

储池以及纠删码存储池的速度。

通常,缓存分层涉及到创建一个由相对快速的存储设备(例如 SSD 驱动器)组成且配置为充当

缓存层的存储池,以及一个由较慢但较便宜的设备组成且配置为充当存储层的后备存储池。缓

存池大小通常是存储池大小的 10-20%。

14.1 分层存储的相关术语缓存分层识别两种类型的池:缓存池和存储池。

提示有关池的一般信息,请参见第 11 章 “管理存储池”。

存储池

在 Ceph 存储集群中存储一个对象的多个副本的标准副本存储池,或纠删码存储池(请参

见第 13 章 “纠删码存储池”)。

存储池有时称为“后备”存储或“冷”存储。

缓存池

标准副本存储池,存储在相对较小但速度较快的存储设备上,在 CRUSH 索引中具有自己

的规则组。

缓存池也称为“热”存储。

14.2 需考虑的要点缓存分层可能会降低特定工作负载的集群性能。以下几点指出了您需要考虑的有关缓存分层的

几个方面:

189 分层存储的相关术语 SES 6

Page 210: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

取决于工作负载:缓存能否提高性能取决于工作负载。由于将对象移入或移出缓存会耗费

资源,因此,如果大多数请求只涉及到少量的对象,则使用缓存可能更高效。缓存池的大

小应该足以接收工作负载的工作集,以避免性能大幅波动。

难以进行基准测试:大多数性能基准测试可能会反映使用缓存分层时性能会较低。原因在

于,这些基准测试请求了大量的对象,而缓存的“预热”需要较长时间。

性能可能较低:对于不适合进行缓存分层的工作负载而言,其性能往往比不启用缓存分层

的普通副本存储池更低。

librados 对象枚举:如果应用直接使用 librados 并依赖于对象枚举,则缓存分层可

能无法按预期工作(对于对象网关、RBD 或 CephFS 而言,这不会造成问题)。

14.3 何时使用缓存分层在以下情况下,请考虑使用缓存分层:

您的纠删码存储池存储在 FileStore 上,并且您需要通过 RADOS 块设备访问它们。有关

RBD 的详细信息,请参见第 12 章 “RADOS 块设备”。

您的纠删码存储池存储在 FileStore 上,并且您需要通过 iSCSI 访问它们。有关 iSCSI 的详

细信息,请参见第 18 章 “Ceph iSCSI 网关”。

您的高性能存储数量有限,而低性能存储众多,您需要更快地访问存储的数据。

14.4 缓存模式缓存分层代理可处理缓存层与后备存储层之间的数据迁移。管理员可以配置如何进行这种迁

移。主要有两种方案:

写回模式

在写回模式下,Ceph 客户端将数据写入缓存层,并从缓存层接收确认响应。一段时间

后,写入缓存层的数据将迁移到存储层,并从缓存层中清除。从概念上讲,缓存层叠加在

后备存储层的“前面”。当 Ceph 客户端需要驻留在存储层中的数据时,缓存分层代理会在

190 何时使用缓存分层 SES 6

Page 211: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

读取时将数据迁移到缓存层,然后,数据将发送到 Ceph 客户端。因此,在数据变为不活

跃状态前,Ceph 客户端可以使用缓存层执行 I/O。这种做法非常适合可变的数据,例如,

编辑的照片或视频,或事务数据。

只读模式

在只读模式下,Ceph 客户端将数据直接写入后备层。在读取时,Ceph 将请求的对象从后

备层复制到缓存层。过时对象将会根据定义的策略从缓存层中删除。这种做法非常适合不

可变的数据,例如,在社交网络上呈现的图片或视频、DNA 数据或 X 光成像,因为从可能

包含过时数据的缓存池中读取数据会导致一致性很差。不要对可变的数据使用只读模式。

14.5 纠删码存储池和缓存分层纠删码存储池需要的资源比副本存储池多。要克服这些限制,建议在纠删码存储池的前面设置

一个缓存层。使用 FileStore 时需要这么做。

例如,如果 “hot-storage” 存储池由高速存储设备构成,则可使用以下命令来加速第 13.3 节 “纠

删码配置”中创建的“ecpool”:

cephadm@adm > ceph osd tier add ecpool hot-storage

cephadm@adm > ceph osd tier cache-mode hot-storage writeback

cephadm@adm > ceph osd tier set-overlay ecpool hot-storage

这会将充当 ecpool 的一个层的 “hot-storage” 存储池置于写回模式,以便每次在 ecpool 中写入

和读取数据时实际使用的都是热存储,从而受益于热存储的灵活性和速度。

cephadm@adm > rbd --pool ecpool create --size 10 myvolume

有关缓存分层的详细信息,请参见第 14 章 “缓存分层”。

14.6 设置示例分层存储本节举例说明如何在标准硬盘(冷存储)的前面设置一个高速 SSD 缓存层(热存储)。

提示下面的示例仅用于说明目的,其中的设置包含单个 Ceph 节点上存在的 SSD 部件的一个

根及一条规则。

191 纠删码存储池和缓存分层 SES 6

Page 212: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

在生产环境中,集群设置通常包含热存储以及混合节点(配有 SSD 和 SATA 磁盘)的更多

根项和规则项。

1. 创建两个额外的 CRUSH 规则“replicated_ssd”和“replicated_hdd”,前者用于较快的 SSD

缓存设备类型,后者用于较慢的 HDD 设备类型:

cephadm@adm > ceph osd crush rule create-replicated replicated_ssd default

host ssd

cephadm@adm > ceph osd crush rule create-replicated replicated_hdd default

host hdd

2. 将所有现有存储池都切换为使用“replicated_hdd”规则。这样可防止 Ceph 将数据存储到新

添加的 SSD 设备:

cephadm@adm > ceph osd pool set POOL_NAME crush_rule replicated_hdd

3. 使用 DeepSea 将该计算机转变成 Ceph 节点。根据第 2.1 节 “添加新的集群节点”中所述

安装软件并配置主机计算机。我们假设此节点名为 node-4。此节点需要有 4 个 OSD 磁

盘。

[...]

host node-4 {

id -5 # do not change unnecessarily

# weight 0.012

alg straw

hash 0 # rjenkins1

item osd.6 weight 0.003

item osd.7 weight 0.003

item osd.8 weight 0.003

item osd.9 weight 0.003

}

[...]

4. 编辑热存储池(已映射到基于高速 SSD 驱动器的 OSD)的 CRUSH 索引。定义另一个包

含 SSD 的根节点的层次结构(命令为“root ssd”)。此外,请为 SSD 更改权重并添加一个

CRUSH 规则。有关 CRUSH 索引的详细信息,请参见第 9.5 节 “CRUSH 索引操作”。

使用 getcrushmap 和 crushtool 等命令行工具直接编辑 CRUSH 索引:

192 设置示例分层存储 SES 6

Page 213: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > ceph osd crush rm-device-class osd.6 osd.7 osd.8 osd.9

cephadm@adm > ceph osd crush set-device-class ssd osd.6 osd.7 osd.8 osd.9

5. 创建用于缓存分层的热存储池。对该池使用新的“ssd”规则:

cephadm@adm > ceph osd pool create hot-storage 100 100 replicated ssd

6. 使用默认的“replicated_ruleset”规则创建冷存储池:

cephadm@adm > ceph osd pool create cold-storage 100 100 replicated

replicated_ruleset

7. 然后,设置缓存层的过程涉及到将后备存储池关联到缓存池,在本例中,需要将冷存储

(即存储池)关联到热存储(即缓存池):

cephadm@adm > ceph osd tier add cold-storage hot-storage

8. 要将缓存模式设置为“写回”,请执行以下命令:

cephadm@adm > ceph osd tier cache-mode hot-storage writeback

有关缓存模式的详细信息,请参见第 14.4 节 “缓存模式”。

写回缓存层叠加在后备存储池上,因此需要执行一个额外的步骤:必须将来自存储池的所

有客户端流量定向到缓存池。例如,要将客户端流量直接定向到缓存池,请执行以下命

令:

cephadm@adm > ceph osd tier set-overlay cold-storage hot-storage

14.7 配置缓存层可以使用多个选项来配置缓存层。使用以下语法:

cephadm@adm > ceph osd pool set cachepool key value

193 配置缓存层 SES 6

Page 214: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

14.7.1 命中集

使用命中集参数可以优化缓存池。Ceph 中的命中集通常是布隆过滤器,提供节省内存用量的方

式来跟踪已存放于缓存池的对象。

命中集是一个位数组,用于存储针对对象名称应用的一组哈希函数的结果。最初,所有的位都

设为 0。将对象添加到命中集后,该对象的名称将经过哈希处理,结果将映射在命中集中的不

同位置,那时,位的值便会设置为 1。

为了确定某个对象是否存在于缓存中,将会再次对对象名称进行哈希处理。如果有任何位是

0,则表示该对象肯定不在缓存中,需要从冷存储中检索它。

不同对象的结果可能会存储在命中集的同一位置。在巧合的情况下,可能所有位都是 1,而对

象却不在缓存中。因此,处理布隆过滤器的命中集只能确定某个对象是否一定不在缓存中,需

要从冷存储检索它。

一个缓存池可以使用多个命中集来跟踪各时间段的文件访问。设置 hit_set_count 定义所

用的命中集数量, hit_set_period 定义每个命中集已使用了多长时间。该期限过期后,将

使用下一个命中集。如果用尽了命中集,将会释放最旧命中集的内存,并创建新的命中集。将

hit_set_count 和 hit_set_period 的值相乘可定义已跟踪对象访问的整个时间范围。

图 14.1︰ 包含 3 个存储对象的布隆过滤器

与哈希处理对象的数量相比,基于布隆过滤器的命中集非常地节省内存用量。只需使用不到 10

个位即可将误报率降低到 1% 以下。可以使用 hit_set_fpp 定义误报率。Ceph 可根据归置

组中的对象数量及误报率自动计算命中集的大小。

194 命中集 SES 6

Page 215: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

可以使用 min_write_recency_for_promote 和 min_read_recency_for_promote

限制缓存池中所需的存储。如果将值设置为 0,则所有对象在被读取或写入后,会立即提升到

缓存池,并且在被赶出之前会一直保持这种模式。使用大于 0 的任何值可定义在其中搜索对象

的命中集(已按期限排序)的数量。如果在某个命中集中找到了该对象,会将该对象提升到缓

存池。请记住,对对象执行备份操作也可能导致对象被提升到缓存中。如果执行值设置为“0”的

完全备份,可能会导致所有数据都被提升到缓存层,而活跃数据会从缓存层中删除。因此,根

据备份策略更改此设置的做法可能会有帮助。

注意期限越长, min_read_recency_for_promote 和

min_write_recency_for_promote 的值越大, ceph-osd 守护进程耗费的 RAM

就越多。特别是,当代理正在刷新或赶出缓存对象时,所有 hit_set_count 命中集都

会加载到 RAM 中。

14.7.1.1 对命中集使用 GMT

缓存层设置包含一个称作命中集的布隆过滤器。该过滤器测试某个对象是属于一组热对象还是

冷对象。对象将添加到命中集,其名称后面附有时戳。

如果集群计算机位于不同的时区,且时戳根据当地时间派生,则命中集中对象的名称可能包含

将来或过去的时戳,致使用户产生误解。在最坏的情况下,对象可能根本不在命中集中。

为防止这种问题发生,在新建的缓存层设置中, use_gmt_hitset 默认设为“1”。这样,您便

可以在创建命中集的对象名称时,强制 OSD 使用 GMT(格林威治标准时间)时戳。

警告:保留默认值不要更改 use_gmt_hitset 的默认值“1”。如果与此选项相关的错误不是因集群设置造

成,切勿手动更改此选项。否则,集群的行为可能变得无法预测。

14.7.2 缓存大小调整

缓存分层代理执行两项主要功能:

195 缓存大小调整 SES 6

Page 216: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

刷新

代理识别已修改的(脏)对象,并将其转发到存储池长期存储。

赶出

代理识别未曾修改的(正常)对象,并将其中最近用得最少的对象从缓存中赶出。

14.7.2.1 绝对大小调整

缓存分层代理可根据字节总数或对象总数来刷新或赶出对象。要指定最大字节数,请执行以下

命令:

cephadm@adm > ceph osd pool set cachepool target_max_bytes num_of_bytes

要指定最大对象数,请执行以下命令:

cephadm@adm > ceph osd pool set cachepool target_max_objects num_of_objects

注意Ceph 无法自动确定缓存池的大小,因此需要配置绝对大小。否则,刷新和赶出功能将无

法正常工作。如果这两项限制都指定,则一旦触发任一阈值,缓存分层代理就会开始执行

刷新或赶出。

注意仅当达到 target_max_bytes 或 target_max_objects 时,才会阻止所有客户端

请求。

14.7.2.2 相对大小调整

缓存分层代理可以根据缓存池的相对大小(通过第 14.7.2.1 节 “绝对大小调整”中所述的

target_max_bytes 或 target_max_objects 指定)刷新或赶出对象。当缓存池中的

已修改(脏)对象达到特定百分比时,缓存分层代理会将这些对象刷新到存储池。要设置

cache_target_dirty_ratio,请执行以下命令:

196 缓存大小调整 SES 6

Page 217: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > ceph osd pool set cachepool cache_target_dirty_ratio 0.0...1.0

例如,如果将值设置为 0.4,则当已修改(脏)对象的大小达到缓存池容量的 40% 时,就会开

始刷新这些对象。

cephadm@adm > ceph osd pool set hot-storage cache_target_dirty_ratio 0.4

当脏对象的大小达到容量的特定百分比时,将以更高的速度刷新。使用

cache_target_dirty_high_ratio:

cephadm@adm > ceph osd pool set cachepool cache_target_dirty_high_ratio 0.0..1.0

当缓存池的大小达到其容量的特定百分比时,缓存分层代理会赶出对象,以维持可用容量。要

设置 cache_target_full_ratio,请执行以下命令:

cephadm@adm > ceph osd pool set cachepool cache_target_full_ratio 0.0..1.0

14.7.3 缓存期限

您可以指定在缓存分层代理将最近修改过的(脏)对象刷回到后备存储池之前,这些对象可保

留的最短期限。请注意,此命令仅在缓存确实需要清理/赶出对象时适用:

cephadm@adm > ceph osd pool set cachepool cache_min_flush_age num_of_seconds

您可以指定在将某个对象赶出缓存层之前,该对象至少可保留的期限:

cephadm@adm > ceph osd pool set cachepool cache_min_evict_age num_of_seconds

14.7.4 示例

14.7.4.1 大型缓存池和少量内存

如果有大量的存储,但只有少量的 RAM 可用,则所有对象在被访问后可立即提升到缓存池。命

中集保持较小的规模。下面是一组示例配置值:

197 缓存期限 SES 6

Page 218: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

hit_set_count = 1

hit_set_period = 3600

hit_set_fpp = 0.05

min_write_recency_for_promote = 0

min_read_recency_for_promote = 0

14.7.4.2 小型缓存池和大量内存

如果只有少量的存储,但可用的内存量相对较大,则可以将缓存层配置为将有限数量的对象提

升到缓存池。如果有 12 个命中集,并且在 14,400 秒期限内可以使用其中每个命中集,则这些

命中集总共可提供 48 小时的跟踪。如果在过去 8 小时内访问了某个对象,该对象将提升到缓存

池。这种情况的一组示例配置值如下:

hit_set_count = 12

hit_set_period = 14400

hit_set_fpp = 0.01

min_write_recency_for_promote = 2

min_read_recency_for_promote = 2

198 示例 SES 6

Page 219: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

15 使用 LVM 缓存提升性能

警告:技术预览LVM 缓存当前为技术预览功能。

LVM 缓存是一种用于提升逻辑卷 (LV) 性能的缓存机制。通常会使用较小较快的设备来提升较大

较慢的 LV 的 I/O 性能。请参见其手册页 ( man 7 lvmcache ) 了解有关 LVM 缓存的更多详细信

息。

在 SUSE Enterprise Storage 中,LVM 缓存可提升 OSD 的性能。通过 ceph-volume 插件来提

供 LVM 缓存支持。您可以运行 ceph-volume lvmcache 来了解有关其用法的详细信息。

15.1 先决条件要使用 LVM 缓存特性提升 Ceph 集群的性能,您需要有以下资源:

处于稳定状态(“HEALTH_OK”)的运行中 Ceph 集群。

已部署 BlueStore 和 LVM 的 OSD。如果使用 SUSE Enterprise Storage 6 或更高版本部署

OSD,则默认会为 OSD 部署这两项。

用于缓存的空磁盘或分区。

15.2 需考虑的要点在将 OSD 配置为使用 LVM 缓存之前,请注意以下事项:

确认 LVM 缓存适合您的使用情形。如果您只有几个不用于 OSD 的快速驱动器,一般建议

将它们用作 OSD 的 WAL/DB 设备。在此情况下,系统会在快速驱动器上应用 WAL 和 DB

操作(较小且少见的操作),而在慢速 OSD 驱动器上应用数据操作。

199 先决条件 SES 6

Page 220: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

提示如果对您的部署而言,降低延迟比提升 IOPS 或吞吐量更重要,则您可将快速驱动

器用作 LVM 缓存而非 WAL/DB 分区。

如果您计划将快速驱动器用作多个 OSD 的 LVM 缓存,请注意,所有 OSD 操作(包括复

制)都将经过缓存设备。所有读取的查询操作都将从缓存设备进行,仅当在缓存中未查找

到目标时才会从慢速设备查询。写入始终先应用于缓存设备,稍后才会刷新到慢速设备

(默认的缓存模式为“writeback”)。

在决定是否要使用 LVM 缓存时,请确认快速驱动器在充当多个 OSD 的前端的同时,是否

仍能提供可接受的 IOPS 量。您可以通过下面的方法来测试:先测量快速设备可提供的最

大 IOPS 量,然后将所得结果除以快速设备后面的 OSD 数量。如果结果低于或接近 OSD

在不使用缓存的情况下可提供的最大 IOPS 量,则 LVM 缓存很可能不适用于此设置。

LVM 缓存设备与 OSD 的交互十分重要。系统会定期将写入从缓存设备刷新到慢速设备。

如果传入流量持续进入且数量很大,缓存设备会努力跟上传入请求及刷新进程的速度,因

而会导致性能下降。除非快速设备能够比慢速设备提供高得多的 IOPS 且延迟更低,否则

请勿对持续的大容量工作负载使用 LVM 缓存。突发模式的流量更适合 LVM 缓存,因为这

种模式会给缓存留出刷新脏数据的时间,且不会干扰客户端流量。对于持续的低流量工作

负载,很难提前预估使用 LVM 缓存是否能提升性能。最佳测试方法是对照 WAL/DB 设置

确定 LVM 缓存设置的基准并将两种设置进行比较。此外,由于 WAL 分区上的较小写入非

常多,建议将快速设备用于 DB 和/或 WAL,而非 LVM 缓存。

如果您不确定是否使用 LVM 缓存,请将快速设备用作 WAL 和/或 DB 设备。

15.3 准备您需要将快速设备分割成多个分区。每个 OSD 需要有两个缓存分区,一个用于缓存数据,另一

个用于缓存元数据。每个分区的最小大小为 2 GB。您可以使用单个快速设备来缓存多个 OSD。

只需对其进行相应的分区即可。

200 准备 SES 6

Page 221: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

15.4 配置 LVM 缓存要了解有关添加、删除和配置 LVM 缓存的详细信息,请运行 ceph-volume lvmcache 命

令。

15.4.1 添加 LVM 缓存

要向现有 OSD 添加 LVM 缓存,请使用以下命令:

cephadm@osd > ceph-volume lvmcache add

--cachemetadata METADATA-PARTITION

--cachedata DATA-PARTITION

--osd-id OSD-ID

可选的 --data、 --db 或 --wal 用于指定要缓存的分区。默认为 --data。

提示:指定逻辑卷 (LV)或者,您可以使用 --origin 而非 --osd-id 选项来指定要缓存的 LV:

[...]

--origin VOLUME-GROUP/LOGICAL-VOLUME

15.4.2 删除 LVM 缓存

要从 OSD 中删除现有 LVM 缓存,请使用以下命令:

cephadm@osd > ceph-volume lvmcache rm --osd-id OSD-ID

15.4.3 设置 LVM 缓存模式

要指定缓存模式,请使用以下命令:

cephadm@osd > ceph-volume lvmcache mode --set CACHING-MODE --osd-id OSD-ID

201 配置 LVM 缓存 SES 6

Page 222: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

CACHING-MODE 为“writeback”(默认值)或“writethrough”

15.5 处理故障如果缓存设备发生故障,则需要从集群中删除缓存设备后面的所有 OSD(请参见第 2.6 节 “删除

OSD”)、将它们清除,然后重新部署。如果 OSD 驱动器发生故障,虽然 OSD 的 LV 及其缓存的

LV 将会处于活跃状态,但却无法工作。使用 pvremove PARTITION 可清除用于 OSD 缓存数

据和元数据分区的分区(物理卷)。您可以使用 pvs 列出所有物理卷。

15.6 常见问题 (FAQ)

问: 1.如果删除 OSD,会发生什么情况?

使用 lvremove 删除 OSD 的 LV 时,会一并删除缓存 LV。不过,您仍需要在分区上调用

pvremove,以确保所有标签都已擦除。

问: 2.如果使用 ceph-volume zap 清除 OSD,会发生什么情况?

此问题的答案与如果删除 OSD,会发生什么情况?问题的答案相同。

问: 3.如果原始驱动器出现故障,会发生什么情况?

缓存 LV 仍存在, cache info 仍会将它们显示为可用状态。您将无法取消缓存,因为

LVM 会由于原始 LV 的设备已不存在而无法刷新缓存。现在的情况是原始 LV 存在,但其后

备设备不存在。您可以通过使用 pvs 命令并找到与原始 LV 相关联的设备来修复此问题。

然后,便可以使用以下命令将它们删除:

cephadm@osd > sudo pvremove /dev/DEVICE or PARTITION

您可对缓存分区执行相同操作。此过程将会使原始 LV 以及缓存 LV 消失。您也可以使用

cephadm@osd > sudo dd if=/dev/zero of=/dev/DEVICE or PARTITION

将它们擦除,然后再使用 pvremove。

202 处理故障 SES 6

Page 223: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

16 Ceph 集群配置

本章提供重要的 Ceph 集群设置及其说明的列表。设置按主题排序。

16.1 运行时配置第 2.13 节 “使用自定义设置调整 ceph.conf”介绍如何更改 Ceph 配置文件 ceph.conf。但

是,实际的集群行为并不是由 ceph.conf 文件的当前状态决定,而是由正在运行的 Ceph 守

护进程的配置(存储在内存中)决定。

要查询单个 Ceph 守护进程以了解特定的配置设置,您可以在运行守护进程的节点上使用 admin

socket。例如,以下命令可从名为 osd.0 的守护程序获取 osd_max_write_size 配置参数

的值:

cephadm@adm > ceph --admin-daemon /var/run/ceph/ceph-osd.0.asok \

config get osd_max_write_size

{

"osd_max_write_size": "90"

}

您还可以在运行时更改守护进程的设置。请注意,此更改是暂时的,守护进程下次重启动时,

更改将会丢失。例如,以下命令可针对集群中的所有 OSD 将 osd_max_write_size 参数更

改为“50”:

cephadm@adm > ceph tell osd.* injectargs --osd_max_write_size 50

警告:injectargs 并非百分百可靠有时,使用 injectargs 命令可能无法成功更改集群设置。如果您需要确保更改的参数

生效,请在集群所有节点上的配置文件中进行更改,并重启动集群中的所有守护进程。

203 运行时配置 SES 6

Page 224: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

16.2 Ceph OSD 和 BlueStore

16.2.1 自动调整缓存大小

如果 tc_malloc 配置为内存分配器并且启用了 bluestore_cache_autotune 设置,可将

BlueStore 配置为自动调整其缓存大小。当前,此选项默认处于启用状态。BlueStore 会尝试将

OSD 堆内存使用率维持在 osd_memory_target 配置选项指定的目标大小之下。这是一种最

优算法,而且缓存不会缩小到小于 osd_memory_cache_min 指定的大小。系统将根据优先级

的层次选择缓存率。如果无法获取优先级信息,将使用 bluestore_cache_meta_ratio 和

bluestore_cache_kv_ratio 选项作为备选。

bluestore_cache_autotune

在遵循最小值的要求下,自动调整为不同 BlueStore 缓存指定的比率。默认值为 True。

osd_memory_target

如果启用了 tc_malloc 和 bluestore_cache_autotune,该选项将尝试在内存中映

射此数量的字节。

注意此数量可能与进程的 RSS 内存使用率并不完全匹配。虽然进程映射的堆内存总量

一般应该保持为接近此目标的数量,但并不能保证内核会真正回收已取消映射的内

存。

osd_memory_cache_min

如果启用了 tc_malloc 和 bluestore_cache_autotune,该选项可设置用于缓存的

最小内存量。

注意将此值设置得过小可能会导致严重的缓存抖动。

204 Ceph OSD 和 BlueStore SES 6

Page 225: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

16.3 Ceph 对象网关您可以使用 /etc/ceph/ceph.conf 文件中以下段落下的几个选项来控制对象网关行为:

[client.radosgw.INSTANCE_NAME]

如果未指定选项,将使用默认值。完整的对象网关选项列表如下:

16.3.1 一般设置

rgw_frontends

配置 HTTP 前端。请以逗号分隔的列表指定多个前端。每个前端配置可能包含一组以空格

分隔的选项,每个选项的格式均为“键=值”或“键”。默认值是

rgw_frontends = beast port=7480

rgw_data

为对象网关设置数据文件的位置。默认值为 /var/lib/ceph/

radosgw/CLUSTER_ID。

rgw_enable_apis

启用指定的 API。默认值为“s3, swift, swift_auth, admin All APIs”。

rgw_cache_enabled

启用或禁用对象网关缓存。默认值为“true”。

rgw_cache_lru_size

对象网关缓存中的条目数。默认值为 10000。

rgw_socket_path

域套接字的套接字路径。 FastCgiExternalServer 使用此套接字。如果您未指定套接

字路径,对象网关将不会作为外部服务器运行。您在此处指定的路径须与 rgw.conf 文

件中指定的路径相同。

rgw_fcgi_socket_backlog

fcgi 的套接字积压数据。默认值为 1024。

rgw_host

205 Ceph 对象网关 SES 6

Page 226: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

对象网关实例的主机,可以是 IP 地址或主机名。默认值为 0.0.0.0

rgw_port

实例用于侦听请求的端口号。如果未指定,对象网关将运行外部 FastCGI。

rgw_dns_name

所处理的域的 DNS 名称。

rgw_script_uri

如果请求中未设置 SCRIPT_URI,则作为其备选值。

rgw_request_uri

如果请求中未设置 REQUEST_URI,则作为其备选值。

rgw_print_continue

启用 100-continue(如果可正常工作)。默认值为“true”。

rgw_remote_addr_param

远程地址参数。例如,包含远程地址的 HTTP 字段或 X-Forwarded-For 地址(如果反向代

理可正常工作)。默认值为 REMOTE_ADDR。

rgw_op_thread_timeout

活动线程的超时(以秒为单位)。默认值为 600。

rgw_op_thread_suicide_timeout

对象网关进程停止前超时的时间(以秒为单位)。如果设置为 0(默认值),则表示禁

用。

rgw_thread_pool_size

Beast 服务器的线程数。如果需要处理更多请求,请设置更高的值。默认为 100 个线程。

rgw_num_rados_handles

对象网关的 RADOS 集群句柄数。现在,每个对象网关工作线程都可以选择一个 RADOS 句

柄并在其有效期内予以保留。未来版本中可能会弃用并移除此选项。默认值为 1。

rgw_num_control_oids

不同 rgw 实例之间用于缓存同步的通知对象数量。默认值为 8。

rgw_init_timeout

对象网关放弃初始化前经过的秒数。默认值为 30。

206 一般设置 SES 6

Page 227: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

rgw_mime_types_file

MIME 类型的路径和位置。用于对象类型的 Swift 自动检测。默认值为 /etc/

mime.types。

rgw_gc_max_objs

垃圾回收在一个垃圾回收处理周期内可处理的最大对象数量。默认值为 32。

rgw_gc_obj_min_wait

垃圾回收处理可删除和处理对象前需等待的最短时间。默认值为 2*3600。

rgw_gc_processor_max_time

两次连续的垃圾回收处理周期开始时所间隔的最长时间。默认值为 3600。

rgw_gc_processor_period

垃圾回收处理的周期时间。默认值为 3600。

rgw_s3_success_create_obj_status

create-obj 的备选成功状态响应。默认值为 0。

rgw_resolve_cname

对象网关是否应使用请求主机名字段的 DNS CNAME 记录(如果主机名与对象网关 DNS 名

称不同)。默认值为“false”。

rgw_obj_stripe_size

对象网关对象的对象条带大小。默认值为 4 << 20。

rgw_extended_http_attrs

添加可对实体(例如,用户、存储桶或对象)设置的一组新属性。使用 POST 方法放

置或修改实体时,可通过 HTTP 报头字段设置这些额外的属性。如果设置了这些属性,

当针对实体请求 GET/HEAD 时,它们将作为 HTTP 字段返回。默认值为“content_foo,

content_bar, x-foo-bar”。

rgw_exit_timeout_secs

无条件退出前等待进程的秒数。默认值为 120。

rgw_get_obj_window_size

单个对象请求的窗口大小(以字节为单位)。默认值为“16 << 20”。

rgw_get_obj_max_req_size

207 一般设置 SES 6

Page 228: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

发送到 Ceph 存储集群的单次 GET 操作的请求大小上限。默认值为 4 << 20。

rgw_relaxed_s3_bucket_names

为 US 区域存储桶启用宽松 S3 存储桶名称规则。默认值为“false”。

rgw_list_buckets_max_chunk

列出用户存储桶时,在一次操作中检索的存储桶数量上限。默认值为 1000。

rgw_override_bucket_index_max_shards

表示存储桶索引对象的分片数量。设为 0(默认值)表示没有分片。不建议将此值设置得

太大(例如 1000),因为这样会增加列出存储桶的成本。应在客户端或全局段落设置此变

量,以便将其自动应用到 radosgw-admin 命令。

rgw_curl_wait_timeout_ms

某些 curl 调用的超时时间(以毫秒为单位)。默认值为 1000。

rgw_copy_obj_progress

启用在费时较长的复制操作期间输出对象进度的功能。默认值为“true”。

rgw_copy_obj_progress_every_bytes

两次复制进度输出相隔的最小字节数。默认值为 1024*1024。

rgw_admin_entry

管理请求 URL 的入口点。默认值为“admin”。

rgw_content_length_compat

为设置了 CONTENT_LENGTH 和 HTTP_CONTENT_LENGTH 的 FCGI 请求启用兼容性处理。

默认值为“false”。

rgw_bucket_quota_ttl

已缓存配额信息的可信时长(以秒为单位)。经过此超时时间后,将从集群重新提取配额

信息。默认值为 600。

rgw_user_quota_bucket_sync_interval

同步到集群前,存储桶配额信息的累计时长(以秒为单位)。在此期间,其他对象网关实

例将不会看到与此实例上的操作相关的存储桶配额统计数据发生的更改。默认值为 180。

rgw_user_quota_sync_interval

同步到集群前,用户配额信息的累计时长(以秒为单位)。在此期间,其他对象网关实例

将不会看到与此实例上的操作相关的用户配额统计数据发生的更改。默认值为 180。

208 一般设置 SES 6

Page 229: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

rgw_bucket_default_quota_max_objects

每个存储桶的默认对象数量上限。如果未指定其他配额,此上限将对新用户设置,对现有

用户无效。应在客户端或全局段落设置此变量,以便将其自动应用到 radosgw-admin

命令。默认值为 -1。

rgw_bucket_default_quota_max_size

每个存储桶的默认容量上限(以字节为单位)。如果未指定其他配额,此上限将对新用户

设置,对现有用户无效。默认值为 -1。

rgw_user_default_quota_max_objects

用户的默认对象数量上限。这个数量包括该用户拥有的所有存储桶中的全部对象。如果未

指定其他配额,此上限将对新用户设置,对现有用户无效。默认值为 -1。

rgw_user_default_quota_max_size

如果未指定其他配额,用户配额大小上限值(以字节为单位)将对新用户设置,对现有用

户无效。默认值为 -1。

rgw_verify_ssl

发出请求时验证 SSL 证书。默认值为“true”。

rgw_max_chunk_size

将在单个操作中读取的数据块的最大大小。将值增至 4MB (4194304) 可以在处理大型对象

时提高性能。默认值为 128kB (131072)。

多站点设置

rgw_zone

网关实例所在区域的名称。如果未设置区域,可使用 radosgw-admin zone default

命令配置集群范围的默认值。

rgw_zonegroup

网关实例所在区域组的名称。如果未设置区域组,可使用 radosgw-admin zonegroup

default 命令配置集群范围的默认值。

rgw_realm

网关实例所在领域的名称。如果未设置领域,可使用 radosgw-admin realm

default 命令配置集群范围的默认值。

rgw_run_sync_thread

209 一般设置 SES 6

Page 230: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

如果领域中有其他要依据其同步的区域,则生成线程来处理数据和元数据的同步。默认值

为“true”。

rgw_data_log_window

数据日志条目时段(以秒为单位)。默认值为 30。

rgw_data_log_changes_size

要为数据更改日志保存的内存内条目数。默认值为 1000。

rgw_data_log_obj_prefix

数据日志的对象名称前缀。默认值为“data_log”。

rgw_data_log_num_shards

保存数据更改日志的分片(对象)的数量。默认值为 128。

rgw_md_log_max_shards

元数据日志的最大分片数量。默认值为 64。

SWIFT 设置

rgw_enforce_swift_acls

强制实施 Swift 访问控制列表 (ACL) 设置。默认值为“true”。

rgw_swift_token_expiration

Swift 令牌过期时间(以秒为单位)。默认值为 24*3600。

rgw_swift_url

Ceph Object Gateway Swift API 的 URL。

rgw_swift_url_prefix

Swift StorageURL 中在“/v1”部分前面的 URL 前缀。此设置允许在同一主机上运行多个网

关实例。出于兼容性考虑,请将此配置变量设为空,以便使用默认值“/swift”。使用显式前

缀“/”会在根目录启动 StorageURL。

警告如果启用了 S3 API,将此选项设为“/”将不起作用。请注意,如果禁用 S3,将无法在

多站点配置中部署对象网关!

210 一般设置 SES 6

Page 231: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

rgw_swift_auth_url

未使用内部 Swift 身份验证时,用于验证 v1 身份验证令牌的默认 URL。

rgw_swift_auth_entry

Swift 身份验证 URL 的入口点。默认值为“auth”。

rgw_swift_versioning_enabled

启用 OpenStack Object Storage API 的对象版本控制。此选项可让客户端对应进行版本控

制的容器设置 X-Versions-Location 属性。该属性指定存储已存档版本的容器的名

称。出于访问控制验证(ACL 不在考虑范围之内)的原因,该属性必须由受版本控制的容

器所属的同一用户所有。这些容器无法通过 S3 对象版本控制机制进行版本控制。默认值

为“false”。

日志记录设置

rgw_log_nonexistent_bucket

允许对象网关记录针对不存在的存储桶的请求。默认值为“false”。

rgw_log_object_name

对象名称的日志记录格式。有关格式说明符的详细信息,请参见 man 1 date 手册页。

默认值为“%Y-%m-%d-%H-%i-%n”。

rgw_log_object_name_utc

记录的对象名称是否包含 UTC 时间。如果设置为“false”(默认值),则会使用本地时间。

rgw_usage_max_shards

用于使用率日志记录的最大分片数量。默认值为 32。

rgw_usage_max_user_shards

用于单个用户的使用率日志记录的最大分片数量。默认值为 1。

rgw_enable_ops_log

启用记录每个成功的对象网关操作的功能。默认值为“false”。

rgw_enable_usage_log

启用使用率日志。默认值为“false”。

rgw_ops_log_rados

211 一般设置 SES 6

Page 232: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

是否应将操作日志写入 Ceph 存储集群后端。默认值为“true”。

rgw_ops_log_socket_path

用于写入操作日志的 Unix 域套接字。

rgw_ops_log_data_backlog

写入 Unix 域套接字的操作日志的数据积压大小上限。默认值为 5 << 20。

rgw_usage_log_flush_threshold

同步刷新前使用率日志中已合并的脏条目数量。默认值为 1024。

rgw_usage_log_tick_interval

每隔“n”秒刷新待处理使用率日志数据。默认值为 30。

rgw_log_http_headers

要包含在日志条目中的 HTTP 报头的逗号分隔列表。报头名称不区分大小写,使用完整报

头名称格式,各单词间以下划线分隔。例如“http_x_forwarded_for”、“http_x_special_k”。

rgw_intent_log_object_name

要记录的日志对象名称的日志记录格式。有关格式说明符的详细信息,请参见 man 1

date 手册页。默认值为“%Y-%m-%d-%i-%n”。

rgw_intent_log_object_name_utc

要记录的日志对象名称是否包含 UTC 时间。如果设置为“false”(默认值),则会使用本地

时间。

KEYSTONE 设置

rgw_keystone_url

Keystone 服务器的 URL。

rgw_keystone_api_version

应用于与 Keystone 服务器通讯的 OpenStack Identity API 的版本(2 或 3)。默认值为

2。

rgw_keystone_admin_domain

使用 OpenStack Identity API v3 时具有管理员权限的 OpenStack 域的名称。

rgw_keystone_admin_project

212 一般设置 SES 6

Page 233: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

使用 OpenStack Identity API v3 时具有管理员权限的 OpenStack 项目的名称。如果未设

置,将使用 rgw keystone admin tenant 的值替代。

rgw_keystone_admin_token

Keystone 管理员令牌(共享密钥)。在对象网关中,使用管理员令牌的身份验证的优先

级高于使用管理员身份凭证的身份验证(选项 rgw keystone admin user、 rgw

keystone admin password、 rgw keystone admin tenant、 rgw keystone

admin project 和 rgw keystone admin domain)。管理员令牌功能被视为已弃

用。

rgw_keystone_admin_tenant

使用 OpenStack Identity API v2 时具有管理员权限的 OpenStack 租户(服务租户)的名

称。

rgw_keystone_admin_user

使用 OpenStack Identity API v2 时具有管理员权限的 OpenStack 用户(服务用户)的名

称。

rgw_keystone_admin_password

使用 OpenStack Identity API v2 时 OpenStack 管理员用户的密码。

rgw_keystone_accepted_roles

处理请求需要具有的角色。默认值为“Member, admin”。

rgw_keystone_token_cache_size

每个 Keystone 令牌缓存中的条目数上限。默认值为 10000。

rgw_keystone_revocation_interval

令牌撤消检查间隔的时间(以秒为单位)。默认值为 15*60。

rgw_keystone_verify_ssl

向 Keystone 发出令牌请求时,验证 SSL 证书。默认值为“true”。

16.3.1.1 补充说明

rgw_dns_name

如果将参数 rgw dns name 添加到 ceph.conf,请确保已配置 S3 客户端,以定向

rgw dns name 所指定端点的请求。

213 一般设置 SES 6

Page 234: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

16.3.2 HTTP 前端

16.3.2.1 Beast

port、ssl_port

IPv4 和 IPv6 侦听端口号。您可以指定多个端口号:

port=80 port=8000 ssl_port=8080

默认值为 80。

endpoint、ssl_endpoint

侦听地址采用“地址[:端口]”格式,其中,地址为采用点分隔十进制数字格式的 IPv4 地址

字符串,或是采用以方括号括住的十六进制表示格式的 IPv6 地址。指定将仅侦听 IPv6 的

IPv6 端点。 endpoint 和 ssl_endpoint 的可选端口号分别默认为 80 和 443。您可以

指定多个地址:

endpoint=[::1] endpoint=192.168.0.100:8000 ssl_endpoint=192.168.0.100:8080

ssl_private_key

此为可选设置,指定用于启用了 SSL 的端点的私用密钥文件路径。如果未指定,将使用

ssl_certificate 文件充当私用密钥。

tcp_nodelay

如果指定该选项,套接字选项将针对连接禁用 Nagle 的算法。这表示将会尽快发送数据

包,而不会等到发生全缓冲或超时才发送。

“1”会对所有套接字禁用 Nagle 的算法。

“0”会使 Nagle 的算法保持启用状态(默认值)。

例 16.1︰ /etc/ceph/ceph.conf 中的示例 BEAST 配置

rgw_frontends = beast port=8000 ssl_port=443 ssl_certificate=/etc/ssl/ssl.crt

error_log_file=/var/log/radosgw/civetweb.error.log

16.3.2.2 CivetWeb

port

214 HTTP 前端 SES 6

Page 235: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

侦听端口号。对启用了 SSL 的端口添加“s”后缀(例如,“443s”)。要绑定特定 IPv4 或

IPv6 地址,请使用“地址:端口”格式。您可以通过使用“+”联接多个端点或通过提供多个选

项,来指定多个端点:

port=127.0.0.1:8000+443s

port=8000 port=443s

默认值为 7480。

num_threads

Civetweb 所生成以处理传入 HTTP 连接的线程数。此设置可有效限制前端可处理的并发连

接数。

默认为 rgw_thread_pool_size 选项所指定的值。

request_timeout_ms

Civetweb 在放弃前需等待更多传入数据的时长(以毫秒为单位)。

默认值为 30000 毫秒。

access_log_file

访问日志文件的路径。您可以指定完整路径,或当前工作目录的相对路径。如果未指定

(默认设置),将不会记录访问。

error_log_ file

错误日志文件的路径。您可以指定完整路径,或当前工作目录的相对路径。如果未指定

(默认设置),将不会记录错误。

例 16.2︰ /etc/ceph/ceph.conf 中的示例 CIVETWEB 配置

rgw_frontends = civetweb port=8000+443s request_timeout_ms=30000

error_log_file=/var/log/radosgw/civetweb.error.log

16.3.2.3 通用选项

ssl_certificate

用于启用了 SSL 的端点的 SSL 证书文件路径。

prefix

215 HTTP 前端 SES 6

Page 236: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

要插入到所有请求的 URI 中的前缀字符串。例如,仅支持 Swift 的前端可能会提供一个“/

swift”URI 前缀。

216 HTTP 前端 SES 6

Page 237: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

III 访问集群数据

17 Ceph 对象网关 218

18 Ceph iSCSI 网关 278

19 集群文件系统 295

20 通过 Samba 导出 Ceph 数据 307

21 NFS Ganesha:通过 NFS 导出 Ceph 数据 323

Page 238: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

17 Ceph 对象网关

本章介绍对象网关相关管理任务的详细信息,例如,检查服务的状态,管理帐户、多站点网关

或 LDAP 身份验证。

17.1 对象网关限制和命名限制下面列出了对象网关的一些重要限制:

17.1.1 存储桶限制

通过 S3 API 访问对象网关时,存储桶名必须符合 DNS 且允许使用短划线字符“-”。当通过 Swift

API 访问对象网关时,您可使用支持 UTF-8 的字符(斜杠字符“/”除外)的任何组合。存储桶名

最多可包含 255 个字符。存储桶名必须唯一。

提示:使用符合 DNS 的存储桶名虽然通过 Swift API 访问时,可使用任何基于 UTF-8 的存储桶名,但仍建议您根据 S3 命

名限制对存储桶命名,以免在通过 S3 API 访问同一个存储桶时发生问题。

17.1.2 存储的对象的限制

每个用户的对象数量上限

默认无限制(大约不超过 2^63)。

每个存储桶的对象数量上限

默认无限制(大约不超过 2^63)。

要上载/存储的对象的最大大小

单次上载的上限为 5GB。更大的对象可分为多个部分上载。多部分块的最大数量为

10000。

218 对象网关限制和命名限制 SES 6

Page 239: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

17.1.3 HTTP 报头限制

HTTP 报头和请求限制取决于所使用的 Web 前端。默认 Beast 会将 HTTP 报头大小限制为 16

kB。

17.2 部署对象网关建议通过 DeepSea 基础结构来部署 Ceph 对象网关,具体做法是在 Salt Master 上的

policy.cfg 文件中添加相关的 role-rgw [...] 行,并运行所需的 DeepSea 阶段。

要在 Ceph 集群部署期间加入对象网关,请参见《部署指南》, 第 5 章 “使用 DeepSea/Salt

部署”, 第 5.3 节 “集群部署”和《部署指南》, 第 5 章 “使用 DeepSea/Salt 部署”, 第 5.5.1 节

“policy.cfg 文件”。

要在已部署的集群中添加对象网关角色,请参见第 2.2 节 “为节点添加新的角色”。

17.3 操作对象网关服务可使用 systemctl 命令来操作对象网关服务。您需要拥有 root 特权才能操作对象网关服

务。请注意, GATEWAY_HOST 是您需要操作其对象网关实例的服务器的主机名。

对象网关服务支持以下子命令:

systemctl status ceph-radosgw@rgw. GATEWAY_HOST

列显服务的状态信息。

systemctl start ceph-radosgw@rgw. GATEWAY_HOST

如果服务尚未运行,则将它启动。

systemctl restart ceph-radosgw@rgw. GATEWAY_HOST

重启动服务。

systemctl stop ceph-radosgw@rgw. GATEWAY_HOST

停止正在运行的服务。

systemctl enable ceph-radosgw@rgw. GATEWAY_HOST

219 HTTP 报头限制 SES 6

Page 240: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

启用服务,以便在系统启动时自动启动该服务。

systemctl disable ceph-radosgw@rgw. GATEWAY_HOST

禁用服务,以便在系统启动时不自动启动该服务。

17.4 配置选项有关对象网关配置选项的列表,请参见第 16.3 节 “Ceph 对象网关”。

17.5 管理对象网关的访问方式您可以使用与 S3 或 Swift 兼容的接口来与对象网关通讯。S3 接口与大部分 Amazon S3 RESTful

API 都兼容。Swift 接口与大部分 OpenStack Swift API 都兼容。

这两个接口都要求创建特定的用户,并安装相关的客户端软件,以使用该用户的秘密密钥来与

网关通讯。

17.5.1 访问对象网关

17.5.1.1 S3 接口访问

要访问 S3 接口,需要一个 REST 客户端。 S3cmd 是一个命令行 S3 客户端。您可以在

OpenSUSE Build Service (https://build.opensuse.org/package/show/Cloud:Tools/s3cmd) 中

找到它。该储存库包含既适用于 SUSE Linux Enterprise 发行套件又适用于基于 openSUSE 的发

行套件的版本。

如果您想测试自己是否能够访问 S3 接口,也可以编写一个简短的 Python 脚本。该脚

本将连接到对象网关,创建新存储桶,并列出所有存储桶。 aws_access_key_id 和

aws_secret_access_key 的值取自第 17.5.2.1 节 “添加 S3 和 Swift 用户”中所述

radosgw_admin 命令返回的 access_key 和 secret_key 的值。

1. 安装 python-boto 包:

root # zypper in python-boto

220 配置选项 SES 6

Page 241: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

2. 创建名为 s3test.py 的新 Python 脚本,并在其中包含以下内容:

import boto

import boto.s3.connection

access_key = '11BS02LGFB6AL6H1ADMW'

secret_key = 'vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY'

conn = boto.connect_s3(

aws_access_key_id = access_key,

aws_secret_access_key = secret_key,

host = 'HOSTNAME',

is_secure=False,

calling_format = boto.s3.connection.OrdinaryCallingFormat(),

)

bucket = conn.create_bucket('my-new-bucket')

for bucket in conn.get_all_buckets():

print "NAME\tCREATED".format(

name = bucket.name,

created = bucket.creation_date,

)

请将 HOSTNAME 替换为在其中配置了对象网关服务的主机的主机名,例如

gateway_host。

3. 运行脚本:

python s3test.py

该脚本将输出类似下方所示的信息:

my-new-bucket 2015-07-22T15:37:42.000Z

17.5.1.2 Swift 接口访问

要通过 Swift 接口访问对象网关,需要使用 swift 命令行客户端。该接口的手册页 man 1

swift 介绍了有关其命令行选项的详细信息。

从 SUSE Linux Enterprise 12 SP3 到 SUSE Linux Enterprise 15 的“Public Cloud”扩展模块中都随

附了该包。在安装该包之前,需要激活该扩展模块并刷新软件储存库:

221 访问对象网关 SES 6

Page 242: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

root # SUSEConnect -p sle-module-public-cloud/12/x86_64

sudo zypper refresh

或者

root # SUSEConnect -p sle-module-public-cloud/15/x86_64

root # zypper refresh

要安装 swift 命令,请运行以下命令:

root # zypper in python-swiftclient

使用以下语法进行 swift 访问:

tux > swift -A http://IP_ADDRESS/auth/1.0 \

-U example_user:swift -K 'SWIFT_SECRET_KEY' list

请将 IP_ADDRESS 替换为网关服务器的 IP 地址,将 SWIFT_SECRET_KEY 替换为

在第 17.5.2.1 节 “添加 S3 和 Swift 用户”中针对 swift 用户执行 radosgw-admin key

create 命令所生成的输出中的相应值。

例如:

tux > swift -A http://gateway.example.com/auth/1.0 -U example_user:swift \

-K 'r5wWIxjOCeEO7DixD1FjTLmNYIViaC6JVhi3013h' list

输出为:

my-new-bucket

17.5.2 管理 S3 和 Swift 帐户

17.5.2.1 添加 S3 和 Swift 用户

需要创建用户、访问钥和机密才能让最终用户与网关交互。用户分两种类型:用户和子用户。

与 S3 接口交互时使用用户,子用户是 Swift 接口的用户。每个子用户都与某个用户相关联。

也可以通过 DeepSea 文件 rgw.sls 添加用户。有关示例,请参见第 21.3.1 节 “NFS Ganesha

的不同对象网关用户”。

222 管理 S3 和 Swift 帐户 SES 6

Page 243: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

要创建 Swift 用户,请执行以下步骤:

1. 要创建 Swift 用户(在我们的术语中称作子用户),需要先创建关联的用户。

cephadm@adm > radosgw-admin user create --uid=USERNAME \

--display-name="DISPLAY-NAME" --email=EMAIL

例如:

cephadm@adm > radosgw-admin user create \

--uid=example_user \

--display-name="Example User" \

[email protected]

2. 要创建用户的子用户(用于 Swift 接口),必须指定用户 ID(--uid=用户名)、子用户 ID

和该子用户的访问级别。

cephadm@adm > radosgw-admin subuser create --uid=UID \

--subuser=UID \

--access=[ read | write | readwrite | full ]

例如:

cephadm@adm > radosgw-admin subuser create --uid=example_user \

--subuser=example_user:swift --access=full

3. 为用户生成秘密密钥。

cephadm@adm > radosgw-admin key create \

--gen-secret \

--subuser=example_user:swift \

--key-type=swift

4. 这两个命令都会输出 JSON 格式的数据,其中显示了用户状态。请注意以下几行,并记住

secret_key 值:

"swift_keys": [

{ "user": "example_user:swift",

223 管理 S3 和 Swift 帐户 SES 6

Page 244: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

"secret_key": "r5wWIxjOCeEO7DixD1FjTLmNYIViaC6JVhi3013h"}],

通过 S3 接口访问对象网关时,需要运行以下命令来创建 S3 用户:

cephadm@adm > radosgw-admin user create --uid=USERNAME \

--display-name="DISPLAY-NAME" --email=EMAIL

例如:

cephadm@adm > radosgw-admin user create \

--uid=example_user \

--display-name="Example User" \

[email protected]

该命令还会创建用户的访问钥和秘密密钥。检查该命令输出中的 access_key 和

secret_key 关键字及其值:

[...]

"keys": [

{ "user": "example_user",

"access_key": "11BS02LGFB6AL6H1ADMW",

"secret_key": "vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY"}],

[...]

17.5.2.2 删除 S3 和 Swift 用户

删除 S3 用户与删除 Swift 用户的过程类似。不过,在删除 Swift 用户时,您可能需要同时删除

该用户及其子用户。

要删除 S3 或 Swift 用户(包括其所有子用户),请在以下命令中指定 user rm 和用户 ID:

cephadm@adm > radosgw-admin user rm --uid=example_user

要删除子用户,请指定 subuser rm 和子用户 ID。

cephadm@adm > radosgw-admin subuser rm --uid=example_user:swift

可使用以下选项:

--purge-data

清除与该用户 ID 关联的所有数据。

224 管理 S3 和 Swift 帐户 SES 6

Page 245: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

--purge-keys

清除与该用户 ID 关联的所有密钥。

提示:删除子用户删除某个子用户时,删除的是其对 Swift 接口的访问权限。该用户仍会保留在系统中。

17.5.2.3 更改 S3 和 Swift 用户的访问钥与秘密密钥

访问网关时, access_key 和 secret_key 参数用于标识对象网关用户。更改现有用户密钥

的过程与创建新用户密钥的过程相同,旧密钥将被重写。

对于 S3 用户,请运行以下命令:

cephadm@adm > radosgw-admin key create --uid=EXAMPLE_USER --key-type=s3 --gen-

access-key --gen-secret

对于 Swift 用户,请运行以下命令:

cephadm@adm > radosgw-admin key create --subuser=EXAMPLE_USER:swift --key-

type=swift --gen-secret

--key-type=类型

指定密钥的类型。值为 swift 或 s3。

--gen-access-key

生成随机访问钥(默认针对 S3 用户)。

--gen-secret

生成随机秘密密钥。

--secret=密钥

指定秘密密钥,例如手动生成的密钥。

17.5.2.4 用户配额管理

Ceph 对象网关允许您针对用户以及用户拥有的存储桶设置配额。配额包括一个存储桶中的最大

对象数,以及最大存储大小 (MB)。

225 管理 S3 和 Swift 帐户 SES 6

Page 246: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

在启用用户配额之前,需要先设置该配额的参数:

cephadm@adm > radosgw-admin quota set --quota-scope=user --uid=EXAMPLE_USER \

--max-objects=1024 --max-size=1024

--max-objects

指定最大对象数。指定负值会禁用检查。

--max-size

指定最大字节数。指定负值会禁用检查。

--quota-scope

设置配额的范围。选项包括 bucket 和 user。存储桶配额将应用到用户拥有的存储

桶。用户配额将应用到用户。

设置用户配额后,可启用该配额:

cephadm@adm > radosgw-admin quota enable --quota-scope=user --uid=EXAMPLE_USER

要禁用配额,请执行以下命令:

cephadm@adm > radosgw-admin quota disable --quota-scope=user --uid=EXAMPLE_USER

要列出配额设置,请执行以下命令:

cephadm@adm > radosgw-admin user info --uid=EXAMPLE_USER

要更新配额统计数字,请执行以下命令:

cephadm@adm > radosgw-admin user stats --uid=EXAMPLE_USER --sync-stats

17.6 HTTP 前端Ceph 对象网关支持两个嵌入式 HTTP 前端:Beast 和 Civetweb。

Beast 前端使用 Boost.Beast 库处理 HTTP 分析,使用 Boost.Asio 库处理异步网络 I/O。

Civetweb 前端使用 Civetweb HTTP 库,该库属于 Mongoose 的分支。

226 HTTP 前端 SES 6

Page 247: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

您可以在 /etc/ceph/ceph.conf 文件中使用 rgw_frontends 选项来配置这两个前端。

有关配置选项的列表,请参见第 16.3 节 “Ceph 对象网关”。

17.7 为对象网关启用 HTTPS/SSL要让默认对象网关角色可使用 SSL 进行安全通讯,您需要拥有 CA 颁发的证书,或创建自我签名

证书。为对象网关启用 HTTPS 的配置方法有两种,简单的方法是使用默认设置,高级方法可以

微调 HTTPS 相关设置。

17.7.1 创建自我签名证书

提示如果您已拥有 CA 签名的有效证书,请跳过本节。

默认情况下,DeepSea 预期证书文件位于 Salt Master 的 /srv/salt/ceph/rgw/cert/

rgw.pem 下。它会将证书分发到具有对象网关角色的 Salt Minion 的 /etc/ceph/rgw.pem

下,以便 Ceph 读取。

以下过程说明如何在 Salt Master 上生成自我签名的 SSL 证书。

1. 如果您需要通过其他主体身份来识别您的对象网关,请将这些身份添加到 /etc/ssl/

openssl.cnf 文件 [v3_req] 段落的 subjectAltName 选项中:

[...]

[ v3_req ]

subjectAltName = DNS:server1.example.com DNS:server2.example.com

[...]

提示:subjectAltName 中的 IP 地址要在 subjectAltName 选项中使用 IP 地址而非域名,请将示例行替换为以下

行:

227 为对象网关启用 HTTPS/SSL SES 6

Page 248: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

subjectAltName = IP:10.0.0.10 IP:10.0.0.11

2. 使用 openssl 创建密钥和证书。输入需要包含在证书中的所有数据。建议您输入 FQDN

作为常用名。对证书签名前,确认“X509v3 Subject Alternative Name:”包含在请求的扩展

中,并且生成的证书中设置了“X509v3 Subject Alternative Name:”。

root@master # openssl req -x509 -nodes -days 1095 \

-newkey rsa:4096 -keyout rgw.key -out /srv/salt/ceph/rgw/cert/rgw.pem

3. 向证书文件追加密钥:

root@master # cat rgw.key >> /srv/salt/ceph/rgw/cert/rgw.pem

17.7.2 简单的 HTTPS 配置

默认情况下,对象网关节点上的 Ceph 会读取 /etc/ceph/rgw.pem 证书,并使用端口 443

进行 SSL 安全通讯。如果您不需要更改这些值,请执行以下步骤:

1. 编辑 /srv/pillar/ceph/stack/global.yml,添加下行:

rgw_init: default-ssl

2. 将默认对象网关 SSL 配置复制到 ceph.conf.d 子目录:

root@master # cp /srv/salt/ceph/configuration/files/rgw-ssl.conf \

/srv/salt/ceph/configuration/files/ceph.conf.d/rgw.conf

3. 运行 DeepSea 阶段 2、3 和 4 以应用这些更改:

root@master # salt-run state.orch ceph.stage.2

root@master # salt-run state.orch ceph.stage.3

root@master # salt-run state.orch ceph.stage.4

228 简单的 HTTPS 配置 SES 6

Page 249: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

17.7.3 高级 HTTPS 配置

如果您需要更改对象网关 SSL 设置的默认值,请执行以下步骤:

1. 编辑 /srv/pillar/ceph/stack/global.yml,添加下行:

rgw_init: default-ssl

2. 将默认对象网关 SSL 配置复制到 ceph.conf.d 子目录:

root@master # cp /srv/salt/ceph/configuration/files/rgw-ssl.conf \

/srv/salt/ceph/configuration/files/ceph.conf.d/rgw.conf

3. 编辑 /srv/salt/ceph/configuration/files/ceph.conf.d/rgw.conf,更改

默认选项,例如端口号或 SSL 证书路径,以反映您的设置。

4. 运行 DeepSea 阶段 3 和 4 以应用这些更改:

root@master # salt-run state.orch ceph.stage.3

root@master # salt-run state.orch ceph.stage.4

提示:绑定到多个端口Beast 服务器可以绑定到多个端口。如果您需要使用 SSL 和非 SSL 两种连接来访问单个对

象网关实例,这种做法将非常实用。两个端口的配置行如下所示:

[client.{{ client }}]

rgw_frontends = beast port=80 ssl_port=443 ssl_certificate=/etc/ceph/

rgw.pem

17.8 同步扩展模块使用对象网关的多站点功能可以创建多个区域,并在这些区域之间镜像数据和元数据。同步扩

展模块构建在多站点框架的基础上,可将数据和元数据转发到不同的外部层。利用同步扩展模

块,可让系统在每当有数据发生更改(例如执行存储桶或用户创建等元数据操作)时即执行一

229 高级 HTTPS 配置 SES 6

Page 250: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

组操作。当对象网关多站点更改最终在远程站点上保持一致时,更改将以异步方式传播。因而

很多情况下都适合使用同步扩展模块,例如将对象存储备份到外部云集群、使用磁带机的自定

义备份解决方案,或在 ElasticSearch 中为元数据编制索引。

17.8.1 常规配置

所有同步扩展模块的配置方式都是相似的。您需要创建一个新区域(请参见第 17.13 节 “多站点

对象网关”了解更多详细信息)并为其设置 --tier_type 选项,例如针对云同步扩展模块设置

--tier-type=cloud:

cephadm@adm > radosgw-admin zone create --rgw-zonegroup=ZONE-GROUP-NAME \

--rgw-zone=ZONE-NAME \

--endpoints=http://endpoint1.example.com,http://endpoint2.example.com, [...] \

--tier-type=cloud

您可以使用以下命令来配置特定层:

cephadm@adm > radosgw-admin zone modify --rgw-zonegroup=ZONE-GROUP-NAME \

--rgw-zone=ZONE-NAME \

--tier-config=KEY1=VALUE1,KEY2=VALUE2

配置中的 KEY 指定您希望更新的配置变量, VALUE 指定该变量的新值。使用句点可访问嵌套

的值。例如:

cephadm@adm > radosgw-admin zone modify --rgw-zonegroup=ZONE-GROUP-NAME \

--rgw-zone=ZONE-NAME \

--tier-config=connection.access_key=KEY,connection.secret=SECRET

您可以通过追加方括号“[]”及引用的条目来访问相应阵列条目。您可以使用方括号“[]”来添加新的

阵列条目。索引值 -1 引用的是阵列中的最后一个条目。在同一个命令中无法创建新条目并再次

引用该条目。例如,用于为以 PREFIX 开头的存储桶创建新配置的命令如下所示:

cephadm@adm > radosgw-admin zone modify --rgw-zonegroup=ZONE-GROUP-NAME \

--rgw-zone=ZONE-NAME \

--tier-config=profiles[].source_bucket=PREFIX'*'

cephadm@adm > radosgw-admin zone modify --rgw-zonegroup=ZONE-GROUP-NAME \

230 常规配置 SES 6

Page 251: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

--rgw-zone=ZONE-NAME \

--tier-

config=profiles[-1].connection_id=CONNECTION_ID,profiles[-1].acls_id=ACLS_ID

提示:添加和删除配置条目您可以使用 --tier-config-add=键=值参数来添加新的层配置条目。

您可以使用 --tier-config-rm=键删除现有的条目。

17.8.2 同步区域

同步扩展模块配置对于区域而言位于本地。同步扩展模块会确定区域是要导出数据,

还是只能使用已在另一区域中修改的数据。从 Luminous 版本开始,支持的同步插件有

ElasticSearch、 rgw 和 log,其中 rgw 是在区域之间同步数据的默认同步插件,log 是记

录远程区域中发生的元数据操作的普通同步插件。以下各节内容包含了使用 ElasticSearch

同步扩展模块的区域示例。其过程与配置任何其他同步插件的过程都相似。

注意:默认同步插件rgw 是默认的同步插件,不需要进行明确配置。

17.8.2.1 要求和假设

我们假设已根据第 17.13 节 “多站点对象网关”中所述创建了一个简单的多站点配置,它由 us-

east 和 us-west 这两个区域组成。现在,我们添加第三个区域 us-east-es,此区域只处

理来自其他站点的元数据。此区域可与 us-east 位于同一 Ceph 集群中,也可位于不同的集群

中。此区域只使用来自其他区域的元数据,此区域中的对象网关不会直接处理任何最终用户请

求。

17.8.2.2 配置同步扩展模块

1. 创建类似于第 17.13 节 “多站点对象网关”中所述区域的第三个区域,例如

231 同步区域 SES 6

Page 252: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > radosgw-admin zone create --rgw-zonegroup=us --rgw-zone=us-

east-es \

--access-key=SYSTEM-KEY --secret=SECRET --endpoints=http://rgw-es:80

2. 可通过以下命令为此区域配置同步扩展模块

cephadm@adm > radosgw-admin zone modify --rgw-zone=ZONE-NAME --tier-

type=TIER-TYPE \

--tier-config={set of key=value pairs}

3. 例如,在 ElasticSearch 同步扩展模块中运行以下命令

cephadm@adm > radosgw-admin zone modify --rgw-zone=ZONE-NAME --tier-

type=elasticsearch \

--tier-config=endpoint=http://localhost:9200,num_shards=10,num_replicas=1

有关支持的各个 tier-config 选项,请参见第 17.8.3 节 “ElasticSearch 同步扩展模块”。

4. 最后,更新周期

cephadm@adm > radosgw-admin period update --commit

5. 现在,在区域中启动 radosgw

root # systemctl start ceph-radosgw@rgw.`hostname -s`

root # systemctl enable ceph-radosgw@rgw.`hostname -s`

17.8.3 ElasticSearch 同步扩展模块

此同步扩展模块会将来自其他区域的元数据写入 ElasticSearch。从 Luminous 版本开始,这些

元数据就是我们当前存储在 ElasticSearch 中的数据字段的 JSON。

{

"_index" : "rgw-gold-ee5863d6",

"_type" : "object",

"_id" : "34137443-8592-48d9-8ca7-160255d52ade.34137.1:object1:null",

"_score" : 1.0,

232 ElasticSearch 同步扩展模块 SES 6

Page 253: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

"_source" : {

"bucket" : "testbucket123",

"name" : "object1",

"instance" : "null",

"versioned_epoch" : 0,

"owner" : {

"id" : "user1",

"display_name" : "user1"

},

"permissions" : [

"user1"

],

"meta" : {

"size" : 712354,

"mtime" : "2017-05-04T12:54:16.462Z",

"etag" : "7ac66c0f148de9519b8bd264312c4d64"

}

}

}

17.8.3.1 ElasticSearch 层类型配置参数

endpoint

指定要访问的 ElasticSearch 服务器端点。

num_shards

(整数)数据同步初始化时将为 ElasticSearch 配置的分片数量。请注意,初始化之后将无

法更改此数量。在此处进行任何更改都需要重构建 ElasticSearch 索引,并需要重新初始化

数据同步进程。

num_replicas

(整数)数据同步初始化时将为 ElasticSearch 配置的副本数量。

explicit_custom_meta

(true | false) 指定是否将为所有用户自定义元数据编制索引,或者用户是否需要(在存储

桶级别)配置应为哪些客户元数据项编制索引。此参数默认为 false

index_buckets_list

233 ElasticSearch 同步扩展模块 SES 6

Page 254: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

(逗号分隔的字符串列表)如果为空,则为所有存储桶编制索引。否则,只为此处指定的

存储桶编制索引。可以提供存储桶前缀(例如“foo*”)或存储桶后缀(例如“*bar”)。

approved_owners_list

(逗号分隔的字符串列表)如果为空,将为所有所有者的存储桶编制索引(需遵守其他限

制);否则,将只为指定所有者拥有的存储桶编制索引。也可以提供后缀和前缀。

override_index_path

(字符串)如果非空,则此字符串将用作 ElasticSearch 索引路径。否则,将在同步初始化

时确定并生成索引路径。

username

指定 ElasticSearch 的用户名(如果需要身份验证)。

password

指定 ElasticSearch 的密码(如果需要身份验证)。

17.8.3.2 元数据查询

由于 ElasticSearch 集群现在存储对象元数据,因此务必确保 ElasticSearch 端点不会向公众公

开,只有集群管理员可访问它们。向最终用户自己公开元数据查询会造成问题,因为我们希望

该用户只查询自己的元数据,而不能查询任何其他用户的元数据,这就要求 ElasticSearch 集群

像 RGW 所做的那样来对用户进行身份验证,而这就导致了问题发生。

从 Luminous 版本开始,元数据主区域中的 RGW 可处理最终用户请求。这样就无需向公众公开

ElasticSearch 端点,同时也解决了身份验证和授权问题,因为 RGW 本身就能对最终用户请求进

行身份验证。出于此目的,RGW 在存储桶 API 中引入了可处理 ElasticSearch 请求的新查询。所

有这些请求必须发送到元数据主区域。

获取 ElasticSearch 查询

GET /BUCKET?query=QUERY-EXPR

请求参数:

max-keys:要返回的最大项数

marker:分页标识

234 ElasticSearch 同步扩展模块 SES 6

Page 255: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

expression := [(]<arg> <op> <value> [)][<and|or> ...]

运算符为下列其中一项:<、<=、==、>=、>

例如:

GET /?query=name==foo

将返回用户有权读取且名为“foo”的所有带索引键。输出内容将是 XML 格式的键列表,与

S3 的“列出存储桶”请求的响应类似。

配置自定义元数据字段

定义应该(在指定的存储桶中)为哪些自定义元数据项编制索引,以及这些键的类型是什

么。如果配置了显式自定义元数据索引,则需要此定义,以便 rgw 为指定的自定义元数

据值编制索引。如果未配置,在带索引元数据键的类型不是字符串的情况下,也需要此定

义。

POST /BUCKET?mdsearch

x-amz-meta-search: <key [; type]> [, ...]

多个元数据字段必须用逗号加以分隔,可以使用分号“;”强制指定字段的类型。当前允许

的类型有字符串(默认)、整数和日期。例如,如果您想要将自定义对象元数据 x-amz-

meta-year 以整数类型编入索引,将 x-amz-meta-date 以日期类型编入索引,并将 x-amz-

meta-title 以字符串类型编入索引,您需要运行以下命令:

POST /mybooks?mdsearch

x-amz-meta-search: x-amz-meta-year;int, x-amz-meta-release-date;date, x-

amz-meta-title;string

删除自定义元数据配置

删除自定义元数据存储桶配置。

DELETE /BUCKET?mdsearch

获取自定义元数据配置

检索自定义元数据存储桶配置。

GET /BUCKET?mdsearch

235 ElasticSearch 同步扩展模块 SES 6

Page 256: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

17.8.4 云同步扩展模块本节介绍用于将区域数据同步到远程云服务的扩展模块。该同步是单向的,无法将数据从远程

区域同步回其本地区域。此扩展模块的主要目的是实现面向多个云服务提供商的数据同步,当

前仅支持与 AWS (S3) 兼容的云提供程序。

要将数据同步到远程云服务,您需要配置用户身份凭证。由于许多云服务都对每个用户可创建

的存储桶数量设定了限制,因此您可以配置源对象与存储桶的映射,使不同的目标映射至不同

的存储桶和存储桶前缀。请注意,系统不会保留源访问列表 (ACL)。可以将特定源用户的权限映

射到特定的目标用户。

由于 API 存在限制,因此无法保留原始对象修改时间和 HTTP 实体标记 (ETag)。云同步扩展模块

会将它们存储为目标对象的元数据属性。

17.8.4.1 常规配置

下面提供了一些普通和非普通云同步扩展模块配置示例。请注意,普通配置可能会与非普通配

置发生冲突。

例 17.1︰ 普通配置

{

"connection": {

"access_key": ACCESS,

"secret": SECRET,

"endpoint": ENDPOINT,

"host_style": path | virtual,

},

"acls": [ { "type": id | email | uri,

"source_id": SOURCE_ID,

"dest_id": DEST_ID } ... ],

"target_path": TARGET_PATH,

}

例 17.2︰ 非普通配置

{

"default": {

"connection": {

"access_key": ACCESS,

236 云同步扩展模块 SES 6

Page 257: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

"secret": SECRET,

"endpoint": ENDPOINT,

"host_style" path | virtual,

},

"acls": [

{

"type": id | email | uri, # optional, default is id

"source_id": ID,

"dest_id": ID

} ... ]

"target_path": PATH # optional

},

"connections": [

{

"connection_id": ID,

"access_key": ACCESS,

"secret": SECRET,

"endpoint": ENDPOINT,

"host_style": path | virtual, # optional

} ... ],

"acl_profiles": [

{

"acls_id": ID, # acl mappings

"acls": [ {

"type": id | email | uri,

"source_id": ID,

"dest_id": ID

} ... ]

}

],

"profiles": [

{

"source_bucket": SOURCE,

"connection_id": CONNECTION_ID,

"acls_id": MAPPINGS_ID,

"target_path": DEST, # optional

} ... ],

}

237 云同步扩展模块 SES 6

Page 258: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

下面是对所用配置术语的解释:

connection

表示与远程云服务的连接。包

含“connection_id”、“access_key”、“secret”、“endpoint”和“host_style”。

access_key

将用于特定连接的远程云访问密钥。

secret

远程云服务的秘密密钥。

endpoint

远程云服务端点的 URL。

host_style

访问远程云端点时要使用的主机类型(“path”或“virtual”)。默认值为“path”。

acls

访问列表映射阵列。

acl_mapping

每个“acl_mapping”结构都包含“type”、“source_id”和“dest_id”。它们将定义每个对象的

ACL 变化。ACL 变化允许将源用户 ID 转换为目标 ID。

type

ACL 类型:“id”定义用户 ID,“email”按电子邮件定义用户,“uri”按 uri(组)定义用户。

source_id

源区域中的用户 ID。

dest_id

目标区域中的用户 ID。

target_path

用于定义目标路径创建方式的字符串。目标路径指定追加到源对象名称的前缀。可对目标

路径进行配置,使其包含以下任何变量:

SID

238 云同步扩展模块 SES 6

Page 259: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

表示同步实例 ID 的唯一字符串。

ZONEGROUP

区域组名称。

ZONEGROUP_ID

区域组 ID。

ZONE

区域名称。

ZONE_ID

区域 ID。

BUCKET

源存储桶名称。

OWNER

源存储桶所有者 ID。

例如:target_path = rgwx- ZONE - SID / OWNER / BUCKET

acl_profiles

访问列表配置阵列。

acl_profile

每个配置均包含代表配置的“acls_id”和用于存放“acl_mappings”列表的“acls”阵列。

profiles

配置列表。每个配置均包含以下变量:

source_bucket

用于定义此配置源存储桶的存储桶名称或存储桶前缀(如果以 * 结尾)。

target_path

请参见上文的相关解释。

connection_id

将用于此配置的连接 ID。

acls_id

将用于此配置的 ACL 配置 ID。

239 云同步扩展模块 SES 6

Page 260: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

17.8.4.2 专用于 S3 的可配置项

云同步扩展模块仅适用于与 AWS S3 兼容的后端。该扩展模块提供了一些可配置项,用来调整它

在访问 S3 云服务时的行为:

{

"multipart_sync_threshold": OBJECT_SIZE,

"multipart_min_part_size": PART_SIZE

}

multipart_sync_threshold

针对大小大于或等于此值的对象,将使用多部分上载来与云服务进行同步。

multipart_min_part_size

通过多部分上载同步对象时所使用的部分大小下限。

17.8.5 存档同步扩展模块

存档同步扩展模块利用了对象网关中 S3 对象的版本控制功能。您可以配置一个存档区域,用来

捕获其他区域中一段时间内出现的 S3 对象的不同版本。存档区域保留的版本历史只能通过与存

档区域关联的网关来删除。

借助这样的体系结构,一些不受版本控制的区域可以通过自身的区域网关来镜像它们的数据和

元数据,以便向最终用户提供高可用性,同时,存档区域会捕获所有数据更新,以便将它们合

并为 S3 对象的版本。

通过在多区域配置中包含存档区域,您可以灵活地在一个区域中保留 S3 对象历史,同时能够节

省其余区域中受版本控制的 S3 对象的副本原本需要的空间。

17.8.5.1 配置

提示:更多信息有关配置多站点网关的详细信息,请参见第 17.13 节 “多站点对象网关”。

有关配置同步扩展模块的详细信息,请参见第 17.8 节 “同步扩展模块”。

240 存档同步扩展模块 SES 6

Page 261: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

要使用存档扩展模块,您需要创建一个新区域,并将其层类型设置为 archive:

cephadm@adm > radosgw-admin zone create --rgw-zonegroup=ZONE_GROUP_NAME \

--rgw-zone=OGW_ZONE_NAME \

--endpoints=http://OGW_ENDPOINT1_URL[,http://OGW_ENDPOINT2_URL,...]

--tier-type=archive

17.9 LDAP 身份验证除了默认的本地用户身份验证以外,对象网关还能利用 LDAP 服务器服务来对用户进行身份验

证。

17.9.1 身份验证机制

对象网关从令牌提取用户的 LDAP 身份凭证。可以基于用户名构造搜索过滤器。对象网关使用配

置的服务帐户在目录中搜索匹配的项。如果找到了某个项,对象网关会尝试使用令牌中的密码

绑定到所找到的判别名。如果身份凭证有效,绑定将会成功,并且对象网关会授予访问权限。

您可以通过将搜索范围设置为特定的组织单位,或者指定自定义搜索过滤器(例如,要求特定

的组成员资格、自定义对象类或属性),来限制允许的用户。

17.9.2 要求

LDAP 或 Active Directory:对象网关可访问的运行中 LDAP 实例。

服务帐户:对象网关要使用且拥有搜索权限的 LDAP 身份凭证。

用户帐户:LDAP 目录中的至少一个用户帐户。

重要:LDAP 用户和本地用户不能重叠不得对本地用户以及要使用 LDAP 进行身份验证的用户使用相同的用户名。对象网关无法

区分两者,会将它们视为同一个用户。

241 LDAP 身份验证 SES 6

Page 262: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

提示:健康检查使用 ldapsearch 实用程序可校验服务帐户或 LDAP 连接。例如:

tux > ldapsearch -x -D "uid=ceph,ou=system,dc=example,dc=com" -W \

-H ldaps://example.com -b "ou=users,dc=example,dc=com" 'uid=*' dn

请务必在 Ceph 配置文件中使用相同的 LDAP 参数,以杜绝可能的问题。

17.9.3 将对象网关配置为使用 LDAP 身份验证

/etc/ceph/ceph.conf 配置文件中的以下参数与 LDAP 身份验证相关:

rgw_ldap_uri

指定要使用的 LDAP 服务器。请务必使用 ldaps://FQDN:PORT 参数,以免公开传输明

文身份凭证。

rgw_ldap_binddn

对象网关使用的服务帐户的判别名 (DN)。

rgw_ldap_secret

服务帐户的密码。

rgw_ldap_searchdn

指定在目录信息树中搜索用户的范围,可以是用户的组织单位,或某个更具体的组织单位

(OU)。

rgw_ldap_dnattr

在构造的搜索过滤器中用来匹配用户名的属性。根据所用的目录信息树 (DIT),可能会是

uid 或 cn。

rgw_search_filter

如果未指定,则对象网关会使用 rgw_ldap_dnattr 设置自动构造搜索过滤器。使用此

参数能非常灵活地缩小所允许用户列表的范围。有关详细信息,请参见第 17.9.4 节 “使用

自定义搜索过滤器来限制用户访问权限”。

242 将对象网关配置为使用 LDAP 身份验证 SES 6

Page 263: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

17.9.4 使用自定义搜索过滤器来限制用户访问权限

可通过两种方式使用 rgw_search_filter 参数。

17.9.4.1 用于进一步限制所构造搜索过滤器的部分过滤器

部分过滤器的示例:

"objectclass=inetorgperson"

对象网关将照常使用令牌中的用户名和 rgw_ldap_dnattr 的值生成搜索过滤器。然后,构造

的过滤器将与 rgw_search_filter 属性中的部分过滤器合并。根据所用的用户名和设置,

最终的搜索过滤器可能会变成:

"(&(uid=hari)(objectclass=inetorgperson))"

在这种情况下,仅当在 LDAP 目录中找到了用户“hari”,该用户具有对象类“inetorgperson”并且

确实指定了有效密码时,才向他授予访问权限。

17.9.4.2 完整过滤器

完整过滤器必须包含 USERNAME 令牌,在尝试身份验证期间,该令牌将替换为用户名。在这种

情况下,不再使用 rgw_ldap_dnattr 参数。例如,要将有效用户限制为特定的组,可使用以

下过滤器:

"(&(uid=USERNAME)(memberOf=cn=ceph-users,ou=groups,dc=mycompany,dc=com))"

注意:memberOf 属性在 LDAP 搜索中使用 memberOf 属性需要您实施的特定 LDAP 服务器提供服务器端支

持。

243 使用自定义搜索过滤器来限制用户访问权限 SES 6

Page 264: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

17.9.5 生成用于 LDAP 身份验证的访问令牌

radosgw-token 实用程序基于 LDAP 用户名和密码生成访问令牌。它会输出 base-64 编码字

符串,即实际的访问令牌。请使用偏好的 S3 客户端(请参见第 17.5.1 节 “访问对象网关”),将

该令牌指定为访问钥,并使用空秘密密钥。

tux > export RGW_ACCESS_KEY_ID="USERNAME"

tux > export RGW_SECRET_ACCESS_KEY="PASSWORD"

cephadm@adm > radosgw-token --encode --ttype=ldap

重要:明文身份凭证访问令牌是一个 base-64 编码的 JSON 结构,包含明文形式的 LDAP 身份凭证。

注意:Active Directory对于 Active Directory,请使用 --ttype=ad 参数。

17.10 存储桶索引分片对象网关将存储桶索引数据存储在索引池中,该池默认为 .rgw.buckets.index。如果将太

多(成百上千个)对象放入单个存储桶中,并且不设置每个存储桶的最大对象数量配额 ( rgw

bucket default quota max objects ),索引池的性能可能会下降。存储桶索引分片可在

允许每个存储桶中放入大量对象的同时,防止出现此类性能下降的情况。

17.10.1 存储桶索引重分片

如果随着存储桶的增大,其初始配置不再能满足需求,则需要对存储桶的索引池进行重分片。

您可以使用自动联机存储桶索引重分片(请参见第 17.10.1.1 节 “动态重分片”),也可以手动脱

机执行存储桶索引重分片(请参见第 17.10.1.2 节 “手动重分片”)。

244 生成用于 LDAP 身份验证的访问令牌 SES 6

Page 265: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

17.10.1.1 动态重分片

从 SUSE Enterprise Storage 5 开始,我们支持联机存储桶重分片。此功能会检测每个存储桶的

对象数量是否达到某个阈值,如果达到该阈值,将会相应地自动增加存储桶索引使用的分片数

量。此进程会减少每个存储桶索引分片中的条目数。

该检测进程在以下情况和环境中运行:

当有新的对象添加到存储桶中时。

在定期扫描所有存储桶的后台进程中。扫描的目的是为了处理未在更新的现有存储桶。

需要重分片的存储桶将会添加到 reshard_log 队列,且将安排于稍后进行重分片。重分片线

程在后台运行,将逐个执行已安排的重分片。

配置动态重分片

rgw_dynamic_resharding

启用或禁用动态存储桶索引重分片。可用的值为“true”或“false”。默认设为“true”。

rgw_reshard_num_logs

重分片日志的分片数。默认设为 16。

rgw_reshard_bucket_lock_duration

重分片期间将存储桶对象锁定的时长。默认设为 120 秒。

rgw_max_objs_per_shard

每个存储桶索引分片的最大对象数。默认设为 100000 个对象。

rgw_reshard_thread_interval

两轮重分片线程处理间隔的最长时间。默认设为 600 秒。

重要:多站点配置多站点环境下不支持动态重新分片。从 Ceph 12.2.2 起默认会禁用该功能,但我们建议您

再次检查此设置。

用于管理重分片进程的命令

将存储桶添加到重分片队列:

245 存储桶索引重分片 SES 6

Page 266: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > radosgw-admin reshard add \

--bucket BUCKET_NAME \

--num-shards NEW_NUMBER_OF_SHARDS

列出重分片队列:

cephadm@adm > radosgw-admin reshard list

处理/安排存储桶重分片:

cephadm@adm > radosgw-admin reshard process

显示存储桶重分片状态:

cephadm@adm > radosgw-admin reshard status --bucket BUCKET_NAME

取消待处理的存储桶重分片:

cephadm@adm > radosgw-admin reshard cancel --bucket BUCKET_NAME

17.10.1.2 手动重分片

第 17.10.1.1 节 “动态重分片”所述的动态重新分片仅适用于简单对象网关配置。对于多站点配

置,请使用本节中所述的手动重新分片。

要手动对存储桶索引执行脱机重分片,请使用以下命令:

cephadm@adm > radosgw-admin bucket reshard

bucket reshard 命令执行以下操作:

为指定对象创建一组新的存储桶索引对象。

分散这些索引对象的所有条目。

创建新的存储桶实例。

列出新的存储桶实例以及存储桶,以便所有新的索引操作都能够应用到新的存储桶索引。

将旧的和新的存储桶 ID 打印到标准输出。

246 存储桶索引重分片 SES 6

Page 267: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

过程 17.1︰ 将存储桶索引池重分片

1. 确保对存储桶执行的所有操作都已停止。

2. 备份原始存储桶索引:

cephadm@adm > radosgw-admin bi list \

--bucket=BUCKET_NAME \

> BUCKET_NAME.list.backup

3. 对存储桶索引重分片:

cephadm@adm > radosgw-admin reshard \

--bucket=BUCKET_NAME \

--num-shards=NEW_SHARDS_NUMBER

提示:旧存储桶 ID此命令还会将新的和旧的存储桶 ID 打印到其输出中。请记下旧存储桶 ID,清除旧

的存储桶索引对象时需要用到它。

4. 将旧存储桶索引列表与新存储桶索引列表进行比较,校验列出的对象是否正确。然后,清

除旧的存储桶索引对象:

cephadm@adm > radosgw-admin bi purge

--bucket=BUCKET_NAME

--bucket-id=OLD_BUCKET_ID

17.10.2 新存储桶的存储桶索引分片

有两个选项会影响存储桶索引分片:

对于简单配置,请使用 rgw_override_bucket_index_max_shards 选项。

对于多站点配置,请使用 bucket_index_max_shards 选项。

将选项设为 0 将禁用存储桶索引分片。如果将其设为大于 0 的值,则会启用存储桶索引分

片,并设置最大分片数。

247 新存储桶的存储桶索引分片 SES 6

Page 268: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

下面的公式可帮助您计算建议的分片数:

number_of_objects_expected_in_a_bucket / 100000

注意,分片的最大数量为 7877。

17.10.2.1 简单配置

1. 打开 Ceph 配置文件,然后添加或修改以下选项:

rgw_override_bucket_index_max_shards = 12

提示:所有或一个对象网关实例要为对象网关的所有实例配置存储桶索引分片,请将

rgw_override_bucket_index_max_shards 添加到 [global] 段落。

要仅为对象网关的某个特定实例配置存储桶索引分片,请将

rgw_override_bucket_index_max_shards 添加到相关实例段落。

2. 重启动对象网关。有关详细信息,请参见第 17.3 节 “操作对象网关服务”。

17.10.2.2 多站点配置

多站点配置可使用另一个索引池来管理故障转移。要为一个区域组内的区域配置一致的分片数

量,请在该区域组的配置中设置 bucket_index_max_shards 选项:

1. 将区域组配置导出到 zonegroup.json 文件:

cephadm@adm > radosgw-admin zonegroup get > zonegroup.json

2. 编辑 zonegroup.json 文件,为每个指定的区域设置 bucket_index_max_shards

选项。

3. 重新设置区域组:

cephadm@adm > radosgw-admin zonegroup set < zonegroup.json

248 新存储桶的存储桶索引分片 SES 6

Page 269: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

4. 更新周期:

cephadm@adm > radosgw-admin period update --commit

17.11 集成 OpenStack KeystoneOpenStack Keystone 是一项用于 OpenStack 产品的身份服务。您可以将对象网关与 Keystone

相集成,以设置接受 Keystone 身份验证令牌的网关。Ceph 对象网关端将会对 Keystone 授权可

访问网关的用户进行校验,并视需要自动创建用户。对象网关会定期查询 Keystone,以获取已

撤消令牌列表。

17.11.1 配置 OpenStack

配置 Ceph 对象网关前,需要先配置 OpenStack Keystone 以启用 Swift 服务,并将其指向 Ceph

对象网关:

1. 设置 Swift 服务。要使用 OpenStack 来验证 Swift 用户,请先创建 Swift 服务:

tux > openstack service create \

--name=swift \

--description="Swift Service" \

object-store

2. 设置端点。创建 Swift 服务后,指向 Ceph 对象网关。用网关的区域组名或区域名称替换

REGION_NAME。

tux > openstack endpoint create --region REGION_NAME \

--publicurl "http://radosgw.example.com:8080/swift/v1" \

--adminurl "http://radosgw.example.com:8080/swift/v1" \

--internalurl "http://radosgw.example.com:8080/swift/v1" \

swift

3. 校验这些设置。创建 Swift 服务并设置端点后,显示端点以确认所有设置正确无误。

tux > openstack endpoint show object-store

249 集成 OpenStack Keystone SES 6

Page 270: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

17.11.2 配置 Ceph 对象网关

17.11.2.1 配置 SSL 证书

Ceph 对象网关会定期查询 Keystone,以获取已撤消令牌列表。这些请求会被编码并签名。还

可配置 Keystone 以提供自我签名令牌,这些令牌同样经过编码和签名。您需要配置网关以便其

可以解码并校验这些已签名讯息。因此,需要将 Keystone 用于创建请求的 OpenSSL 证书转换

为“nss db”格式:

root # mkdir /var/ceph/nss

root # openssl x509 -in /etc/keystone/ssl/certs/ca.pem \

-pubkey | certutil -d /var/ceph/nss -A -n ca -t "TCu,Cu,Tuw"

rootopenssl x509 -in /etc/keystone/ssl/certs/signing_cert.pem \

-pubkey | certutil -A -d /var/ceph/nss -n signing_cert -t "P,P,P"

为允许 Ceph 对象网关与 OpenStack Keystone 交互,OpenStack Keystone 可使用自我签名的

SSL 证书。可在运行 Ceph 对象网关的节点上安装 Keystone 的 SSL 证书,也可以将选项 rgw

keystone verify ssl 的值设为“false”。将 rgw keystone verify ssl 设为“false”意

味着网关将不会尝试校验证书。

17.11.2.2 配置对象网关的选项

您可以使用以下选项配置 Keystone 集成:

rgw keystone api version

Keystone API 的版本。有效选项为 2 或 3。默认设为 2。

rgw keystone url

Keystone 服务器上的管理 RESTful API 的 URL 和端口号。采用

SERVER_URL:PORT_NUMBER 模式。

rgw keystone admin token

在 Keystone 内部为管理请求配置的令牌或共享密钥。

rgw keystone accepted roles

处理请求需要具有的角色。默认设为“Member, admin”。

250 配置 Ceph 对象网关 SES 6

Page 271: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

rgw keystone accepted admin roles

允许用户获取管理特权的角色列表。

rgw keystone token cache size

Keystone 令牌缓存中的最大条目数。

rgw keystone revocation interval

检查已撤消令牌前间隔的秒数。默认设为 15 * 60。

rgw keystone implicit tenants

在各自的同名租户中创建新用户。默认设为“false”。

rgw s3 auth use keystone

如果设为“true”,Ceph 对象网关将使用 Keystone 对用户进行身份验证。默认设

为“false”。

nss db path

NSS 数据库的路径。

还可以配置 Keystone 服务租户、Keystone 的用户和密码(适用于 OpenStack Identity API 2.0

版本),配置方法与配置 OpenStack 服务的方法类似。使用此方法可避免在配置文件中设置

共享密钥 rgw keystone admin token,生产环境中应禁用该共享密钥。服务租户身份

凭证应拥有管理员权限。有关更多详细信息,请参见 OpenStack Keystone 官方文档 (https://

docs.openstack.org/keystone/latest/#setting-up-projects-users-and-roles) 。相关配置选项

如下:

rgw keystone admin user

Keystone 管理员用户名。

rgw keystone admin password

Keystone 管理员用户密码。

rgw keystone admin tenant

Keystone 2.0 版管理员用户租户。

Ceph 对象网关用户与 Keystone 租户一一映射。系统会为一个 Keystone 用户指定不同的角色,

这些角色可能分布在不止一个租户上。当 Ceph 对象网关收到票据时,会查看为该票据指定的租

户和用户角色,并根据 rgw keystone accepted roles 选项的设置接受或拒绝请求。

251 配置 Ceph 对象网关 SES 6

Page 272: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

提示:映射到 OpenStack 租户虽然 Swift 租户默认会映射到对象网关用户,但也可通过 rgw keystone implicit

tenants 选项将其映射到 OpenStack 租户。如此会让容器使用租户名称空间,而不是对

象网关默认采用的 S3 之类的全局名称空间。建议在规划阶段就决定好映射方法,以免产

生混淆。这是因为以后切换选项只会影响租户下所映射的较新请求,而先前创建的旧存储

桶仍将继续放在全局名称空间中。

对于 OpenStack Identity API 3 版本,您应使用以下选项替换 rgw keystone admin

tenant 选项:

rgw keystone admin domain

Keystone 管理员用户域。

rgw keystone admin project

Keystone 管理员用户项目。

17.12 存储池归置和存储类别

17.12.1 归置目标

归置目标用于控制哪些存储池与特定存储桶相关联。存储桶的归置目标是在创建存储桶时选择

的,无法修改。您可通过运行以下命令来显示存储桶的“placement_rule”:

cephadm@adm > radosgw-admin bucket stats

区域组配置包含一个归置目标列表,其中的初始目标名为“default-placement”。区域配置随

后会将每个区域组归置目标名称映射到其本地存储。此区域归置信息包括表示存储桶索引

的“index_pool”名称、表示不完整多部分上载相关元数据的“data_extra_pool”名称,以及表示每

个存储类别的“data_pool”名称。

17.12.2 存储类别

存储类别有助于自定义对象数据的归置。S3 存储桶生命周期规则可自动转换对象的存储类别。

252 存储池归置和存储类别 SES 6

Page 273: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

存储类别根据归置目标定义。每个区域组归置目标会列出它的可用存储类别,其中初始类别名

为“STANDARD”。区域配置负责为每个区域组的存储类别提供“data_pool”存储池名称。

17.12.3 区域组/区域配置

您可以对区域组和区域使用 radosgw-admin 命令来配置其归置。可以使用以下命令来查询区

域组归置配置:

cephadm@adm > radosgw-admin zonegroup get

{

"id": "ab01123f-e0df-4f29-9d71-b44888d67cd5",

"name": "default",

"api_name": "default",

...

"placement_targets": [

{

"name": "default-placement",

"tags": [],

"storage_classes": [

"STANDARD"

]

}

],

"default_placement": "default-placement",

...

}

要查询区域归置配置,请运行以下命令:

cephadm@adm > radosgw-admin zone get

{

"id": "557cdcee-3aae-4e9e-85c7-2f86f5eddb1f",

"name": "default",

"domain_root": "default.rgw.meta:root",

...

"placement_pools": [

{

253 区域组/区域配置 SES 6

Page 274: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

"key": "default-placement",

"val": {

"index_pool": "default.rgw.buckets.index",

"storage_classes": {

"STANDARD": {

"data_pool": "default.rgw.buckets.data"

}

},

"data_extra_pool": "default.rgw.buckets.non-ec",

"index_type": 0

}

}

],

...

}

注意:之前未进行多站点配置如果您之前未进行过任何多站点配置,系统将会为您创建“default”区域和区域组,并且您

必须重启动 Ceph 对象网关,对该区域/区域组所做的更改才会生效。如果您已创建过多

站点领域,则当您使用 radosgw-admin period update --commit 命令提交对区

域/区域组的更改后,更改即会生效。

17.12.3.1 添加归置目标

要创建一个名为“temporary”的新归置目标,首先请将该归置目标添加到区域组:

cephadm@adm > radosgw-admin zonegroup placement add \

--rgw-zonegroup default \

--placement-id temporary

然后为该目标提供区域归置信息:

cephadm@adm > radosgw-admin zone placement add \

--rgw-zone default \

--placement-id temporary \

254 区域组/区域配置 SES 6

Page 275: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

--data-pool default.rgw.temporary.data \

--index-pool default.rgw.temporary.index \

--data-extra-pool default.rgw.temporary.non-ec

17.12.3.2 添加存储类别

要向“default-placement”目标添加一个名为“COLD”的新存储类别,首先请将该存储类别添加到

区域组:

cephadm@adm > radosgw-admin zonegroup placement add \

--rgw-zonegroup default \

--placement-id default-placement \

--storage-class COLD

然后为该存储类别提供区域归置信息:

cephadm@adm > radosgw-admin zone placement add \

--rgw-zone default \

--placement-id default-placement \

--storage-class COLD \

--data-pool default.rgw.cold.data \

--compression lz4

17.12.4 自定义归置

17.12.4.1 默认归置

新存储桶默认会使用区域组的“default_placement”目标。您可以使用以下命令更改此区域组设

置:

cephadm@adm > radosgw-admin zonegroup placement default \

--rgw-zonegroup default \

--placement-id new-placement

255 自定义归置 SES 6

Page 276: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

17.12.4.2 用户归置

Ceph 对象网关用户可以通过在用户信息中设置非空的“default_placement”字段来覆盖区域组的

默认归置目标。同样,“default_storage_class”也可以覆盖默认应用于对象的“STANDARD”存储类

别。

cephadm@adm > radosgw-admin user info --uid testid

{

...

"default_placement": "",

"default_storage_class": "",

"placement_tags": [],

...

}

如果区域组的归置目标包含任何标记,则除非用户信息的“placement_tags”字段中至少包含一个

相匹配的标记,否则用户将无法创建具有该归置目标的存储桶。这有助于限制对某些特定存储

类型的访问。

radosgw-admin 无法直接修改这些字段,因此您需要手动编辑 JSON 格式:

cephadm@adm > radosgw-admin metadata get user:USER-ID > user.json

tux > vi user.json # edit the file as required

cephadm@adm > radosgw-admin metadata put user:USER-ID < user.json

17.12.4.3 S3 存储桶归置

采用 S3 协议创建存储桶时,可在 LocationConstraint 选项中提供归置目标,以覆盖用户

和区域组的默认归置目标。

通常, LocationConstraint 需要与区域组的 api_name 相匹配:

<LocationConstraint>default</LocationConstraint>

您可以向 api_name 添加自定义归置目标(需在该自定义目标前加上一个冒号):

<LocationConstraint>default:new-placement</LocationConstraint>

256 自定义归置 SES 6

Page 277: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

17.12.4.4 Swift 存储桶归置

采用 Swift 协议创建存储桶时,您可以在 HTTP 报头的“X-Storage-Policy”中提供归置目标:

X-Storage-Policy: NEW-PLACEMENT

17.12.5 使用存储类别

所有归置目标均具有“STANDARD”存储类别,这是系统默认为新对象应用的存储类别。您可以使

用对象的“default_storage_class”覆盖此默认值。

要创建不属于默认存储类别的对象,请在请求的 HTTP 报头中提供所需的存储类别名称。S3 协

议使用“X-Amz-Storage-Class”报头,而 Swift 协议则使用“X-Object-Storage-Class”报头。

借助 S3 对象生命周期管理,您可以使用“Transition”(转换)操作来切换对象数据的存储类别。

17.13 多站点对象网关区域

一个或多个对象网关实例的逻辑分组。必须将区域组中的一个区域指定为主区域,负责处

理所有存储桶和用户的创建。

区域组

一个区域组由多个区域组成。应设置一个将负责处理系统配置更改的主区域组。

区域组索引

用于存放整个系统索引的配置结构,例如,哪个区域组是主区域组、不同区域组之间的关

系,以及存储策略等特定配置选项。

领域

容纳区域组的容器。使用领域可在集群之间分隔区域组。可以创建多个领域,以便在同一

集群中更轻松地运行完全不同的配置。

周期

周期存放领域当前状态的配置结构。每个周期都包含一个唯一 ID 和一个版本号。每个领

域都有一个关联的当前周期,存放区域组配置的当前状态和存储策略。非主区域发生任何

配置更改都会使周期的版本号递增。将主区域更改为其他区域会触发以下更改:

257 使用存储类别 SES 6

Page 278: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

生成具有新周期 ID 和版本号为 1 的新周期。

领域的当前周期会更新,以指向新生成的周期 ID。

领域的版本号将会递增。

您可将每个对象网关配置为参与联合体系结构,在活跃区域配置中工作,同时允许写入非主区

域。

17.13.1 术语

下面解释了联合体系结构的专用术语:

17.13.2 示例集群设置

本示例重点说明如何创建包含三个不同区域的单个区域组,这三个区域会主动同步其数据。其

中两个区域属于同一集群,第三个区域属于其他集群。在对象网关之间镜像数据更改时,不需

要同步代理的参与。如此可大大简化配置模式和主动/主动配置。请注意,元数据操作(例如创

建新用户)仍需要通过主区域处理。但是,数据操作(例如创建存储桶和对象)可由任意区域

处理。

17.13.3 系统密钥

对象网关需要您在配置区域时创建与 S3 兼容的系统用户,以及他们的访问钥和秘密密钥。这

样,另一个对象网关实例便可以使用该访问钥和秘密密钥远程提取配置。有关创建 S3 用户的详

细信息,请参见第 17.5.2.1 节 “添加 S3 和 Swift 用户”。

提示在创建区域本身之前生成访问钥和秘密密钥的做法非常实用,因为这可以让稍后的脚本编

写和配置管理工具的使用变得更容易。

对于本示例,我们假设已在环境变量中设置访问钥和秘密密钥:

# SYSTEM_ACCESS_KEY=1555b35654ad1656d805

258 术语 SES 6

Page 279: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

# SYSTEM_SECRET_KEY=h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q==

一般情况下,访问钥包含 20 个字母数字字符,而秘密密钥包含 40 个字母数字字符(也可以包

含 +/= 字符)。可在命令行中生成这些密钥:

# SYSTEM_ACCESS_KEY=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 20 | head

-n 1)

# SYSTEM_SECRET_KEY=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 40 | head

-n 1)

17.13.4 命名约定

本示例介绍设置主区域的过程。我们假设有一个名为 us 的区域组,该区域组横跨美国,将作

为我们的主区域组。此区域组将包含采用区域组 -区域格式的两个区域。这只是我们一贯采用

的格式,您可以选择偏好的格式。概括如下:

主区域组:美国: us

主区域:美国东部区域 1: us-east-1

次要区域:美国东部区域 2: us-east-2

次要区域:美国西部区域: us-west

此配置将属于名为 gold 的较大领域。 us-east-1 和 us-east-2 区域属于同一个 Ceph 集

群, us-east-1 是主区域。 us-west 在另一个不同的 Ceph 集群中。

17.13.5 默认存储池

为对象网关配置了相应的权限后,它便可自行创建默认存储池。 pg_num 和 pgp_num 值取

自 ceph.conf 配置文件。默认情况下,与区域相关的存储池的格式遵循区域名称 .存储池名

称约定。以 us-east-1 区域为例,它将创建以下存储池:

.rgw.root

us-east-1.rgw.control

us-east-1.rgw.data.root

259 命名约定 SES 6

Page 280: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

us-east-1.rgw.gc

us-east-1.rgw.log

us-east-1.rgw.intent-log

us-east-1.rgw.usage

us-east-1.rgw.users.keys

us-east-1.rgw.users.email

us-east-1.rgw.users.swift

us-east-1.rgw.users.uid

us-east-1.rgw.buckets.index

us-east-1.rgw.buckets.data

us-east-1.rgw.meta

也可以在其他区域中创建这些存储池,只需将 us-east-1 替换为相应的区域名称即可。

17.13.6 创建领域

配置名为 gold 的领域,并将其设为默认领域:

cephadm@adm > radosgw-admin realm create --rgw-realm=gold --default

{

"id": "4a367026-bd8f-40ee-b486-8212482ddcd7",

"name": "gold",

"current_period": "09559832-67a4-4101-8b3f-10dfcd6b2707",

"epoch": 1

}

请注意,每个领域都有一个 ID,这样,以后便可灵活地执行所需的操作(例如,重命名领

域)。每当我们更改主区域中的任何设置时, current_period 都会发生变化。如果主区域

的配置发生更改,导致当前周期发生更改, epoch 将会递增。

17.13.7 删除默认区域组

采用默认设置安装对象网关时会创建名为 default 的默认区域组。由于我们不再需要默认区

域组,因此将其删除。

cephadm@adm > radosgw-admin zonegroup delete --rgw-zonegroup=default

260 创建领域 SES 6

Page 281: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

17.13.8 创建主区域组

创建名为 us 的主区域组。该区域组将管理区域组索引,并将更改传播到系统的其余组件。通

过将某个区域组标记为默认区域组,可以明确指定要在后续命令中使用的 rgw-zonegroup 开

关。

cephadm@adm > radosgw-admin zonegroup create --rgw-zonegroup=us \

--endpoints=http://rgw1:80 --master --default

{

"id": "d4018b8d-8c0d-4072-8919-608726fa369e",

"name": "us",

"api_name": "us",

"is_master": "true",

"endpoints": [

"http:\/\/rgw1:80"

],

"hostnames": [],

"hostnames_s3website": [],

"master_zone": "",

"zones": [],

"placement_targets": [],

"default_placement": "",

"realm_id": "4a367026-bd8f-40ee-b486-8212482ddcd7"

}

或者,可使用以下命令将某个区域组标记为默认区域组:

cephadm@adm > radosgw-admin zonegroup default --rgw-zonegroup=us

17.13.9 创建主区域

现在,请创建一个默认区域并将其添加到默认区域组。请注意,您在执行元数据操作(例如创

建用户)时将会用到此区域:

cephadm@adm > radosgw-admin zone create --rgw-zonegroup=us --rgw-zone=us-east-1

\

--endpoints=http://rgw1:80 --access-key=$SYSTEM_ACCESS_KEY --

secret=$SYSTEM_SECRET_KEY

261 创建主区域组 SES 6

Page 282: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

{

"id": "83859a9a-9901-4f00-aa6d-285c777e10f0",

"name": "us-east-1",

"domain_root": "us-east-1/gc.rgw.data.root",

"control_pool": "us-east-1/gc.rgw.control",

"gc_pool": "us-east-1/gc.rgw.gc",

"log_pool": "us-east-1/gc.rgw.log",

"intent_log_pool": "us-east-1/gc.rgw.intent-log",

"usage_log_pool": "us-east-1/gc.rgw.usage",

"user_keys_pool": "us-east-1/gc.rgw.users.keys",

"user_email_pool": "us-east-1/gc.rgw.users.email",

"user_swift_pool": "us-east-1/gc.rgw.users.swift",

"user_uid_pool": "us-east-1/gc.rgw.users.uid",

"system_key": {

"access_key": "1555b35654ad1656d804",

"secret_key": "h7GhxuBLTrlhVUyxSPUKUV8r\/2EI4ngqJxD7iBdBYLhwluN30JaT3Q=="

},

"placement_pools": [

{

"key": "default-placement",

"val": {

"index_pool": "us-east-1/gc.rgw.buckets.index",

"data_pool": "us-east-1/gc.rgw.buckets.data",

"data_extra_pool": "us-east-1/gc.rgw.buckets.non-ec",

"index_type": 0

}

}

],

"metadata_heap": "us-east-1/gc.rgw.meta",

"realm_id": "4a367026-bd8f-40ee-b486-8212482ddcd7"

}

请注意, --rgw-zonegroup 和 --default 开关会将该区域添加到某个区域组,并将其设

为默认区域。或者,也可以使用以下命令实现相同的目的:

cephadm@adm > radosgw-admin zone default --rgw-zone=us-east-1

cephadm@adm > radosgw-admin zonegroup add --rgw-zonegroup=us --rgw-zone=us-

east-1

262 创建主区域 SES 6

Page 283: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

17.13.9.1 创建系统用户

要访问区域存储池,需要创建一个系统用户。请注意,在配置次要区域时,也需要这些密钥。

cephadm@adm > radosgw-admin user create --uid=zone.user \

--display-name="Zone User" --access-key=$SYSTEM_ACCESS_KEY \

--secret=$SYSTEM_SECRET_KEY --system

17.13.9.2 更新周期

由于您更改了主区域配置,因此需要提交这些更改,使其在领域配置结构中生效。最初的周期

类似下方所示:

cephadm@adm > radosgw-admin period get

{

"id": "09559832-67a4-4101-8b3f-10dfcd6b2707", "epoch": 1, "predecessor_uuid":

"", "sync_status": [], "period_map":

{

"id": "09559832-67a4-4101-8b3f-10dfcd6b2707", "zonegroups": [],

"short_zone_ids": []

}, "master_zonegroup": "", "master_zone": "", "period_config":

{

"bucket_quota": {

"enabled": false, "max_size_kb": -1, "max_objects": -1

}, "user_quota": {

"enabled": false, "max_size_kb": -1, "max_objects": -1

}

}, "realm_id": "4a367026-bd8f-40ee-b486-8212482ddcd7", "realm_name": "gold",

"realm_epoch": 1

}

更新周期并提交更改:

cephadm@adm > radosgw-admin period update --commit

{

"id": "b5e4d3ec-2a62-4746-b479-4b2bc14b27d1",

"epoch": 1,

"predecessor_uuid": "09559832-67a4-4101-8b3f-10dfcd6b2707",

"sync_status": [ "[...]"

263 创建主区域 SES 6

Page 284: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

],

"period_map": {

"id": "b5e4d3ec-2a62-4746-b479-4b2bc14b27d1",

"zonegroups": [

{

"id": "d4018b8d-8c0d-4072-8919-608726fa369e",

"name": "us",

"api_name": "us",

"is_master": "true",

"endpoints": [

"http:\/\/rgw1:80"

],

"hostnames": [],

"hostnames_s3website": [],

"master_zone": "83859a9a-9901-4f00-aa6d-285c777e10f0",

"zones": [

{

"id": "83859a9a-9901-4f00-aa6d-285c777e10f0",

"name": "us-east-1",

"endpoints": [

"http:\/\/rgw1:80"

],

"log_meta": "true",

"log_data": "false",

"bucket_index_max_shards": 0,

"read_only": "false"

}

],

"placement_targets": [

{

"name": "default-placement",

"tags": []

}

],

"default_placement": "default-placement",

"realm_id": "4a367026-bd8f-40ee-b486-8212482ddcd7"

}

],

264 创建主区域 SES 6

Page 285: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

"short_zone_ids": [

{

"key": "83859a9a-9901-4f00-aa6d-285c777e10f0",

"val": 630926044

}

]

},

"master_zonegroup": "d4018b8d-8c0d-4072-8919-608726fa369e",

"master_zone": "83859a9a-9901-4f00-aa6d-285c777e10f0",

"period_config": {

"bucket_quota": {

"enabled": false,

"max_size_kb": -1,

"max_objects": -1

},

"user_quota": {

"enabled": false,

"max_size_kb": -1,

"max_objects": -1

}

},

"realm_id": "4a367026-bd8f-40ee-b486-8212482ddcd7",

"realm_name": "gold",

"realm_epoch": 2

}

17.13.9.3 启动对象网关

在启动对象网关之前,需要在配置文件中指定对象网关区域和端口选项。有关对象网关及其配

置的详细信息,请参见第 17 章 “Ceph 对象网关”。对象网关的配置段落应类似下方所示:

[client.rgw.us-east-1]

rgw_frontends="beast port=80"

rgw_zone=us-east-1

启动对象网关:

root # systemctl start [email protected]

265 创建主区域 SES 6

Page 286: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

17.13.10 创建次要区域

区域组内的区域会复制所有数据,以确保各区域都具有相同数据。创建次要区域时,请在指定

为次要区域提供服务的主机上执行以下所有操作。

在次要集群中,创建并配置名为 us-east-2 的次要区域。可在托管主区域本身的节点中执行

以下所有命令。

要创建次要区域,请使用创建主要区域时所用的相同命令,不过需要去掉 master 标志:

cephadm@adm > radosgw-admin zone create --rgw-zonegroup=us --endpoints=http://

rgw2:80 \

--rgw-zone=us-east-2 --access-key=$SYSTEM_ACCESS_KEY --secret=$SYSTEM_SECRET_KEY

{

"id": "950c1a43-6836-41a2-a161-64777e07e8b8",

"name": "us-east-2",

"domain_root": "us-east-2.rgw.data.root",

"control_pool": "us-east-2.rgw.control",

"gc_pool": "us-east-2.rgw.gc",

"log_pool": "us-east-2.rgw.log",

"intent_log_pool": "us-east-2.rgw.intent-log",

"usage_log_pool": "us-east-2.rgw.usage",

"user_keys_pool": "us-east-2.rgw.users.keys",

"user_email_pool": "us-east-2.rgw.users.email",

"user_swift_pool": "us-east-2.rgw.users.swift",

"user_uid_pool": "us-east-2.rgw.users.uid",

"system_key": {

"access_key": "1555b35654ad1656d804",

"secret_key": "h7GhxuBLTrlhVUyxSPUKUV8r\/2EI4ngqJxD7iBdBYLhwluN30JaT3Q=="

},

"placement_pools": [

{

"key": "default-placement",

"val": {

"index_pool": "us-east-2.rgw.buckets.index",

"data_pool": "us-east-2.rgw.buckets.data",

"data_extra_pool": "us-east-2.rgw.buckets.non-ec",

"index_type": 0

}

}

266 创建次要区域 SES 6

Page 287: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

],

"metadata_heap": "us-east-2.rgw.meta",

"realm_id": "815d74c2-80d6-4e63-8cfc-232037f7ff5c"

}

17.13.10.1 更新周期

通过执行周期更新并提交更改,通知所有网关有关系统索引中发生的新变化:

cephadm@adm > radosgw-admin period update --commit

{

"id": "b5e4d3ec-2a62-4746-b479-4b2bc14b27d1",

"epoch": 2,

"predecessor_uuid": "09559832-67a4-4101-8b3f-10dfcd6b2707",

"sync_status": [ "[...]"

],

"period_map": {

"id": "b5e4d3ec-2a62-4746-b479-4b2bc14b27d1",

"zonegroups": [

{

"id": "d4018b8d-8c0d-4072-8919-608726fa369e",

"name": "us",

"api_name": "us",

"is_master": "true",

"endpoints": [

"http:\/\/rgw1:80"

],

"hostnames": [],

"hostnames_s3website": [],

"master_zone": "83859a9a-9901-4f00-aa6d-285c777e10f0",

"zones": [

{

"id": "83859a9a-9901-4f00-aa6d-285c777e10f0",

"name": "us-east-1",

"endpoints": [

"http:\/\/rgw1:80"

],

"log_meta": "true",

267 创建次要区域 SES 6

Page 288: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

"log_data": "false",

"bucket_index_max_shards": 0,

"read_only": "false"

},

{

"id": "950c1a43-6836-41a2-a161-64777e07e8b8",

"name": "us-east-2",

"endpoints": [

"http:\/\/rgw2:80"

],

"log_meta": "false",

"log_data": "true",

"bucket_index_max_shards": 0,

"read_only": "false"

}

],

"placement_targets": [

{

"name": "default-placement",

"tags": []

}

],

"default_placement": "default-placement",

"realm_id": "4a367026-bd8f-40ee-b486-8212482ddcd7"

}

],

"short_zone_ids": [

{

"key": "83859a9a-9901-4f00-aa6d-285c777e10f0",

"val": 630926044

},

{

"key": "950c1a43-6836-41a2-a161-64777e07e8b8",

"val": 4276257543

}

]

268 创建次要区域 SES 6

Page 289: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

},

"master_zonegroup": "d4018b8d-8c0d-4072-8919-608726fa369e",

"master_zone": "83859a9a-9901-4f00-aa6d-285c777e10f0",

"period_config": {

"bucket_quota": {

"enabled": false,

"max_size_kb": -1,

"max_objects": -1

},

"user_quota": {

"enabled": false,

"max_size_kb": -1,

"max_objects": -1

}

},

"realm_id": "4a367026-bd8f-40ee-b486-8212482ddcd7",

"realm_name": "gold",

"realm_epoch": 2

}

17.13.10.2 启动对象网关

调整次要区域的对象网关配置,并启动对象网关:

[client.rgw.us-east-2]

rgw_frontends="beast port=80"

rgw_zone=us-east-2

cephadm@adm > sudo systemctl start [email protected]

17.13.10.3 更新 Ceph Dashboard 配置

1. 进行以下设置,以根据秘密密钥和访问密钥变量更新您的多站点仪表盘配置:

cephadm@adm > ceph dashboard set-rgw-api-access-key ACCESS-KEY

cephadm@adm > ceph dashboard set-rgw-api-secret-key SECRET-KEY

269 创建次要区域 SES 6

Page 290: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

2. 将仪表盘默认用户设置为 admin:

cephadm@adm > ceph dashboard set-rgw-api-user-id admin

3. 禁用仪表盘,然后将其重新启用以应用设置。

cephadm@adm > ceph mgr module disable dashboard

cephadm@adm > ceph mgr module enable dashboard

4. 如果对象网关节点发生了更改,或使用了负载均衡器来替代对象网关,请更新仪表盘:

cephadm@adm > dashboard set-rgw-api-host HOST

cephadm@adm > dashboard set-rgw-api-port PORT

17.13.11 将对象网关添加到第二个集群

第二个 Ceph 集群与初始集群属于同一个区域组,不过可以位于不同的地理位置。

17.13.11.1 默认领域和区域组

由于已创建第一个网关的领域,因此可在此处提取该领域并将其设为默认领域:

cephadm@adm > radosgw-admin realm pull --url=http://rgw1:80 \

--access-key=$SYSTEM_ACCESS_KEY --secret=$SYSTEM_SECRET_KEY

{

"id": "4a367026-bd8f-40ee-b486-8212482ddcd7",

"name": "gold",

"current_period": "b5e4d3ec-2a62-4746-b479-4b2bc14b27d1",

"epoch": 2

}

cephadm@adm > radosgw-admin realm default --rgw-realm=gold

通过提取周期,从主区域中获取配置:

cephadm@adm > radosgw-admin period pull --url=http://rgw1:80 \

--access-key=$SYSTEM_ACCESS_KEY --secret=$SYSTEM_SECRET_KEY

270 将对象网关添加到第二个集群 SES 6

Page 291: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

将已创建的 us 区域组设置为默认区域组:

cephadm@adm > radosgw-admin zonegroup default --rgw-zonegroup=us

17.13.11.2 次要区域配置

使用相同的系统密钥创建名为 us-west 的新区域:

cephadm@adm > radosgw-admin zone create --rgw-zonegroup=us --rgw-zone=us-west \

--access-key=$SYSTEM_ACCESS_KEY --secret=$SYSTEM_SECRET_KEY \

--endpoints=http://rgw3:80 --default

{

"id": "950c1a43-6836-41a2-a161-64777e07e8b8",

"name": "us-west",

"domain_root": "us-west.rgw.data.root",

"control_pool": "us-west.rgw.control",

"gc_pool": "us-west.rgw.gc",

"log_pool": "us-west.rgw.log",

"intent_log_pool": "us-west.rgw.intent-log",

"usage_log_pool": "us-west.rgw.usage",

"user_keys_pool": "us-west.rgw.users.keys",

"user_email_pool": "us-west.rgw.users.email",

"user_swift_pool": "us-west.rgw.users.swift",

"user_uid_pool": "us-west.rgw.users.uid",

"system_key": {

"access_key": "1555b35654ad1656d804",

"secret_key": "h7GhxuBLTrlhVUyxSPUKUV8r\/2EI4ngqJxD7iBdBYLhwluN30JaT3Q=="

},

"placement_pools": [

{

"key": "default-placement",

"val": {

"index_pool": "us-west.rgw.buckets.index",

"data_pool": "us-west.rgw.buckets.data",

"data_extra_pool": "us-west.rgw.buckets.non-ec",

"index_type": 0

}

271 将对象网关添加到第二个集群 SES 6

Page 292: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

}

],

"metadata_heap": "us-west.rgw.meta",

"realm_id": "4a367026-bd8f-40ee-b486-8212482ddcd7"

}

17.13.11.3 更新周期

为了传播区域组索引更改,我们将更新并提交周期:

cephadm@adm > radosgw-admin period update --commit --rgw-zone=us-west

{

"id": "b5e4d3ec-2a62-4746-b479-4b2bc14b27d1",

"epoch": 3,

"predecessor_uuid": "09559832-67a4-4101-8b3f-10dfcd6b2707",

"sync_status": [

"", # truncated

],

"period_map": {

"id": "b5e4d3ec-2a62-4746-b479-4b2bc14b27d1",

"zonegroups": [

{

"id": "d4018b8d-8c0d-4072-8919-608726fa369e",

"name": "us",

"api_name": "us",

"is_master": "true",

"endpoints": [

"http:\/\/rgw1:80"

],

"hostnames": [],

"hostnames_s3website": [],

"master_zone": "83859a9a-9901-4f00-aa6d-285c777e10f0",

"zones": [

{

"id": "83859a9a-9901-4f00-aa6d-285c777e10f0",

"name": "us-east-1",

"endpoints": [

"http:\/\/rgw1:80"

272 将对象网关添加到第二个集群 SES 6

Page 293: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

],

"log_meta": "true",

"log_data": "true",

"bucket_index_max_shards": 0,

"read_only": "false"

},

{

"id": "950c1a43-6836-41a2-a161-64777e07e8b8",

"name": "us-east-2",

"endpoints": [

"http:\/\/rgw2:80"

],

"log_meta": "false",

"log_data": "true",

"bucket_index_max_shards": 0,

"read_only": "false"

},

{

"id": "d9522067-cb7b-4129-8751-591e45815b16",

"name": "us-west",

"endpoints": [

"http:\/\/rgw3:80"

],

"log_meta": "false",

"log_data": "true",

"bucket_index_max_shards": 0,

"read_only": "false"

}

],

"placement_targets": [

{

"name": "default-placement",

"tags": []

}

],

"default_placement": "default-placement",

"realm_id": "4a367026-bd8f-40ee-b486-8212482ddcd7"

}

273 将对象网关添加到第二个集群 SES 6

Page 294: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

],

"short_zone_ids": [

{

"key": "83859a9a-9901-4f00-aa6d-285c777e10f0",

"val": 630926044

},

{

"key": "950c1a43-6836-41a2-a161-64777e07e8b8",

"val": 4276257543

},

{

"key": "d9522067-cb7b-4129-8751-591e45815b16",

"val": 329470157

}

]

},

"master_zonegroup": "d4018b8d-8c0d-4072-8919-608726fa369e",

"master_zone": "83859a9a-9901-4f00-aa6d-285c777e10f0",

"period_config": {

"bucket_quota": {

"enabled": false,

"max_size_kb": -1,

"max_objects": -1

},

"user_quota": {

"enabled": false,

"max_size_kb": -1,

"max_objects": -1

}

},

"realm_id": "4a367026-bd8f-40ee-b486-8212482ddcd7",

"realm_name": "gold",

"realm_epoch": 2

}

请注意,周期的版本号已递增,表示配置发生了更改。

274 将对象网关添加到第二个集群 SES 6

Page 295: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

17.13.11.4 启动对象网关

此操作与在第一个区域中启动对象网关类似。唯一的差别在于,对象网关区域配置应反映 us-

west 区域名称:

[client.rgw.us-west]

rgw_frontends="beast port=80"

rgw_zone=us-west

启动第二个对象网关:

root # systemctl start [email protected]

17.13.12 故障转移和灾难恢复

如果主区域发生故障,将故障转移到次要区域,以实现灾难恢复。

1. 将次要区域设为主区域和默认区域。例如:

cephadm@adm > radosgw-admin zone modify --rgw-zone=ZONE-NAME --master --

default

默认情况下,Ceph 对象网关将以主动/主动配置运行。如果已将集群配置为以主动/被动配

置运行,则次要区域是只读区域。删除 --read-only 状态可让区域接收写入操作。例如:

cephadm@adm > radosgw-admin zone modify --rgw-zone=ZONE-NAME --master --

default \

--read-only=False

2. 更新周期,使更改生效。

cephadm@adm > radosgw-admin period update --commit

3. 最后,重启动 Ceph 对象网关。

root # systemctl restart ceph-radosgw@rgw.`hostname -s`

如果之前的主区域已恢复,请逆向操作。

275 故障转移和灾难恢复 SES 6

Page 296: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

1. 在已恢复的区域中,从当前主区域提取周期。

cephadm@adm > radosgw-admin period pull --url=URL-TO-MASTER-ZONE-GATEWAY \

--access-key=ACCESS-KEY --secret=SECRET

2. 将已恢复的区域设为主区域和默认区域。

cephadm@adm > radosgw-admin zone modify --rgw-zone=ZONE-NAME --master --

default

3. 更新周期,使更改生效。

cephadm@adm > radosgw-admin period update --commit

4. 然后,在已恢复的区域中重启动 Ceph 对象网关。

root # systemctl restart ceph-radosgw@rgw.`hostname -s`

5. 如果次要区域需要采用只读配置,请更新次要区域。

cephadm@adm > radosgw-admin zone modify --rgw-zone=ZONE-NAME --read-only

6. 更新周期,使更改生效。

cephadm@adm > radosgw-admin period update --commit

7. 最后,在次要区域中重启动 Ceph 对象网关。

root # systemctl restart ceph-radosgw@rgw.`hostname -s`

17.14 使用 HAProxy 在对象网关服务器间实现负载平衡您可以使用 HAProxy 负载平衡程序将所有请求分布在多个对象网关后端服务器之间。有

关配置 HAProxy 的详细信息,请参见https://www.suse.com/documentation/sle-ha-15/

book_sleha_guide/data/sec_ha_lb_haproxy.html 。

276 使用 HAProxy 在对象网关服务器间实现负载平衡 SES 6

Page 297: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

下面是一种 HAProxy 的简单配置,使用循环复用平衡算法来平衡对象网关节点:

tux > cat /etc/haproxy/haproxy.cfg

[...]

frontend HTTPS_FRONTEND

bind *:443 crt path-to-cert.pem [ciphers: ... ]

default_backend rgw

backend rgw

mode http

balance roundrobin

server rgw_server1 RGW-ENDPOINT1 weight 1 maxconn 100 check

server rgw_server2 RGW-ENDPOINT2 weight 1 maxconn 100 check

[...]

277 使用 HAProxy 在对象网关服务器间实现负载平衡 SES 6

Page 298: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

18 Ceph iSCSI 网关

本章重点介绍与 iSCSI 网关相关的管理任务。有关部署过程,请参见《部署指南》, 第 10 章 “安

装 iSCSI 网关”。

18.1 连接 ceph-iscsi 管理的目标本节介绍如何从运行 Linux、Microsoft Windows 或 VMware 的客户端连接到 ceph-iscsi 管

理的目标。

18.1.1 Linux (open-iscsi)

使用 open-iscsi 连接 ceph-iscsi 支持的 iSCSI 目标需要执行两个步骤。首先,授权人必

须发现网关主机上可用的 iSCSI 目标,然后,必须登录并映射可用的逻辑单元 (LU)。

这两个步骤都需要 open-iscsi 守护进程处于运行状态。启动 open-iscsi 守护进程的方式

取决于您的 Linux 发行套件:

在 SUSE Linux Enterprise Server (SLES) 和 Red Hat Enterprise Linux (RHEL) 主机上,运行

systemctl start iscsid(如果 systemctl 不可用,请运行 service iscsid

start)。

在 Debian 和 Ubuntu 主机上,运行 systemctl start open-iscsi(或 service

open-iscsi start)。

如果授权人主机运行 SUSE Linux Enterprise Server,请参见 https://www.suse.com/

documentation/sles-15/book_storage/data/sec_iscsi_initiator.html 了解有关如何连接 iSCSI

目标的详细信息。

对于支持 open-iscsi 的任何其他 Linux 发行套件,请继续发现 ceph-iscsi 网关

上的目标(本示例使用 iscsi1.example.com 作为端口地址;对于多路径访问,请使用

iscsi2.example.com 重复这些步骤):

root # iscsiadm -m discovery -t sendtargets -p iscsi1.example.com

192.168.124.104:3260,1 iqn.2003-01.org.linux-iscsi.iscsi.x86:testvol

278 连接 ceph-iscsi 管理的目标 SES 6

Page 299: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

然后登录该端口。如果登录成功完成,则端口中所有基于 RBD 的逻辑单元将立即在系统 SCSI 总

线上变为可用:

root # iscsiadm -m node -p iscsi1.example.com --login

Logging in to [iface: default, target: iqn.2003-01.org.linux-

iscsi.iscsi.x86:testvol, portal: 192.168.124.104,3260] (multiple)

Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi.x86:testvol,

portal: 192.168.124.104,3260] successful.

针对其他端口 IP 地址或主机重复此过程。

如果系统上已安装 lsscsi 实用程序,您可以使用它来枚举系统上可用的 SCSI 设备:

lsscsi

[8:0:0:0] disk SUSE RBD 4.0 /dev/sde

[9:0:0:0] disk SUSE RBD 4.0 /dev/sdf

在多路径配置(其中两个已连接的 iSCSI 设备代表一个相同的 LU)中,您还可以使用

multipath 实用程序检查多路径设备状态:

root # multipath -ll

360014050cf9dcfcb2603933ac3298dca dm-9 SUSE,RBD

size=49G features='0' hwhandler='0' wp=rw

|-+- policy='service-time 0' prio=1 status=active

| `- 8:0:0:0 sde 8:64 active ready running

`-+- policy='service-time 0' prio=1 status=enabled

`- 9:0:0:0 sdf 8:80 active ready running

现在,可根据需要,将此多路径设备用作任何块设备。例如,可将该设备用作 Linux 逻辑卷管

理 (LVM) 的物理卷,或者直接在该设备上创建文件系统。下面的示例说明如何在新连接的多路

径 iSCSI 卷上创建 XFS 文件系统:

root # mkfs -t xfs /dev/mapper/360014050cf9dcfcb2603933ac3298dca

log stripe unit (4194304 bytes) is too large (maximum is 256KiB)

log stripe unit adjusted to 32KiB

meta-data=/dev/mapper/360014050cf9dcfcb2603933ac3298dca isize=256 agcount=17,

agsize=799744 blks

= sectsz=512 attr=2, projid32bit=1

279 Linux (open-iscsi) SES 6

Page 300: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

= crc=0 finobt=0

data = bsize=4096 blocks=12800000, imaxpct=25

= sunit=1024 swidth=1024 blks

naming =version 2 bsize=4096 ascii-ci=0 ftype=0

log =internal log bsize=4096 blocks=6256, version=2

= sectsz=512 sunit=8 blks, lazy-count=1

realtime =none extsz=4096 blocks=0, rtextents=0

请注意,由于 XFS 是非集群文件系统,无论何时,您都只能将它装入到单个 iSCSI 授权人节点

上。

任何时候如果要停止使用与特定目标关联的 iSCSI LU,请运行以下命令:

root # iscsiadm -m node -p iscsi1.example.com --logout

Logging out of session [sid: 18, iqn.2003-01.org.linux-iscsi.iscsi.x86:testvol,

portal: 192.168.124.104,3260]

Logout of [sid: 18, target: iqn.2003-01.org.linux-iscsi.iscsi.x86:testvol,

portal: 192.168.124.104,3260] successful.

与执行发现和登录时一样,必须针对所有端口 IP 地址或主机名重复注销步骤。

18.1.1.1 多路径配置

多路径配置保留在客户端或授权人上,并不依赖于任何 ceph-iscsi 配置。在使用块存

储之前,请选择一个策略。编辑 /etc/multipath.conf 之后,请使用以下命令重启动

multipathd

root # systemctl restart multipathd

对于包含友好名称的主动/被动配置,请将

defaults {

user_friendly_names yes

}

添加到 /etc/multipath.conf。成功连接目标后,请运行

root # multipath -ll

280 Linux (open-iscsi) SES 6

Page 301: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

mpathd (36001405dbb561b2b5e439f0aed2f8e1e) dm-0 SUSE,RBD

size=2.0G features='0' hwhandler='0' wp=rw

|-+- policy='service-time 0' prio=1 status=active

| `- 2:0:0:3 sdl 8:176 active ready running

|-+- policy='service-time 0' prio=1 status=enabled

| `- 3:0:0:3 sdj 8:144 active ready running

`-+- policy='service-time 0' prio=1 status=enabled

`- 4:0:0:3 sdk 8:160 active ready running

注意每个链路的状态。对于主动/主动配置,请将

defaults {

user_friendly_names yes

}

devices {

device {

vendor "(LIO-ORG|SUSE)"

product "RBD"

path_grouping_policy "multibus"

path_checker "tur"

features "0"

hardware_handler "1 alua"

prio "alua"

failback "immediate"

rr_weight "uniform"

no_path_retry 12

rr_min_io 100

}

}

添加到 /etc/multipath.conf。重启动 multipathd 并运行

root # multipath -ll

mpathd (36001405dbb561b2b5e439f0aed2f8e1e) dm-3 SUSE,RBD

size=2.0G features='1 queue_if_no_path' hwhandler='1 alua' wp=rw

`-+- policy='service-time 0' prio=50 status=active

|- 4:0:0:3 sdj 8:144 active ready running

|- 3:0:0:3 sdk 8:160 active ready running

281 Linux (open-iscsi) SES 6

Page 302: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

`- 2:0:0:3 sdl 8:176 active ready running

18.1.2 Microsoft Windows(Microsoft iSCSI 授权人)

要从 Windows 2012 服务器连接 SUSE Enterprise Storage iSCSI 目标,请执行以下步骤:

1. 打开 Windows 服务器管理器。在仪表盘中,选择 Tools(工具) iSCSI Initiator(iSCSI

授权人)。iSCSI Initiator Properties(iSCSI 授权人属性)对话框随即显示。选择

Discovery(发现)选项卡:

图 18.1︰ ISCSI 授权人属性

282 Microsoft Windows(Microsoft iSCSI 授权人) SES 6

Page 303: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

2. 在 Discover Target Portal(发现目标端口)对话框中的 Target(目标)字段内,输入目标

的主机名或 IP 地址,然后点击 OK(确定):

图 18.2︰ 发现目标端口

3. 针对所有其他网关主机名或 IP 地址重复此过程。完成后,查看 Target Portals(目标端

口)列表:

283 Microsoft Windows(Microsoft iSCSI 授权人) SES 6

Page 304: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 18.3︰ 目标端口

4. 接下来,切换到 Targets(目标)选项卡并查看已发现的目标。

284 Microsoft Windows(Microsoft iSCSI 授权人) SES 6

Page 305: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 18.4︰ 目标

5. 在 Targets(目标)选项卡中点击 Connect(连接)。Connect To Target(连接目标)对

话框随即显示。选中 Enable Multi-path(启用多路径)复选框以启用多路径 I/O (MPIO),

然后点击 OK(确定):

6. Connect to Target(连接目标)对话框关闭后,选择 Properties(属性)查看目标的属

性:

285 Microsoft Windows(Microsoft iSCSI 授权人) SES 6

Page 306: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 18.5︰ ISCSI 目标属性

7. 选择 Devices(设备),然后点击 MPIO 查看多路径 I/O 配置:

286 Microsoft Windows(Microsoft iSCSI 授权人) SES 6

Page 307: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 18.6︰ 设备详细信息

默认的负载平衡策略为 Round Robin With Subset(带子集的循环法)。如果您偏向于单

纯的故障转移配置,请将策略更改为 Fail Over Only(仅故障转移)。

iSCSI 授权人的配置到此结束。现在,可以像使用任何其他 SCSI 设备一样使用 iSCSI 卷,并可

将其初始化,使其可用作卷和驱动器。点击 OK(确定)关闭 iSCSI Initiator Properties(iSCSI

授权人属性)对话框,然后继续在 Server Manager(服务器管理器)仪表盘中配置 File and

Storage Services(文件和存储服务)角色。

观察新连接的卷。该卷标识为 iSCSI 总线上的 SUSE RBD SCSI 多路径驱动器,并且最初标记为脱

机状态,其分区表类型为未知。如果新卷未立即显示,请从 Task(任务)下拉框中选择 Rescan

Storage(重新扫描存储),以重新扫描 iSCSI 总线。

1. 右键点击 iSCSI 卷,然后从上下文菜单中选择 New Volume(新建卷)。New Volume

Wizard(新建卷向导)随即显示。点击 Next(下一步),突出显示新连接的 iSCSI 卷,然

后点击 Next(下一步)开始创建新卷。

287 Microsoft Windows(Microsoft iSCSI 授权人) SES 6

Page 308: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 18.7︰ 新建卷向导

2. 该设备最初是空的,不包含任何分区表。当出现对话框指出将要使用 GPT 分区表初始化卷

时,确认该操作:

图 18.8︰ 脱机磁盘提示

3. 选择卷大小。通常,用户会使用设备的全部容量。然后,指定新建卷将在其上变为可用

状态的驱动器盘符或目录名称。接下来,选择要在新卷上创建的文件系统。最后,点击

Create(创建)确认所做的选择并完成卷的创建:

288 Microsoft Windows(Microsoft iSCSI 授权人) SES 6

Page 309: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 18.9︰ 确认选择的卷设置

完成该过程后,请检查结果,然后点击 Close(关闭)结束驱动器初始化。完成初始化

后,便可以像使用新初始化的本地驱动器一样使用该卷(及其 NTFS 文件系统)。

18.1.3 VMware

1. 要连接到 ceph-iscsi 管理的 iSCSI 卷,需要有配置好的 iSCSI 软件适配器。如

果 vSphere 配置中未提供此类适配器,请选择 Configuration(配置) Storage

Adapters(存储适配器) Add(增加) iSCSI Software initiator(iSCSI 软件授权

人)来创建一个适配器。

2. 如果适用,请通过右键点击该适配器并从上下文菜单中选择 Properties(属性),来选择

该适配器的属性:

289 VMware SES 6

Page 310: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 18.10︰ ISCSI 授权人属性

3. 在 iSCSI Software Initiator(iSCSI 软件授权人)对话框中,点击 Configure(配置)按

钮。然后转到 Dynamic Discovery(动态发现)选项卡并选择 Add(增加)。

4. 输入 ceph-iscsi iSCSI 网关的 IP 地址或主机名。如果在故障转移配置中运行多个 iSCSI

网关,请针对要运行的所有网关重复此步骤。

290 VMware SES 6

Page 311: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 18.11︰ 添加目标服务器

输入所有 iSCSI 网关后,请在对话框中点击 OK(确定),发起对 iSCSI 适配器的重新扫

描。

5. 重新扫描完成后,新的 iSCSI 设备会显示在 Details(详细信息)窗格中的 Storage

Adapters(存储适配器)列表下。对于多路径设备,现在可以右键点击该适配器,然后从

上下文菜单中选择 Manage Paths(管理路径):

291 VMware SES 6

Page 312: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 18.12︰ 管理多路径设备

您现在应该会看到,所有路径的 Status(状态)下面都带有绿灯。其中一个路径应该已标

记为 Active (I/O)(工作 (I/O)),其他所有路径只是标记为 Active(工作):

图 18.13︰ 多路径的路径列表

6. 现在,您可以从 Storage Adapters(存储适配器)切换到标为 Storage(存储)的项目。

在窗格右上角选择 Add Storage...(添加存储...)打开 Add Storage(添加存储)对话框。

然后选择 Disk/LUN(磁盘/LUN)并点击 Next(下一步)。新添加的 iSCSI 设备会显示

在 选择磁盘/LUN(Select Disk/LUN)列表中。选择该设备,然后点击 Next(下一步)继

续:

292 VMware SES 6

Page 313: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 18.14︰ “ADD STORAGE”(添加存储)对话框

点击 Next(下一步)接受默认的磁盘布局。

7. 在 Properties(属性)窗格中,为新数据存储指定名称,然后点击 Next(下一步)。接受

将卷的整个空间用于数据存储的默认设置,或者选择 Custom Space Setting(自定义空间

设置)以创建较小的数据存储:

图 18.15︰ 自定义空间设置

293 VMware SES 6

Page 314: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

点击 Finish(完成)以完成数据存储的创建。

新数据存储现在即会显示在数据存储列表中,您可以选择它来检索详细信息。现在,您可

以像使用任何其他 vSphere 数据存储一样使用 ceph-iscsi 支持的 iSCSI 卷。

图 18.16︰ ISCSI 数据存储概述

18.2 结论ceph-iscsi 是 SUSE Enterprise Storage 6 的一个关键组件,使用它可以从任何支持 iSCSI

协议的服务器或客户端访问高度可用的分布式块存储。在一个或多个 iSCSI 网关主机上使用

ceph-iscsi 可将 Ceph RBD 映像用作与 iSCSI 目标关联的逻辑单元 (LU),并可根据需要以负

载平衡且高度可用的方式来访问该逻辑单元。

由于所有 ceph-iscsi 配置都存储在 Ceph RADOS 对象存储中, ceph-iscsi 网关主机先

天就不具有持久性状态,因而可以任意对其进行更换或者增减。因此,借助 SUSE Enterprise

Storage 6,SUSE 客户可在市售硬件和完全开源的平台上运行真正的分布式、高度可用、有弹性

且可自我修复的企业存储技术。

294 结论 SES 6

Page 315: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

19 集群文件系统

本章介绍在设置集群并导出 CephFS 后通常应执行的管理任务。如需有关设置 CephFS 的详细信

息,请参见《部署指南》, 第 11 章 “安装 CephFS”。

19.1 装入 CephFS当创建文件系统并且 MDS 处于工作状态后,您便可以从客户端主机装入文件系统。

19.1.1 客户端准备

如果客户端主机运行的是 SUSE Linux Enterprise 12 SP2 或 SP3,您可以跳过本节,因为系统无

需额外配置即可装入 CephFS。

如果客户端主机运行的是 SUSE Linux Enterprise 12 SP1,您需要应用所有最新的增补程序,之

后才能装入 CephFS。

无论是哪一种情况,SUSE Linux Enterprise 中都包含了装入 CephFS 需要的所有项目。不需要

SUSE Enterprise Storage 6 产品。

为了支持完整的 mount 语法,在尝试装入 CephFS 之前,应该先安装 ceph-common 包(随

附于 SUSE Linux Enterprise 中)。

19.1.2 创建机密文件

Ceph 集群默认是在启用身份验证的情况下运行的。应该创建一个文件用于存储您的秘密密钥

(而不是密钥环本身)。要获取特定用户的秘密密钥,然后创建该文件,请执行以下操作:

过程 19.1︰ 创建秘密密钥

1. 在密钥环文件中查看特定用户的密钥:

cephadm@adm > cat /etc/ceph/ceph.client.admin.keyring

2. 复制要使用所装入 Ceph FS 文件系统的用户的密钥。密钥通常类似下方所示:

295 装入 CephFS SES 6

Page 316: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

AQCj2YpRiAe6CxAA7/ETt7Hcl9IyxyYciVs47w==

3. 为用户 admin 创建一个文件名包含用户名的文件,例如 /etc/ceph/admin.secret。

4. 将密钥值粘贴到上一步中创建的文件。

5. 设置对该文件的适当访问权限。该用户应是唯一有权读取该文件的用户,其他人不能有任

何访问权限。

19.1.3 装入 CephFS

可以使用 mount 命令装入 CephFS。需要指定 Monitor 的主机名或 IP 地址。由于 SUSE

Enterprise Storage 中默认会启用 cephx 身份验证,因此,您还需要指定一个用户名及其相关

的机密:

root # mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \

-o name=admin,secret=AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==

由于上一条命令会保留在外壳历史中,因此更安全的做法是从文件读取机密:

root # mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \

-o name=admin,secretfile=/etc/ceph/admin.secret

请注意,机密文件应该只包含实际的密钥环机密。因此,在本示例中,该文件只包含下行:

AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==

提示:指定多个 Monitor最好是在 mount 命令行中指定多个 Monitor 并以逗号分隔,以防在装入时某个 Monitor

恰好停机。每个 Monitor 的地址采用主机[:端口] 格式。如果未指定端口,默认会使用

端口 6789。

在本地主机上创建装入点:

root # mkdir /mnt/cephfs

装入 CephFS:

296 装入 CephFS SES 6

Page 317: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

root # mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \

-o name=admin,secretfile=/etc/ceph/admin.secret

如果要装入文件系统的某个子集,可以指定子目录 subdir:

root # mount -t ceph ceph_mon1:6789:/subdir /mnt/cephfs \

-o name=admin,secretfile=/etc/ceph/admin.secret

可在 mount 命令中指定多个 Monitor 主机:

root # mount -t ceph ceph_mon1,ceph_mon2,ceph_mon3:6789:/ /mnt/cephfs \

-o name=admin,secretfile=/etc/ceph/admin.secret

重要:对根目录的读取访问权限如果使用了实施路径限制的客户端,则 MDS 功能需要包含对根目录的读取访问权限。例

如,密钥环可能如下所示:

client.bar

key: supersecretkey

caps: [mds] allow rw path=/barjail, allow r path=/

caps: [mon] allow r

caps: [osd] allow rwx

allow r path=/ 部分表示路径受限的客户端能够查看根卷,但无法写入根卷。在要

求完全隔离的用例中,这可能会造成问题。

19.2 卸载 CephFS要卸载 CephFS,请使用 umount 命令:

root # umount /mnt/cephfs

19.3 /etc/fstab 中的 CephFS要在客户端启动时自动装入 CephFS,请在其文件系统表 /etc/fstab 中插入相应的行:

297 卸载 CephFS SES 6

Page 318: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

mon1:6790,mon2:/subdir /mnt/cephfs ceph name=admin,secretfile=/etc/ceph/

secret.key,noatime,_netdev 0 2

19.4 多个工作的 MDS 守护进程(主动/主动 MDS)默认情况下,CephFS 是针对单个工作的 MDS 守护进程配置的。要调整大规模系统的元数据性

能,可以启用多个工作的 MDS 守护进程,以便互相分担元数据工作负载。

19.4.1 何时使用主动/主动 MDS

如果按默认设置使用单个 MDS 时元数据性能出现瓶颈,可考虑使用多个工作的 MDS 守护进

程。

增加守护进程并不会提高所有工作负载类型的性能。例如,增加 MDS 守护进程的数量不会让单

个客户端上运行的单个应用受益,除非该应用在同时执行大量元数据操作。

通常能够因大量工作的 MDS 守护进程受益的工作负载是使用许多客户端的工作负载,也许是在

许多独立目录中工作的工作负载。

19.4.2 增加 MDS 工作集群的大小

每个 CephFS 文件系统都有一项 max_mds 设置,用于控制将要创建的级别数。仅当某个备用

守护进程可供新的级别使用时,文件系统中的实际级别数才会增加。例如,如果只有一个 MDS

守护进程在运行,并且 max_mds 设置为 2,将不会创建另一个级别。

在下面的示例中,我们将 max_mds 选项设置为 2,以便在保留默认级别的情况下再创建一个

新级别。要查看更改,请在设置 max_mds 之前和之后运行 ceph status,然后观察包含

fsmap 的行:

cephadm@adm > ceph status

[...]

services:

[...]

mds: cephfs-1/1/1 up {0=node2=up:active}, 1 up:standby

[...]

298 多个工作的 MDS 守护进程(主动/主动 MDS) SES 6

Page 319: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > ceph mds set max_mds 2

cephadm@adm > ceph status

[...]

services:

[...]

mds: cephfs-2/2/2 up {0=node2=up:active,1=node1=up:active}

[...]

新建的级别 (1) 会经历“正在创建”状态,然后进入“工作”状态。

重要:待机守护进程即使使用多个工作 MDS 守护进程,当任何在运行工作守护进程的服务器发生故障时,高

可用性系统也仍会要求待机守护进程接管工作。

因此,高可用性系统的 max_mds 合理最大值比系统中的 MDS 服务器总数小 1。要在发

生多次服务器故障时保持可用性,可增加系统中待机守护进程的数量,使之与不会导致失

去可用性的服务器故障数一致。

19.4.3 减小级别数

所有级别(包括要删除的级别)首先必须是活跃的。这意味着,至少需要有 max_mds 个 MDS

守护进程可用。

首先,将 max_mds 设为一个较小的数字。例如,我们重新使用单个工作的 MDS:

cephadm@adm > ceph status

[...]

services:

[...]

mds: cephfs-2/2/2 up {0=node2=up:active,1=node1=up:active}

[...]

cephadm@adm > ceph mds set max_mds 1

cephadm@adm > ceph status

[...]

services:

[...]

mds: cephfs-1/1/1 up {0=node2=up:active}, 1 up:standby

299 减小级别数 SES 6

Page 320: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

[...]

请注意,我们仍有两个工作的 MDS。即使减小 max_mds,级别也仍会存在,因为 max_mds

只会限制新级别的创建。

接下来,使用 ceph mds deactivate 级别命令删除不需要的级别:

cephadm@adm > ceph status

[...]

services:

[...]

mds: cephfs-2/2/1 up {0=node2=up:active,1=node1=up:active}

cephadm@adm > ceph mds deactivate 1

telling mds.1:1 192.168.58.101:6805/2799214375 to deactivate

cephadm@adm > ceph status

[...]

services:

[...]

mds: cephfs-2/2/1 up {0=node2=up:active,1=node1=up:stopping}

cephadm@adm > ceph status

[...]

services:

[...]

mds: cephfs-1/1/1 up {0=node2=up:active}, 1 up:standby

已停用的级别首先会进入“正在停止”状态并保持一段时间,期间它会将所分担的元数据负载转

移给其余工作守护进程。此阶段可能需要数秒到数分钟时间。如果 MDS 看上去停滞在“正在停

止”状态,则应该调查原因,确定是否存在可能的错误。

如果 MDS 守护进程在“正在停止”状态下崩溃或终止,待机守护进程会接管工作,级别将恢复

为“工作”状态。当此守护进程重新运行后,您可以尝试再次将它停用。

守护进程结束“正在停止”状态后,将再次启动,并重新变为待机守护进程。

300 减小级别数 SES 6

Page 321: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

19.4.4 手动将目录树关联到级别

在多个工作元数据服务器配置中,将会运行一个平衡器,用于在集群中均衡分配元数据负载。

这种模式通常足以满足大多数用户的需求,但有时,用户需要使用元数据到特定级别的显式映

射来覆盖动态平衡器。这样,管理员或用户便可以在整个集群上均衡地分配应用负载,或限制

用户的元数据请求对整个集群的影响。

针对此目的提供的机制称为“导出关联”。它是目录的扩展属性。此扩展属性名为

ceph.dir.pin。用户可以使用标准命令设置此属性:

root # setfattr -n ceph.dir.pin -v 2 /path/to/dir

扩展属性的值 ( -v ) 是要将目录子树指定到的级别。默认值 -1 表示不关联该目录。

目录导出关联继承自设置了导出关联的最近的父级。因此,对某个目录设置导出关联会影响该

目录的所有子级。但是,可以通过设置子目录导出关联来覆盖父级的关联。例如:

root # mkdir -p a/b # "a" and "a/b" start with no export

pin set.

setfattr -n ceph.dir.pin -v 1 a/ # "a" and "b" are now pinned to rank 1.

setfattr -n ceph.dir.pin -v 0 a/b # "a/b" is now pinned to rank 0

# and "a/" and the rest of its children

# are still pinned to rank 1.

19.5 管理故障转移如果 MDS 守护进程停止与 Monitor 通讯,Monitor 会等待 mds_beacon_grace 秒(默认为

15 秒),然后将守护进程标记为 laggy。可以配置一个或多个“待机”守护进程,用于在 MDS 守

护进程故障转移期间接管工作。

19.5.1 配置待机守护进程

有多项配置设置可控制守护进程处于待机状态时的行为。可以在运行 MDS 守护进程的主机上的

ceph.conf 中指定这些设置。守护进程在启动时会加载这些设置,然后将其发送到 Monitor。

默认情况下,如果不使用其中的任何设置,则不具备级别的所有 MDS 守护进程将用作任一级别

的“待机”守护进程。

301 手动将目录树关联到级别 SES 6

Page 322: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

将待机守护进程与特定名称或级别相关联的设置不保证该守护进程只用于该级别。具体而言,

当有多个待机守护进程可用时,将使用关联的待机守护进程。如果某个级别发生故障,而此时

有某个待机守护进程可用,则即使该守护进程与其他某个级别或指定守护进程相关联,也会使

用该守护进程。

mds_standby_replay

如果设置为 true,则待机守护进程将持续读取某个已启动级别的元数据日记。这就为此级

别提供了一个热元数据缓存,当为该级别提供服务的守护进程发生故障时,此日记可加快

故障转移过程的速度。

一个已启动的级别只能指定一个待机重放守护进程。如果将两个守护进程都设置为待机重

放,则其中任意一个会赢得控制权,另一个将成为正常的非重放待机守护进程。

当某个守护进程进入待机重放状态时,它只会用作所跟随级别的待机守护进程。如果另一

个级别发生故障,此待机重放守护进程不会作为替代者,即使没有其他待机守护进程可用

也是如此。

mds_standby_for_name

如果指定此设置,则仅当最后一个包含故障级别的守护进程与此名称匹配时,待机守护进

程才会接管该故障级别。

mds_standby_for_rank

如果指定此设置,待机守护进程只会接管指定的级别。如果另外的级别发生故障,将不会

使用此守护进程来替代此级别。

与 mds_standby_for_fscid 结合使用时,可以指定在使用多个文件系统时,具体针对

哪个文件系统的级别。

mds_standby_for_fscid

如果设置了 mds_standby_for_rank,则 mds_standby_for_fscid 只是一个用于指出所

指文件系统级别的限定符。

如果未设置 mds_standby_for_rank,则设置 FSCID 会导致此守护进程以指定 FSCID

中的任何级别为目标。如果希望只在特定的文件系统中将某个守护进程用于任何级别,可

使用此设置。

mon_force_standby_active

在 Monitor 主机上使用此设置。其默认值为 true。

302 配置待机守护进程 SES 6

Page 323: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

如果值为 false,则 standby_replay 配置为 true 的守护进程只有在其已配置要跟随

的级别/名称发生故障时,才会变为工作守护进程。另一方面,如果此设置为 true,则可将

其他某个级别指定给 standby_replay 配置为 true 的守护进程。

19.5.2 示例

下面显示了多个示例 ceph.conf 配置。可将包含所有守护进程的配置的 ceph.conf 复制到

所有服务器,或者在每台服务器上创建一个不同的文件,并在其中包含该服务器的守护进程配

置。

19.5.2.1 简单对

“a”和“b”两个 MDS 守护进程充当一对。其中,当前未指定级别的守护进程将是另一个守护进程

的待机重放跟随者。

[mds.a]

mds standby replay = true

mds standby for rank = 0

[mds.b]

mds standby replay = true

mds standby for rank = 0

19.6 设置 CephFS 配额您可以对 Ceph 文件系统的任何子目录设置配额。配额可限制目录层次结构中指定点下所存储

的字节或文件数。

19.6.1 限制

CephFS 的配额设置具有以下限制:

配额是合作性而非竞争性的。

303 示例 SES 6

Page 324: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

达到限制时,Ceph 配额依赖装入文件系统的客户端来停止向其写入数据。服务器端无法

阻止恶意客户端写入所需数量的数据。在客户端完全不受信任的环境中,请勿使用配额来

阻止填充文件系统。

配额并不精确。

在达到配额限制不久后,系统便会停止向文件系统写入数据的进程。这样便会不可避免地

允许这些进程在超出配置的限制后又写入一定数量的数据。系统将会在超出所配置限制后

的十分之一秒内停止客户端写入程序。

配额是在自 4.17 版本起的内核客户端中实施的。

配额受用户空间客户端(libcephfs、ceph-fuse)支持。4.17 及更高版本的 Linux 内核客

户端支持 SUSE Enterprise Storage 6 集群上的 CephFS 配额。内核客户端(甚至最近的版

本)无法处理较旧集群的配额,即便它们可以设置配额扩展属性也是如此。

与基于路径的装入限制搭配使用时,需谨慎配置配额。

客户端需要有权访问配置了配额的目录 Inode,才能强制实施这些配额。如果根据 MDS

用户权限,客户端对特定路径(例如 /home/user)的访问受到限制,并且配额是对其

无权访问的祖先目录 ( /home ) 配置的,则客户端将无法强制实施该配额。在使用基于路

径的访问限制时,请务必对客户端可以访问的目录(例如 /home/user 或 /home/user/

quota_dir)配置配额。

19.6.2 配置

您可以使用虚拟扩展属性来配置 CephFS 配额:

ceph.quota.max_files

配置文件限制。

ceph.quota.max_bytes

配置字节限制。

如果某个目录 Inode 存在这些属性,即表示该位置配置了配额。如果不存在,则表示未对该目

录配置配额(即便可能对父目录配置了配额)。

要设置 100 MB 的配额,请运行以下命令:

cephadm@mds > setfattr -n ceph.quota.max_bytes -v 100000000 /SOME/DIRECTORY

304 配置 SES 6

Page 325: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

要设置 10,000 个文件的配额,请运行以下命令:

cephadm@mds > setfattr -n ceph.quota.max_files -v 10000 /SOME/DIRECTORY

要查看配额设置,请运行以下命令:

cephadm@mds > getfattr -n ceph.quota.max_bytes /SOME/DIRECTORY

cephadm@mds > getfattr -n ceph.quota.max_files /SOME/DIRECTORY

注意:未设置配额如果扩展属性的值为“0”,表示未设置配额。

要删除配额,请运行以下命令:

cephadm@mds > setfattr -n ceph.quota.max_bytes -v 0 /SOME/DIRECTORY

cephadm@mds > setfattr -n ceph.quota.max_files -v 0 /SOME/DIRECTORY

19.7 管理 CephFS 快照在截取 CephFS 快照时,快照会创建此时间点文件系统的只读视图。您可以在任何目录中创建快

照。快照将涵盖文件系统中指定目录下的所有数据。创建快照后,系统会从各客户端异步清理

缓冲数据。因此,创建快照的速度十分快。

重要:多个文件系统如果您有多个 CephFS 文件系统在共享一个存储池(通过名称空间),则这些文件系统的

快照将会发生冲突,并且删除其中一个快照将会导致共享同一存储池的其他快照缺少文件

数据。

19.7.1 创建快照对于新文件系统,系统默认会启用 CephFS 快照特性。要对现有文件系统启用该特性,请运行以

下命令:

305 管理 CephFS 快照 SES 6

Page 326: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > ceph fs set CEPHFS_NAME allow_new_snaps true

启用快照后,CephFS 中的所有目录都将包含一个特殊的 .snap 子目录。

CephFS 内核客户端有一个限制:它们无法处理一个目录树中所含快照数量超过 400 个的情况。

快照的数量应始终低于此上限,无论使用哪个客户端均如此。如果使用较旧的 CephFS 客户端

(例如 SLE12-SP3),请记住,快照数量超过 400 个对运行十分有害,因为这会导致客户端崩

溃。

提示:自定义快照子目录名称您可以通过设置 client snapdir 设置来为快照子目录配置其他名称。

要创建快照,请以自定义名称在 .snap 目录下创建子目录。例如,要创建目录

/CEPHFS_MOUNT/2/3/ 的快照,请运行以下命令:

tux > mkdir /CEPHFS_MOUNT/2/3/.snap/CUSTOM_SNAPSHOT_NAME

19.7.2 删除快照

要删除某个快照,请在 .snap 目录中删除该快照的子目录:

tux > rmdir /CEPHFS_MOUNT/2/3/.snap/CUSTOM_SNAPSHOT_NAME

306 删除快照 SES 6

Page 327: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

20 通过 Samba 导出 Ceph 数据

本章介绍如何通过 Samba/CIFS 共享导出 Ceph 集群中存储的数据,以便您可从 Windows*

客户端计算机轻松访问这些数据。另外还介绍了有助于您将 Ceph Samba 网关配置为加入到

Windows* 域中的 Active Directory 以进行用户身份验证和授权的信息。

注意:Samba 网关性能由于客户端与存储区之间的额外网络跃点会导致协议开销增加并产生额外的延迟,因此

与使用本机 Ceph 客户端相比,通过 Samba 网关访问 CephFS 可能会使应用性能大幅降

低。

20.1 通过 Samba 共享导出 CephFS

警告:跨协议访问本机 CephFS 和 NFS 客户端不受通过 Samba 获取的文件锁定限制,反之亦然。如果通过

其他方式访问 CephFS 支持的 Samba 共享路径,则依赖跨协议文件锁定的应用可能会出

现数据损坏情况。

20.1.1 Samba 相关的包安装

要配置和导出 Samba 共享,需要安装以下包: samba-ceph 和 samba-winbind。如尚未

安装这些包,请运行以下命令进行安装:

cephadm@smb > zypper install samba-ceph samba-winbind

20.1.2 单个网关示例

在导出 Samba 共享的准备过程中,需要选择用于充当 Samba 网关的合适节点。该节点必须能

访问 Ceph 客户端网络,同时要有足够的 CPU、内存和网络资源。

307 通过 Samba 共享导出 CephFS SES 6

Page 328: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

可以通过 CTDB 和 SUSE Linux Enterprise High Availability Extension 提供故障转移功能。有关

HA 设置的详细信息,请参见第 20.1.3 节 “高可用性配置”。

1. 请确保集群中已存在一个正常工作的 CephFS。有关详细信息,请参见《部署指南》,

第 11 章 “安装 CephFS”。

2. 在 Ceph 管理节点上创建一个特定于 Samba 网关的密钥环,并将其复制到 Samba 网关节

点:

cephadm@adm > ceph auth get-or-create client.samba.gw mon 'allow r' \

osd 'allow *' mds 'allow *' -o ceph.client.samba.gw.keyring

root@master # scp ceph.client.samba.gw.keyring SAMBA_NODE:/etc/ceph/

将 SAMBA_NODE 替换为 Samba 网关节点的名称。

3. 在 Samba 网关节点上执行以下步骤。将 Samba 连同 Ceph 集成包一起安装:

cephadm@smb > sudo zypper in samba samba-ceph

4. 将 /etc/samba/smb.conf 文件的默认内容替换为以下内容:

[global]

netbios name = SAMBA-GW

clustering = no

idmap config * : backend = tdb2

passdb backend = tdbsam

# disable print server

load printers = no

smbd: backgroundqueue = no

[SHARE_NAME]

path = /

vfs objects = ceph

ceph: config_file = /etc/ceph/ceph.conf

ceph: user_id = samba.gw

read only = no

oplocks = no

kernel share modes = no

308 单个网关示例 SES 6

Page 329: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

提示:Oplocks 和共享模式oplocks(也称为 SMB2+ 租用)可通过加速客户端缓存来提升性能,不过如果

将其他 CephFS 客户端(例如内核 mount.cephfs、FUSE 或 NFS Ganesha)与

Samba 一起部署,该机制目前并不安全。

如果所有 CephFS 文件系统路径访问都专由 Samba 处理,则可安全启用 oplocks

参数。

目前,在使用 CephFS vfs 扩展模块运行的共享中,需要禁用 kernel share

modes,文件处理工作才能正常进行。

重要:允许访问由于 vfs_ceph 不需要文件系统装入,共享路径会解析为所挂接 Ceph 集群上的

Ceph 文件系统中的绝对路径。要实现成功的共享 I/O,路径的访问控制列表 (ACL)

需要允许给定 Samba 客户端的映射用户进行访问。您可以通过 CephFS 内核客户

端暂时装入,并对共享路径使用 chmod、 chown 或 setfacl 实用程序来修改

ACL。例如,要允许所有用户进行访问,请运行以下命令:

root # chmod 777 MOUNTED_SHARE_PATH

5. 启动并启用 Samba 守护进程:

cephadm@smb > sudo systemctl start smb.service

cephadm@smb > sudo systemctl enable smb.service

cephadm@smb > sudo systemctl start nmb.service

cephadm@smb > sudo systemctl enable nmb.service

309 单个网关示例 SES 6

Page 330: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

20.1.3 高可用性配置

重要:不支持透明故障转移尽管多节点 Samba + CTDB 部署比单节点部署的高可用性更佳(请参见第 20 章 “通过

Samba 导出 Ceph 数据”),但它并不支持客户端透明故障转移。应用可能会在 Samba

网关节点发生故障时出现短暂的中断。

本节提供一个示例来说明如何设置 Samba 服务器的双节点高可用性配置。该设置需要 SUSE

Linux Enterprise High Availability Extension。两个节点分别名为 earth ( 192.168.1.1 ) 和

mars ( 192.168.1.2 )。

有关 SUSE Linux Enterprise High Availability Extension 的详细信息,请参见 https://

www.suse.com/documentation/sle-ha-15/ 。

此外,使用两个浮动虚拟 IP 地址可让客户端连接到服务,不管该服务在哪个物理节点上运行

均如此。 192.168.1.10 用于通过 Hawk2 进行集群管理, 192.168.2.1 专门用于 CIFS 导

出。这样,以后便可更轻松地应用安全限制。

以下过程介绍示例安装。https://www.suse.com/documentation/sle-ha-15/

book_sleha_quickstarts/data/art_sleha_install_quick.html 上提供了更多详细信息。

1. 在管理节点上创建一个特定于 Samba 网关的密钥环,并将其复制到上述两个节点上:

cephadm@adm > ceph auth get-or-create client.samba.gw mon 'allow r' \

osd 'allow *' mds 'allow *' -o ceph.client.samba.gw.keyring

root@master # scp ceph.client.samba.gw.keyring earth:/etc/ceph/

root@master # scp ceph.client.samba.gw.keyring mars:/etc/ceph/

2. 准备好 earth 和 mars,以托管 Samba 服务:

a. 在继续下一步之前,请确保已安装以下包: ctdb、 tdb-tools 和 samba

(smb 和 nmb 资源需要)。

cephadm@smb > zypper in ctdb tdb-tools samba samba-ceph

b. 确保服务 ctdb、 smb 和 nmb 已停止且未启用:

cephadm@smb > sudo systemctl disable ctdb

310 高可用性配置 SES 6

Page 331: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@smb > sudo systemctl disable smb

cephadm@smb > sudo systemctl disable nmb

cephadm@smb > sudo systemctl stop smb

cephadm@smb > sudo systemctl stop nmb

c. 在所有节点上打开防火墙的端口 4379。这是为了使 CTDB 能够与其他集群节点通

讯。

3. 在 earth 上创建 Samba 的配置文件。这些文件稍后将自动同步到 mars。

a. 在 /etc/ctdb/nodes 中插入包含集群中每个节点的所有私用 IP 地址的所有节

点:

192.168.1.1

192.168.1.2

b. 配置 Samba。在 /etc/samba/smb.conf 的 [global] 部分中添加以下行。使

用所选的主机名取代“CTDB-SERVER”(集群中的所有节点将显示为一个此名称的大节

点,以方便操作)。另外,添加一个共享定义,以 SHARE_NAME 为例:

[global]

netbios name = SAMBA-HA-GW

clustering = yes

idmap config * : backend = tdb2

passdb backend = tdbsam

ctdbd socket = /var/lib/ctdb/ctdb.socket

# disable print server

load printers = no

smbd: backgroundqueue = no

[SHARE_NAME]

path = /

vfs objects = ceph

ceph: config_file = /etc/ceph/ceph.conf

ceph: user_id = samba.gw

read only = no

oplocks = no

kernel share modes = no

311 高可用性配置 SES 6

Page 332: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

请注意, /etc/ctdb/nodes 和 /etc/samba/smb.conf 文件需要在所有

Samba 网关节点上都保持一致。

4. 安装并引导 SUSE Linux Enterprise High Availability 集群。

a. 在 earth 和 mars 上注册 SUSE Linux Enterprise High Availability Extension:

root@earth # SUSEConnect -r ACTIVATION_CODE -e E_MAIL

root@mars # SUSEConnect -r ACTIVATION_CODE -e E_MAIL

b. 在两个节点上安装 ha-cluster-bootstrap :

root@earth # zypper in ha-cluster-bootstrap

root@mars # zypper in ha-cluster-bootstrap

c. 在 earth 上初始化集群:

root@earth # ha-cluster-init

d. 让 mars 加入该集群:

root@mars # ha-cluster-join -c earth

5. 检查集群的状态。您应该会看到两个节点都已添加到集群中:

root@earth # crm status

2 nodes configured

1 resource configured

Online: [ earth mars ]

Full list of resources:

admin-ip (ocf::heartbeat:IPaddr2): Started earth

6. 在 earth 上执行以下命令,以配置 CTDB 资源:

312 高可用性配置 SES 6

Page 333: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

root@earth # crm configure

crm(live)configure# primitive ctdb ocf:heartbeat:CTDB params \

ctdb_manages_winbind="false" \

ctdb_manages_samba="false" \

ctdb_recovery_lock="!/usr/lib64/ctdb/ctdb_mutex_ceph_rados_helper

ceph client.samba.gw cephfs_metadata ctdb-mutex"

ctdb_socket="/var/lib/ctdb/ctdb.socket" \

op monitor interval="10" timeout="20" \

op start interval="0" timeout="200" \

op stop interval="0" timeout="100"

crm(live)configure# primitive nmb systemd:nmb \

op start timeout="100" interval="0" \

op stop timeout="100" interval="0" \

op monitor interval="60" timeout="100"

crm(live)configure# primitive smb systemd:smb \

op start timeout="100" interval="0" \

op stop timeout="100" interval="0" \

op monitor interval="60" timeout="100"

crm(live)configure# group g-ctdb ctdb nmb smb

crm(live)configure# clone cl-ctdb g-ctdb meta interleave="true"

crm(live)configure# commit

配置选项 ctdb_recovery_lock 中的二进制文件 /usr/lib64/

ctdb/ctdb_mutex_ceph_rados_helper 中按如下顺序包含以下参

数: CLUSTER_NAME、 CEPHX_USER、 RADOS_POOL 和 RADOS_OBJECT。

可追加一个额外的锁定超时参数来覆盖所用的默认值(10 秒)。使用更高的值将会增加

CTDB 恢复主节点故障转移时间,然而使用更低的值可能会导致不正确地将恢复主节点检

测为停用状态,以致触发摆动故障转移。

7. 添加集群 IP 地址:

crm(live)configure# primitive ip ocf:heartbeat:IPaddr2 params

ip=192.168.2.1 \

unique_clone_address="true" \

op monitor interval="60" \

meta resource-stickiness="0"

crm(live)configure# clone cl-ip ip \

313 高可用性配置 SES 6

Page 334: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

meta interleave="true" clone-node-max="2" globally-unique="true"

crm(live)configure# colocation col-with-ctdb 0: cl-ip cl-ctdb

crm(live)configure# order o-with-ctdb 0: cl-ip cl-ctdb

crm(live)configure# commit

如果 unique_clone_address 设置为 true,IPaddr2 资源代理将向指定的地址添加

一个克隆 ID,从而导致出现三个不同的 IP 地址。这些地址通常是不需要的,但有助于实

现负载平衡。有关此主题的更多信息,请参见 https://www.suse.com/documentation/

sle-ha-15/book_sleha_guide/data/cha_ha_lb.html 。

8. 检查结果:

root@earth # crm status

Clone Set: base-clone [dlm]

Started: [ factory-1 ]

Stopped: [ factory-0 ]

Clone Set: cl-ctdb [g-ctdb]

Started: [ factory-1 ]

Started: [ factory-0 ]

Clone Set: cl-ip [ip] (unique)

ip:0 (ocf:heartbeat:IPaddr2): Started factory-0

ip:1 (ocf:heartbeat:IPaddr2): Started factory-1

9. 从客户端计算机进行测试。在 Linux 客户端上运行以下命令,以检查能否从系统复制文件

以及将文件复制到系统:

root # smbclient //192.168.2.1/myshare

20.2 将 Samba 网关加入 Active Directory 中您可以将 Ceph Samba 网关配置为支持 Active Directory (AD) 的 Samba 域的成员。作为 Samba

域成员,您可以针对来自导出 CephFS 的文件和目录在本地访问列表 (ACL) 中使用域用户和组。

314 将 Samba 网关加入 Active Directory 中 SES 6

Page 335: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

20.2.1 准备

本节介绍在配置 Samba 自身之前,您需要执行的一些准备步骤。首先,您需要准备一个干净的

环境,这样有助于防止混淆,并可确认以前所安装的 Samba 系统中的文件没有与新安装的域成

员混用。

提示:同步时钟所有 Samba 网关节点的时钟都需要与 Active Directory 域控制器保持同步。时钟偏差可

能会导致身份验证失败。

确认没有正在运行的 Samba 或名称缓存进程:

cephadm@smb > ps ax | egrep "samba|smbd|nmbd|winbindd|nscd"

如果输出列出了任何 samba、 smbd、 nmbd、 winbindd 或 nscd 进程,请将其停止。

如果您之前在此主机上运行过 Samba 安装,请删除 /etc/samba/smb.conf 文件。另外,请

删除所有 Samba 数据库文件(例如 *.tdb 和 *.ldb 文件)。要列出包含 Samba 数据库的

目录,请运行以下命令:

cephadm@smb > smbd -b | egrep "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR"

20.2.2 确认 DNS

Active Directory (AD) 使用 DNS 来查找域控制器 (DC) 和服务(例如 Kerberos)。因此,AD 域

成员和服务器需要能够解析 AD DNS 区域。

确认已正确配置 DNS 且正向和反向查找均可正确解析,例如:

cephadm@adm > nslookup DC1.domain.example.com

Server: 10.99.0.1

Address: 10.99.0.1#53

Name: DC1.domain.example.com

Address: 10.99.0.1

cephadm@adm > 10.99.0.1

315 准备 SES 6

Page 336: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

Server: 10.99.0.1

Address: 10.99.0.1#53

1.0.99.10.in-addr.arpa name = DC1.domain.example.com.

20.2.3 解析 SRV 记录

AD 使用 SRV 记录查找服务(例如 Kerberos 和 LDAP)。要确认能否正确解析 SRV 记录,请使

用 nslookup 交互外壳,例如:

cephadm@adm > nslookup

Default Server: 10.99.0.1

Address: 10.99.0.1

> set type=SRV

> _ldap._tcp.domain.example.com.

Server: UnKnown

Address: 10.99.0.1

_ldap._tcp.domain.example.com SRV service location:

priority = 0

weight = 100

port = 389

svr hostname = dc1.domain.example.com

domain.example.com nameserver = dc1.domain.example.com

dc1.domain.example.com internet address = 10.99.0.1

20.2.4 配置 Kerberos

Samba 支持 Heimdal 和 MIT Kerberos 后端。要对域成员配置 Kerberos,请在您的 /etc/

krb5.conf 文件中进行以下设置:

[libdefaults]

default_realm = DOMAIN.EXAMPLE.COM

dns_lookup_realm = false

dns_lookup_kdc = true

316 解析 SRV 记录 SES 6

Page 337: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

上面的示例为 DOMAIN.EXAMPLE.COM 领域配置了 Kerberos。我们不建议在 /etc/

krb5.conf 文件中设置任何进一步的参数。如果您的 /etc/krb5.conf 中包含 include

行,则您必须删除此行,否则该文件将无法工作。

20.2.5 本地主机名解析

当您将主机加入域中时,Samba 会尝试在 AD DNS 区域中注册其主机名。为此, net 实用程序

需要能够使用 DNS 或 /etc/hosts 文件中的正确条目来解析主机名。

要确认您的主机名解析正确,请使用 getent hosts 命令:

cephadm@adm > getent hosts example-host

10.99.0.5 example-host.domain.example.com example-host

主机名和 FQDN 不得解析为 127.0.0.1 IP 地址或与域成员的 LAN 接口上所用 IP 地址不同的任

何 IP 地址。如果未显示输出或主机解析为错误的 IP 地址,而您未在使用 DHCP,请在 /etc/

hosts 文件中设置正确的条目:

127.0.0.1 localhost

10.99.0.5 example-host.samdom.example.com example-host

提示:DHCP 和 /etc/hosts如果您在使用 DHCP,请检查 /etc/hosts 是否仅包含“127.0.0.1”行。如果仍然有问

题,请联系 DHCP 服务器的管理员。

如果您需要添加计算机主机名的别名,请将别名添加到以计算机 IP 地址开头的行的末

尾,切勿添加到“127.0.0.1”行。

20.2.6 配置 Samba

本节介绍有关您需要在 Samba 配置文件 /etc/samba/smb.conf 中包含的特定配置选项的信

息。

317 本地主机名解析 SES 6

Page 338: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

20.2.6.1 选择 winbindd 中用于 ID 映射的后端

如果您需要让您的用户使用不同的登录外壳和/或 Unix 主目录路径,或者让他们在任何地方都使

用相同的 ID,您需要使用 winbind“ad”后端并将 RFC2307 属性添加到 AD 中。

重要:RFC2307 属性和 ID 号创建用户或组时,系统不会自动添加 RFC2307 属性。

DC 上找到的 ID 号(3000000 范围内的编号)不是 RFC2307 属性,将不会在 Unix

域成员上使用。如果您需要在任何地方都使用相同的 ID 号,请将 uidNumber 和

gidNumber 属性添加到 AD 中,并在 Unix 域成员上使用 winbind“ad”后端。如果您决

定将 uidNumber 和 gidNumber 属性添加到 AD 中,请不要使用 3000000 范围内的编

号。

如果您的用户仅将 Samba AD DC 用于身份验证目的,而不会在其上存储数据或登录到其中,

则您可使用 winbind“rid”后端。如此,系统会依据 Windows* RID 来计算用户和组 ID。如果

您在每个 Unix 域成员上的 smb.conf 中都使用相同的 [global] 段落,您将会获得相同的

ID。如果您使用“rid”后端,则不需要向 AD 添加任何内容,系统将会忽略 RFC2307 属性。使

用“rid”后端时,请在 smb.conf 中设置 template shell 和 template homedir 参数。

它们是全局设置,会为所有用户设置相同的登录外壳和 Unix 主目录路径(RFC2307 属性则不

同,可用来分别设置不同的 Unix 主目录路径和外壳)。

如果您需要让您的用户和组在任何地方都使用相同的 ID,但只需要为他们设置相同的登

录外壳和相同的 Unix 主目录路径,还可使用另一种方法来设置 Samba。您可以通过使用

winbind“ad”后端并在 smb.conf 中使用模板行来实现此目的。使用此方法时,您仅需将

uidNumber 和 gidNumber 属性添加到 AD 中。

提示:有关 ID 映射后端的更多信息有关可用 ID 映射后端的详细信息,请参见下列相关手册页: man 8 idmap_ad、 man

8 idmap_rid 和 man 8 idmap_autorid。

318 配置 Samba SES 6

Page 339: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

20.2.6.2 设置用户和组 ID 范围

决定好使用哪个 winbind 后端后,您需要在 smb.conf 中设置 idmap config 选项来指定

要使用的范围。默认情况下,Unix 域成员上有多个用户和组 ID 块:

表 20.1︰ 默认用户和组 ID 块

ID 的情况下定位用户 范围

0-999 本地系统用户和组。

从 1000 开始 本地 Unix 用户和组。

从 10000 开始 DOMAIN 用户和组。

根据上述范围,您不应将“*”或“DOMAIN”范围设置为 999 以内,因为它们会与本地系统用户和

组发生冲突。您还应为任何本地 Unix 用户和组留出余地,因此将 idmap config 范围设置为

从 3000 开始是不错的折衷方法。

您需要确定“DOMAIN”可能会增长到多大,并决定是否打算建立任何受信任的域。然后,便可按

如下所示来设置 idmap config 范围:

表 20.2︰ ID 范围

领域 范围

* 3000-7999

DOMAIN 10000-999999

TRUSTED 1000000-9999999

20.2.6.3 将域管理员帐户映射到本地 root 用户

Samba 可让您将域帐户映射到本地帐户。通过此功能,您可以用不同于客户端上请求执行操作

的帐户的用户身份在域成员的文件系统上执行文件操作。

319 配置 Samba SES 6

Page 340: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

提示:映射域管理员(可选)将域管理员映射到本地 root 帐户属于可选操作。请仅在域管理员需要能够使用 root

权限在域成员上执行文件操作时配置该映射。请注意,将 Administrator 映射到 root

帐户后,其便不能以“Administrator”身份登录 Unix 域成员。

要将域管理员映射到本地 root 帐户,请执行以下步骤:

1. 将以下参数添加到 smb.conf 文件的 [global] 段落:

username map = /etc/samba/user.map

2. 创建包含以下内容的 /etc/samba/user.map 文件:

!root = DOMAIN\Administrator

重要使用“ad”ID 映射后端时,请不要为域管理员帐户设置 uidNumber 属性。如果为域管理

员帐户设置了该属性,其值会覆盖 root 用户的本地 UID“0”,因而会导致映射失败。

有关详细信息,请参见 smb.conf 手册页 ( man 5 smb.conf ) 中的 username map 参数。

20.2.7 加入 Active Directory 域

要将主机加入 Active Directory,请运行以下命令:

cephadm@smb > net ads join -U administrator

Enter administrator's password: PASSWORD

Using short domain name -- DOMAIN

Joined EXAMPLE-HOST to dns domain 'DOMAIN.example.com'

320 加入 Active Directory 域 SES 6

Page 341: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

20.2.8 配置名称服务开关

要使域用户和组可供本地系统使用,您需要启用名称服务开关 (NSS) 库。在 /etc/

nsswitch.conf 文件中,将 winbind 条目追加到以下数据库:

passwd: files winbind

group: files winbind

重要:需考虑的要点

将 files 条目指定为这两个数据库的第一个源。这可让 NSS 在查询 winbind 服

务之前,先从 /etc/passwd 和 /etc/group 文件中查找域用户和组。

不要将 winbind 条目添加到 NSS shadow 数据库中。这样做可能会导致

wbinfo 实用程序失败。

不要在本地 /etc/passwd 文件中使用与域中相同的用户名。

20.2.9 启动服务

要让 Unix 域成员具备完整功能,您需要启用并启动以下三项服务: smbd、 nmbd 和

winbindd。请通过使用以下命令启用并启动这些服务:

cephadm@smb > sudo systemctl enable smbd.service && systemctl start smbd.service

cephadm@smb > sudo systemctl enable nmbd.service && systemctl start nmbd.service

cephadm@smb > sudo systemctl enable winbindd.service && systemctl start

winbindd.service

提示:nmbd 是可选服务如果您不需要网络浏览,则无需在 Unix 域成员上启用并启动 nmbd 服务。

321 配置名称服务开关 SES 6

Page 342: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

20.2.10 测试 winbindd 连接性

20.2.10.1 发送 winbindd Ping

要验证 winbindd 服务能否连接到 AD 域控制器 (DC) 或主域控制器 (PDC),请输入以下命令:

cephadm@smb > wbinfo --ping-dc

checking the NETLOGON for domain[DOMAIN] dc connection to

"DC.DOMAIN.EXAMPLE.COM" succeeded

如果前一条命令失败,请确认 winbindd 服务正在运行且 smb.conf 文件设置正确。

20.2.10.2 查找域用户和组

您可以使用 libnss_winbind 库查找域用户和组。例如,要查找域用户“DOMAIN

\demo01”,请运行以下命令:

cephadm@smb > getent passwd DOMAIN\\demo01

DOMAIN\demo01:*:10000:10000:demo01:/home/demo01:/bin/bash

要查找域组“Domain Users”,请运行以下命令:

cephadm@smb > getent group "DOMAIN\\Domain Users"

DOMAIN\domain users:x:10000:

20.2.10.3 为域用户和组指定文件权限

借助名称服务开关 (NSS) 库,您可以在命令中使用域用户帐户和组。例如,要将文件的所有者设

置为“demo01”域用户,并将组设置为“Domain Users”域组,请输入以下命令:

cephadm@smb > chown "DOMAIN\\demo01:DOMAIN\\domain users" file.txt

322 测试 winbindd 连接性 SES 6

Page 343: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

21 NFS Ganesha:通过 NFS 导出 Ceph 数据

NFS Ganesha 是一台 NFS 服务器(请参见与 NFS 共享文件系统 (https://

documentation.suse.com/sles/15-SP1/html/SLES-all/cha-nfs.html) ),它在用户地址空间中

运行,而不是作为操作系统内核的一部分运行。借助 NFS Ganesha,您可以插入自己的存储机

制(例如 Ceph),并从任何 NFS 客户端访问它。

系统按用户将 S3 存储桶导出到 NFS,例如,通过路径 GANESHA_NODE:/用户名/存储桶名导

出。

默认通过路径 GANESHA_NODE:/cephfs 导出 CephFS。

注意:NFS Ganesha 性能由于客户端与存储区之间的额外网络跃点会导致协议开销增加并产生额外的延迟,因此与

使用本机 CephFS 或对象网关客户端相比,通过 NFS 网关访问 Ceph 可能会使应用性能大

幅降低。

21.1 安装有关安装说明,请参阅《部署指南》, 第 12 章 “安装 NFS Ganesha”。

21.2 配置有关可在配置文件中使用的所有参数的列表,请参见:

man ganesha-config

man ganesha-ceph-config,用于 CephFS 文件系统抽象层 (FSAL) 选项。

man ganesha-rgw-config,用于对象网关 FSAL 选项。

本节包含的信息可帮助您配置 NFS Ganesha 服务器,以导出可通过对象网关和 CephFS 访问的

集群数据。

323 安装 SES 6

Page 344: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

NFS Ganesha 配置包含两个部分:服务配置和导出项配置。服务配置通过 /etc/ganesha/

ganesha.conf 控制。注意,对此文件所做的更改在执行 DeepSea 阶段 4 时将被覆盖。要永

久更改这些设置,请编辑位于 Salt Master 上的文件 /srv/salt/ceph/ganesha/files/

ganesha.conf.j2。导出项配置以 RADOS 对象的形式存储在 Ceph 集群中。

21.2.1 服务配置

服务配置存储在 /etc/ganesha/ganesha.conf 中,用于控制所有 NFS Ganesha 守护进程

设置,包括 Ceph 集群中存储导出项配置的位置。注意,对此文件所做的更改在执行 DeepSea

阶段 4 时将被覆盖。要永久更改这些设置,请编辑位于 Salt Master 上的文件 /srv/salt/

ceph/ganesha/files/ganesha.conf.j2。

21.2.1.1 RADOS_URLS 段落

RADOS_URLS 部分用于配置为了从 RADOS 对象读取 NFS Ganesha 配置所需进行的 Ceph 集群

访问。

RADOS_URLS {

Ceph_Conf = /etc/ceph/ceph.conf;

UserId = "ganesha.MINION_ID";

watch_url = "rados://RADOS_POOL/ganesha/conf-MINION_ID";

}

Ceph_Conf

Ceph 配置文件路径位置。

UserId

CephX 用户 ID。

watch_url

用于查看重新加载通知的 RADOS 对象 URL。

324 服务配置 SES 6

Page 345: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

21.2.1.2 RGW 段落

RGW {

ceph_conf = "/etc/ceph/ceph.conf";

name = "name";

cluster = "ceph";

}

ceph_conf

指向 ceph.conf 文件。与 DeepSea 一起部署时,不需要更改此值。

name

NFS Ganesha 使用的 Ceph 客户端用户名。

cluster

Ceph 集群的名称。SUSE Enterprise Storage 6 目前只支持一个集群名称,默认为 ceph。

21.2.1.3 RADOS 对象 URL

%url rados://RADOS_POOL/ganesha/conf-MINION_ID

NFS Ganesha 支持从 RADOS 对象读取配置。使用 %url 指令可指定用于识别 RADOS 对象位置

的 RADOS URL。

RADOS URL 可采用以下两种格式: rados://<POOL>/<OBJECT> 或 rados://<POOL>/

<NAMESPACE>/<OBJECT>,其中 POOL 是存储对象的 RADOS 存储池, NAMESPACE 是存储

对象的存储池名称空间, OBJECT 是对象名称。

为了支持 Ceph Dashboard 的 NFS Ganesha 管理功能,您需要遵循每个服务守护进程的 RADOS

对象的命名约定。对象名称必须采用 conf-MINION_ID 格式,其中 MINION_ID 是正在运行

此服务的节点的 Salt Minion ID。

DeepSea 已负责执行正确生成此 URL 的工作,您无需再进行任何更改。

21.2.1.4 更改默认 NFS Ganesha 端口

NFS Ganesha 默认使用端口 2049 提供 NFS 支持,使用 875 提供 rquota 支持。要更改默认端口

号,请在 NFS_CORE_PARAM 段落中使用 NFS_Port 和 RQUOTA_Port 选项,例如:

325 服务配置 SES 6

Page 346: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

NFS_CORE_PARAM

{

NFS_Port = 2060;

RQUOTA_Port = 876;

}

21.2.2 导出项配置导出项配置以 RADOS 对象的形式存储在 Ceph 集群中。每个导出块都存储在各自名为

export-<id> 的 RADOS 对象中,其中, <id> 必须与导出项配置的 Export_ID 属性匹

配。导出项与 NFS Ganesha 服务之间的关联通过 conf-MINION_ID 对象实现。每个服务对象

包含该服务导出的每个导出项的 RADOS URL 列表。导出块如下所示:

EXPORT

{

Export_Id = 1;

Path = "/";

Pseudo = "/";

Access_Type = RW;

Squash = No_Root_Squash;

[...]

FSAL {

Name = CEPH;

}

}

要为上面的导出块创建 RADOS 对象,我们需要先将导出块代码存储到一个文件中。然后可以使

用 RADOS CLI 工具将之前保存的文件的内容存储到 RADOS 对象中。

cephadm@adm > rados -p POOL -N NAMESPACE put export-EXPORT_ID EXPORT_FILE

创建导出对象后,我们便可将导出项与服务实例进行关联,方法是为服务对象添加导出对象的

相应 RADOS URL。下面的章节说明如何配置导出块。

21.2.2.1 Export 主段落

Export_Id

326 导出项配置 SES 6

Page 347: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

每个导出项都需要有唯一的“Export_Id”(强制)。

Path

相关 CephFS 存储池中的导出项路径(强制)。允许从 CephFS 中导出子目录。

Pseudo

目标 NFS 导出项路径(对于 NFSv4 为强制)。它定义在哪个 NFS 导出项路径下可获得导

出的数据。

示例:使用值 /cephfs/ 并执行

root # mount GANESHA_IP:/cephfs/ /mnt/

之后,CephFS 数据可在客户端上的目录 /mnt/cephfs/ 中获得。

Access_Type

“RO”表示只读访问权限,“RW”表示读写访问权限,“None”表示禁止访问。

提示:限制客户端的访问如果您在主 EXPORT 段落保留 Access_Type = RW,并在 CLIENT 段落限制

特定客户端的访问,其他客户端仍可连接。要禁止所有客户端的访问而只允许特

定客户端进行访问,请在 EXPORT 段落设置 Access_Type = None,然后在

CLIENT 段落为一个或多个客户端指定限制较少的访问模式:

EXPORT {

FSAL {

access_type = "none";

[...]

}

CLIENT {

clients = 192.168.124.9;

access_type = "RW";

[...]

}

[...]

}

327 导出项配置 SES 6

Page 348: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

Squash

NFS 匿名访问选项。

FSAL

导出“文件系统抽象层”。请参见第 21.2.2.2 节 “FSAL 子段落”。

21.2.2.2 FSAL 子段落

EXPORT

{

[...]

FSAL {

Name = CEPH;

}

}

Name

定义 NFS Ganesha 使用的后端。允许的值为 CEPH(表示 CephFS)或 RGW(表示对象网

关)。根据您的选择,必须在 policy.cfg 中定义 role-mds 或 role-rgw。

21.3 自定义 NFS Ganesha 角色可为集群节点定义自定义 NFS Ganesha 角色。然后可在 policy.cfg 中将这些角色指定给节

点。角色允许:

分别使用不同的 NFS Ganesha 节点来访问对象网关和 CephFS。

将不同的对象网关用户指定给 NFS Ganesha 节点。

拥有不同的对象网关用户可让 NFS Ganesha 节点访问不同的 S3 存储桶。S3 存储桶可用于进行

访问控制。注意:不要将 S3 存储桶与 CRUSH 索引中使用的 Ceph 存储桶混淆。

328 自定义 NFS Ganesha 角色 SES 6

Page 349: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

21.3.1 NFS Ganesha 的不同对象网关用户

下面针对 Salt Master 的示例过程展示如何创建两个具有不同对象网关用户的 NFS Ganesha 角

色。在此示例中,使用了角色 gold 和 silver,DeepSea 已经提供了它们的示例配置文件。

1. 使用您选择的编辑器打开 /srv/pillar/ceph/stack/global.yml 文件。如果该文

件不存在,请予以创建。

2. 该文件需要包含以下几行:

rgw_configurations:

- rgw

- silver

- gold

ganesha_configurations:

- silver

- gold

稍后可以在 policy.cfg 中指定这些角色。

3. 创建 /srv/salt/ceph/rgw/users/users.d/gold.yml 文件并添加以下内容:

- { uid: "gold1", name: "gold1", email: "[email protected]" }

创建 /srv/salt/ceph/rgw/users/users.d/silver.yml 文件并添加以下内容:

- { uid: "silver1", name: "silver1", email: "[email protected]" }

4. 现在,需要为每个角色创建 ganesha.conf 的模板。使用 DeepSea 的原始模板是较佳

的做法。创建两个副本:

root@master # cd /srv/salt/ceph/ganesha/files/

root@master # cp ganesha.conf.j2 silver.conf.j2

root@master # cp ganesha.conf.j2 gold.conf.j2

5. 新的角色需要密钥环来访问集群。要提供访问权限,请复制 ganesha.j2:

root@master # cp ganesha.j2 silver.j2

root@master # cp ganesha.j2 gold.j2

329 NFS Ganesha 的不同对象网关用户 SES 6

Page 350: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

6. 复制对象网关的密钥环:

root@master # cd /srv/salt/ceph/rgw/files/

root@master # cp rgw.j2 silver.j2

root@master # cp rgw.j2 gold.j2

7. 对象网关还需要不同角色的配置:

root@master # cd /srv/salt/ceph/configuration/files/

root@master # cp ceph.conf.rgw silver.conf

root@master # cp ceph.conf.rgw gold.conf

8. 在 /srv/pillar/ceph/proposals/policy.cfg 中将新建的角色指定给集群节点:

role-silver/cluster/NODE1.sls

role-gold/cluster/NODE2.sls

将 NODE1 和 NODE2 分别替换为要将角色指定给的节点的名称。

9. 执行 DeepSea 阶段 0 到 4。

21.3.2 分隔 CephFS 和对象网关 FSAL

下面针对 Salt Master 的示例过程展示如何创建使用 CephFS 和对象网关的 2 个不同的新角色:

1. 使用您选择的编辑器打开文件 /srv/pillar/ceph/rgw.sls。如果该文件不存在,请

予以创建。

2. 该文件需要包含以下几行:

rgw_configurations:

ganesha_cfs:

users:

- { uid: "demo", name: "Demo", email: "[email protected]" }

ganesha_rgw:

users:

- { uid: "demo", name: "Demo", email: "[email protected]" }

330 分隔 CephFS 和对象网关 FSAL SES 6

Page 351: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

ganesha_configurations:

- ganesha_cfs

- ganesha_rgw

稍后可以在 policy.cfg 中指定这些角色。

3. 现在,需要为每个角色创建 ganesha.conf 的模板。使用 DeepSea 的原始模板是较佳

的做法。创建两个副本:

root@master # cd /srv/salt/ceph/ganesha/files/

root@master # cp ganesha.conf.j2 ganesha_rgw.conf.j2

root@master # cp ganesha.conf.j2 ganesha_cfs.conf.j2

4. 编辑 ganesha_rgw.conf.j2,删除以下段落:

{% if salt.saltutil.runner('select.minions', cluster='ceph', roles='mds') !

= [] %}

[...]

{% endif %}

5. 编辑 ganesha_cfs.conf.j2,删除以下段落:

{% if salt.saltutil.runner('select.minions', cluster='ceph', roles=role) !=

[] %}

[...]

{% endif %}

6. 新的角色需要密钥环来访问集群。要提供访问权限,请复制 ganesha.j2:

root@master # cp ganesha.j2 ganesha_rgw.j2

root@master # cp ganesha.j2 ganesha_cfs.j2

可从 ganesha_rgw.j2 中删除 caps mds = "allow *" 这一行。

7. 复制对象网关的密钥环:

root@master # cp /srv/salt/ceph/rgw/files/rgw.j2 \

/srv/salt/ceph/rgw/files/ganesha_rgw.j2

8. 对象网关需要您对新角色进行配置:

331 分隔 CephFS 和对象网关 FSAL SES 6

Page 352: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

root@master # cp /srv/salt/ceph/configuration/files/ceph.conf.rgw \

/srv/salt/ceph/configuration/files/ceph.conf.ganesha_rgw

9. 在 /srv/pillar/ceph/proposals/policy.cfg 中将新建的角色指定给集群节点:

role-ganesha_rgw/cluster/NODE1.sls

role-ganesha_cfs/cluster/NODE1.sls

将 NODE1 和 NODE2 分别替换为要将角色指定给的节点的名称。

10. 执行 DeepSea 阶段 0 到 4。

21.3.3 支持的操作

RGW NFS 接口支持对文件及目录执行的大部分操作,但存在以下限制:

不支持包含符号链接的链接。

不支持 NFS 访问控制列表 (ACL)。支持 Unix 用户及组所有权和权限。

目录不可移动或重命名。您可在目录之间移动文件。

仅支持完整的顺序写入 I/O。因此,它会强制上载写入操作。许多执行非顺序存储的典型

I/O 操作(如就地编辑文件)必定会失败。有一些归档实用程序(例如,GNU tar 的某

些版本)表面上是按顺序写入,但也可能会因偶尔的非顺序存储而失败。通过 NFS 装入

时,一般可通过同步装入( -o sync 选项)强制应用的顺序 I/O 向 NFS 服务器顺序写入

数据。无法同步装入的 NFS 客户端(例如 Microsoft Windows*)将无法上载文件。

NFS RGW 仅支持对小于 4 MB 的存储块执行读写操作。

21.4 启动或重启动 NFS Ganesha要启用并启动 NFS Ganesha 服务,请运行以下命令:

root@minion > systemctl enable nfs-ganesha

root@minion > systemctl start nfs-ganesha

332 支持的操作 SES 6

Page 353: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

要重启动 NFS Ganesha,请运行以下命令:

root@minion > systemctl restart nfs-ganesha

启动或重启动 NFS Ganesha 时,NFS v4 会有 90 秒的超时宽限期。在宽限期内,会主动拒绝来

自客户端的新请求。因此,当 NFS 处于宽限状态时,客户端可能会发生请求处理速度变慢的情

况。

21.5 设置日志级别通过编辑文件 /etc/sysconfig/nfs-ganesha,可更改默认调试级别 NIV_EVENT。将

NIV_EVENT 替换为 NIV_DEBUG 或 NIV_FULL_DEBUG。提高日志详细程度可能会在日志文

件中产生大量数据。

OPTIONS="-L /var/log/ganesha/ganesha.log -f /etc/ganesha/ganesha.conf -N

NIV_EVENT"

更改日志级别时,需要重启动服务。

21.6 校验导出的 NFS 共享使用 NFS v3 时,可以在 NFS Ganesha 服务器节点上校验是否导出了 NFS 共享:

root@minion > showmount -e

/ (everything)

21.7 装入导出的 NFS 共享要在客户端主机上装入导出的 NFS 共享(根据第 21.2 节 “配置”中的配置),请运行以下命令:

root # mount -t nfs -o rw,noatime,sync \

nfs_ganesha_server_hostname:/ /path/to/local/mountpoint

333 设置日志级别 SES 6

Page 354: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

IV 使用 GUI 工具管理集群

22 Ceph Dashboard 335

Page 355: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

22 Ceph Dashboard

Ceph Dashboard 是一个扩展模块,它在 Ceph Manager 中增加了基于 Web 的内置监视和管理

应用(有关 Ceph Manager 的更多详细信息,请参见《部署指南》, 第 1 章 “SUSE Enterprise

Storage 6 和 Ceph”, 第 1.2.3 节 “Ceph 节点和守护进程”)。现在,您不必了解复杂的 Ceph 相

关命令,便可轻松管理和监视您的 Ceph 集群。您可以使用 Ceph Dashboard 的直观 Web 界

面,也可以使用其内置 REST API。

在部署过程中的 DeepSea 阶段 3,系统会自动启用和配置 Ceph Dashboard(请参见《部署指

南》, 第 5 章 “使用 DeepSea/Salt 部署”, 第 5.3 节 “集群部署”)。在具有多个 Ceph Manager

实例的 Ceph 集群中,只有当前活跃的 Ceph Manager 守护进程上运行的仪表盘会处理传入请

求。系统会将访问任何其他当前待机 Ceph Manager 实例上的仪表盘 TCP 端口的请求进行 HTTP

重定向 (303),转到当前活跃 Ceph Manager 的仪表盘 URL。如此,无论您将浏览器指向任何

Ceph Manager 实例,都可以访问该仪表盘。在利用防火墙保障访问安全或规划 HA 设置时,请

考虑此种行为。

22.1 仪表盘的 Web 用户界面

22.1.1 登录

要登录仪表盘 Web 应用,请将浏览器指向其 URL,包括端口号。您可以通过运行以下命令找到

其网址

cephadm@adm > ceph mgr services | grep dashboard

"dashboard": "https://ses-dash-node.example.com:8443/",

335 仪表盘的 Web 用户界面 SES 6

Page 356: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.1︰ CEPH DASHBOARD 登录屏幕

您需要有用户帐户才能登录仪表盘 Web 应用。DeepSea 会为您创建一个拥有管理员权限的默认

用户“admin”。如果您决定使用默认的“admin”用户登录,请通过运行以下命令获取相应密码

root@master # salt-call grains.get dashboard_creds

提示:自定义用户帐户如果您不想使用默认“admin”帐户访问 Ceph Dashboard,请创建拥有管理员权限的自定

义用户帐户。有关更多详细信息,请参见 第 22.10 节 “在命令行上管理用户和角色”。

仪表盘用户界面在图形上分为以下几块:实用程序菜单、主菜单和主内容窗格。

336 登录 SES 6

Page 357: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.2︰ CEPH DASHBOARD 首页

22.1.2 实用程序菜单

实用程序菜单位于屏幕右上方。该菜单包含与仪表盘更为相关(相较于 Ceph 集群)的常规任

务。点击相应项目可以访问以下主题:

更改仪表盘用户界面的语言。您可以选择捷克语、英语、德语、西班牙语、法语、葡萄牙

语、中文或印度尼西亚语。

显示正在后台运行的 Ceph 相关任务的列表。

查看并清除最近的仪表盘通知。

显示提供仪表盘相关信息、其完整文档及 REST API 概述的链接列表。

管理仪表盘的用户和用户角色。有关更详细的命令行说明,请参见第 22.10 节 “在命令行

上管理用户和角色”。

从仪表盘注销。

337 实用程序菜单 SES 6

Page 358: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

22.1.3 主菜单

仪表盘的主菜单位于屏幕的左上方。它涵盖下列主题:

仪表盘

返回 Ceph Dashboard 首页。

集群

查看有关集群的总体配置、CRUSH 索引、集群的主机、Ceph OSD、Ceph Monitor 及日志

文件内容的详细信息。

存储池

查看并管理集群存储池。

设备块

查看并管理块设备及其 iSCSI 导出项。

NFS

查看并管理 NFS Ganesha 部署。

文件系统

查看并管理 CephFS。

对象网关

查看并管理对象网关的守护进程、用户和存储桶。

22.1.4 内容窗格

内容窗格占据仪表盘屏幕的主要部分。仪表盘首页上显示了很多有用的控件,为您提供集群当

前状态、容量及性能的概要信息。

22.1.5 常用 Web UI 功能

在 Ceph Dashboard 中,您经常会用到列表 — 例如,存储池列表、OSD 节点列表或 RBD 设备

列表。所有列表默认每 5 秒会自动刷新一次。下列常用控件可帮助您管理或调整这些列表:

点击 可手动触发列表的刷新。

338 主菜单 SES 6

Page 359: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

点击 可显示或隐藏表格的相应列。

点击 并选择要在一页上显示多少行。

在 中点击并键入要搜索的字符串以过滤行。

如果列表跨多页显示,可使用 来更改当前显示的页。

22.1.6 仪表盘控件

每个仪表盘控件显示与运行中 Ceph 集群特定方面相关的特定状态信息。有些控件是活跃链接,

点击它们会将您重定向到其所代表主题的相关详细页面。

提示:鼠标悬停时显示更多详细信息有些图形控件会在您将鼠标移到其上时显示更多详细信息。

22.1.6.1 状态控件

状态控件为您提供有关集群当前状态的简要概览。

图 22.3︰ 状态控件

集群状态

显示有关集群健康状况的基本信息。

Monitor

显示运行中 Monitor 数量及其仲裁。

OSD

显示 OSD 的总数及处于“up”和“in”状态的 OSD 数量。

339 仪表盘控件 SES 6

Page 360: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

Manager 守护进程

显示处于活跃和待机状态的 Ceph Manager 守护进程的数量。

主机

显示集群节点的总数。

对象网关

显示运行中对象网关的数量。

元数据服务器

显示元数据服务器的数量。

iSCSI 网关

显示配置的 iSCSI 网关的数量。

22.1.6.2 性能控件

性能控件提供 Ceph 客户端的基本性能数据。

图 22.4︰ 性能控件

客户端 IOPS

客户端吞吐量

客户端读/写

恢复吞吐量

洗刷

340 仪表盘控件 SES 6

Page 361: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

22.1.6.3 容量控件

容量控件显示有关存储容量的简要信息。

图 22.5︰ 容量控件

存储池

显示集群中存储池的数量。

基本容量

显示已用与可用基本存储容量的比例。

对象

显示集群中存储的数据对象数量。

每个 OSD 的 PG 数

显示每个 OSD 的归置组数量。

PG 状态

显示按照状态分组的归置组图表。

22.2 管理仪表盘用户和角色有关在命令行上通过 Ceph 命令执行仪表盘用户管理的说明,请参见第 22.10 节 “在命令行上管

理用户和角色”。

本节说明如何使用仪表盘 Web 用户界面来管理用户帐户。

341 管理仪表盘用户和角色 SES 6

Page 362: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

22.2.1 列出用户

点击实用程序菜单中的 ,然后选择用户管理。

该列表包含每个用户的用户名、全名、电子邮件及为其指定的角色列表。

图 22.6︰ 用户管理

22.2.2 添加新用户

点击表标题左上方的添加可添加新用户。输入其用户名、密码、全名(可选)和电子邮件。

图 22.7︰ 添加用户

点击铅笔小图标可为用户指定预定义角色。点击创建用户进行确认。

22.2.3 编辑用户

点击用户表中对应的行,然后选择编辑可编辑用户的详细信息。点击更新用户进行确认。

342 列出用户 SES 6

Page 363: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

22.2.4 删除用户

点击用户表中对应的行,然后选择删除可删除用户帐户。激活是的,我确定复选框,然后点

击删除用户进行确认。

22.2.5 列出用户角色

点击实用程序菜单中的 ,然后选择用户管理。然后点击角色选项卡。

该列表包含每个角色的名称、描述及其是否属于系统角色。

图 22.8︰ 用户角色

22.2.6 添加自定义角色

点击表标题左上方的添加可添加新的自定义角色。输入其名称、描述并设置针对各主题的必需

权限。

提示:清除自定义角色如果您创建了自定义用户角色,并打算以后使用 ceph.purge 运行程序删除 Ceph 集

群,则需要先清除自定义角色。有关详细信息,请参见第 2.16 节 “删除整个 Ceph 集

群”。

343 删除用户 SES 6

Page 364: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.9︰ 添加角色

提示:多项目激活通过激活主题名称前的复选框,您可以激活针对该主题的所有权限。通过激活全选复选

框,您可以激活针对所有主题的所有权限。

点击创建角色进行确认。

344 添加自定义角色 SES 6

Page 365: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

22.2.7 编辑自定义角色

点击自定义角色表中对应的行,然后选择表标题左上方的编辑,即可编辑自定义角色的描述和

权限。点击更新角色进行确认。

22.2.8 删除自定义角色

点击角色表中对应的行,然后选择删除可删除角色。激活是的,我确定复选框,然后点击删除

角色进行确认。

22.3 查看集群内部集群菜单项可让您查看有关 Ceph 集群主机、OSD、MON、CRUSH 索引和日志文件内容的详细

信息。

22.3.1 集群节点

点击集群 主机可查看集群节点列表。

图 22.10︰ HOSTS(主机)

点击主机名列中的节点名称可查看该节点的性能详细信息。

服务列中会列出每个相关节点上正在运行的所有守护进程。点击守护进程名称可查看其详细配

置。

345 编辑自定义角色 SES 6

Page 366: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

22.3.2 Ceph Monitor

点击集群 Monitor 可查看具有正在运行的 Ceph Monitor 的集群节点列表。该列表包含每个

Monitor 的排位号、外部 IP 地址和活动会话的数量。

列表分为两个表:一个表显示属于仲裁成员的 Ceph Monitor,另一个表显示不属于仲裁成员的

Ceph Monitor。

点击名称列中的节点名称可查看相关的 Ceph Monitor 配置。

状态表显示有关运行中 Ceph Monitor 的一般统计数据。

图 22.11︰ CEPH MONITOR

22.3.3 Ceph OSD

点击集群 OSD 可查看具有正在运行的 OSD 守护进程/磁盘的节点列表。该列表包含每个节点的

名称、状态、归置组数量、大小、使用率、不同时间的读/写图表和每秒读/写操作比率。

346 Ceph Monitor SES 6

Page 367: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.12︰ CEPH OSD

点击表标题中的设置集群范围的标志,会弹出一个窗口,其中会列出适用于整个集群的标志。

您可以激活或停用单个标志,然后点击提交进行确认。

图 22.13︰ OSD 标志

347 Ceph OSD SES 6

Page 368: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

点击表标题中的设置集群范围的恢复优先级,会打开一个弹出窗口,其中会列出适用于整个集

群的 OSD 恢复优先级。您可以激活首选的优先级配置,并对下面的各个值进行微调。点击提

交进行确认。

图 22.14︰ OSD 恢复优先级

点击主机列中的节点名称,可查看含有 OSD 设置和性能详细信息的扩展表。您可以在数个选项

卡之间切换,查看属性、元数据、性能计数器列表以及读/写操作次数的图形直方图。

348 Ceph OSD SES 6

Page 369: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.15︰ OSD 详细信息

提示:在 OSD 上执行特定任务点击 OSD 节点名称后,表中该节点对应的行的颜色会发生细微变化,这表示您现在可以

在该节点上执行任务了。点击表标题左上方的向下箭头,然后选择要执行的任务,例如深

层洗刷。为任务输入所需的值(可选),然后确认在节点上运行该任务。

22.3.4 集群配置

点击集群 配置可查看 Ceph 集群配置选项的完整列表。该列表包含选项的名称、其简短描述,

以及选项的当前值和默认值。

349 集群配置 SES 6

Page 370: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.16︰ 集群配置

点击特定选项行可高亮显示和查看该选项的详细信息,例如其值类型、允许的最大和最小值、

是否可在运行时更新等等。

高亮显示特定选项后,您可以通过点击表标题左上方的编辑按钮来编辑它的值。点击保存确认

更改。

22.3.5 CRUSH 索引

点击集群 CRUSH 索引可查看集群的 CRUSH 索引。有关 CRUSH 索引的更多一般信息,请参

见第 9.5 节 “CRUSH 索引操作”。

点击根、节点或单个 OSD 可查看更多详细信息,例如 CRUSH 权重、索引树的深度、OSD 的设

备类型等等。

350 CRUSH 索引 SES 6

Page 371: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.17︰ CRUSH 索引

22.3.6 Manager 扩展模块

点击集群 Manager 扩展模块可查看可用 Ceph Manager 扩展模块的列表。每行包含扩展模块

名称以及该扩展模块当前启用与否的信息。

图 22.18︰ MANAGER 扩展模块

高亮显示特定扩展模块后,您可以在下面的详情表中查看其详细设置。点击表标题左上方的编

辑按钮可进行编辑。点击更新确认更改。

351 Manager 扩展模块 SES 6

Page 372: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

22.3.7 日志

点击集群 日志可查看集群最近日志项的列表。每行包含一个时戳、日志项的类型及自身所记录

的讯息。

点击审计日志选项卡可查看审计子系统的日志项。有关启用或禁用审计的命令,请参

见第 22.10.4 节 “审计”。

图 22.19︰ 日志

22.4 管理存储池

提示:存储池的更多信息有关 Ceph 存储池的更多一般信息,请参见第 11 章 “管理存储池”。有关纠删码存储池特

定的信息,请参见第 13 章 “纠删码存储池”。

要列出所有可用的存储池,请点击主菜单中的 Pools(存储池)。

该列表显示每个存储池的名称、类型、相关应用、归置组状态、副本个数、纠删码配置、使用

率以及读/写统计数据。

352 日志 SES 6

Page 373: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.20︰ 存储池列表

要查看有关存储池的更多详细信息,请激活表中对应的行。

22.4.1 添加新存储池

要添加新存储池,请点击存储池表左上方的添加。您可以在存储池表单中输入存储池的名称、

类型、归置组数量及其他信息,例如存储池的应用、压缩模式和算法。存储池表单会自行预先

计算最适合此特定存储池的归置组数量。计算以集群中的 OSD 数量和选定存储池类型及其特

定设置为依据。如果手动设置了归置组数量,计算出的数量会替换设置的数量。点击创建存储

池进行确认。

353 添加新存储池 SES 6

Page 374: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.21︰ 添加新存储池

22.4.2 删除存储池

要删除某个存储池,请点击表中对应的行,然后点击存储池表左上方的删除。

22.4.3 编辑存储池的选项

要编辑某个存储池的选项,请点击表中对应的行,然后选择存储池表左上方的编辑。

您可以更改存储池的名称、增加归置组的数量、更改存储池的应用列表和压缩设置。点击编辑

存储池进行确认。

22.5 管理 RADOS 块设备要列出所有可用的 RADOS 块设备 (RBD),请点击主菜单中的块设备 映像。

354 删除存储池 SES 6

Page 375: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

该列表显示有关设备的简要信息,例如设备的名称、相关存储池名称、设备大小、设备上对象

的数量和大小。

图 22.22︰ RBD 映像列表

22.5.1 查看有关 RBD 的详细信息

要查看某个设备的更多详细信息,请点击表中对应的行:

图 22.23︰ RBD 详细信息

22.5.2 查看 RBD 的配置

要查看某个设备的详细配置,请点击表中对应的行,然后点击下方表中的配置选项卡:

355 查看有关 RBD 的详细信息 SES 6

Page 376: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.24︰ RBD 配置

22.5.3 创建 RBD

要添加新设备,请点击表标题左上方的添加,然后在创建 RBD 屏幕上执行以下操作:

356 创建 RBD SES 6

Page 377: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.25︰ 添加新的 RBD

1. 输入新设备的名称。有关命名限制,请参见《部署指南》, 第 2 章 “硬件要求和建议”,

第 2.10 节 “命名限制”。

357 创建 RBD SES 6

Page 378: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

2. 选择要在其中创建新 RBD 设备且指定了“rbd”应用的存储池。

3. 指定新设备的大小。

4. 为设备指定其他选项。要微调设备参数,请点击高级设置,然后输入对象大小、条带单元

或条带个数的值。要输入服务质量 (QoS) 限制,请点击服务质量 (QoS),然后输入限制。

5. 点击创建 RBD 进行确认。

22.5.4 删除 RBD

要删除某个设备,请点击表中对应的行,然后选择表标题左上方的删除 点击删除 RBD 确认删

除。

提示:将 RBD 移至回收站删除 RBD 的操作无法撤消。如果您选择将设备移至回收站,那么稍后还可以将其恢复,

只需在主表的回收站选项卡上选择该设备,然后点击表标题左上方的恢复。

22.5.5 RADOS 块设备快照

要创建 RADOS 块设备快照,请点击表中设备对应的行,然后在主表下的快照选项卡中,点击表

标题左上方的创建。输入快照的名称,然后点击创建快照进行确认。

选择快照后,您可以在设备上执行其他操作,例如重命名、保护、克隆、复制或删除。回滚可

根据当前快照恢复设备的状态。

图 22.26︰ RBD 快照

358 删除 RBD SES 6

Page 379: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

22.5.6 管理 iSCSI 网关

提示:iSCSI 网关的更多信息有关 iSCSI 网关的更多一般信息,请参见《部署指南》, 第 10 章 “安装 iSCSI 网

关”和第 18 章 “Ceph iSCSI 网关”。

要列出所有可用网关和映射的映像,请点击主菜单中的块设备 iSCSI。概述选项卡即会打开,

列出当前配置的 iSCSI 网关和映射的 RBD 映像。

网关表列出每个网关的状态、iSCSI 目标数量及会话数量。映像表列出每个映射的映像的名称、

相关存储池名称、后备存储类型及其他统计数据详细信息。

目标选项卡列出当前配置的 iSCSI 目标。

图 22.27︰ ISCSI 目标列表

要查看有关某个目标的更多详细信息,请点击表中对应的行。一个树状结构纲要即会打开,列

出磁盘、端口、授权人和组。点击某一项可将其展开并查看详细内容,右侧的表中也可能会显

示其相关配置。

359 管理 iSCSI 网关 SES 6

Page 380: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.28︰ ISCSI 目标详细信息

22.5.6.1 添加 iSCSI 目标

要添加新的 iSCSI 目标,请点击目标表左上方的添加,并输入所需信息。

360 管理 iSCSI 网关 SES 6

Page 381: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.29︰ 添加新目标

1. 输入新网关的目标地址。

2. 点击添加端口并从列表中选择一个或多个 iSCSI 门户。

3. 点击添加映像并为网关选择一个或多个 RBD 映像。

4. 如果您需要使用身份验证才能访问网关,请选中 Authentication(身份验证)复选框并输

入身份凭证。选中相互身份验证和发现身份验证之后,您可看到更多高级身份验证选项。

5. 点击创建目标进行确认。

22.5.6.2 编辑 iSCSI 目标

要编辑某个现有 iSCSI 目标,请点击目标表中对应的行,然后点击表左上方的编辑。

然后,您便可以修改 iSCSI 目标、添加或删除端口,以及添加或删除相关 RBD 映像。您还可以

调整网关的身份验证信息。

361 管理 iSCSI 网关 SES 6

Page 382: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

22.5.6.3 删除 iSCSI 目标

要删除某个 iSCSI 目标,请点击表中对应的行,然后选择网关表左上方的删除。激活是的,我确

定,然后点击删除 iSCSI 进行确认。

22.5.7 RBD 服务质量 (QoS)

提示:更多信息有关 RBD QoS 配置选项的更多一般信息和说明,请参见第 12.6 节 “QoS 设置”。

QoS 选项可在不同级别配置。

全局

基于每个存储池

基于每个映像

全局配置位于列表顶部,将用于所有新创建的 RBD 映像,以及不会覆盖存储池或 RBD 映像层级

相应值的映像。全局指定的选项值可能会被基于每个存储池或映像设置的值覆盖。对存储池指

定的选项将适用于该存储池的所有 RBD 映像,除非被对映像设置的配置选项所覆盖。对映像指

定的选项将覆盖对存储池指定的选项以及全局指定的选项。

因此可以如此操作:全局定义默认值,对默认值进行调整以适合特定存储池的所有 RBD 映像,

然后覆盖单个 RBD 映像的存储池配置。

22.5.7.1 全局配置选项

要全局配置 RBD 选项,请在主菜单中选择集群 配置项。

要列出所有可用的全局配置选项,请点击级别 高级设置。然后在搜索字段中过滤“rbd_qos”,

以过滤表的结果。QoS 的所有可用配置选项即会列出。要更改某个值,请点击表中对应的

行,然后选择表左上方的编辑。编辑对话框包含 6 个不同的字段供您指定值。在 mgr 文本框

中,RBD 配置选项值是必填的。请注意,此对话框与其他对话框不同,不允许您使用方便的单

位指定值。您只能使用字节或 IOPS 单位设置这些值,具体取决于您要编辑的选项。

362 RBD 服务质量 (QoS) SES 6

Page 383: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

22.5.7.2 对新存储池配置选项

要创建新存储池并对其配置 RBD 配置选项,请点击存储池 创建。选择副本作为存储池类型。

然后,您需要为存储池添加 rbd 应用标记,这样才能配置 RBD QoS 选项。

注意对于纠删码存储池是无法配置 RBD QoS 配置选项的。要为纠删码存储池配置 RBD QoS

选项,您需要编辑 RBD 映像的副本元数据池。该配置随后将应用于该映像的纠删码数据

池。

22.5.7.3 对现有存储池配置选项

要对某个现有存储池配置 RBD QoS 选项,请点击存储池,然后点击表中该存储池对应的行,并

选择表左上方的编辑。

对话框中应该就会显示 RBD 配置部分,下面是服务质量 (QoS) 部分。

注意如果 RBD 配置和服务质量 (QoS) 部分均未显示,则可能是因为您正在编辑无法用于设置

RBD 配置选项的纠删码池,或该存储池未配置为供 RBD 映像使用。在下一个案例中,将

为存储池指定 rbd 应用标记,相应的配置部分将会显示。

22.5.7.4 配置选项

点击服务质量 + 展开配置选项。所有可用选项的列表即会显示。文本框中已显示配置选项的单

位。对于任何每秒字节数 (BPS) 选项,您可以选择使用“1M”或“5G”之类的缩写。系统会自动将其

转换为对应的“1 MB/s”和“5 GB/s”。

点击每个文本框右侧的重设置按钮,将删除对该存储池设置的所有值。此操作不会删除全局配

置或对 RBD 映像配置的选项的配置值。

363 RBD 服务质量 (QoS) SES 6

Page 384: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

22.5.7.5 使用新 RBD 映像创建 RBD QoS 选项

要创建 RBD 映像并对该映像设置 RBD QoS 选项,请选择设备块 映像,然后点击创建。点击高

级设置可展开高级配置部分。点击服务质量可打开所有可用配置选项。

22.5.7.6 编辑现有映像的 RBD QoS 选项

要编辑现有映像的 RBD QoS 选项,请选择块设备 映像,然后点击表中该存储池对应的行,最

后点击编辑。编辑对话框随即显示。点击高级设置可展开高级配置部分。点击服务质量可打开

所有可用配置选项。

22.5.7.7 在复制或克隆映像时更改配置选项

如果克隆或复制了 RBD 映像,对该特定映像设置的值默认也将被复制。如果您想在复制或克隆

期间更改这些值,可通过在复制/克隆对话框中指定更新的配置值来进行更改,此过程与创建或

编辑 RBD 映像时的方式相同。执行此操作只能设置(或重设置)所复制或克隆的 RBD 映像的

值,无法更改来源 RBD 映像配置,也无法更改全局配置。

如果您选择在复制/克隆时重设置选项值,系统将不会对该映像设置该选项的值。这意味着系统

将使用为父存储池指定的该选项的任何值(如果为父存储池配置了相应值)。如果没有为父存

储池配置相应值,则将使用全局默认值。

22.5.8 RBD 镜像

提示:一般信息有关 RADOS 块设备镜像的一般信息和命令行方法,请参见第 12.4 节 “镜像”。

您可以使用 Ceph Dashboard 在两个或更多集群之间配置 RBD 映像复制。

22.5.8.1 主集群和次集群

主集群是用于创建包含映像的原始存储池的集群。次集群是用于从主集群复制存储池/映像的集

群。

364 RBD 镜像 SES 6

Page 385: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

注意:相对命名在复制上下文中,主与次这两个术语有可能是相对的,因为相较于集群来说,它们与单个

存储池更为相关。例如,在双向复制中,可将一个存储池从主集群镜像到次集群,与此同

时,也可以将另一个存储池从次集群镜像到主集群。

22.5.8.2 复制模式

数据复制有两种模式:

使用存储池模式,您可以复制存储池中的所有 RBD 映像。

使用映像模式,您可以仅激活存储池中特定映像的镜像。

22.5.8.3 配置 rbd-mirror 守护进程

rbd-mirror 守护进程负责执行实际的集群数据复制。要安装、配置以及运行该守护进程,请

执行以下步骤:

1. 需要在次集群管理节点以外的其他某个节点上运行 rbd-mirror 守护进程。系统默认不

会安装该守护进程,因此需手动安装:

root@minion > zypper install rbd-mirror

2. 在主集群上,为 rbd-mirror 守护进程创建唯一的 Ceph 用户 ID。在此示例中,我们使

用“uid1”作为用户 ID:

cephadm@adm > ceph auth get-or-create client.rbd-mirror.uid1 \

mon 'profile rbd-mirror' osd 'profile rbd'

[client.rbd-mirror.uid1]

key = AQBbDJddZKLBIxAAdsmSCCjXoKwzGkGmCpUQ9g==

3. 在您先前安装了 rbd-mirror 安装包的次集群节点上,创建该 Ceph 用户,并将输出保

存到密钥环:

root@minion > ceph auth get-or-create client.rbd-mirror.uid1 \

365 RBD 镜像 SES 6

Page 386: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

mon 'profile rbd-mirror' osd 'profile rbd' \

> /etc/ceph/ceph.client.rbd-mirror.uid1.keyring

4. 在同一节点上,启用并运行 rbd-mirror 服务:

root@minion > systemctl enable [email protected]

root@minion > systemctl start [email protected]

root@minion > systemctl status [email protected]

[email protected] - Ceph rbd mirror daemon

Loaded: loaded (/usr/lib/systemd/system/[email protected];

enabled; vendor preset: disabled)

Active: active (running) since Fri 2019-10-04 07:48:53 EDT; 2 days ago

Main PID: 212434 (rbd-mirror)

Tasks: 47

CGroup: /system.slice/system-ceph\x2drbd\x2dmirror.slice/ceph-rbd-

[email protected]

└─212434 /usr/bin/rbd-mirror -f --cluster ceph --id rbd-

mirror.test --setuser ceph --setgroup ceph

Oct 04 07:48:53 doc-ses6min4 systemd[1]: Started Ceph rbd mirror daemon.

5. 在次集群的 Ceph Dashboard 上,导航到块设备 镜像。守护进程表的左侧会显示处于活

跃状态的运行中 rbd-mirror 守护进程及其健康状况。

图 22.30︰ 正在运行的 rbd-mirror 守护进程

22.5.8.4 在 Ceph Dashboard 中配置存储池复制

rbd-mirror 守护进程需要拥有主集群的访问权限,才能镜像 RBD 映像。因此,您需要在主

集群上创建同伴 Ceph 用户帐户,并告知次集群其密钥环信息:

1. 在主集群上,创建将用于数据复制的新“client.rbd-mirror-peer”用户:

366 RBD 镜像 SES 6

Page 387: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > ceph auth get-or-create client.rbd-mirror-peer \

mon 'profile rbd' osd 'profile rbd'

[client.rbd-mirror-peer]

key = AQBbDJddZKLBIxAAdsmSCCjXoKwzGkGmCpUQ9g==

2. 在主和次两个集群上,创建名称相同的存储池并为其指定“rbd”应用。有关创建新存储池的

更多详细信息,请参见第 22.4.1 节 “添加新存储池”。

图 22.31︰ 创建具有 RBD 应用的存储池

3. 在主和次两个集群的仪表盘上,导航到块设备 镜像。在存储池表右侧点击要复制的存储

池的名称,然后点击编辑模式,并选择复制模式。在此示例中,我们将使用存储池复制模

式,也就是说将复制给定存储池中的所有映像。点击更新进行确认。

367 RBD 镜像 SES 6

Page 388: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.32︰ 配置复制模式

重要:主集群上的错误或警告更新复制模式后,右侧相应的列中会显示错误或警告标志。这是因为尚未为存储池

指定用于复制的同伴用户。对于主集群,请省略此标志,因为我们只需为次集群指

定同伴用户。

4. 在次集群的仪表盘上,导航到块设备 镜像。点击要镜像的存储池名称并选择添加同伴,

以便将“client.rbd-mirror-peer”用户密钥环注册到该存储池中。提供主集群的详细信息:

368 RBD 镜像 SES 6

Page 389: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.33︰ 添加同伴身份凭证

集群名称

用于识别主集群的任意唯一字符串,如“primary”。该集群名称不得与实际环境中次

集群的名称相同。

CephX ID

您创建作为镜像同伴的 Ceph 用户 ID。此示例中为“rbd-mirror-peer”。

Monitor 地址

主集群的 Ceph Monitor 节点的 IP 地址/主机名称逗号分隔列表。

CephX 密钥

与同伴用户 ID 相关的密钥。您可以通过在主集群上运行以下示例命令来获得该密

钥:

cephadm@adm > ceph auth print_key client.rbd-mirror-peer

点击提交进行确认。

369 RBD 镜像 SES 6

Page 390: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.34︰ 副本存储池列表

22.5.8.5 确认 RBD 映像复制是否有效

如果 rbd-mirror 守护进程正在运行,在 Ceph Dashboard 上配置 RBD 映像复制后,就需要

确认复制实际上是否有效:

1. 在主集群的 Ceph Dashboard 上创建 RBD 映像,将您已创建用于复制目的的存储池设为

其父存储池。为映像启用互斥锁和日志特性。有关如何创建 RBD 映像的详细信息,请参

见第 22.5.3 节 “创建 RBD”。

370 RBD 镜像 SES 6

Page 391: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.35︰ 新 RBD 映像

2. 创建要复制的映像后,打开次集群的 Ceph Dashboard,并导航到块设备 镜像。右侧

的存储池表将在 # 远程所示数量的映像中反映该变化,并会同步 # 本地所示数量的映像。

371 RBD 镜像 SES 6

Page 392: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.36︰ 同步的新 RBD 映像

提示:复制进度页面底部的映像表会显示 RBD 映像的复制状态。问题选项卡包含可能的问题,正在

同步选项卡显示映像复制的进度,已就绪选项卡列出所有已成功复制的映像。

图 22.37︰ RBD 映像的复制状态

3. 在主集群上,将数据写入 RBD 映像。在次集群的 Ceph Dashboard 上,导航到块设备 映

像,监视相应映像大小的增长是否与主集群上写入的数据一致。

22.6 管理 NFS Ganesha

提示:NFS Ganesha 的更多信息有关 NFS Ganesha 的更多一般信息,请参见第 21 章 “NFS Ganesha:通过 NFS 导出

Ceph 数据”。

372 管理 NFS Ganesha SES 6

Page 393: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

要列出所有可用的 NFS 导出项,请点击主菜单中的 NFS。

该列表会显示每个导出项的目录、守护进程主机名、存储后端类型以及访问类型。

图 22.38︰ NFS 导出项列表

要查看某个 NFS 导出项的更多详细信息,请点击表中对应的行。

图 22.39︰ NFS 导出项详细信息

22.6.1 添加 NFS 导出项

要添加新的 NFS 导出项,请点击导出项表格左上方的添加并输入所需的信息。

373 添加 NFS 导出项 SES 6

Page 394: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.40︰ 添加新的 NFS 导出项

1. 选择一个或多个将运行导出项的 NFS Ganesha 守护进程。

2. 选择存储后端 — CephFS 或对象网关。

3. 选择用户 ID 及其他后端相关选项。

4. 输入 NFS 导出项的目录路径。如果该目录在服务器上不存在,系统将创建该目录。

5. 指定其他 NFS 相关选项,例如支持的 NFS 协议版本、伪、访问类型、匿名访问或传输协

议。

6. 如果您需要设置限制,仅允许特定的客户端访问,请点击添加客户端并添加它们的 IP 地

址以及访问类型和匿名访问选项。

374 添加 NFS 导出项 SES 6

Page 395: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

7. 点击提交进行确认。

22.6.2 删除 NFS 导出项

要删除某个导出项,请点击表中对应的行,然后选择导出项表左上方的删除。

22.6.3 编辑 NFS 导出项

要编辑某个现有导出项,请点击表中对应的行,然后点击导出项表左上方的编辑。

然后,您便可以调整 NFS 导出项的所有详细信息。

375 删除 NFS 导出项 SES 6

Page 396: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.41︰ 编辑 NFS 导出项

22.7 管理 Ceph 文件系统

提示:更多信息要查看有关 CephFS 的详细信息,请参见第 19 章 “集群文件系统”。

376 管理 Ceph 文件系统 SES 6

Page 397: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

22.7.1 查看 CephFS 概览

在主菜单中点击文件系统可查看配置的文件系统的概览。主表会显示每个文件系统的名称、创

建日期,以及文件系统是否启用。

点击表中某个文件系统对应的行,可查看其排位以及添加到其中的存储池的详细信息。

图 22.42︰ CEPHFS 详细信息

您可在屏幕底部查看实时收集的相关 MDS Inode 及客户端请求数量统计数字。

22.8 管理对象网关

提示:对象网关的更多信息有关对象网关的更多一般信息,请参见第 17 章 “Ceph 对象网关”。

377 查看 CephFS 概览 SES 6

Page 398: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

22.8.1 查看对象网关

要查看配置的对象网关列表,请点击对象网关 守护进程。该列表包含网关的 ID、运行网关守

护进程的集群节点的主机名以及网关的版本号。

点击表中某个网关对应的行可查看该网关的详细信息。性能计数器选项卡显示有关读/写操作及

缓存统计数据的详细信息。

图 22.43︰ 网关的详细信息

22.8.2 管理对象网关用户

点击对象网关 用户可查看现有对象网关用户的列表。

点击表中某个用户对应的行可查看该用户帐户的详细信息,例如状态信息或用户配额及存储桶

配额详细信息。

378 查看对象网关 SES 6

Page 399: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.44︰ 网关用户

22.8.2.1 添加新网关用户

要添加新网关用户,请点击表标题左上方的添加。填写其身份凭证、有关 S3 密钥及用户/存储

桶配额的详细信息,然后点击添加进行确认。

379 管理对象网关用户 SES 6

Page 400: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.45︰ 添加新网关用户

22.8.2.2 删除网关用户

要删除某个网关用户,请点击表中用户对应的行,然后选择表标题左上方的删除。激活是的,

我确定复选框,然后点击删除用户进行确认。

22.8.2.3 编辑网关用户详细信息

要更改网关用户详细信息,请点击表中用户对应的行,然后选择表标题左上方的编辑。

修改基本或附加用户信息,例如其用户权限、密钥、子用户和配额信息。点击更新进行确认。

380 管理对象网关用户 SES 6

Page 401: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

密钥选项卡包含只读的网关用户列表以及这些用户的访问密钥和秘密密钥。要查看这些密钥,

请点击列表中的用户名,然后选择表标题左上方的显示。在 S3 密钥对话框中,点击眼睛图标可

显示密钥,点击剪贴板图标可将相关密钥复制到剪贴板。

22.8.3 管理对象网关存储桶

对象网关 (OGW) 存储桶实现了 OpenStack Swift 容器的功能。对象网关存储桶可充当存储数据

对象的容器。

点击对象网关 存储桶可查看 OGW 存储桶列表。

22.8.3.1 添加新的存储桶

要添加新 OGW 存储桶,请点击表标题左上方的添加。输入存储桶的名称,并选择其所有者。点

击添加进行确认。

22.8.3.2 查看存储桶详细信息

要查看某个 OGW 存储桶的详细信息,请点击表中对应的行。

381 管理对象网关存储桶 SES 6

Page 402: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

图 22.46︰ 网关存储桶详细信息

提示:存储桶配额您可以在详情表下方查看存储桶配额设置的详细信息。

22.8.3.3 更新存储桶的所有者

点击表中某个存储桶对应的行,然后选择表标题左上方的编辑。

更新存储桶的所有者,然后点击更新进行确认。

382 管理对象网关存储桶 SES 6

Page 403: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

22.8.3.4 删除存储桶

要删除某个 OGW 存储桶,请点击表中对应的行,然后选择表标题左上方的删除。激活是的,我

确定复选框,然后点击删除存储桶进行确认。

22.9 手动配置本节为更喜欢在命令行上手动配置仪表盘设置的用户提供了较深入的信息。

22.9.1 TLS/SSL 支持

所有连至仪表盘的 HTTP 连接默认都使用 SSL/TLS 来保障安全。安全连接需要 SSL 证书。您可以

使用自我签名证书,也可以生成证书并让知名证书颁发机构 (CA) 对其签名。

提示:禁用 SSL您可能会出于某种原因需要禁用 SSL 支持。例如,如果仪表盘是在不支持 SSL 的代理之

后运行。

禁用 SSL 要慎重,因为禁用 SSL 后,用户名和密码将以未加密的形式发送到仪表盘。

要禁用 SSL,请运行以下命令:

cephadm@adm > ceph config set mgr mgr/dashboard/ssl false

提示:重启动 Ceph Manager 进程更改 SSL 证书和密钥后,您需要手动重启动 Ceph Manager 进程。您可以通过运行以下

命令

cephadm@adm > ceph mgr failACTIVE-MANAGER-NAME

或禁用后再重新启用仪表盘扩展模块的方式来执行此操作,如此还会触发 Manager 的自

我重新生成:

cephadm@adm > ceph mgr module disable dashboard

383 手动配置 SES 6

Page 404: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > ceph mgr module enable dashboard

22.9.1.1 自我签名证书

为了安全通讯而创建自我签名证书的过程非常简单。采用这种方式可迅速让仪表盘运行起来。

注意:Web 浏览器控诉大多数 Web 浏览器都将对自我签名证书发起控诉,并需要在建立与仪表盘的安全连接前

进行明确确认。

要生成并安装自我签名证书,请使用以下内置命令:

cephadm@adm > ceph dashboard create-self-signed-cert

22.9.1.2 CA 签名的证书

为了正确保障连至仪表盘的连接安全,以及消除 Web 浏览器对自我签名证书的控诉,我们建议

使用 CA 签名的证书。

您可以使用如下命令生成证书密钥对:

root # openssl req -new -nodes -x509 \

-subj "/O=IT/CN=ceph-mgr-dashboard" -days 3650 \

-keyout dashboard.key -out dashboard.crt -extensions v3_ca

以上命令会输出 dashboard.key 和 dashboard.crt 文件。获得 CA 签名的

dashboard.crt 文件后,请运行以下命令为所有 Ceph Manager 实例启用该证书:

cephadm@adm > ceph config-key set mgr/dashboard/crt -i dashboard.crt

cephadm@adm > ceph config-key set mgr/dashboard/key -i dashboard.key

384 TLS/SSL 支持 SES 6

Page 405: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

提示:每个 Manager 实例使用不同的证书如果您需要为每个 Ceph Manager 实例使用不同的证书,请按如下所示修改命令,在其

中指定实例的名称。将 NAME 替换为 Ceph Manager 实例的名称(通常是相关的主机

名):

cephadm@adm > ceph config-key set mgr/dashboard/NAME/crt -i dashboard.crt

cephadm@adm > ceph config-key set mgr/dashboard/NAME/key -i dashboard.key

22.9.2 主机名和端口号

Ceph Dashboard Web 应用与特定 TCP/IP 地址和 TCP 端口绑定。默认情况下,托管仪表盘的当

前活跃 Ceph Manager 会与 TCP 端口 8443 绑定(如果禁用 SSL,则与 8080 端口绑定)。

仪表盘 Web 应用默认与“::”绑定,该符号表示所有可用的 IPv4 和 IPv6 地址。您可以使用以下命

令更改 Web 应用的 IP 地址和端口号,以使它们适用于所有 Ceph Manager 实例:

cephadm@adm > ceph config set mgr mgr/dashboard/server_addr IP_ADDRESS

cephadm@adm > ceph config set mgr mgr/dashboard/server_port PORT_NUMBER

提示:分别配置 Ceph Manager 实例因为每个 ceph-mgr 守护进程都托管着各自的仪表盘实例,您可能需要分别配置每个

Ceph Manager 实例。使用以下命令(将 NAME 替换为 ceph-mgr 实例的 ID)更改特

定 Manager 实例的 IP 地址和端口号:

cephadm@adm > ceph config set mgr mgr/dashboard/NAME/

server_addr IP_ADDRESS

cephadm@adm > ceph config set mgr mgr/dashboard/NAME/

server_port PORT_NUMBER

385 主机名和端口号 SES 6

Page 406: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

提示:列出配置的端点ceph mgr services 命令会显示当前配置的所有端点。查找“dashboard”键可获取用

于访问仪表盘的 URL。

22.9.3 用户名和口令

如果您不想使用默认管理员帐户,可创建其他用户帐户并将其与至少一个角色相关联。我们提

供了一组预定义的系统角色供您使用。有关详细信息,请参见 第 22.10 节 “在命令行上管理用户

和角色”。

要创建具有管理员权限的用户,请使用以下命令:

cephadm@adm > ceph dashboard ac-user-create USER_NAME PASSWORD administrator

22.9.4 启用对象网关管理前端

要使用仪表盘的对象网关管理功能,您需要提供启用了“system”标志的用户的登录凭证:

1. 如果您没有带“system”标志的用户,请创建一个:

cephadm@adm > radosgw-admin user create --uid=USER_ID --display-

name=DISPLAY_NAME --system

记下命令输出中的“access_key”和“secret_key”密钥。

2. 您还可以使用 radosgw-admin 命令来获取现有用户的身份凭证:

cephadm@adm > radosgw-admin user info --uid=USER_ID

3. 向仪表盘提供收到的身份凭证:

cephadm@adm > ceph dashboard set-rgw-api-access-key ACCESS_KEY

cephadm@adm > ceph dashboard set-rgw-api-secret-key SECRET_KEY

请注意以下几点事项:

386 用户名和口令 SES 6

Page 407: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

对象网关的主机名和端口号是自动确定的。

如果使用多个区域,对象网关会自动确定主区域组和主区域内的主机。此方式足以满足大

部分设置的需求,但在某些情况下,您可能需要手动设置主机名和端口:

cephadm@adm > ceph dashboard set-rgw-api-host HOST

cephadm@adm > ceph dashboard set-rgw-api-port PORT

下面是您可能需要进行的额外设置:

cephadm@adm > ceph dashboard set-rgw-api-scheme SCHEME # http or https

cephadm@adm > ceph dashboard set-rgw-api-admin-resource ADMIN_RESOURCE

cephadm@adm > ceph dashboard set-rgw-api-user-id USER_ID

如果您在对象网关设置中使用的是自我签名证书(第 22.9.1 节 “TLS/SSL 支持”),请在

仪表盘中禁用证书验证,以免发生因证书是由未知 CA 签名或与主机名不符而导致连接被

拒。

cephadm@adm > ceph dashboard set-rgw-api-ssl-verify False

如果对象网关处理请求所花的时间过长,导致仪表盘超时,则可调整超时值(默认为 45

秒):

cephadm@adm > ceph dashboard set-rest-requests-timeout SECONDS

22.9.5 启用单点登录

单点登录 (SSO) 是一种允许用户以单个 ID 和密码同时登录多个应用的访问控制方法。

Ceph Dashboard 支持通过 SAML 2.0 协议对用户进行外部身份验证。由于授权仍由仪表盘执

行,因此您需要先创建用户帐户并将其与所需角色相关联。不过,身份验证过程可由现有身份

提供者 (IdP) 执行。

要配置单点登录,请使用以下命令:

cephadm@adm > ceph dashboard sso setup saml2 CEPH_DASHBOARD_BASE_URL \

IDP_METADATA IDP_USERNAME_ATTRIBUTE \

IDP_ENTITY_ID SP_X_509_CERT \

387 启用单点登录 SES 6

Page 408: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

SP_PRIVATE_KEY

参数:

CEPH_DASHBOARD_BASE_URL

可用于访问 Ceph Dashboard 的基本 URL(例如“https://cephdashboard.local”)。

IDP_METADATA

IdP 元数据 XML 的 URL、文件路径或内容(例如“https://myidp/metadata”)。

IDP_USERNAME_ATTRIBUTE

可选。将用于从身份验证响应中获取用户名的属性。默认为“uid”。

IDP_ENTITY_ID

可选。当 IdP 元数据上存在多个实体 ID 时,请使用该参数。

SP_X_509_CERT / SP_PRIVATE_KEY

可选。Ceph Dashboard(服务提供程序)进行签名和加密时将使用的证书的文件路径或内

容。

注意:SAML 请求SAML 请求的发出者值将采用以下格式:

CEPH_DASHBOARD_BASE_URL/auth/saml2/metadata

要显示当前 SAML 2.0 配置,请运行以下命令:

cephadm@adm > ceph dashboard sso show saml2

要禁用单点登录,请运行以下命令:

cephadm@adm > ceph dashboard sso disable

要检查是否启用了 SSO,请运行以下命令:

cephadm@adm > ceph dashboard sso status

388 启用单点登录 SES 6

Page 409: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

要启用 SSO,请运行以下命令:

cephadm@adm > ceph dashboard sso enable saml2

22.10 在命令行上管理用户和角色本节说明如何管理 Ceph Dashboard 使用的用户帐户。该工具可帮助您创建或修改用户帐户,

以及设置正确的用户角色和权限。

22.10.1 用户帐户

Ceph Dashboard 支持管理多个用户帐户。每个用户帐户包含用户名、密码(使用 bcrypt 以

加密形式存储)、可选名称和可选电子邮件地址。

用户帐户存储在 Ceph Manager 的配置数据库中,并在所有 Ceph Manager 实例之间全局共

享。

使用以下命令可管理用户帐户:

显示现有用户:

cephadm@adm > ceph dashboard ac-user-show [USERNAME]

创建新用户:

cephadm@adm > ceph dashboard ac-user-create USERNAME [PASSWORD] [ROLENAME]

[NAME] [EMAIL]

删除用户:

cephadm@adm > ceph dashboard ac-user-delete USERNAME

更改用户密码:

cephadm@adm > ceph dashboard ac-user-set-password USERNAME PASSWORD

修改用户名和电子邮件:

389 在命令行上管理用户和角色 SES 6

Page 410: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > ceph dashboard ac-user-set-info USERNAME NAME EMAIL

22.10.2 用户角色和权限

本节说明您可为用户角色指定的安全作用范围、如何管理用户角色,以及如何为用户帐户指定

角色。

22.10.2.1 安全作用范围

用户帐户与一组角色相关联,这些角色定义了该用户可以访问仪表盘的哪些部分。仪表盘的各

个部分均会划分在某个安全作用范围内。安全作用范围已预先定义且固定不变。当前可用的安

全作用范围如下:

hosts

包含与主机菜单项相关的所有特性。

config-opt

包含与 Ceph 配置选项管理相关的所有特性。

pool

包含与存储池管理相关的所有特性。

osd

包含与 Ceph OSD 管理相关的所有特性。

monitor

包含与 Ceph Monitor 管理相关的所有特性。

rbd-image

包含与 RADOS 块设备映像管理相关的所有特性。

rbd-mirroring

包含与 RADOS 块设备镜像管理相关的所有特性。

iscsi

包含与 iSCSI 管理相关的所有特性。

390 用户角色和权限 SES 6

Page 411: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

rgw

包含与对象网关管理相关的所有特性。

cephfs

包含与 CephFS 管理相关的所有特性。

manager

包含与 Ceph Manager 管理相关的所有特性。

log

包含与 Ceph 日志管理相关的所有特性。

grafana

包含与 Grafana 代理相关的所有特性。

dashboard-settings

允许更改仪表盘设置。

22.10.2.2 用户角色

角色指定了一个安全作用范围与一组权限之间的一组映射。权限分为四种类

型:“read”、“create”、“update”和“delete”。

下面的示例指定了一个角色,具有该角色的用户拥有与存储池管理相关的特性

的“read”和“create”权限,以及与 RBD 映像管理相关的特性的全部权限:

{

'role': 'my_new_role',

'description': 'My new role',

'scopes_permissions': {

'pool': ['read', 'create'],

'rbd-image': ['read', 'create', 'update', 'delete']

}

}

仪表盘提供了一组预定义角色,我们称之为系统角色。全新安装 Ceph Dashboard 后即可使用

这些角色:

administrator

391 用户角色和权限 SES 6

Page 412: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

提供针对所有安全作用范围的全部权限。

read-only

提供针对仪表盘设置以外的其他所有安全作用范围的 read 权限。

block-manager

提供针对“rbd-image”、“rbd-mirroring”和“iscsi”作用范围的全部权限。

rgw-manager

提供针对“rgw”作用范围的全部权限。

cluster-manager

提供针对“hosts”、“osd”、“monitor”、“manager”和“config-opt”作用范围的全部权限。

pool-manager

提供针对“pool”作用范围的全部权限。

cephfs-manager

提供针对“cephfs”作用范围的全部权限。

22.10.2.2.1 管理自定义角色

您可以使用以下命令创建新用户角色:

创建新角色:

cephadm@adm > ceph dashboard ac-role-create ROLENAME [DESCRIPTION]

删除角色:

cephadm@adm > ceph dashboard ac-role-delete ROLENAME

为角色添加作用范围权限:

cephadm@adm > ceph dashboard ac-role-add-scope-

perms ROLENAME SCOPENAME PERMISSION [PERMISSION...]

从角色中删除作用范围权限:

cephadm@adm > ceph dashboard ac-role-del-perms ROLENAME SCOPENAME

392 用户角色和权限 SES 6

Page 413: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

22.10.2.2.2 为用户帐户指定角色

使用以下命令可为用户指定角色:

设置用户角色:

cephadm@adm > ceph dashboard ac-user-set-roles USERNAME ROLENAME [ROLENAME

...]

为用户添加其他角色:

cephadm@adm > ceph dashboard ac-user-add-roles USERNAME ROLENAME [ROLENAME

...]

删除用户的角色:

cephadm@adm > ceph dashboard ac-user-del-roles USERNAME ROLENAME [ROLENAME

...]

提示:清除自定义角色如果您创建了自定义用户角色,并打算以后使用 ceph.purge 运行程序删除 Ceph 集

群,则需要先清除自定义角色。有关详细信息,请参见第 2.16 节 “删除整个 Ceph 集

群”。

22.10.2.2.3 示例:创建用户和自定义角色

本节说明创建具有以下权限的用户帐户的过程:可管理 RBD 映像、查看和创建 Ceph 存储池,

并拥有针对任何其他安全作用范围的只读访问权限。

1. 创建名为“tux”的新用户:

cephadm@adm > ceph dashboard ac-user-create tux PASSWORD

2. 创建角色并指定作用范围权限:

cephadm@adm > ceph dashboard ac-role-create rbd/pool-manager

cephadm@adm > ceph dashboard ac-role-add-scope-perms rbd/pool-manager \

393 用户角色和权限 SES 6

Page 414: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

rbd-image read create update delete

cephadm@adm > ceph dashboard ac-role-add-scope-perms rbd/pool-manager pool

read create

3. 将角色与“tux”用户相关联:

cephadm@adm > ceph dashboard ac-user-set-roles tux rbd/pool-manager read-

only

22.10.3 反向代理

如果您要通过反向代理配置访问仪表盘,则可能需要使用 URL 前缀来访问。要让仪表盘使用包

含您前缀的超链接,您可以设置 url_prefix 设置:

cephadm@adm > ceph config set mgr mgr/dashboard/url_prefix URL_PREFIX

然后,您便可通过网址 http://HOST_NAME:PORT_NUMBER/URL_PREFIX/ 来访问仪表盘。

22.10.4 审计

Ceph Dashboard 的 REST API 可在 Ceph 审计日志中记录 PUT、POST 和 DELETE 请求。记录功

能默认处于禁用状态,但您可使用以下命令将其启用:

cephadm@adm > ceph dashboard set-audit-api-enabled true

如果记录功能处于启用状态,将会记录每个请求的以下参数:

from

请求的来源,例如“https://[::1]:44410”。

path

REST API 路径,例如“/api/auth”。

method

“PUT”、“POST”或“DELETE”。

user

394 反向代理 SES 6

Page 415: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

用户的名称(或“None”)。

示例日志项如下所示:

2019-02-06 10:33:01.302514 mgr.x [INF] [DASHBOARD] \

from='https://[::ffff:127.0.0.1]:37022' path='/api/rgw/user/exu' method='PUT' \

user='admin' params='{"max_buckets": "1000", "display_name": "Example User",

"uid": "exu", "suspended": "0", "email": "[email protected]"}'

提示:禁用记录请求有效负载的功能请求有效负载(自变量及其值的列表)的记录功能默认处于启用状态。您可以按照如下方

式禁用该功能:

cephadm@adm > ceph dashboard set-audit-api-log-payload false

395 审计 SES 6

Page 416: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

V 与虚拟化工具集成

23 将 libvirt 与 Ceph 搭配使用 397

24 Ceph 用作 QEMU KVM 实例的后端 403

Page 417: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

23 将 libvirt 与 Ceph 搭配使用

libvirt 库在超级管理程序接口与使用这些接口的软件应用之间建立了一个虚拟机抽象层。使

用 libvirt,开发人员和系统管理员可将工作重心放在通用管理框架、通用 API、通用外壳接

口 ( virsh ) 以及诸多不同的超级管理程序(包括 QEMU/KVM、Xen、LXC 或 VirtualBox)上。

Ceph 块设备支持 QEMU/KVM。您可以通过与 libvirt 连接的软件来使用 Ceph 块设备。云

解决方案使用 libvirt 来与 QEMU/KVM 交互,而 QEMU/KVM 通过 librbd 来与 Ceph 块

设备交互。

要创建使用 Ceph 块设备的 VM,请按以下各节中所述的过程操作。在示例中,我们分别使用了

libvirt-pool、 client.libvirt 和 new-libvirt-image 作为存储池名称、用户名和

映像名称。您可以根据个人喜好使用任何值,但在执行后续过程中的命令时,请务必替换这些

值。

23.1 配置 Ceph要将 Ceph 配置为与 libvirt 搭配使用,请执行以下步骤:

1. 创建存储池。下面的示例使用存储池名称 libvirt-pool 和 128 个归置组。

cephadm@adm > ceph osd pool create libvirt-pool 128 128

校验该存储池是否存在。

cephadm@adm > ceph osd lspools

2. 创建 Ceph 用户。下面的示例使用 Ceph 用户名 client.libvirt 并引用 libvirt-

pool。

cephadm@adm > ceph auth get-or-create client.libvirt mon 'profile rbd' osd

\

'profile rbd pool=libvirt-pool'

校验该名称是否存在。

cephadm@adm > ceph auth list

397 配置 Ceph SES 6

Page 418: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

注意:用户名或 IDlibvirt 将使用 ID libvirt,而不是 Ceph 名称 client.libvirt 来访问

Ceph。有关 ID 与名称之间的差别的详细说明,请参见 第 8.2.1.1 节 “用户”。

3. 使用 QEMU 在 RBD 池中创建映像。下面的示例使用映像名称 new-libvirt-image 并

引用 libvirt-pool。

提示:密钥环文件位置libvirt 用户密钥存储在 /etc/ceph 目录下的密钥环文件中。需

要为密钥环文件指定适当的名称,其中应包含其所属 Ceph 集群的名

称。如果集群名称为默认名称“ceph”,则密钥环文件名为 /etc/ceph/

ceph.client.libvirt.keyring。

如果该密钥环不存在,请使用以下命令创建它:

cephadm@adm > ceph auth get client.libvirt > /etc/ceph/

ceph.client.libvirt.keyring

root # qemu-img create -f raw rbd:libvirt-pool/new-libvirt-image:id=libvirt

2G

校验该映像是否存在。

cephadm@adm > rbd -p libvirt-pool ls

23.2 准备 VM 管理器虽然您可以单独使用 libvirt,而不借助 VM 管理器,但您可能会发现,使用 virt-

manager 创建第一个域会更简单。

1. 安装虚拟机管理器。

398 准备 VM 管理器 SES 6

Page 419: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

root # zypper in virt-manager

2. 准备/下载要运行虚拟化的系统的 OS 映像。

3. 起动虚拟机管理器。

virt-manager

23.3 创建 VM要使用 virt-manager 创建 VM,请执行以下步骤:

1. 从列表中选择连接,右键点击该连接,然后选择新建。

2. 通过提供现有存储的路径来导入现有的磁盘映像。指定 OS 类型和内存设置,并给虚拟

机命名,例如 libvirt-virtual-machine。

3. 完成配置并启动 VM。

4. 使用 sudo virsh list 校验新建的域是否存在。如果需要,请指定连接字符串,例如

virsh -c qemu+ssh://root@vm_host_hostname/system list

Id Name State

-----------------------------------------------

[...]

9 libvirt-virtual-machine running

5. 在将 VM 配置为与 Ceph 搭配使用前,登录 VM 并将其停止。

23.4 配置 VM本章重点介绍如何使用 virsh 配置 VM,以与 Ceph 集成。 virsh 命令通常需要 root 特权

( sudo ),它不会返回相应的结果,也不会告知您需要 root 特权。有关 virsh 命令的参考信

息,请参见 man 1 virsh(需要安装 libvirt-client )。

1. 使用 virsh edit vm-domain-name 打开配置文件。

399 创建 VM SES 6

Page 420: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

root # virsh edit libvirt-virtual-machine

2. <devices> 下面应有一个 <disk> 项。

<devices>

<emulator>/usr/bin/qemu-system-x86_64</emulator>

<disk type='file' device='disk'>

<driver name='qemu' type='raw'/>

<source file='/path/to/image/recent-linux.img'/>

<target dev='vda' bus='virtio'/>

<address type='drive' controller='0' bus='0' unit='0'/>

</disk>

将 /path/to/image/recent-linux.img 替换为 OS 映像的路径。

重要请使用 sudo virsh edit,不要使用文本编辑器。如果使用文本编辑器编辑 /

etc/libvirt/qemu 下的配置文件, libvirt 可能无法识别更改。如果 /etc/

libvirt/qemu 下的 XML 文件内容与 sudo virsh dumpxml vm-domain-

name 返回的结果有差异,则表示 VM 可能没有正常工作。

3. 将之前创建的 Ceph RBD 映像添加为 <disk> 项。

<disk type='network' device='disk'>

<source protocol='rbd' name='libvirt-pool/new-libvirt-image'>

<host name='monitor-host' port='6789'/>

</source>

<target dev='vda' bus='virtio'/>

</disk>

将 monitor-host 替换为主机的名称,并根据需要替换存储池名称和/或映像名称。可

为 Ceph Monitor 添加多个 <host> 项。 dev 属性是逻辑设备名称,将显示在 VM 的 /

dev 目录下。可选的 bus 属性表示要模拟的磁盘设备类型。有效的设置都特定于驱动程

序(例如 ide、scsi、virtio、xen、usb 或 sata)。

4. 保存文件。

400 配置 VM SES 6

Page 421: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

5. 如果 Ceph 集群已启用身份验证(默认会启用),则您必须生成机密。打开所选的编辑

器,并创建包含以下内容的 secret.xml 文件:

<secret ephemeral='no' private='no'>

<usage type='ceph'>

<name>client.libvirt secret</name>

</usage>

</secret>

6. 定义机密。

root # virsh secret-define --file secret.xml

<uuid of secret is output here>

7. 获取 client.libvirt 密钥,并将密钥字符串保存到某个文件中。

cephadm@adm > ceph auth get-key client.libvirt | sudo tee

client.libvirt.key

8. 设置机密的 UUID。

root # virsh secret-set-value --secret uuid of secret \

--base64 $(cat client.libvirt.key) && rm client.libvirt.key secret.xml

此外,必须通过将以下 <auth> 项添加到前面输入的 <disk> 元素(请将 uuid 值替换

为上述命令行示例的结果),来手动设置机密。

root # virsh edit libvirt-virtual-machine

然后,在域配置文件中添加 <auth></auth> 元素:

...

</source>

<auth username='libvirt'>

<secret type='ceph' uuid='9ec59067-fdbc-a6c0-03ff-df165c0587b8'/>

</auth>

<target ...

401 配置 VM SES 6

Page 422: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

注意示例 ID 为 libvirt,而不是在第 23.1 节 “配置 Ceph”的步骤 2 中生成的 Ceph

名称 client.libvirt。请务必使用所生成的 Ceph 名称的 ID 组成部分。如果

出于某种原因需要重新生成机密,则在再次执行 sudo virsh secret-set-

value 之前,需要执行 sudo virsh secret-undefine uuid。

23.5 总结配置要与 Ceph 搭配使用的 VM 之后,便可启动该 VM。要校验 VM 与 Ceph 是否可相互通讯,

可执行以下过程。

1. 检查 Ceph 是否在运行:

cephadm@adm > ceph health

2. 检查 VM 是否在运行:

root # virsh list

3. 检查 VM 是否在与 Ceph 通讯。将 vm-domain-name 替换为 VM 域的名称:

root # virsh qemu-monitor-command --hmp vm-domain-name 'info block'

4. 检查 /dev 或 /proc/partitions 下是否存在 &target dev='hdb' bus='ide'/

> 中的设备:

tux > ls /dev

tux > cat /proc/partitions

402 总结 SES 6

Page 423: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

24 Ceph 用作 QEMU KVM 实例的后端

最常见的 Ceph 用例涉及到向虚拟机提供块设备映像。例如,在理想的配置中,用户可以创建包

含 OS 和所有相关软件的“黄金”映像。然后,用户可以创建该映像的快照。最后,用户可以克隆

该快照(通常要克隆多次,有关详细信息,请参见第 12.3 节 “快照”)。能够创建快照的写入时

复制克隆,就意味着 Ceph 能够快速向虚拟机供应块设备映像,因为客户端不需要在每次运转新

的虚拟机时都下载整个映像。

Ceph 块设备可与 QEMU 虚拟机集成。有关 QEMU KVM 的详细信息,请参见 https://

www.suse.com/documentation/sles-15/book_virt/data/part_virt_qemu.html 。

24.1 安装要使用 Ceph 块设备,需在 QEMU 上安装相应的驱动程序。请检查是否已安装 qemu-block-

rbd 包,并根据需要予以安装:

root # zypper install qemu-block-rbd

24.2 用法使用 QEMU 命令行时,您需要指定存储池名称和映像名称。您也可以指定快照名称。

qemu-img command options \

rbd:pool-name/image-name@snapshot-name:option1=value1:option2=value2...

例如,可按如下所示指定 id 和 conf 选项:

qemu-img command options \

rbd:pool_name/image_name:id=glance:conf=/etc/ceph/ceph.conf

24.3 使用 QEMU 创建映像可以通过 QEMU 创建块设备映像。必须指定 rbd、存储池名称,以及要创建的映像的名称。此

外,必须指定映像的大小。

403 安装 SES 6

Page 424: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

qemu-img create -f raw rbd:pool-name/image-name size

例如:

qemu-img create -f raw rbd:pool1/image1 10G

Formatting 'rbd:pool1/image1', fmt=raw size=10737418240 nocow=off cluster_size=0

重要事实上, raw 数据格式是可对 RBD 使用的唯一合理格式选项。从技术上讲,您也可以使

用 QEMU 支持的其他格式(例如 qcow2),但这会增加额外的开销,如果启用了缓存,

还会在实时迁移虚拟机时让卷变得不安全。

24.4 使用 QEMU 调整映像大小可以通过 QEMU 调整块设备映像的大小。必须指定 rbd、存储池名称,以及要调整大小的映像

的名称。此外,必须指定映像的大小。

qemu-img resize rbd:pool-name/image-name size

例如:

qemu-img resize rbd:pool1/image1 9G

Image resized.

24.5 使用 QEMU 检索映像信息可以通过 QEMU 检索块设备映像的信息。必须指定 rbd、存储池名称和映像名称。

qemu-img info rbd:pool-name/image-name

例如:

qemu-img info rbd:pool1/image1

404 使用 QEMU 调整映像大小 SES 6

Page 425: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

image: rbd:pool1/image1

file format: raw

virtual size: 9.0G (9663676416 bytes)

disk size: unavailable

cluster_size: 4194304

24.6 使用 RBD 运行 QEMUQEMU 可以通过 librbd 直接将映像作为虚拟块设备来访问。这可以避免额外的环境切换,并

可利用 RBD 缓存的优势。

您可以使用 qemu-img 将现有的虚拟机映像转换成 Ceph 块设备映像。例如,如果您有一个

qcow2 映像,则可以运行:

qemu-img convert -f qcow2 -O raw sles12.qcow2 rbd:pool1/sles12

要运行从该映像引导的虚拟机,可以运行:

root # qemu -m 1024 -drive format=raw,file=rbd:pool1/sles12

RBD 缓存可大幅提高性能。QEMU 的缓存选项可控制 librbd 缓存:

root # qemu -m 1024 -drive format=rbd,file=rbd:pool1/sles12,cache=writeback

有关 RBD 缓存的详细信息,请参见第 12.5 节 “缓存设置”。

24.7 启用丢弃功能/TRIMCeph 块设备支持丢弃操作。这意味着,guest 可以发送 TRIM 请求,让 Ceph 块设备回收未使用

的空间。可以通过结合 discard 选项装入 XFS,在 guest 中启用此功能。

要让 guest 可使用此功能,必须为块设备显式启用此功能。为此,您必须指定与驱动器关联的

discard_granularity:

root # qemu -m 1024 -drive format=raw,file=rbd:pool1/sles12,id=drive1,if=none \

-device driver=ide-hd,drive=drive1,discard_granularity=512

405 使用 RBD 运行 QEMU SES 6

Page 426: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

注意上面的示例使用 IDE 驱动程序。Virtio 驱动程序不支持丢弃功能。

如果使用 libvirt,请使用 virsh edit 编辑 libvirt 域的配置文件,以包含 xmlns:qemu

值。然后,将 qemu:commandline block 添加为该域的子级。下面的示例说明如何将包含

qemu id= 的两个设备设置为不同的 discard_granularity 值。

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>

<qemu:commandline>

<qemu:arg value='-set'/>

<qemu:arg value='block.scsi0-0-0.discard_granularity=4096'/>

<qemu:arg value='-set'/>

<qemu:arg value='block.scsi0-0-1.discard_granularity=65536'/>

</qemu:commandline>

</domain>

24.8 QEMU 缓存选项QEMU 的缓存选项与以下 Ceph RBD 缓存设置对应。

写回:

rbd_cache = true

直写:

rbd_cache = true

rbd_cache_max_dirty = 0

无:

rbd_cache = false

QEMU 的缓存设置会覆盖 Ceph 的默认设置(未在 Ceph 配置文件中显式指定的设置)。如果在

Ceph 配置文件中明确指定了 RBD 缓存设置(请参见第 12.5 节 “缓存设置”),您的 Ceph 设置

将会覆盖 QEMU 缓存设置。如果在 QEMU 命令行中指定了缓存设置,则 QEMU 命令行设置会

覆盖 Ceph 配置文件设置。

406 QEMU 缓存选项 SES 6

Page 427: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

VI FAQ、提示和故障诊断

25 技巧与提示 408

26 常见问题 (FAQ) 425

27 查错 428

Page 428: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

25 技巧与提示

本章提供可帮助您增强 Ceph 集群性能的信息,以及有关如何设置集群的提示。

25.1 识别孤立分区要识别可能处于孤立状态的日志/WAL/DB 设备,请执行以下步骤:

1. 选择可能存在孤立分区的设备,并将其分区列表保存到文件中:

root@minion > ls /dev/sdd?* > /tmp/partitions

2. 针对所有 block.wal、block.db 和日记设备运行 readlink,并将输出与之前保存的分区

列表进行比较:

root@minion > readlink -f /var/lib/ceph/osd/ceph-*/

{block.wal,block.db,journal} \

| sort | comm -23 /tmp/partitions -

输出内容为 Ceph 未使用的分区列表。

3. 使用您首选的命令(例如 fdisk、 parted 或 sgdisk)删除不属于 Ceph 的孤立分

区。

25.2 调整洗刷默认情况下,Ceph 每天会执行一次浅层洗刷(请参见第 9.6 节 “洗刷”了解详细信息),每周会

执行一次深层洗刷。浅层洗刷会检查对象大小及校验和,以确保归置组存储的是相同的对象数

据。深层洗刷会检查对象的内容及其副本,以确保实际内容相同。在洗刷期间检查数据完整性

会增加集群上的 I/O 负载。

默认设置允许 Ceph OSD 在不合适的时间(如负载较重时)启动洗刷。当洗刷操作与客户操作

发生冲突时,可能会出现延迟和性能不佳情况。Ceph 提供了数个洗刷设置,可将洗刷限制在低

负载或非高峰时段执行。

408 识别孤立分区 SES 6

Page 429: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

如果集群在日间负载高而在夜间负载低,请考虑将洗刷限制在夜间执行,例如在晚上 11 点到早

上 6 点期间执行。

[osd]

osd_scrub_begin_hour = 23

osd_scrub_end_hour = 6

如果使用时间限制无法有效决定洗刷时间表,请考虑使用 osd_scrub_load_threshold 选

项。其默认值为 0.5,但也可针对低负载情况进行相应调整:

[osd]

osd_scrub_load_threshold = 0.25

25.3 在不重新平衡的情况下停止 OSD进行定期维护时,您可能需要停止 OSD。如果您不希望 CRUSH 自动重新平衡集群,以免出现大

量数据传输,请先将集群设为 noout:

root@minion > ceph osd set noout

当集群设为 noout 时,您便可开始在需要执行维护工作的故障域中停止 OSD:

root@minion > systemctl stop ceph-osd@OSD_NUMBER.service

有关详细信息,请参见第 5.1.2 节 “启动、停止和重启动个别服务”。

完成维护工作后,再次启动 OSD:

root@minion > systemctl start ceph-osd@OSD_NUMBER.service

OSD 服务启动后,取消集群的 noout 设置:

cephadm@adm > ceph osd unset noout

25.4 节点时间同步Ceph 要求所有节点之间的时间都保持精确同步。

409 在不重新平衡的情况下停止 OSD SES 6

Page 430: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

建议将所有 Ceph 集群节点与内部网络上至少三个可靠时间源进行同步。内部时间源可指向公共

时间服务器,或使用自己的时间源。

重要:公共时间服务器不要将所有 Ceph 集群节点直接与远程公共时间服务器同步。如果采用这种配置,集群中

的每个节点都会借助自己的 NTP 守护进程通过因特网持续与三到四台时间服务器通讯,

而这些服务器提供的时间可能会稍有不同。此解决方案在很大程度上带来了延迟方面的变

数,使得难以甚至无法将时钟偏差保持在 0.05 秒以下(Ceph monitor 要求这种精度)。

有关如何设置 NTP 服务器的详细信息,请参见《SUSE Linux Enterprise Server 管理指南》

(https://www.suse.com/documentation/sles-15/book_sle_admin/data/cha_ntp.html) 。

要更改集群上的时间,请执行以下操作:

重要:设置时间您可能会遇到需要将时间往回调的情况,例如,当时间从夏令时改成标准时间时就需要如

此。不建议将时间回调的幅度超过集群的关闭时长。将时间往前调不会造成任何问题。

过程 25.1︰ 集群上的时间同步

1. 停止正在访问 Ceph 集群的所有客户端,尤其是使用 iSCSI 的客户端。

2. 关闭 Ceph 集群。在每个节点上,运行:

root # systemctl stop ceph.target

注意如果您使用了 Ceph 和 SUSE OpenStack Cloud,则还需停止 SUSE OpenStack

Cloud。

3. 确认 NTP 服务器的设置是否正确,即所有 chronyd 守护进程是否可从本地网络中的一

个或多个时间源获取时间。

4. 在 NTP 服务器上设置正确的时间。

410 节点时间同步 SES 6

Page 431: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

5. 确认 NTP 正在运行且在正常工作,然后在所有节点上运行:

root # systemctl status chronyd.service

6. 启动所有监视节点,并校验是否不存在时钟偏差:

root # systemctl start target

7. 启动所有 OSD 节点。

8. 启动其他 Ceph 服务。

9. 启动 SUSE OpenStack Cloud(如果有)。

25.5 检查不均衡的数据写入如果数据均衡写入 OSD,则认为集群是平衡的。集群中的每个 OSD 都分配了权重。权重是一个

相对数字,告知 Ceph 应写入相关 OSD 的数据量。权重越高,要写入的数据就越多。如果 OSD

的权重为零,则不会向其写入任何数据。如果某个 OSD 的权重相对于其他 OSD 而言较高,则大

部分数据将会写入这个 OSD,致使集群变得不平衡。

不平衡集群的性能较差;如果某个权重较高的 OSD 突然崩溃,则大量的数据就需要转移到其他

OSD,这也会导致集群速度变慢。

为避免此问题,应该定期检查 OSD 中的数据写入量。如果写入量介于给定规则集所指定 OSD 组

容量的 30% 到 50% 之间,则您需要重新设置 OSD 的权重。检查各个磁盘,找出其中哪些磁盘

的填满速度比其他磁盘更快(或者一般情况下速度更慢),并降低其权重。对于数据写入量不

足的 OSD 可以采用相同的思路:可以提高其权重,让 Ceph 将更多的数据写入其中。在下面的

示例中,您将确定 ID 为 13 的 OSD 的权重,并将权重从 3 重新设置为 3.05:

$ ceph osd tree | grep osd.13

13 3 osd.13 up 1

$ ceph osd crush reweight osd.13 3.05

reweighted item id 13 name 'osd.13' to 3.05 in crush map

$ ceph osd tree | grep osd.13

13 3.05 osd.13 up 1

411 检查不均衡的数据写入 SES 6

Page 432: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

提示:按使用率重新设置 OSD 的权重ceph osd reweight-by-utilization 阈值命令可自动完成降低严重过度使用的

OSD 的权重的过程。默认情况下,此命令将对达到平均使用率的 120% 的 OSD 降低权

重,但是,如果您指定了阈值,则命令会改用该百分比。

25.6 Ceph Monitor 节点上 /var/lib/ceph 的Btrfs 子卷SUSE Linux Enterprise 默认安装在 Btrfs 分区中。Ceph Monitor 将其状态和数据库存储在 /

var/lib/ceph 目录下。为防止 Ceph Monitor 因基于之前某个快照进行的系统回滚而损坏,

请为 /var/lib/ceph 创建 Btrfs 子卷。专用子卷会从根子卷的快照中排除 Monitor 数据。

提示请在运行 DeepSea 阶段 0 之前创建 /var/lib/ceph 子卷,因为阶段 0 会安装与 Ceph

相关的包并创建 /var/lib/ceph 目录。

随后,DeepSea 阶段 3 会验证 @/var/lib/ceph 是否为 Btrfs 子卷,如果它是普通目录,则

验证将失败。

25.6.1 要求

25.6.1.1 新部署

需正确安装 Salt 和 DeepSea,并确保它们正常工作。

25.6.1.2 现有部署

如果您已安装好集群,则必须符合以下要求:

412 Ceph Monitor 节点上 /var/lib/ceph 的 Btrfs 子卷 SES 6

Page 433: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

已将节点升级到 SUSE Enterprise Storage 6,并且集群受 DeepSea 的控制。

Ceph 集群已启动且正常运行。

升级过程已将 Salt 和 DeepSea 扩展模块同步到所有 Minion 节点。

25.6.2 部署新集群时所需执行的步骤

25.6.2.1 运行 DeepSea 阶段 0 之前

在运行 DeepSea 阶段 0 之前,请对将充当 Ceph Monitor 的每个 Salt Minion 应用以下命令:

root@master # salt 'MONITOR_NODES' saltutil.sync_all

root@master # salt 'MONITOR_NODES' state.apply ceph.subvolume

ceph.subvolume 命令会执行以下操作:

创建 /var/lib ceph,作为 @/var/lib/ceph Btrfs 子卷。

装入该新子卷并相应地更新 /etc/fstab。

25.6.2.2 DeepSea 阶段 3 验证失败

如果您忘记在运行阶段 0 之前运行第 25.6.2.1 节 “运行 DeepSea 阶段 0 之前”中所述的命令,

而 /var/lib/ceph 子目录已存在,则 DeepSea stage 3 验证会失败。要将该子目录转换为子

卷,请执行以下操作:

1. 切换到 /var/lib 目录:

cephadm@mon > cd /var/lib

2. 备份 ceph 子目录的当前内容:

cephadm@mon > sudo mv ceph ceph-

3. 创建并装入子卷,然后更新 /etc/fstab:

413 部署新集群时所需执行的步骤 SES 6

Page 434: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

root@master # salt 'MONITOR_NODES' state.apply ceph.subvolume

4. 切换到备份子目录,将其内容与新子卷进行同步,然后将其删除:

cephadm@mon > cd /var/lib/ceph-

cephadm@mon > rsync -av . ../ceph

cephadm@mon > cd ..

cephadm@mon > rm -rf ./ceph-

25.6.3 升级集群时所需执行的步骤

在 SUSE Enterprise Storage 5.5 上, /var 目录不在 Btrfs 子卷上,但其子文件夹(例如 /

var/log 或 /var/cache)是“@”下的 Btrfs 子卷。创建 @/var/lib/ceph 子卷需要先装

入“@”子卷(默认未装入),然后在其下创建 @/var/lib/ceph 子卷。

下面的命令示例阐述了该过程:

root # mkdir -p /mnt/btrfs

root # mount -o subvol=@ ROOT_DEVICE /mnt/btrfs

root # btrfs subvolume create /mnt/btrfs/var/lib/ceph

root # umount /mnt/btrfs

此时, @/var/lib/ceph 子卷即创建完毕,您可以按第 25.6.2 节 “部署新集群时所需执行的步

骤”中所述继续操作。

25.6.4 手动安装

在 Ceph Monitor 节点上自动设置 @/var/lib/ceph Btrfs 子卷可能并不适用于所有场景。您

可以执行以下步骤将您的 /var/lib/ceph 目录迁移到 @/var/lib/ceph 子卷:

1. 终止正在运行的 Ceph 进程。

2. 卸载节点上的 OSD。

3. 切换到备份子目录,将其内容与新子卷进行同步,然后将其删除:

cephadm@mon > cd /var/lib/ceph-

414 升级集群时所需执行的步骤 SES 6

Page 435: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@mon > rsync -av . ../ceph

cephadm@mon > cd ..

cephadm@mon > rm -rf ./ceph-

4. 重新装入 OSD。

5. 重启动 Ceph 守护进程。

25.6.5 更多信息

有关手动设置的详细信息,请参见 Salt Master 节点上的 /srv/salt/ceph/subvolume/

README.md 文件。

25.7 增加文件描述符对于 OSD 守护进程而言,读/写操作对保持 Ceph 集群平衡至关重要。这些守护进程通常需要同

时打开许多文件进行读取和写入。在 OS 级别,同时打开的文件的最大数目称为“文件描述符的

最大数目”。

为防止 OSD 用尽文件描述符,您可以覆盖 OS 默认值,并在 /etc/ceph/ceph.conf 中指定

该数字,例如:

max_open_files = 131072

更改 max_open_files 之后,需在相关的 Ceph 节点上重启动 OSD 服务。

25.8 与虚拟化软件集成

25.8.1 在 Ceph 集群中存储 KVM 磁盘

您可以为 KVM 驱动的虚拟机创建磁盘映像,将该映像存储在 Ceph 存储池中,选择性地将现有

映像的内容转换到该映像,然后使用 qemu-kvm 运行虚拟机,以利用集群中存储的磁盘映像。

有关详细信息,请参见第 24 章 “Ceph 用作 QEMU KVM 实例的后端”。

415 更多信息 SES 6

Page 436: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

25.8.2 在 Ceph 集群中存储 libvirt 磁盘

类似于 KVM(请参见第 25.8.1 节 “在 Ceph 集群中存储 KVM 磁盘”),您可以使用 Ceph 来存储

libvirt 驱动的虚拟机。这样做的好处是可以运行任何支持 libvirt 的虚拟化解决方案,

例如 KVM、Xen 或 LXC。有关详细信息,参见第 23 章 “将 libvirt 与 Ceph 搭配使用”。

25.8.3 在 Ceph 集群中存储 Xen 磁盘

使用 Ceph 存储 Xen 磁盘的方法之一是按第 23 章 “将 libvirt 与 Ceph 搭配使用”中所述利用

libvirt。

另一种方法是让 Xen 直接与 rbd 块设备驱动程序通讯:

1. 如果尚未为 Xen 准备磁盘映像,请新建一个:

cephadm@adm > rbd create myimage --size 8000 --pool mypool

2. 列出存储池 mypool 中的映像,并检查您的新映像是否在该存储池中:

cephadm@adm > rbd list mypool

3. 通过将 myimage 映像映射到 rbd 内核扩展模块来创建一个新的块设备:

cephadm@adm > rbd map --pool mypool myimage

提示:用户名和身份验证要指定用户名,请使用 --id 用户名。此外,如果您使用了 cephx 身份验证,

则还必须指定机密。该机密可能来自密钥环,或某个包含机密的文件:

cephadm@adm > rbd map --pool rbd myimage --id admin --keyring /path/

to/keyring

或者

cephadmrbd map --pool rbd myimage --id admin --keyfile /path/to/file

416 在 Ceph 集群中存储 libvirt 磁盘 SES 6

Page 437: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

4. 列出所有映射的设备:

rbd showmapped

id pool image snap device

0 mypool myimage - /dev/rbd0

5. 现在,可以将 Xen 配置为使用此设备作为运行虚拟机所用的磁盘。例如,可将下行添加到

xl 样式的域配置文件:

disk = [ '/dev/rbd0,,sda', '/dev/cdrom,,sdc,cdrom' ]

25.9 Ceph 的防火墙设置

警告:使用防火墙时 DeepSea 阶段失败当防火墙处于工作状态(甚至只是配置了防火墙)时,DeepSea 部署阶段会失败。要正

确通过该阶段,需要运行以下命令关闭防火墙

root # systemctl stop SuSEfirewall2.service

或在 /srv/pillar/ceph/stack/global.yml 中将 FAIL_ON_WARNING 选项设

为“False”:

FAIL_ON_WARNING: False

建议使用 SUSE 防火墙保护网络集群通讯。可以通过选择 YaST 安全性和用户 防火墙 允许的

服务来编辑防火墙的配置。

下面列出了 Ceph 相关服务以及这些服务通常使用的端口号:

Ceph Monitor

启用 Ceph MON 服务或端口 6789 (TCP)。

Ceph OSD 或元数据服务器

启用 Ceph OSD/MDS 服务或端口 6800-7300 (TCP)。

417 Ceph 的防火墙设置 SES 6

Page 438: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

iSCSI 网关

打开端口 3260 (TCP)。

对象网关

打开对象网关通讯所用的端口。此端口在 /etc/ceph.conf 内以 rgw frontends =

开头的行中设置。HTTP 的默认端口为 80,HTTPS (TCP) 的默认端口为 443。

NFS Ganesha

默认情况下,NFS Ganesha 使用端口 2049(NFS 服务、TCP)和 875 (rquota 支

持、TCP)。有关更改默认 NFS Ganesha 端口的详细信息,请参见第 21.2.1.4 节 “更改默

认 NFS Ganesha 端口”。

基于 Apache 的服务(例如 SMT)或 SUSE Manager

打开用于 HTTP 的端口 80,用于 HTTPS (TCP) 的端口 443。

SSH

打开端口 22 (TCP)。

NTP

打开端口 123 (UDP)。

Salt

打开端口 4505 和 4506 (TCP)。

Grafana

打开端口 3000 (TCP)。

Prometheus

打开端口 9100 (TCP)。

25.10 测试网络性能为方便测试网络性能,DeepSea 的 net 运行程序提供了以下命令:

向所有节点发出简单 ping:

root@master # salt-run net.ping

418 测试网络性能 SES 6

Page 439: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

Succeeded: 9 addresses from 9 minions average rtt 1.35 ms

向所有节点发出大规模 ping:

root@master # salt-run net.jumbo_ping

Succeeded: 9 addresses from 9 minions average rtt 2.13 ms

带宽测试:

root@master # salt-run net.iperf

Fastest 2 hosts:

|_

- 192.168.58.106

- 2981 Mbits/sec

|_

- 192.168.58.107

- 2967 Mbits/sec

Slowest 2 hosts:

|_

- 192.168.58.102

- 2857 Mbits/sec

|_

- 192.168.58.103

- 2842 Mbits/sec

提示:手动停止“iperf3”进程使用 net.iperf 运行程序运行测试时,所启动的“iperf3”服务器进程不会在测试

完成时自动停止。要停止这些进程,请使用以下运行程序:

root@master # salt '*' multi.kill_iperf_cmd

25.11 如何查找使用 LED 灯的物理磁盘本节介绍如何使用 libstoragemgmt 和/或第三方工具调整物理磁盘上的 LED 灯。可能并非所

有硬件平台都支持此功能。

419 如何查找使用 LED 灯的物理磁盘 SES 6

Page 440: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

将 OSD 磁盘与物理磁盘保持匹配是项困难的工作,对磁盘密度较高的节点来说尤为如此。在一

些具有 LED 灯的硬件环境中,可使用软件调整 LED 灯,使其以不同的颜色闪烁或发光,从而达

到方便识别的目的。SUSE Enterprise Storage 通过 Salt、 libstoragemgmt 和特定于所用硬

件的第三方工具来提供此功能支持。此功能的配置在 /srv/pillar/ceph/disk_led.sls

Salt pillar 中定义:

root # cat /srv/pillar/ceph/disk_led.sls

# This is the default configuration for the storage enclosure LED blinking.

# The placeholder {device_file} will be replaced with the device file of

# the disk when the command is executed.

#

# Have a look into the /srv/pillar/ceph/README file to find out how to

# customize this configuration per minion/host.

disk_led:

cmd:

ident:

'on': lsmcli local-disk-ident-led-on --path '{device_file}'

'off': lsmcli local-disk-ident-led-off --path '{device_file}'

fault:

'on': lsmcli local-disk-fault-led-on --path '{device_file}'

'off': lsmcli local-disk-fault-led-off --path '{device_file}'

disk_led.sls 的默认配置通过 libstoragemgmt 层来提供 LED 支持。但

libstoragemgmt 是通过特定于硬件的插件和第三方工具来提供此支持的。因此,除非已安

装适用于硬件的 libstoragemgmt 插件和第三方工具,否则 libstoragemgmt 将无法调整

LED。

不论是否安装了 libstoragemgmt,可能都需要通过第三方工具来调整 LED 灯。众多硬件供

应商都提供此类第三方工具。下面是一些常见的供应商和工具:

表 25.1︰ 第三方存储工具

供应商/磁盘控制器 工具

HPE SmartArray hpssacli

LSI MegaRAID storcli

420 如何查找使用 LED 灯的物理磁盘 SES 6

Page 441: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

SUSE Linux Enterprise Server 还提供了 ledmon 包和 ledctl 工具。此工具可能还适用于使

用 Intel 存储机箱的硬件环境。使用此工具的正确语法如下所示:

root # cat /srv/pillar/ceph/disk_led.sls

disk_led:

cmd:

ident:

'on': ledctl locate='{device_file}'

'off': ledctl locate_off='{device_file}'

fault:

'on': ledctl locate='{device_file}'

'off': ledctl locate_off='{device_file}'

如果您使用的是已安装所有必需第三方工具的受支持硬件,则可以在 Salt Master 节点上使用以

下命令语法来启用或禁用 LED:

root # salt-run disk_led.device NODE DISK fault|ident on|off

例如,要针对 OSD 节点 srv16.ceph 上的 /dev/sdd 启用或禁用 LED 识别或故障灯,请运

行以下命令:

root # salt-run disk_led.device srv16.ceph sdd ident on

root # salt-run disk_led.device srv16.ceph sdd ident off

root # salt-run disk_led.device srv16.ceph sdd fault on

root # salt-run disk_led.device srv16.ceph sdd fault off

注意:设备命名在 salt-run 命令中使用的设备名称需要与 Salt 所识别的名称相匹配。您可使用以下命

令来显示这些名称:

root@master # salt 'minion_name' grains.get disks

421 如何查找使用 LED 灯的物理磁盘 SES 6

Page 442: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

在许多环境中,为了调整 LED 灯以满足特定的硬件需求,需要对 /srv/pillar/ceph/

disk_led.sls 配置进行更改。通过将 lsmcli 替换为其他工具或调整命令行参数,可以进

行简单的更改。要实现复杂的更改,则可能需要调用外部脚本,而非使用 lsmcli 命令。对 /

srv/pillar/ceph/disk_led.sls 进行任何更改时,均需执行以下步骤:

1. 对 Salt Master 节点上的 /srv/pillar/ceph/disk_led.sls 进行所需更改。

2. 验证 Pillar 数据中是否正确反映了这些更改:

root # salt 'SALT MASTER*' pillar.get disk_led

3. 使用以下命令刷新所有节点上的 Pillar 数据:

root # salt '*' saltutil.pillar_refresh

您可以通过外部脚本直接使用第三方工具来调整 LED 灯。下面提供了介绍如何调整 /srv/

pillar/ceph/disk_led.sls 以支持外部脚本的示例,以及分别适用于 HP 和 LSI 环境的两

个示例脚本。

经过修改的 /srv/pillar/ceph/disk_led.sls,其中调用了外部脚本:

root # cat /srv/pillar/ceph/disk_led.sls

disk_led:

cmd:

ident:

'on': /usr/local/bin/flash_led.sh '{device_file}' on

'off': /usr/local/bin/flash_led.sh '{device_file}' off

fault:

'on': /usr/local/bin/flash_led.sh '{device_file}' on

'off': /usr/local/bin/flash_led.sh '{device_file}' off

使用 hpssacli 实用程序在 HP 硬件上闪烁 LED 灯的脚本示例:

root # cat /usr/local/bin/flash_led_hp.sh

#!/bin/bash

# params:

# $1 device (e.g. /dev/sda)

# $2 on|off

422 如何查找使用 LED 灯的物理磁盘 SES 6

Page 443: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

FOUND=0

MAX_CTRLS=10

MAX_DISKS=50

for i in $(seq 0 $MAX_CTRLS); do

# Search for valid controllers

if hpssacli ctrl slot=$i show summary >/dev/null; then

# Search all disks on the current controller

for j in $(seq 0 $MAX_DISKS); do

if hpssacli ctrl slot=$i ld $j show | grep -q $1; then

FOUND=1

echo "Found $1 on ctrl=$i, ld=$j. Turning LED $2."

hpssacli ctrl slot=$i ld $j modify led=$2

break;

fi

done

[[ "$FOUND" = "1" ]] && break

fi

done

使用 storcli 实用程序在 LSI 硬件上闪烁 LED 灯的脚本示例:

root # cat /usr/local/bin/flash_led_lsi.sh

#!/bin/bash

# params:

# $1 device (e.g. /dev/sda)

# $2 on|off

[[ "$2" = "on" ]] && ACTION="start" || ACTION="stop"

# Determine serial number for the disk

SERIAL=$(lshw -class disk | grep -A2 $1 | grep serial | awk '{print $NF}')

if [ ! -z "$SERIAL" ]; then

# Search for disk serial number across all controllers and enclosures

DEVICE=$(/opt/MegaRAID/storcli/storcli64 /call/eall/sall show all | grep -B6

$SERIAL | grep Drive | awk '{print $2}')

if [ ! -z "$DEVICE" ]; then

echo "Found $1 on device $DEVICE. Turning LED $2."

/opt/MegaRAID/storcli/storcli64 $DEVICE $ACTION locate

423 如何查找使用 LED 灯的物理磁盘 SES 6

Page 444: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

else

echo "Device not found!"

exit -1

fi

else

echo "Disk serial number not found!"

exit -1

fi

424 如何查找使用 LED 灯的物理磁盘 SES 6

Page 445: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

26 常见问题 (FAQ)

26.1 归置组数量对集群的性能有何影响?当集群空间的 70% 至 80% 已满时,便有必要在其中添加更多的 OSD。增加 OSD 的数量时,可

以考虑同时增加归置组的数量。

警告更改归置组 (PG) 的数量会导致在集群中传输大量的数据。

为最近调整大小的集群计算最佳值是一项复杂的任务。

如果 PG 数量较大,将会创建一些较小的数据块。在发生 OSD 故障后,这样可以加速恢复过

程,但同时会对 Monitor 节点施加大量的负荷,因为这些节点负责计算数据位置。

另一方面,如果 PG 数量较小,则发生 OSD 故障后,恢复系统所需的时间和数据传输量就会

增加,但不会对 Monitor 节点施加如此多的负荷,因为需要由这些节点计算位置的数据块更少

(但更大)。

有关集群最佳 PG 数量的详细信息,请参见第 9.4.2 节 “确定 PG_NUM 的值”。

26.2 是否可以在同一集群上使用 SSD 和普通硬盘?一般而言,固态硬盘 (SSD) 的速度比普通硬盘要快。如果对同一写入操作混用这两种磁盘,SSD

磁盘的数据写入速度将会因普通硬盘的性能限制而减慢。因此,对于遵循相同规则的数据写

入操作,切勿混用 SSD 和普通硬盘(有关数据存储规则的详细信息,请参见第 9.3 节 “规则

组”)。

以下两种情况通常适合在同一集群上使用 SSD 和普通硬盘:

1. 针对遵循不同规则的数据写入操作使用各自的磁盘类型。然后,您需要针对 SSD 磁盘和普

通硬盘分别使用不同的规则。

2. 针对特定目的使用各自的磁盘类型。例如,将 SSD 磁盘用于日记,将普通硬盘用于存储数

据。

425 归置组数量对集群的性能有何影响? SES 6

Page 446: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

26.3 在 SSD 上使用日记存在哪些利弊?为 OSD 日记使用 SSD 有助于提高性能,因为在仅包含普通硬盘的 OSD 中,日记通常会成为瓶

颈。SSD 往往用于共享多个 OSD 的日记。

下面列出了为 OSD 日记使用 SSD 的潜在弊端:

SSD 磁盘比普通硬盘更昂贵。但是,由于一个 OSD 日记最多只需要 6GB 磁盘空间,因此

价格因素并不那么重要。

SSD 磁盘会占用存储插槽,而大容量普通硬盘可以利用这些插槽来扩展集群容量。

与普通硬盘相比,SSD 磁盘的写入周期更少,但最新的技术有望解决该问题。

如果在同一块 SSD 磁盘上共享更多的日记,则在 SSD 磁盘发生故障后,将会面临丢失所有

相关 OSD 的风险。在这种情况下,将需要移动大量数据来重新平衡集群。

热插拔磁盘变得更复杂,因为有故障的 OSD 与日记磁盘之间不存在一对一的数据映射关

系。

26.4 磁盘出现故障时会发生什么情况?当某个存储集群数据的磁盘出现硬件问题而无法正常工作时,会发生以下情况:

相关的 OSD 将会崩溃,并自动从集群中删除。

有故障磁盘的数据会从其他 OSD 中的存储相同数据的其他副本复制到集群中的另一个

OSD。

然后,您应该从集群的 CRUSH 索引中删除该磁盘,并从主机硬件中移除其实体。

26.5 日记磁盘出现故障时会发生什么情况?可将 Ceph 配置为在独立于 OSD 的设备上存储日记或预写式日志。如果专用于日记的磁盘发生

故障,相关的 OSD 也会发生故障(请参见第 26.4 节 “磁盘出现故障时会发生什么情况?”)。

426 在 SSD 上使用日记存在哪些利弊? SES 6

Page 447: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

警告:在一个磁盘上托管多个日记要大幅提升性能,可以使用高速磁盘(例如 SSD)来存储多个 OSD 的日记分区。不建议

在一个磁盘上托管 4 个以上的 OSD 的日记,因为一旦日记磁盘发生故障,您就会面临所

有相关 OSD 磁盘存储的数据都将丢失的风险。

427 日记磁盘出现故障时会发生什么情况? SES 6

Page 448: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

27 查错

本章描述您在操作 Ceph 集群时可能会遇到的多种问题。

27.1 报告软件问题如果您在运行 SUSE Enterprise Storage 6 时遇到了与集群的某些组件(例如 Ceph 或对象网

关)相关的问题,请向 SUSE 技术支持报告该问题。建议使用 supportconfig 实用程序来报

告问题。

提示由于 supportconfig 是模块化软件,因此请确保已安装 supportutils-plugin-

ses 包。

tux > rpm -q supportutils-plugin-ses

如果 Ceph 服务器上缺少此包,可使用以下命令安装

root # zypper ref && zypper in supportutils-plugin-ses

尽管您可以在命令行中使用 supportconfig,但我们建议使用相关的 YaST 扩展

模块。https://www.suse.com/documentation/sles-15/singlehtml/book_sle_admin/

book_sle_admin.html#sec.admsupport.supportconfig 上提供了有关 supportconfig 的详

细信息。

27.2 使用 rados 发送大型对象失败并显示“OSD 已满”rados 是用于管理 RADOS 对象存储的命令行实用程序。有关更多信息,请参见 man 8

rados。

如果您使用 rados 实用程序将大型对象发送到 Ceph 集群,例如

428 报告软件问题 SES 6

Page 449: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

cephadm@adm > rados -p mypool put myobject /file/to/send

该对象可能会填满所有相关的 OSD 空间,并导致集群性能出现严重问题。

27.3 XFS 文件系统损坏在极少见的情况下(例如出现内核错误,或硬件损坏/配置不当),OSD 用来存储数据的底层文

件系统 (XFS) 可能会受损或无法装入。

如果您确定硬件没有问题并且系统配置正确,请报告 SUSE Linux Enterprise Server 内核的 XFS

子系统出现了错误,并将特定的 OSD 标记为停机:

cephadm@adm > ceph osd down OSD_ID

警告:不要格式化或修改受损的设备尽管使用 xfs_repair 来修复文件系统问题看似合理,但它会修改文件系统,因此请不

要使用该命令。OSD 可以启动,但它的运行可能会受到影响。

现在,请运行以下命令擦除底层磁盘,并重新创建 OSD:

cephadm@osd > ceph-volume lvm zap --data /dev/OSD_DISK_DEVICE

cephadm@osd > ceph-volume lvm prepare --bluestore --data /dev/OSD_DISK_DEVICE

27.4 “每个 OSD 的 PG 数过多”状态讯息如果在运行 ceph status 之后收到每个 OSD 的 PG 数过多讯息,则表示超出了

mon_pg_warn_max_per_osd 值(默认值为 300)。系统会将此值与每个 OSD 的 PG 数比率

进行比较。这意味着集群设置并不是最佳的。

创建存储池后,便不能减少 PG 数。您可以放心地删除尚不包含任何数据的存储池,然后重新

创建具有较少 PG 的存储池。如果存储池中已包含数据,则唯一的解决方法是将 OSD 添加到集

群,使每个 OSD 的 PG 比率变低。

429 XFS 文件系统损坏 SES 6

Page 450: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

27.5 “nn pg 停滞在非工作状态”状态讯息如果在运行 ceph status 之后收到停滞在非工作状态状态讯息,则表示 Ceph 不知道要将

存储的数据复制到何处,因此无法遵循复制规则。此问题可能在完成初始 Ceph 设置后立即发

生,并且系统可自动修复。在其他情况下出现此问题可能需要进行手动交互,例如激活已中止

的 OSD,或者将新的 OSD 添加到集群。在极少见的情况下,降低复制级别可能有所帮助。

如果位置组一直处于停滞状态,则您需要检查 ceph osd tree 的输出。输出采用的应该是树

型结构,类似于第 27.7 节 “OSD 停机”中的示例。

如果 ceph osd tree 的输出的结构相对扁平,如以下示例中所示

cephadm@adm > ceph osd tree

ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY

-1 0 root default

0 0 osd.0 up 1.00000 1.00000

1 0 osd.1 up 1.00000 1.00000

2 0 osd.2 up 1.00000 1.00000

您应该检查相关的 CRUSH 索引是否包含树型结构。如果 CRUSH 索引也是扁平的,或者不包含

上面示例中所示的主机,则可能表示集群中的主机名解析未正常工作。

如果层次结构不正确(例如,根包含主机,但 OSD 位于顶层,并且本身未指定到主机),则

您需要将 OSD 移到层次结构中的正确位置。可以使用 ceph osd crush move 和/或 ceph

osd crush set 命令实现此目的。有关更多详细信息,请参见第 9.5 节 “CRUSH 索引操作”。

27.6 OSD 权重为 0当 OSD 启动时,系统会给它指定一个权重。权重越高,集群向该 OSD 写入数据的几率就越大。

该权重将在集群 CRUSH 索引中指定,或者通过 OSD 的启动脚本计算得出。

在某些情况下,计算出的 OSD 权重值可能会向下舍入到零。这表示不会安排该 OSD 存储数据,

因此不会向其写入数据。发生此情况的原因通常是相应的磁盘太小(小于 15GB),应该更换为

更大的磁盘。

430 “nn pg 停滞在非工作状态”状态讯息 SES 6

Page 451: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

27.7 OSD 停机OSD 守护进程的状态要么是正在运行,要么是已停止/停机。导致 OSD 停机的原因一般有以下

三种:

硬盘故障。

OSD 已崩溃。

服务器已崩溃。

可运行以下命令来查看 OSD 的详细状态

cephadm@adm > ceph osd tree

# id weight type name up/down reweight

-1 0.02998 root default

-2 0.009995 host doc-ceph1

0 0.009995 osd.0 up 1

-3 0.009995 host doc-ceph2

1 0.009995 osd.1 up 1

-4 0.009995 host doc-ceph3

2 0.009995 osd.2 down 1

示例列表显示 osd.2 已停机。然后,可以检查是否已装入 OSD 所在的磁盘:

root # lsblk -f

[...]

vdb

├─vdb1 /var/lib/ceph/osd/ceph-2

└─vdb2

可以通过检查 OSD 的日志文件 /var/log/ceph/ceph-osd.2.log 来跟踪其停机原因。找

到并解决 OSD 未运行的原因之后,请使用以下命令将它启动

root # systemctl start [email protected]

请记得将 2 替换为已停止的 OSD 的实际编号。

431 OSD 停机 SES 6

Page 452: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

27.8 查找运行缓慢的 OSD优化集群性能时,识别集群中运行缓慢的存储/OSD 非常重要。原因在于,如果将数据写入

(最)缓慢的磁盘,则会拖慢整个写操作,因为它始终要等待在所有相关磁盘上的操作全部完

成。

找到存储瓶颈并非无足轻重。需要检查每一个 OSD 才能找出使写入过程减慢的 OSD。要针对单

个 OSD 执行基准测试,请运行:

ceph tell osd.OSD_ID_NUMBER bench

例如:

cephadm@adm > ceph tell osd.0 bench

{ "bytes_written": 1073741824,

"blocksize": 4194304,

"bytes_per_sec": "19377779.000000"}

然后,需要在每个 OSD 上运行此命令,并与 bytes_per_sec 值相比较,以找出(最)缓慢

的 OSD。

27.9 解决时钟偏差警告所有集群节点中的时间信息都必须同步。如果某个节点的时间未完全同步,在检查集群状态

时,您可能会收到时钟偏差警告。

可使用 NTP 来管理时间同步(请参见 http://en.wikipedia.org/wiki/

Network_Time_Protocol )。设置每个节点,使其时间与一台或多台 NTP 服务器同步,最好

是与同组的 NTP 服务器同步。如果节点上仍然出现时间偏差,请执行以下步骤予以修复:

root # systemctl stop chronyd.service

root # systemctl stop ceph-mon.target

root # systemctl start chronyd.service

root # systemctl start ceph-mon.target

然后,您可以使用 chronyc sourcestats 查看时间偏差。

432 查找运行缓慢的 OSD SES 6

Page 453: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

Ceph Monitor 的时钟需要同步,彼此之间的偏差必须控制在 0.05 秒以内。有关详细信息,请参

考第 25.4 节 “节点时间同步”。

27.10 网络问题导致集群性能不佳导致集群性能变差的原因有很多,其中之一可能是网络问题。在这种情况下,您可能会发现集

群即将达到仲裁数、OSD 和 Monitor 节点脱机、数据传输耗费很长时间,或者尝试了很多次重

新连接。

要检查集群性能下降是否由网络问题导致,请检查 /var/log/ceph 目录中的 Ceph 日志文

件。

要解决集群上的网络问题,请重点关注以下几点:

基本网络诊断。尝试使用 DeepSea 诊断工具运行程序 net.ping 在集群节点之间执行

ping 命令,确定单个接口是否可以连接到特定的接口,并了解平均响应时间。此命令还会

报告比平均值要慢得多的任何特定响应时间。例如:

root@master # salt-run net.ping

Succeeded: 8 addresses from 7 minions average rtt 0.15 ms

尝试在启用极大帧的情况下验证所有接口:

root@master # salt-run net.jumbo_ping

Succeeded: 8 addresses from 7 minions average rtt 0.26 ms

网络性能基准测试。尝试使用 DeepSea 的网络性能运行程序 net.iperf 来测试节点间

的网络带宽。在某个给定的集群节点上,有许多 iperf 进程(具体视 CPU 核心数而定)

作为服务器启动。其余的集群节点将作为客户端来生成网络流量。该运行程序会报告单个

节点上所有 iperf 进程的累积带宽。此值应该能反映所有集群节点上可达到的最大网络

吞吐量。例如:

root@master # salt-run net.iperf cluster=ceph output=full

192.168.128.1:

8644.0 Mbits/sec

192.168.128.2:

10360.0 Mbits/sec

433 网络问题导致集群性能不佳 SES 6

Page 454: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

192.168.128.3:

9336.0 Mbits/sec

192.168.128.4:

9588.56 Mbits/sec

192.168.128.5:

10187.0 Mbits/sec

192.168.128.6:

10465.0 Mbits/sec

检查集群节点上的防火墙设置。确保这些设置不会阻止 Ceph 运转所需的端口/协议。有关

防火墙设置的详细信息,请参见第 25.9 节 “Ceph 的防火墙设置”。

检查网卡、电缆或交换机等网络硬件是否正常运行。

提示:独立网络为确保在集群节点之间进行快速安全的网络通讯,请设置一个专供集群 OSD 和 Monitor

节点使用的独立网络。

27.11 /var 空间不足默认情况下,Salt Master 会在其作业缓存中保存每个 Minion 针对每个作业返回的内容。以

后便可使用缓存来查找之前的作业的结果。缓存目录默认为 /var/cache/salt/master/

jobs/。

每个 Minion 针对每个作业返回的内容都保存在一个文件中。久而久之,此目录会变得非常

大,具体大小取决于发布的作业数量和 /etc/salt/master 文件中 keep_jobs 选项

的值。 keep_jobs 用于设置应将有关过去的 Minion 作业的信息保留多少小时(默认值为

24)。

keep_jobs: 24

重要:请勿将 keep_jobs 设置为 0如果将 keep_jobs 设置为“0”,则作业缓存清除程序永不运行,可能会导致分区变满。

434 /var 空间不足 SES 6

Page 455: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

要禁用作业缓存,请将 job_cache 设置为“False”:

job_cache: False

提示:恢复因作业缓存而变满的分区当由于 keep_jobs 设置不当而导致包含作业缓存文件的分区变满时,请执行以下步骤

释放磁盘空间并改进作业缓存设置:

1. 停止 Salt Master 服务:

root@master # systemctl stop salt-master

2. 通过编辑 /etc/salt/master 来更改与作业缓存相关的 Salt Master 配置:

job_cache: False

keep_jobs: 1

3. 清除 Salt Master 作业缓存:

root # rm -rfv /var/cache/salt/master/jobs/*

4. 启动 Salt Master 服务:

root@master # systemctl start salt-master

435 /var 空间不足 SES 6

Page 456: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

A DeepSea 阶段 1 自定义示例

{% set master = salt['master.minion']() %}

include:

- ..validate

ready:

salt.runner:

- name: minions.ready

- timeout: {{ salt['pillar.get']('ready_timeout', 300) }}

refresh_pillar0:

salt.state:

- tgt: {{ master }}

- sls: ceph.refresh

discover roles:

salt.runner:

- name: populate.proposals

- require:

- salt: refresh_pillar0

discover storage profiles:

salt.runner:

- name: proposal.populate

- kwargs:

'name': 'prod'

'db-size': '59G'

'wal-size': '1G'

'nvme-spinner': True

'ratio': 12

- require:

- salt: refresh_pillar0

436 SES 6

Page 457: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

B SUSE Enterprise Storage 6 的默认警告

groups:

- name: cluster health

rules:

- alert: health error

expr: ceph_health_status == 2

for: 5m

labels:

severity: critical

type: ses_default

annotations:

description: Ceph in error for > 5m

- alert: unhealthy

expr: ceph_health_status != 0

for: 15m

labels:

severity: warning

type: ses_default

annotations:

description: Ceph not healthy for > 5m

- name: mon

rules:

- alert: low monitor quorum count

expr: ceph_monitor_quorum_count < 3

labels:

severity: critical

type: ses_default

annotations:

description: Monitor count in quorum is low

- name: osd

rules:

- alert: 10% OSDs down

expr: sum(ceph_osd_down) / count(ceph_osd_in) >= 0.1

labels:

severity: critical

type: ses_default

annotations:

437 SES 6

Page 458: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

description: More then 10% of OSDS are down

- alert: OSD down

expr: sum(ceph_osd_down) > 1

for: 15m

labels:

severity: warning

type: ses_default

annotations:

description: One or more OSDS down for more then 15 minutes

- alert: OSDs near full

expr: (ceph_osd_utilization unless on(osd) ceph_osd_down) > 80

labels:

severity: critical

type: ses_default

annotations:

description: OSD {{ $labels.osd }} is dangerously full, over 80%

# alert on single OSDs flapping

- alert: flap osd

expr: rate(ceph_osd_up[5m])*60 > 1

labels:

severity: warning

type: ses_default

annotations:

description: >

OSD {{ $label.osd }} was marked down at back up at least once a

minute for 5 minutes.

# alert on high deviation from average PG count

- alert: high pg count deviation

expr: abs(((ceph_osd_pgs > 0) - on (job) group_left avg(ceph_osd_pgs > 0) by

(job)) / on (job) group_left avg(ceph_osd_pgs > 0) by (job)) > 0.35

for: 5m

labels:

severity: warning

type: ses_default

annotations:

description: >

OSD {{ $labels.osd }} deviates by more then 30% from

average PG count

438 SES 6

Page 459: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

# alert on high commit latency...but how high is too high

- name: mds

rules:

# no mds metrics are exported yet

- name: mgr

rules:

# no mgr metrics are exported yet

- name: pgs

rules:

- alert: pgs inactive

expr: ceph_total_pgs - ceph_active_pgs > 0

for: 5m

labels:

severity: critical

type: ses_default

annotations:

description: One or more PGs are inactive for more then 5 minutes.

- alert: pgs unclean

expr: ceph_total_pgs - ceph_clean_pgs > 0

for: 15m

labels:

severity: warning

type: ses_default

annotations:

description: One or more PGs are not clean for more then 15 minutes.

- name: nodes

rules:

- alert: root volume full

expr: node_filesystem_avail{mountpoint="/"} /

node_filesystem_size{mountpoint="/"} < 0.1

labels:

severity: critical

type: ses_default

annotations:

description: Root volume (OSD and MON store) is dangerously full (< 10%

free)

# alert on nic packet errors and drops rates > 1 packet/s

- alert: network packets dropped

439 SES 6

Page 460: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

expr: irate(node_network_receive_drop{device!="lo"}[5m]) +

irate(node_network_transmit_drop{device!="lo"}[5m]) > 1

labels:

severity: warning

type: ses_default

annotations:

description: >

Node {{ $labels.instance }} experiences packet drop > 1

packet/s on interface {{ $lables.device }}

- alert: network packet errors

expr: irate(node_network_receive_errs{device!="lo"}[5m]) +

irate(node_network_transmit_errs{device!="lo"}[5m]) > 1

labels:

severity: warning

type: ses_default

annotations:

description: >

Node {{ $labels.instance }} experiences packet errors > 1

packet/s on interface {{ $lables.device }}

# predict fs fillup times

- alert: storage filling

expr: ((node_filesystem_free - node_filesystem_size) /

deriv(node_filesystem_free[2d]) <= 5) > 0

labels:

severity: warning

type: ses_default

annotations:

description: >

Mountpoint {{ $lables.mountpoint }} will be full in less then 5 days

assuming the average fillup rate of the past 48 hours.

- name: pools

rules:

- alert: pool full

expr: ceph_pool_used_bytes / ceph_pool_available_bytes > 0.9

labels:

severity: critical

type: ses_default

annotations:

440 SES 6

Page 461: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

description: Pool {{ $labels.pool }} at 90% capacity or over

- alert: pool filling up

expr: (-ceph_pool_used_bytes / deriv(ceph_pool_available_bytes[2d]) <= 5 ) >

0

labels:

severity: warning

type: ses_default

annotations:

description: >

Pool {{ $labels.pool }} will be full in less then 5 days

assuming the average fillup rate of the past 48 hours.

441 SES 6

Page 462: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

C 基于上游“Nautilus”小版本的 Ceph 维护更新

SUSE Enterprise Storage 6 中的几个关键的包均基于 Ceph 的 Nautilus 版本系列。当 Ceph 项

目 (https://github.com/ceph/ceph ) 在 Nautilus 系列中发布新的小版本时,SUSE Enterprise

Storage 6 即会更新,以确保产品应用最新的上游 Bug 修复并可进行功能向后移植。

本章简要介绍有关已经或计划在产品中包含的每个上游小版本中的重要更改。

Nautilus 14.2.4 小版本此小版本修复了 14.2.3 小版本中发现的一个严重的回归问题。此回归问题未对 SUSE Enterprise

Storage 客户产生影响,因为我们未随附基于 14.2.3 的版本。

Nautilus 14.2.3 小版本

修复了拒绝服务漏洞,如果存在该漏洞,Ceph 对象网关的未验证客户端可能会触发未被

捕获的异常所导致的崩溃。

现在,基于 Nautilus 的 librbd 客户端可以打开 Jewel 集群上的映像。

对象网关 num_rados_handles 已删除。如果您之前使用的 num_rados_handles 值

大于 1,将当前的 objecter_inflight_ops 和 objecter_inflight_op_bytes

参数与 num_rados_handles 以前的值相乘,即可设置相同的节流行为。

在本版本中,Messenger v2 协议的安全模式不再是实验性的。现在,此模式是首选的

Monitor 连接模式。

osd_deep_scrub_large_omap_object_key_threshold 已降低,以便更轻松地检

测存储了大量 omap 键的对象。

Ceph Dashboard 现在支持将 Prometheus 通知设为静默模式。

442 Nautilus 14.2.4 小版本 SES 6

Page 463: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

Nautilus 14.2.2 小版本

no{up,down,in,out} 相关命令已修改。现在有以下两种方式来设置

no{up,down,in,out} 标志:一种是旧命令

ceph osd [un]set FLAG

该命令可设置集群范围的标志;另一种是新命令

ceph osd [un]set-group FLAGS WHO

该命令能以任何 CRUSH 节点或设备类型的粒度批量设置标志。

radosgw-admin 引入了两个子命令,用来管理对较低版对象网关中桶重新分片后可能遗

留的过时对象的废弃。其中一个子命令可列出此类对象,而另一个子命令可将其删除。

较低的 Nautilus 版本(14.2.1 和 14.2.0)存在如下问题:如果在升级后的集群(即最初是

在 Nautilus 之前部署的集群)上部署一个新的 Nautilus BlueStore OSD,将会损坏 ceph

df 报告的池利用统计数据。在您通过 ceph-bluestore-tool repair 重新供应或

更新所有 OSD 之前,池统计数据显示的值将低于实际值。此问题已在 14.2.2 中解决,因

此,仅当所有 OSD 均为 14.2.2 或更高版本(即块存储),并且已通过修复功能更新(如

果它们是在 Nautilus 之前创建的)后,集群才会转为使用更准确的基于存储池的统计数

据。

mon_crush_min_required_version 的默认值已由 firefly 更改为 hammer,这

意味着如果您的 CRUSH 可调变量比 Hammer 旧,集群将发出健康状况警告。在转为使用

Hammer 可调变量时,一般将会重新平衡少量(但并非零)数据。

如果可能,建议您将允许的最旧客户端设置为 hammer 或更高版本。要显示当前允许的最

旧客户端,请运行以下命令:

cephadm@adm > ceph osd dump | grep min_compat_client

如果当前值比 hammer 旧,请运行以下命令以确认有无比当前连接到集群的 Hammer 更

旧的客户端,据此判断进行此更改是否安全:

cephadm@adm > ceph features

443 Nautilus 14.2.2 小版本 SES 6

Page 464: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

Hammer 中引入了更新的 straw2 CRUSH 存储桶类型。如果您确认所有客户端均为

Hammer 或更新版本,便可使用仅适用于 straw2 存储桶的新功能,包括平衡器的

crush-compat 模式 (第 10.1 节 “平衡器”)。

有关增补程序的详细信息,请访问 https://download.suse.com/Download?

buildid=D38A7mekBz4~

Nautilus 14.2.1 小版本这是原始 Nautilus 版本 (14.2.0) 之后的第一个小版本。SUSE Enterprise Storage 6 的原始(“正

式发布版”或“GA”)版本基于此小版本。

444 Nautilus 14.2.1 小版本 SES 6

Page 465: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

术语表

常规

CRUSH、CRUSH 索引

基于可缩放哈希的受控复制:通过计算数据存储位置来确定如何存储和检索数据的算

法。CRUSH 需要获取集群的索引来以伪随机的方式在 OSD 中存储和检索数据,并以一致的

方式在整个集群中分布数据。

Monitor 节点、MON

用于维护集群状态索引的集群节点,包括 Monitor 索引或 OSD 索引。

OSD

表示对象存储设备或对象存储守护进程,视上下文而定。 ceph-osd 守护进程是 Ceph 的组

件,负责在本地文件系统上存储对象并在网络中提供对它们的访问。

OSD 节点

一个集群节点,用于存储数据、处理数据复制、恢复、回填、重新平衡以及通过检查其他

Ceph OSD 守护进程为 Ceph Monitor 提供某些监视信息。

PG

归置组:存储池的细分,用于性能调节。

存储桶

将其他节点聚合成物理位置层次结构的一个点。

重要:请勿混用 S3 存储桶S3 存储桶或容器代表不同的术语,表示存储对象的文件夹。

存储池

用于存储磁盘映像等对象的逻辑分区。

445 SES 6

Page 466: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

管理节点

用于运行 ceph-deploy 实用程序以在 OSD 节点上部署 Ceph 的节点。

节点

Ceph 集群中的任何一台计算机或服务器。

规则组

用于确定存储池的数据归置的规则。

路由树

该术语指的是展示接收器可运行的不同路由的任何示意图。

Ceph 特定术语

Alertmanager

用于处理 Prometheus 服务器发送的警告并通知最终用户的单个二进制文件。

Ceph 存储集群

用于存储用户数据的存储软件的核心集合。此类集合由 Ceph Monitor 和 OSD 组成。

也称为“Ceph 对象存储”。

Grafana

数据库分析和监视解决方案。

Prometheus

系统监视和警告工具箱。

对象网关特定的术语

存档同步扩展模块

允许创建对象网关区域以保留 S3 对象版本历史记录的扩展模块。

446 SES 6

Page 467: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

对象网关

Ceph 对象存储的 S3/Swift 网关组件。

447 SES 6

Page 468: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

D 文档更新

本章列出了自 SUSE Enterprise Storage 5 的最新维护更新发布以来,本文档内容所发生的

更改。有关适用于先前版本的更改,请访问 https://www.suse.com/documentation/suse-

enterprise-storage-5/book_storage_admin/data/ap_adm_docupdate.html 。

文档在以下日期进行了更新:

第 D.1 节 “SUSE Enterprise Storage 6 的维护更新文档”

第 D.2 节 “2019 年 6 月(SUSE Enterprise Storage 6 发布)”

D.1 SUSE Enterprise Storage 6 的维护更新文档一般更新

添加了第 17.8.5 节 “存档同步扩展模块”(https://jira.suse.com/browse/SES-380 )。

添加了第 22.5.8 节 “RBD 镜像”(https://jira.suse.com/browse/SES-235 )。

添加了第 15 章 “使用 LVM 缓存提升性能”(https://jira.suse.com/browse/SES-269 )。

错误修复

在第 3.1 节 “备份 Ceph 配置”中的备份内容列表中添加了 /etc/ceph (https://

bugzilla.suse.com/show_bug.cgi?id=1153342 )。

在第 2.1 节 “添加新的集群节点”中修正了添加新集群节点时的指定目标和重设权重命令

(https://bugzilla.suse.com/show_bug.cgi?id=1151861 )。

针对 Ceph 14.2.4 添加了更改日志条目 (https://bugzilla.suse.com/show_bug.cgi?

id=1151881 )。

在第 2 章 “Salt 集群管理”中指出了需要在运行阶段 5 之前确认可能会删除的 OSD (https://

bugzilla.suse.com/show_bug.cgi?id=1150406 )。

在第 2.8 节 “恢复重新安装的 OSD 节点”中,于描述恢复 OSD 的流程中添加了两个额外步

骤 (https://bugzilla.suse.com/show_bug.cgi?id=1137132 )。

448 SUSE Enterprise Storage 6 的维护更新文档 SES 6

Page 469: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

添加了新的一章有关 Ceph Manager 扩展模块的内容,在第 10.1 节 “平衡器”中重点介绍了

平衡器扩展模块 (https://bugzilla.suse.com/show_bug.cgi?id=1133550 )。

在第 2.11 节 “更新集群节点”中重新撰写了有关应用集群软件滚动更新的部分,并将阶

段 0 替换为手动命令,以防出现无限循环 (https://bugzilla.suse.com/show_bug.cgi?

id=1134444 )。

添加了描述如何替换管理节点的新章节:第 2.9 节 “将管理节点移至新服务器”(https://

bugzilla.suse.com/show_bug.cgi?id=1145080 )。

在第 12.4.3 节 “映像配置”中添加了对所有新映像启用映像日志可能会对集群性能产生负面

影响的警告 (https://bugzilla.suse.com/show_bug.cgi?id=1134734 )。

添加了检查 nscd 的过程,以及将时钟与 Active Directory 控制器保持同步的提示

(https://bugzilla.suse.com/show_bug.cgi?id=1144696 )。

添加了第 2.16 节 “删除整个 Ceph 集群”,并在第 22.2.6 节 “添加自定义角

色”和第 22.10.2 节 “用户角色和权限”中添加了有关清除自定义角色的提示 (https://

bugzilla.suse.com/show_bug.cgi?id=1138846 )。

在第 9.1.1.3 节 “CRUSH 归置规则”中添加了一个遗漏的命令,并在第 9.1.1.4 节 “其他命

令”中添加了两个新命令 (https://bugzilla.suse.com/show_bug.cgi?id=1132696 )。

添加了第 2.6.2 节 “删除主机上的所有 OSD”(https://bugzilla.suse.com/show_bug.cgi?

id=1142746 )。

在第 6.4 节 “检查集群的用量统计数字”中更新了 ceph df 命令的输出 (https://

bugzilla.suse.com/show_bug.cgi?id=1143551 )。

在《部署指南》, 第 10 章 “安装 iSCSI 网关”, 第 10.4.5 节 “高级设置”中添加了两项新的高

级设置 (https://bugzilla.suse.com/show_bug.cgi?id=1142341 )。

添加了第 2.15 节 “停用经调整的配置”(https://bugzilla.suse.com/show_bug.cgi?

id=1130430 )。

在第 11.3.1 节 “使用缓存层迁移”中添加了缓存层迁移方法仅适用于副本存储池的说明

(https://bugzilla.suse.com/show_bug.cgi?id=1102242 )。

在第 25.6 节 “Ceph Monitor 节点上 /var/lib/ceph 的 Btrfs 子卷”中更新了 @/var/

lib/ceph 子卷创建说明 (https://bugzilla.suse.com/show_bug.cgi?id=1138603 )。

449 SUSE Enterprise Storage 6 的维护更新文档 SES 6

Page 470: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

D.2 2019 年 6 月(SUSE Enterprise Storage 6 发布)一般更新

添加了第 17.6 节 “HTTP 前端”,并将对象网关配置选项移到了第 16.3 节 “Ceph 对象网

关”(https://jira.suse.com/browse/SES-453 )。

添加了第 16 章 “Ceph 集群配置” (jsc#SES-526)。

在第 22 章 “Ceph Dashboard”中添加了有关 Ceph Dashboard URL 可变性的更多信息

(jsc#SES-461)。

添加了第 25.11 节 “如何查找使用 LED 灯的物理磁盘”(jsc#SES-100)。

更新了第 22.6 节 “管理 NFS Ganesha”(jsc#SES-533)。

在第 22.9.3 节 “用户名和口令”中添加了有关使用名为“admin”的默认 Ceph Dashboard 用

户帐户的提示 (jsc#SES-485)。

添加了第 17.12 节 “存储池归置和存储类别”(jsc#SES-326)。

在第 17.8.3.1 节 “ElasticSearch 层类型配置参数”中添加了 username 和 password 参

数 (jsc#SES-130)。

添加了第 20.2 节 “将 Samba 网关加入 Active Directory 中”(jsc#SES-38)。

添加了第 17.8.1 节 “常规配置”和第 17.8.4 节 “云同步扩展模块”(jsc#SES-96)。

添加了第 12.6 节 “QoS 设置” (Fate#324269)。

添加了第 19.7 节 “管理 CephFS 快照” (Fate#325488)。

删除/更新了过时的 ceph-disk (Fate#324466)。

添加了第 19.6 节 “设置 CephFS 配额” (Fate#323422)。

将块存储作为默认存储后端 (Fate#325658)。

添加了第 5.3 节 “正常关闭整个 Ceph 集群” (Fate#323666)。

450 2019 年 6 月(SUSE Enterprise Storage 6 发布) SES 6

Page 471: 管理指南 - SUSE Enterprise Storage 6 · LDAP 身份验证的访问令牌244 17.10 存储桶索引分片244 存储桶索引重分片244 • 新存储桶的存储桶索引分片247

添加了第 2.7 节 “更换 OSD 磁盘”。

删除了对外部联机文档的所有引用,将其替换为相关内容 (Fate#320121)。

错误修复

添加了第 12.9 节 “使用旧内核客户端映射 RBD”(https://bugzilla.suse.com/show_bug.cgi?

id=1134992 )。

更新了对象网关部分,由 CivetWeb 改为使用 Beast (https://bugzilla.suse.com/

show_bug.cgi?id=1138191 )。

在《部署指南》, 第 10 章 “安装 iSCSI 网关”, 第 10.4.3 节 “通过 iSCSI 导出 RBD 映像”中删

除了有关 RBD 映像格式 1 的内容,并统一了存储池/卷名称 (https://bugzilla.suse.com/

show_bug.cgi?id=1135175 )。

在第 12.6 节 “QoS 设置”中说明了 iSCSI 不支持 QoS 特性 (https://bugzilla.suse.com/

show_bug.cgi?id=1135063 )。

在第 20 章 “通过 Samba 导出 Ceph 数据”和第 21 章 “NFS Ganesha:通过 NFS 导出 Ceph

数据”中添加了性能备注 (https://bugzilla.suse.com/show_bug.cgi?id=1124674 )。

451 2019 年 6 月(SUSE Enterprise Storage 6 发布) SES 6