Ceph入门完全指南:从小白到动手部署(通俗易懂版)

用最通俗的语言讲解Ceph是什么、三种存储方式的区别、核心概念、以及一步步搭建Ceph集群的完整教程

前言

“分布式存储是什么?”

“Ceph和NAS有什么区别?”

“对象存储、块存储、文件系统存储,我该用哪个?”

“怎么搭一个Ceph集群?”

如果你有以上疑问,这篇文章就是为你准备的。我会用最通俗易懂的方式,讲解Ceph这个看起来很复杂的分布式存储系统。


一、Ceph是什么?

1.1 通俗理解

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
┌─────────────────────────────────────────────────────────────────┐
│                    Ceph是什么?                                   │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   想象这样一个场景:                                    │   │
│   │                                                         │   │
│   │   🏠 普通存储: 就像一个仓库                           │   │
│   │   ├── 只能放一种东西                                   │   │
│   │   ├── 仓库满了就得换更大的                             │   │
│   │   └── 一旦着火,数据全没                               │   │
│   │                                                         │   │
│   │   🏢 Ceph存储: 就像一个智能仓库集群                    │   │
│   │   ├── 可以放任何东西 (图片/视频/文件/数据库)          │   │
│   │   ├── 不够用了就加一个新仓库                          │   │
│   │   ├── 某个仓库着火? 自动从其他仓库恢复                │   │
│   │   └── 仓库之间会自动搬运、平衡货物                    │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

1.2 Ceph的定义

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
┌─────────────────────────────────────────────────────────────────┐
│                    Ceph官方定义                                   │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   Ceph是一个统一的分布式存储系统,提供:                         │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   📦 对象存储 (Object Storage)                        │   │
│   │   ├── 类似亚马逊S3                                       │   │
│   │   ├── 通过HTTP接口访问                                  │   │
│   │   └── 适合存储图片、视频、备份等                       │   │
│   │                                                         │   │
│   │   💿 块存储 (Block Storage)                            │   │
│   │   ├── 类似云硬盘                                         │   │
│   │   ├── 挂载到虚拟机当硬盘用                             │   │
│   │   └── 适合数据库、虚拟机系统盘                         │   │
│   │                                                         │   │
│   │   📁 文件系统存储 (File Storage / CephFS)              │   │
│   │   ├── 类似NFS网络文件系统                               │   │
│   │   ├── 多个机器可以同时访问                             │   │
│   │   └── 适合共享目录、大数据分析                        │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   一套Ceph,三种存储方式,按需使用!                            │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

1.3 Ceph的应用场景

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
┌─────────────────────────────────────────────────────────────────┐
│                    Ceph能做什么?                                 │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   场景1: 给虚拟机提供硬盘 (最常见)                      │   │
│   │                                                         │   │
│   │   ┌─────────────────────────────────────────────────┐   │   │
│   │   │                                                 │   │   │
│   │   │   你的笔记本电脑 ──▶ 虚拟机1 (CentOS)        │   │   │
│   │   │        │                      │                    │   │   │
│   │   │        │                      │                    │   │   │
│   │   │        │                      ▼                    │   │   │
│   │   │        │              Ceph块存储 (100GB)          │   │   │
│   │   │        │                    │                    │   │   │
│   │   │        │                    │                    │   │   │
│   │   │        │                    ▼                    │   │   │
│   │   │        │              Ceph集群                   │   │   │
│   │   │        │           ┌──┬──┬──┐                │   │   │
│   │   │        │           │盘1│盘2│盘3│                │   │   │
│   │   │        │           └──┴──┴──┘                │   │   │
│   │   │                                                 │   │   │
│   │   └─────────────────────────────────────────────────┘   │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   场景2: 存储海量图片/视频                              │   │
│   │                                                         │   │
│   │   ┌─────────────────────────────────────────────────┐   │   │
│   │   │                                                 │   │   │
│   │   │   用户上传图片 ──▶ APP服务器                   │   │   │
│   │   │                            │                    │   │   │
│   │   │                            ▼                    │   │   │
│   │   │                  Ceph对象存储 (像S3一样)         │   │   │
│   │   │                            │                    │   │   │
│   │   │                            ▼                    │   │   │
│   │   │                      10亿张图片                 │   │   │
│   │   │                                                 │   │   │
│   │   └─────────────────────────────────────────────────┘   │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   场景3: 团队共享文件 (类似NFS)                        │   │
│   │                                                         │   │
│   │   ┌─────────────────────────────────────────────────┐   │   │
│   │   │                                                 │   │   │
│   │   │   程序员A ──▶ 共享代码目录 ──┐                │   │   │
│   │   │                               │                │   │   │
│   │   │   程序员B ──▶ 共享代码目录 ──┼── CephFS      │   │   │
│   │   │                               │                │   │   │
│   │   │   程序员C ──▶ 共享代码目录 ──┘                │   │   │
│   │   │                                                 │   │   │
│   │   └─────────────────────────────────────────────────┘   │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

二、三种存储方式详解

2.1 块存储 (RBD)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
┌─────────────────────────────────────────────────────────────────┐
│                    块存储 (RBD) 通俗解释                           │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   什么是"块存储"?                                     │   │
│   │                                                         │   │
│   │   就把它想象成一块硬盘!                               │   │
│   │                                                         │   │
│   │   就像你电脑里的硬盘:                                  │   │
│   │   ├── 可以分区                                         │   │
│   │   ├── 可以格式化                                       │   │
│   │   ├── 可以装系统                                       │   │
│   │   └── 可以存文件                                       │   │
│   │                                                         │   │
│   │   不同的是:                                           │   │
│   │   ├── 这块"硬盘"在网络上,不是本地的                  │   │
│   │   └── 可以同时给多台虚拟机用                          │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   块存储使用方式:                                      │   │
│   │                                                         │   │
│   │   # 1. 从Ceph创建一个100GB的"硬盘"                   │   │
│   │   rbd create mydisk --size 102400 --pool rbd         │   │
│   │                                                         │   │
│   │   # 2. 映射到本地 (就像插上了一块新硬盘)              │   │
│   │   rbd map mydisk --pool rbd                          │   │
│   │                                                         │   │
│   │   # 3. 格式化并挂载                                   │   │
│   │   mkfs.ext4 /dev/rbd0                                │   │
│   │   mount /dev/rbd0 /mnt                                │   │
│   │                                                         │   │
│   │   # 4. 现在/mnt就是一块100GB的网络硬盘!              │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   块存储适合的场景:                                    │   │
│   │   ├── ✅ 虚拟机系统盘                                  │   │
│   │   ├── ✅ 数据库存储 (MySQL/PostgreSQL)               │   │
│   │   ├── ✅ Docker/K8s持久化存储                         │   │
│   │   └── ✅ 需要高性能随机读写的场景                      │   │
│   │                                                         │   │
│   │   块存储不适合的场景:                                  │   │
│   │   ├── ❌ 多台机器需要同时读写同一个文件                │   │
│   │   └── ❌ 通过HTTP访问文件                             │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

2.2 对象存储 (RGW)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
┌─────────────────────────────────────────────────────────────────┐
│                    对象存储 (RGW) 通俗解释                         │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   什么是"对象存储"?                                   │   │
│   │                                                         │   │
│   │   就把它想象成一个网盘!                               │   │
│   │                                                         │   │
│   │   就像七牛云、阿里云OSS、亚马逊S3:                    │   │
│   │   ├── 上传文件得到一个链接                             │   │
│   │   ├── 通过链接下载文件                                 │   │
│   │   ├── 支持HTTP访问                                    │   │
│   │   └── 不需要挂载,直接API调用                         │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   对象存储 vs 块存储:                                  │   │
│   │                                                         │   │
│   │   ┌─────────────────────────────────────────────────┐   │   │
│   │   │                                                 │   │   │
│   │   │   块存储: "一块硬盘"                           │   │   │
│   │   │   ├── 需要挂载到本地                           │   │   │
│   │   │   ├── 文件路径: /mnt/data/file.txt             │   │   │
│   │   │   └── 适合程序本地读写                        │   │   │
│   │   │                                                 │   │   │
│   │   │   对象存储: "一个网盘"                          │   │   │
│   │   │   ├── 通过HTTP上传下载                         │   │   │
│   │   │   ├── 文件地址: http://xxx/bucket/file.txt    │   │   │
│   │   │   └── 适合web应用、CDN源站                    │   │   │
│   │   │                                                 │   │   │
│   │   └─────────────────────────────────────────────────┘   │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   对象存储使用方式:                                     │   │
│   │                                                         │   │
│   │   # 1. 创建存储桶 (bucket)                           │   │
│   │   radosgw-admin bucket create --bucket=my-images     │   │
│   │                                                         │   │
│   │   # 2. 上传文件 (通过HTTP)                           │   │
│   │   curl -X PUT http://ceph-node/bucket/photo.jpg      │   │
│   │                                                         │   │
│   │   # 3. 下载文件                                       │   │
│   │   curl -O http://ceph-node/bucket/photo.jpg          │   │
│   │                                                         │   │
│   │   # 4. 或者用S3 SDK访问 (兼容AWS S3)                │   │
│   │   aws s3 cp photo.jpg s3://my-bucket/                │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   对象存储适合的场景:                                   │   │
│   │   ├── ✅ 图片/视频存储 (图床、视频点播)                │   │
│   │   ├── ✅ 日志/备份归档                                │   │
│   │   ├── ✅ 静态网站资源                                 │   │
│   │   ├── ✅ 大数据分析数据湖                              │   │
│   │   └── ✅ 任何需要HTTP访问的数据                       │   │
│   │                                                         │   │
│   │   对象存储不适合的场景:                                 │   │
│   │   ├── ❌ 需要POSIX文件系统的应用                      │   │
│   │   └── ❌ 数据库存储 (用块存储)                         │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

2.3 文件系统存储 (CephFS)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
┌─────────────────────────────────────────────────────────────────┐
│                    文件系统存储 (CephFS) 通俗解释                   │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   什么是"CephFS"?                                     │   │
│   │                                                         │   │
│   │   就把它想象成网络版的NFS!                            │   │
│   │                                                         │   │
│   │   就像公司里共享文件夹:                                │   │
│   │   ├── 任何人都可以挂载访问                             │   │
│   │   ├── 大家看到的是同一个目录                           │   │
│   │   ├── 支持标准Linux文件操作                            │   │
│   │   └── 多人同时读写也没问题                             │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   CephFS vs 块存储:                                   │   │
│   │                                                         │   │
│   │   ┌─────────────────────────────────────────────────┐   │   │
│   │   │                                                 │   │   │
│   │   │   块存储: 独占一块硬盘                          │   │   │
│   │   │   ├── 虚拟机A的C盘 ──只能A用                   │   │   │
│   │   │   ├── 虚拟机B的D盘 ──只能B用                   │   │   │
│   │   │   └── 各自独立,不能共享                        │   │   │
│   │   │                                                 │   │   │
│   │   │   CephFS: 共享一个目录                          │   │   │
│   │   │   ├── 程序员A的 /code ──┬── 同一个目录       │   │   │
│   │   │   ├── 程序员B的 /code ──┼── 同时可见        │   │   │
│   │   │   └── 程序员C的 /code ──┘── 同时编辑        │   │   │
│   │   │                                                 │   │   │
│   │   └─────────────────────────────────────────────────┘   │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   CephFS使用方式:                                      │   │
│   │                                                         │   │
│   │   # 1. 创建一个文件系统                                │   │
│   │   ceph fs new myfs metadata data                       │   │
│   │                                                         │   │
│   │   # 2. 在客户端挂载                                   │   │
│   │   mount -t ceph 192.168.1.10:6789:/ /mnt/myfs        │   │
│   │                                                         │   │
│   │   # 3. 就像使用本地目录一样使用!                      │   │
│   │   cd /mnt/myfs                                        │   │
│   │   touch file.txt                                      │   │
│   │   ls -la                                               │   │
│   │                                                         │   │
│   │   # 4. 另一台机器也能看到同样的内容                   │   │
│   │   mount -t ceph 192.168.1.10:6789:/ /mnt/myfs        │   │
│   │   ls /mnt/myfs  # 能看到file.txt!                    │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   CephFS适合的场景:                                    │   │
│   │   ├── ✅ 团队共享代码目录                             │   │
│   │   ├── ✅ 大数据分析 (HDFS替代)                        │   │
│   │   ├── ✅ 机器学习数据集共享                           │   │
│   │   ├── ✅ 容器共享存储 (Docker/K8s)                    │   │
│   │   └── ✅ 任何需要多客户端读写的场景                   │   │
│   │                                                         │   │
│   │   CephFS不适合的场景:                                  │   │
│   │   ├── ❌ 需要极低延迟的数据库存储                     │   │
│   │   └── ❌ 超大规模文件存储 (用对象存储)                │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

2.4 三种存储方式对比

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
┌─────────────────────────────────────────────────────────────────┐
│                    三种存储方式对比表                               │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │   对比项      │ 块存储(RBD) │ 对象存储(RGW)│ CephFS   │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   访问方式    │ 像硬盘一样   │ 像网盘一样   │ 像NFS一样 │   │
│   │   ──────────────────────────────────────────────────────│   │
│   │   接口类型    │ 块设备      │ HTTP/S3     │ POSIX    │   │
│   │   ──────────────────────────────────────────────────────│   │
│   │   共享性      │ 独占        │ 可共享       │ 可共享   │   │
│   │   ──────────────────────────────────────────────────────│   │
│   │   适合文件    │ 数据库       │ 图片/视频    │ 共享目录 │   │
│   │   ──────────────────────────────────────────────────────│   │
│   │   延迟        │ 最低        │ 中等        │ 中等    │   │
│   │   ──────────────────────────────────────────────────────│   │
│   │   扩展性      │ 好          │ 最好        │ 好      │   │
│   │   ──────────────────────────────────────────────────────│   │
│   │   典型用户    │ K8s/虚拟机  │ Web应用/备份 │ 团队共享 │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   形象比喻:                                            │   │
│   │                                                         │   │
│   │   块存储: 一块真正的硬盘                               │   │
│   │   ├── 你的电脑插了一块新硬盘                          │   │
│   │   └── 可以装系统、放数据库                             │   │
│   │                                                         │   │
│   │   对象存储: 一个网盘                                   │   │
│   │   ├── 七牛云/阿里云OSS那种                            │   │
│   │   └── 通过链接访问,上传下载                          │   │
│   │                                                         │   │
│   │   文件系统: 一个共享文件夹                            │   │
│   │   ├── 公司里大家都能访问的共享目录                    │   │
│   │   └── 多人同时读写同一个文件                          │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   💡 实际项目中,往往三种方式都会用到!                         │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

三、Ceph核心概念

3.1 Ceph集群架构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
┌─────────────────────────────────────────────────────────────────┐
│                    Ceph集群架构图                                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │                   用户/应用                              │   │
│   │                       │                                │   │
│   │         ┌───────────┼───────────┐                     │   │
│   │         │           │           │                     │   │
│   │         ▼           ▼           ▼                     │   │
│   │   ┌─────────┐ ┌─────────┐ ┌─────────┐                │   │
│   │   │   RBD   │ │   RGW   │ │  CephFS │                │   │
│   │   │ (块存储)│ │(对象存储)│ │(文件系统)│                │   │
│   │   └────┬────┘ └────┬────┘ └────┬────┘                │   │
│   │         └───────────┼───────────┘                     │   │
│   │                     │                                │   │
│   │                     ▼                                │   │
│   │              ┌─────────────┐                        │   │
│   │              │   RADOS    │                        │   │
│   │              │  (底层存储) │                        │   │
│   │              └──────┬──────┘                        │   │
│   │                     │                                │   │
│   └─────────────────────┼────────────────────────────────┘   │
│                         │                                     │
│                         ▼                                     │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │                    Ceph集群                            │   │
│   │                                                         │   │
│   │   ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  │   │
│   │   │   节点1     │  │   节点2     │  │   节点3     │  │   │
│   │   │  ┌───────┐  │  │  ┌───────┐  │  │  ┌───────┐  │  │   │
│   │   │  │  MON   │  │  │  │  MON   │  │  │  │  MON   │  │  │   │
│   │   │  └───────┘  │  │  └───────┘  │  │  └───────┘  │  │   │
│   │   │  ┌───────┐  │  │  ┌───────┐  │  │  ┌───────┐  │  │   │
│   │   │  │  MGR   │  │  │  │  MGR   │  │  │  │  MGR   │  │  │   │
│   │   │  └───────┘  │  │  └───────┘  │  │  └───────┘  │  │   │
│   │   │  ┌───────┐  │  │  ┌───────┐  │  │  ┌───────┐  │  │   │
│   │   │  │  OSD   │  │  │  │  OSD   │  │  │  │  OSD   │  │  │   │
│   │   │  │  (盘1) │  │  │  │  (盘1) │  │  │  │  (盘1) │  │  │   │
│   │   │  └───────┘  │  │  └───────┘  │  │  └───────┘  │  │   │
│   │   │  ┌───────┐  │  │  ┌───────┐  │  │  ┌───────┐  │  │   │
│   │   │  │  OSD   │  │  │  │  OSD   │  │  │  │  OSD   │  │  │   │
│   │   │  │  (盘2) │  │  │  │  (盘2) │  │  │  │  (盘2) │  │  │   │
│   │   │  └───────┘  │  │  └───────┘  │  │  └───────┘  │  │   │
│   │   └─────────────┘  └─────────────┘  └─────────────┘  │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

3.2 核心组件详解

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
┌─────────────────────────────────────────────────────────────────┐
│                    Ceph核心组件                                   │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              MON (Monitor) - 监视器                      │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   作用: 集群的"管理员",管理集群状态                    │   │
│   │                                                         │   │
│   │   就像: 公司前台 + 监控系统                             │   │
│   │   ├── 知道集群里有哪些机器                              │   │
│   │   ├── 知道每台机器上有什么盘                           │   │
│   │   └── 记录集群的健康状态                                │   │
│   │                                                         │   │
│   │   特点:                                                │   │
│   │   ├── 一般部署3个或5个 (保证高可用)                    │   │
│   │   ├── 数据存在内存中,读写极快                         │   │
│   │   └── 挂了一个不影响集群运行                          │   │
│   │                                                         │   │
│   │   命令:                                                │   │
│   │   ceph mon stat  # 查看MON状态                         │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              OSD (Object Storage Daemon) - 存储守护进程  │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   作用: 真正存数据的地方!                             │   │
│   │                                                         │   │
│   │   就像: 仓库里的货架管理员                             │   │
│   │   ├── 负责把数据写入磁盘                               │   │
│   │   ├── 负责从磁盘读取数据                               │   │
│   │   └── 监控自己硬盘的健康状态                           │   │
│   │                                                         │   │
│   │   特点:                                                │   │
│   │   ├── 每块硬盘 = 一个OSD进程                          │   │
│   │   ├── OSD之间会互相备份 (多副本)                       │   │
│   │   └── 坏了一个,数据从其他OSD恢复                     │   │
│   │                                                         │   │
│   │   命令:                                                │   │
│   │   ceph osd tree   # 查看OSD树                         │   │
│   │   ceph osd status # 查看OSD状态                        │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              MGR (Manager) - 管理器                      │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   作用: 集群的"监控和统计"                             │   │
│   │                                                         │   │
│   │   就像: 公司的统计部门                                  │   │
│   │   ├── 收集集群的使用统计                               │   │
│   │   ├── 提供Web管理界面 (Dashboard)                      │   │
│   │   └── 提供各种模块化功能                               │   │
│   │                                                         │   │
│   │   特点:                                                │   │
│   │   ├── 一般部署2个 (主备)                              │   │
│   │   ├── 不存数据,只提供管理功能                         │   │
│   │   └── Dashboard很实用!                               │   │
│   │                                                         │   │
│   │   命令:                                                │   │
│   │   ceph mgr stat   # 查看MGR状态                       │   │
│   │   ceph dashboard # 访问Web界面                        │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              MDS (Metadata Server) - 元数据服务器        │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   作用: CephFS专用,管理文件元数据                      │   │
│   │                                                         │   │
│   │   就像: 图书馆的目录卡片                               │   │
│   │   ├── 记录文件在哪                                     │   │
│   │   ├── 记录文件权限                                     │   │
│   │   └── 不存文件内容,只存文件信息                       │   │
│   │                                                         │   │
│   │   特点:                                                │   │
│   │   ├── 只有使用CephFS时才需要                          │   │
│   │   ├── 一般部署2个 (主备)                              │   │
│   │   └── 压力不大,配置要求低                            │   │
│   │                                                         │   │
│   │   命令:                                                │   │
│   │   ceph mds stat   # 查看MDS状态                       │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

3.3 数据存储原理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
┌─────────────────────────────────────────────────────────────────┐
│                    数据是怎么存储的?                              │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              存储过程 (通俗版)                           │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   想象你要把一个文件存入Ceph:                           │   │
│   │                                                         │   │
│   │   第1步: 文件被切成小块                                 │   │
│   │   ┌─────────────────────────────────────────────────┐   │   │
│   │   │                                                 │   │   │
│   │   │   文件:  [████  ████  ████  ████]            │   │   │
│   │   │          小块1   小块2   小块3   小块4           │   │   │
│   │   │                                                 │   │   │
│   │   └─────────────────────────────────────────────────┘   │   │
│   │                                                         │   │
│   │   第2步: 每个小块变成"对象"                             │   │
│   │   ┌─────────────────────────────────────────────────┐   │   │
│   │   │                                                 │   │   │
│   │   │   对象:  object.001  object.002  object.003     │   │   │
│   │   │                                                 │   │   │
│   │   └─────────────────────────────────────────────────┘   │   │
│   │                                                         │   │
│   │   第3步: 对象被分配到不同的OSD                          │   │
│   │   ┌─────────────────────────────────────────────────┐   │   │
│   │   │                                                 │   │   │
│   │   │   OSD1 ← object.001                           │   │   │
│   │   │   OSD2 ← object.002                           │   │   │
│   │   │   OSD3 ← object.003                           │   │   │
│   │   │   OSD4 ← object.004                           │   │   │
│   │   │                                                 │   │   │
│   │   │   (如果是3副本模式,每个对象会存3份)             │   │   │
│   │   │                                                 │   │   │
│   │   └─────────────────────────────────────────────────┘   │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              CRUSH算法 (Ceph的秘密武器)                  │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   问题: Ceph怎么知道数据该存到哪个OSD?                 │   │
│   │                                                         │   │
│   │   普通存储: 查表                                        │   │
│   │   ├── 每次读写都要查表                                 │   │
│   │   └── 表坏了就完了                                    │   │
│   │                                                         │   │
│   │   Ceph: CRUSH算法                                      │   │
│   │   ├── 根据数据特征算出来                               │   │
│   │   ├── 不需要查表,算法算就行                          │   │
│   │   └── 集群拓扑变化时自动重平衡                         │   │
│   │                                                         │   │
│   │   优点:                                                │   │
│   │   ├── 去中心化,不依赖单独元数据服务器                │   │
│   │   ├── 扩展性好,新增OSD不影响旧数据                   │   │
│   │   └── 故障恢复自动进行                                │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              PG (Placement Group) - 放置组               │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   为什么需要PG?                                        │   │
│   │                                                         │   │
│   │   对象太多时:                                          │   │
│   │   ├── 几百万个对象,每个都要算存哪                    │   │
│   │   └── 计算量太大                                      │   │
│   │                                                         │   │
│   │   解决方案: 用PG分组                                   │   │
│   │   ├── 多个对象归为一个PG                              │   │
│   │   ├── 1个PG对应多个OSD (比如3个)                      │   │
│   │   └── 100个PG → 比100万个对象好管理多了              │   │
│   │                                                         │   │
│   │   存储流程:                                            │   │
│   │   对象 → PG(128个) → OSD(3副本)                       │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

3.4 高可用机制

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
┌─────────────────────────────────────────────────────────────────┐
│                    Ceph是如何保证数据安全的?                       │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              副本机制 (最常用)                            │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   原理: 一份数据存多份                                  │   │
│   │                                                         │   │
│   │   ┌─────────────────────────────────────────────────┐   │   │
│   │   │                                                 │   │   │
│   │   │   3副本模式:                                    │   │   │
│   │   │                                                 │   │   │
│   │   │   原始数据                                       │   │   │
│   │   │       ├── 副本1 → OSD1                         │   │   │
│   │   │       ├── 副本2 → OSD2                         │   │   │
│   │   │       └── 副本3 → OSD3                         │   │
│   │   │                                                 │   │   │
│   │   │   坏了一个OSD? 不怕!还有2份!                  │   │   │
│   │   │                                                 │   │   │
│   │   └─────────────────────────────────────────────────┘   │   │
│   │                                                         │   │
│   │   配置:                                                │   │
│   │   ceph osd pool set rbd size 3  # 设置3副本           │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              纠删码 (节省空间)                           │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   原理: 类似RAID5/6,用计算换空间                       │   │
│   │                                                         │   │
│   │   ┌─────────────────────────────────────────────────┐   │   │
│   │   │                                                 │   │   │
│   │   │   4+2纠删码:                                    │   │   │
│   │   │                                                 │   │   │
│   │   │   数据块: [D1] [D2] [D3] [D4]                  │   │   │
│   │   │                         │                        │   │   │
│   │   │                         ▼                        │   │   │
│   │   │               计算出纠删块: [C1] [C2]           │   │   │
│   │   │                                                 │   │   │
│   │   │   总共6块,任意坏2块都能恢复!                  │   │   │
│   │   │   存储效率: 4/6 = 67% (比3副本的33%高)         │   │   │
│   │   │                                                 │   │   │
│   │   └─────────────────────────────────────────────────┘   │   │
│   │                                                         │   │
│   │   适用: 冷数据、备份、归档                             │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              故障恢复过程                                │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   当OSD坏了:                                          │   │
│   │                                                         │   │
│   │   1. MON发现OSD心跳没了                               │   │
│   │       ↓                                               │   │
│   │   2. 标记这个OSD为down                               │   │
│   │       ↓                                               │   │
│   │   3. 其他OSD开始重建数据                              │   │
│   │       ↓                                               │   │
│   │   4. 集群恢复到健康状态                              │   │
│   │       ↓                                               │   │
│   │   5. 你可以换一块新硬盘                              │   │
│   │                                                         │   │
│   │   整个过程自动完成,不需要人工干预!                  │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

四、集群规划

4.1 最小集群架构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
┌─────────────────────────────────────────────────────────────────┐
│                    最小Ceph集群需要什么?                         │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   最少3台服务器!                                       │   │
│   │                                                         │   │
│   │   ┌─────────────────────────────────────────────────┐   │   │
│   │   │                                                 │   │   │
│   │   │   为什么是3台?                                  │   │   │
│   │   │                                                 │   │   │
│   │   │   1. MON需要奇数个 (3或5)                      │   │   │
│   │   │      └── 2台对半分,3台才能投票出结果          │   │   │
│   │   │                                                 │   │   │
│   │   │   2. 3副本需要至少3个OSD                       │   │   │
│   │   │      └── 1个OSD坏了,其他2个还有数据           │   │   │
│   │   │                                                 │   │   │
│   │   │   3. 3台服务器互为备份                        │   │   │
│   │   │      └── 坏1台还能继续服务                    │   │   │
│   │   │                                                 │   │   │
│   │   └─────────────────────────────────────────────────┘   │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   每台服务器配置:                                       │   │
│   │                                                         │   │
│   │   CPU: 4核+                                           │   │
│   │   内存: 8GB+ (16GB更好)                               │   │
│   │   系统盘: 100GB+ SSD (装系统)                          │   │
│   │   数据盘: 至少1块 HDD或SSD (存数据)                   │   │
│   │   网络: 千兆网络 (万兆更好)                            │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   推荐练习环境配置:                                     │   │
│   │                                                         │   │
│   │   3台虚拟机 (VirtualBox/VMware):                      │   │
│   │   ├── CPU: 2核                                        │   │
│   │   ├── 内存: 4GB                                       │   │
│   │   └── 系统盘: 50GB + 数据盘: 20GB                    │   │
│   │                                                         │   │
│   │   这配置练手够用,上生产不够!                        │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

4.2 生产环境架构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
┌─────────────────────────────────────────────────────────────────┐
│                    生产环境推荐架构                                │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   方案A: 3节点混合部署 (适合小规模)                      │   │
│   │                                                         │   │
│   │   ┌─────────┐  ┌─────────┐  ┌─────────┐               │   │
│   │   │  节点1  │  │  节点2  │  │  节点3  │               │   │
│   │   │ MON,MGR │  │ MON,MGR │  │ MON,MGR │               │   │
│   │   │   OSD   │  │   OSD   │  │   OSD   │               │   │
│   │   └─────────┘  └─────────┘  └─────────┘               │   │
│   │                                                         │   │
│   │   特点: 所有角色混在一起,简单                      │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   方案B: 分离部署 (适合中大规模)                       │   │
│   │                                                         │   │
│   │   ┌─────────────────────────────────────────────────┐   │   │
│   │   │                                                 │   │   │
│   │   │   管理节点 (3台)                                 │   │   │
│   │   │   ┌─────────┐  ┌─────────┐  ┌─────────┐      │   │   │
│   │   │   │  MON1   │  │  MON2   │  │  MON3   │      │   │   │
│   │   │   │  MGR1   │  │  MGR2   │  │  MGR3   │      │   │   │
│   │   │   └─────────┘  └─────────┘  └─────────┘      │   │   │
│   │   │                                                 │   │   │
│   │   │   ─────────────────────────────────────────────  │   │   │
│   │   │                                                 │   │   │
│   │   │   存储节点 (多台)                                │   │   │
│   │   │   ┌─────────┐  ┌─────────┐  ┌─────────┐      │   │   │
│   │   │   │  OSD1   │  │  OSD2   │  │  OSD3   │      │   │   │
│   │   │   │  (盘1)  │  │  (盘1)  │  │  (盘1)  │      │   │   │
│   │   │   │  (盘2)  │  │  (盘2)  │  │  (盘2)  │      │   │   │
│   │   │   └─────────┘  └─────────┘  └─────────┘      │   │   │
│   │   │                                                 │   │   │
│   │   └─────────────────────────────────────────────────┘   │   │
│   │                                                         │   │
│   │   特点: 管理和存储分离,更清晰                      │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   每台服务器磁盘规划:                                   │   │
│   │                                                         │   │
│   │   系统盘: 1块 SSD 100-500GB (装系统+日志)             │   │
│   │   数据盘: 多块 HDD或SSD (存数据)                       │   │
│   │                                                         │   │
│   │   建议:                                                │   │
│   │   ├── 日志和数据分离 (提升性能)                        │   │
│   │   └── 每块数据盘配1块SSD做DB journal                  │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

五、动手部署 Ceph

5.1 环境准备

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
┌─────────────────────────────────────────────────────────────────┐
│                    部署前准备                                     │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              需要的资源                                  │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   3台虚拟机 (或实体机):                                │   │
│   │                                                         │   │
│   │   ┌─────────────────────────────────────────────────┐   │   │
│   │   │                                                 │   │   │
│   │   │   node1 (192.168.56.10)                         │   │   │
│   │   │   ├── CPU: 2核                                  │   │   │
│   │   │   ├── 内存: 4GB                                 │   │   │
│   │   │   ├── 系统盘: 50GB                              │   │   │
│   │   │   └── 数据盘: 20GB (用于OSD)                    │   │   │
│   │   │                                                 │   │   │
│   │   │   node2 (192.168.56.11)                         │   │   │
│   │   │   └── 同上                                       │   │   │
│   │   │                                                 │   │   │
│   │   │   node3 (192.168.56.12)                         │   │   │
│   │   │   └── 同上                                       │   │   │
│   │   │                                                 │   │   │
│   │   └─────────────────────────────────────────────────┘   │   │
│   │                                                         │   │
│   │   操作系统: Ubuntu 22.04 (推荐) 或 CentOS 8/Rocky 9  │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              基础环境设置 (所有节点)                      │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   # 1. 设置主机名                                     │   │
│   │   hostnamectl set-hostname node1                      │   │
│   │   # node2、node3同理                                 │   │
│   │                                                         │   │
│   │   # 2. 配置hosts文件                                  │   │
│   │   vi /etc/hosts                                       │   │
│   │   # 添加:                                             │   │
│   │   192.168.56.10 node1                                 │   │
│   │   192.168.56.11 node2                                 │   │
│   │   192.168.56.12 node3                                 │   │
│   │                                                         │   │
│   │   # 3. 关闭防火墙                                     │   │
│   │   sudo systemctl stop ufw                             │   │
│   │   sudo systemctl disable ufw                          │   │
│   │                                                         │   │
│   │   # 4. 关闭SELinux (CentOS)                          │   │
│   │   sudo setenforce 0                                   │   │
│   │                                                         │   │
│   │   # 5. 关闭swap                                       │   │
│   │   sudo swapoff --all                                  │   │
│   │   sudo sed -i '/ swap / s/^/#/' /etc/fstab           │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

5.2 安装 cephadm

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
┌─────────────────────────────────────────────────────────────────┐
│                    安装 cephadm                                   │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              方式1: 在线安装 (推荐)                      │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   # 在node1上执行 (所有节点都要执行)                    │   │
│   │                                                         │   │
│   │   # Ubuntu安装cephadm                                  │   │
│   │   sudo apt update                                      │   │
│   │   sudo apt install -y cephadm                          │   │
│   │                                                         │   │
│   │   # CentOS/Rocky安装                                   │   │
│   │   sudo dnf install -y cephadm                          │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              方式2: 手动安装 (离线环境)                  │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   # 下载cephadm源码                                    │   │
│   │   curl -o cephadm https://github.com/ceph/ceph/raw/    │   │
│   │       main/src/cephadm/cephadm                        │   │
│   │                                                         │   │
│   │   # 赋予执行权限                                      │   │
│   │   chmod +x cephadm                                   │   │
│   │                                                         │   │
│   │   # 安装依赖                                           │   │
│   │   apt install -y python3 docker.io                    │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              验证安装                                  │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   # 查看版本                                           │   │
│   │   cephadm version                                     │   │
│   │                                                         │   │
│   │   # 预期输出:                                         │   │
│   │   # cephadm version 17.2.6                            │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

5.3 创建集群

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
┌─────────────────────────────────────────────────────────────────┐
│                    创建Ceph集群                                   │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              第一步: 安装集群                            │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   # 在node1上执行                                      │   │
│   │                                                         │   │
│   │   # 引导集群 (指定初始MON节点)                         │   │
│   │   cephadm bootstrap --mon-ip 192.168.56.10             │   │
│   │                                                         │   │
│   │   # 如果需要自定义配置:                                │   │
│   │   cephadm bootstrap \                                  │   │
│   │     --mon-ip 192.168.56.10 \                          │   │
│   │     --dashboard-password-prompt \                     │   │
│   │     --allow-fqdn-hostname                             │   │
│   │                                                         │   │
│   │   # 等待执行完成,通常5-10分钟                        │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              第二步: 查看输出信息                        │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   # 成功后会输出类似:                                  │   │
│   │                                                         │   │
│   │   ┌─────────────────────────────────────────────────┐   │   │
│   │   │                                                 │   │   │
│   │   │   Ceph Dashboard is available at:               │   │   │
│   │   │   https://node1:8443                             │   │   │
│   │   │                                                 │   │   │
│   │   │   Username: admin                                │   │   │
│   │   │   Password: xxxxxxxx                             │   │   │
│   │   │                                                 │   │   │
│   │   │   记录下来!                                      │   │   │
│   │   │                                                 │   │   │
│   │   └─────────────────────────────────────────────────┘   │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              第三步: 添加其他节点                        │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   # 在node1上执行,复制ssh密钥到其他节点               │   │
│   │   ssh-copy-id -f -i /etc/ceph/ceph.pub root@node2     │   │
│   │   ssh-copy-id -f -i /etc/ceph/ceph.pub root@node3     │   │
│   │                                                         │   │
│   │   # 添加node2                                          │   │
│   │   ceph orch host add node2 192.168.56.11              │   │
│   │                                                         │   │
│   │   # 添加node3                                          │   │
│   │   ceph orch host add node3 192.168.56.12              │   │
│   │                                                         │   │
│   │   # 查看主机列表                                       │   │
│   │   ceph orch host ls                                   │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

5.4 添加 OSD 存储

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
┌─────────────────────────────────────────────────────────────────┐
│                    添加OSD (数据存储)                             │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              查看可用磁盘                                │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   # 查看所有可用磁盘                                    │   │
│   │   ceph orch device ls                                 │   │
│   │                                                         │   │
│   │   # 或者                                              │   │
│   │   ceph orch device ls --hostname=node1               │   │
│   │                                                         │   │
│   │   # 预期输出:                                         │   │
│   │   ┌─────────────────────────────────────────────────┐   │   │
│   │   │                                                 │   │   │
│   │   │   HOST   DEVICE  AVAILABLE  REFRESHED  ...     │   │   │
│   │   │   node1  /dev/sdb  Yes        Yes        ...     │   │   │
│   │   │   node2  /dev/sdb  Yes        Yes        ...     │   │   │
│   │   │   node3  /dev/sdb  Yes        Yes        ...     │   │   │
│   │   │                                                 │   │   │
│   │   └─────────────────────────────────────────────────┘   │   │
│   │                                                         │   │
│   │   AVAILABLE = Yes 表示可以用于OSD                      │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              添加OSD的三种方式                            │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   # 方式1: 自动发现并添加 (最简单)                     │   │
│   │   ceph orch apply osd --all-available-devices         │   │
│   │                                                         │   │
│   │   # 方式2: 指定特定磁盘                               │   │
│   │   ceph orch daemon add osd node1:/dev/sdb             │   │
│   │   ceph orch daemon add osd node2:/dev/sdb             │   │
│   │   ceph orch daemon add osd node3:/dev/sdb             │   │
│   │                                                         │   │
│   │   # 方式3: 使用配置规范 (推荐生产使用)                 │   │
│   │   cat << 'EOF' > osd_spec.yaml                        │   │
│   │   service_type: osd                                   │   │
│   │   service_id: my_osds                                  │   │
│   │   placement:                                          │   │
│   │     hosts:                                             │   │
│   │       - node1                                          │   │
│   │       - node2                                          │   │
│   │       - node3                                          │   │
│   │   data_devices:                                        │   │
│   │     paths:                                             │   │
│   │       - /dev/sdb                                      │   │
│   │   EOF                                                 │   │
│   │                                                         │   │
│   │   ceph orch apply -i osd_spec.yaml                    │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              查看OSD状态                                │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   # 查看OSD树                                          │   │
│   │   ceph osd tree                                       │   │
│   │                                                         │   │
│   │   # 查看OSD状态                                        │   │
│   │   ceph osd status                                     │   │
│   │                                                         │   │
│   │   # 预期输出:                                         │   │
│   │   ┌─────────────────────────────────────────────────┐   │   │
│   │   │                                                 │   │   │
│   │   │   ID  CLASS  TYPE    STATUS  REWEIGHT  IN     │   │   │
│   │   │   0   hdd    osd       up      1.0      yes    │   │   │
│   │   │   1   hdd    osd       up      1.0      yes    │   │   │
│   │   │   2   hdd    osd       up      1.0      yes    │   │   │
│   │   │                                                 │   │   │
│   │   └─────────────────────────────────────────────────┘   │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

5.5 创建存储池和启用服务

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
┌─────────────────────────────────────────────────────────────────┐
│                    创建存储池和启用服务                            │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              查看集群状态                                │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   # 查看集群健康状态                                    │   │
│   │   ceph status                                         │   │
│   │                                                         │   │
│   │   # 预期输出:                                          │   │
│   │   ┌─────────────────────────────────────────────────┐   │   │
│   │   │                                                 │   │   │
│   │   │   cluster:                                     │   │   │
│   │   │     id:      xxxxxxxx-xxxx-xxxx                │   │   │
│   │   │     health:  HEALTH_OK                         │   │   │
│   │   │                                                 │   │   │
│   │   │   services:                                     │   │   │
│   │   │     mon: 3 daemons, quorum node1,node2,node3   │   │   │
│   │   │     mgr: 1 daemon active                       │   │   │
│   │   │     osd: 3 osds: 3 up, 3 in                  │   │   │
│   │   │                                                 │   │   │
│   │   └─────────────────────────────────────────────────┘   │   │
│   │                                                         │   │
│   │   HEALTH_OK = 集群健康!                              │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              创建块存储池 (RBD)                         │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   # 1. 创建RBD存储池                                  │   │
│   │   ceph osd pool create rbd 32                        │   │
│   │                                                         │   │
│   │   # 2. 初始化RBD                                      │   │
│   │   rbd pool init rbd                                   │   │
│   │                                                         │   │
│   │   # 3. 设置副本数                                     │   │
│   │   ceph osd pool set rbd size 3                       │   │
│   │                                                         │   │
│   │   # 4. 创建一个100GB的镜像                            │   │
│   │   rbd create rbd/mydisk --size 102400 --image-feature layering │   │
│   │                                                         │   │
│   │   # 5. 查看镜像列表                                    │   │
│   │   rbd list rbd                                        │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              启用对象存储网关 (RGW)                      │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   # 1. 创建一个zonegroup和zone                        │   │
│   │   radosgw-admin zonegroup create --master --default   │   │
│   │   radosgw-admin zone create --master --default        │   │
│   │                                                         │   │
│   │   # 2. 启用RGW服务                                    │   │
│   │   ceph orch apply rgw myrgw --realm=default --zone=default --placement="1 node1" │   │
│   │                                                         │   │
│   │   # 3. 查看RGW服务状态                                │   │
│   │   ceph orch ps | grep rgw                            │   │
│   │                                                         │   │
│   │   # 4. 创建RGW用户                                    │   │
│   │   radosgw-admin user create --uid="myuser" --display-name="My User" | tee user.json │
│   │                                                         │   │
│   │   # 5. 查看用户信息 (记住access_key和secret_key)      │   │
│   │   cat user.json | grep -E "access_key|secret_key"    │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              启用CephFS文件系统                        │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   # 1. 创建两个存储池 (元数据+数据)                    │   │
│   │   ceph osd pool create cephfs_metadata 32              │   │
│   │   ceph osd pool create cephfs_data 32                 │   │
│   │                                                         │   │
│   │   # 2. 创建文件系统                                    │   │
│   │   ceph fs new myfs cephfs_metadata cephfs_data        │   │
│   │                                                         │   │
│   │   # 3. 部署MDS (元数据服务器)                         │   │
│   │   ceph orch apply mds myfs --placement="3 node1 node2 node3" │   │
│   │                                                         │   │
│   │   # 4. 查看文件系统                                    │   │
│   │   ceph fs ls                                         │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

5.6 客户端使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
┌─────────────────────────────────────────────────────────────────┐
                    客户端使用Ceph                                 
├─────────────────────────────────────────────────────────────────┤
                                                                 
   ┌─────────────────────────────────────────────────────────┐   
                 使用块存储 (RBD)                              
   ├─────────────────────────────────────────────────────────┤   
                                                               
      # 1. 安装ceph客户端                                   │   │
      sudo apt install -y ceph-common                        
                                                               
      # 2. 复制密钥                                        │   │
      ssh node1 "ceph auth get-or-create client.admin" | \    
          sudo tee /etc/ceph/ceph.client.admin.keyring        
      scp /etc/ceph/ceph.conf node1:/etc/ceph/               
                                                               
      # 3. 映射块设备                                      │   │
      sudo rbd map rbd/mydisk                                
                                                               
      # 4. 格式化                                          │   │
      sudo mkfs.ext4 /dev/rbd0                               
                                                               
      # 5. 挂载使用                                        │   │
      sudo mount /dev/rbd0 /mnt                              
                                                               
      # 6. 测试                                           │   │
      cd /mnt && sudo dd if=/dev/zero of=test bs=1M count=100 
      ls -lh test                                             
                                                               
   └─────────────────────────────────────────────────────────┘   
                                                                 
   ┌─────────────────────────────────────────────────────────┐   
                 使用对象存储 (S3兼容)                         
   ├─────────────────────────────────────────────────────────┤   
                                                               
      # 1. 安装s3客户端                                   │   │
      pip install boto3                                     
                                                               
      # 2. Python示例代码                                 │   │
      cat << 'EOF' > s3_test.py                             
      import boto3                                           
      import botocore                                         
                                                               
      # 连接RGW                                           │   │
      s3 = boto3.client(                                     
          's3',                                              
          endpoint_url='http://node1:80',                    
          aws_access_key_id='YOUR_ACCESS_KEY',               
          aws_secret_access_key='YOUR_SECRET_KEY',           
          region_name='us-east-1'                            
      )                                                       
                                                               
      # 创建桶                                             │   │
      s3.create_bucket(Bucket='my-bucket')                   
                                                               
      # 上传文件                                           │   │
      s3.upload_file('test.txt', 'my-bucket', 'test.txt')   
                                                               
      # 下载文件                                           │   │
      s3.download_file('my-bucket', 'test.txt', '/tmp/test.txt')   
      EOF                                                    
                                                               
      python s3_test.py                                      
                                                               
   └─────────────────────────────────────────────────────────┘   
                                                                 
   ┌─────────────────────────────────────────────────────────┐   
                 使用CephFS (文件系统)                         
   ├─────────────────────────────────────────────────────────┤   
                                                               
      # 1. 安装ceph-fuse                                  │   │
      sudo apt install -y ceph-fuse                           
                                                               
      # 2. 创建挂载点                                      │   │
      sudo mkdir -p /mnt/cephfs                              
                                                               
      # 3. 挂载CephFS                                     │   │
      sudo mount -t ceph node1:6789:/ /mnt/cephfs            
                                                               
      # 4. 或者使用内核驱动 (更高效)                       │   │
      sudo yum install -y ceph-common  # CentOS          │   │
      sudo mount -t ceph 192.168.56.10:6789:/ /mnt/cephfs    
                                                               
      # 5. 测试                                           │   │
      cd /mnt/cephfs                                         
      touch test_file.txt                                    
      echo "Hello CephFS!" > test_file.txt                   
      cat test_file.txt                                      
                                                               
   └─────────────────────────────────────────────────────────┘   
                                                                 
└─────────────────────────────────────────────────────────────────┘

六、常用运维命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
┌─────────────────────────────────────────────────────────────────┐
│                    Ceph常用运维命令速查                            │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              集群状态查看                                │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   ceph status              # 集群整体状态              │   │
│   │   ceph health detail       # 健康状态详情              │   │
│   │   ceph -s                  # 简写                      │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              OSD管理                                    │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   ceph osd tree              # OSD树                   │   │
│   │   ceph osd status            # OSD状态                 │   │
│   │   ceph osd df                 # OSD使用率               │   │
│   │   ceph osd pool ls           # 存储池列表              │   │
│   │                                                         │   │
│   │   # OSD维护                                            │   │
│   │   ceph osd stop 0            # 停止OSD 0              │   │
│   │   ceph osd start 0           # 启动OSD 0              │   │
│   │   ceph osd reweight 0 0.5    # 调整权重              │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              MON/MGR管理                                │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   ceph mon stat               # MON状态                │   │
│   │   ceph mon dump              # MON详细信息            │   │
│   │   ceph mgr stat              # MGR状态                │   │
│   │   ceph mgr services          # MGR服务列表            │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              存储池管理                                  │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   ceph osd pool ls           # 列出所有池            │   │
│   │   ceph osd pool create mypool 64  # 创建池           │   │
│   │   ceph osd pool delete mypool    # 删除池            │   │
│   │   ceph osd pool set mypool size 3  # 设置副本数      │   │
│   │   ceph osd pool get mypool size    # 查看副本数      │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              RBD管理                                    │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   rbd list                    # 列出镜像              │   │
│   │   rbd info -p rbd mydisk      # 镜像详情              │   │
│   │   rbd create rbd/newdisk --size 51200  # 创建镜像    │   │
│   │   rbd rm rbd/olddisk          # 删除镜像              │   │
│   │   rbd resize rbd/mydisk --size 204800  # 扩容        │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              故障排查                                    │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   # 查看日志                                           │   │
│   │   journalctl -u ceph-osd@0 -f                          │   │
│   │   journalctl -u ceph-mon@node1 -f                      │   │
│   │                                                         │   │
│   │   # 查看OSD日志                                        │   │
│   │   ceph logs                                            │   │
│   │                                                         │   │
│   │   # 健康检查                                           │   │
│   │   ceph health detail                                   │   │
│   │   ceph pg dump_stuck stale                             │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

七、常见问题

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
┌─────────────────────────────────────────────────────────────────┐
│                    常见问题解答                                   │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              Q1: 集群 HEALTH_WARN 怎么办?              │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   # 先查看详情                                         │   │
│   │   ceph health detail                                   │   │
│   │                                                         │   │
│   │   # 常见原因:                                         │   │
│   │   ├── OSD数量不足                                     │   │
│   │   ├── PG数量不足                                     │   │
│   │   ├── 网络延迟                                        │   │
│   │   └── 某个OSD挂了                                    │   │
│   │                                                         │   │
│   │   # 解决方法:                                         │   │
│   │   ceph osd set noout          # 防止数据迁移          │   │
│   │   # 修复问题后:                                      │   │
│   │   ceph osd unset noout                               │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              Q2: OSD坏了怎么办?                          │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   Ceph会自动处理:                                     │   │
│   │   1. MON检测到OSD心跳丢失                             │   │
│   │   2. 标记OSD为down                                   │   │
│   │   3. 其他OSD自动重建数据                              │   │
│   │   4. 集群自动恢复健康                                 │   │
│   │                                                         │   │
│   │   人工处理:                                           │   │
│   │   # 1. 把OSD踢出集群                                  │   │
│   │   ceph osd out 0                                       │   │
│   │                                                         │   │
│   │   # 2. 停止OSD进程                                    │   │
│   │   systemctl stop ceph-osd@0                           │   │
│   │                                                         │   │
│   │   # 3. 更换硬盘后重新添加                             │   │
│   │   ceph orch daemon add osd node1:/dev/sdb            │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              Q3: 如何扩容Ceph集群?                      │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   # 添加新节点:                                       │   │
│   │   ceph orch host add newnode 192.168.56.20             │   │
│   │                                                         │   │
│   │   # 在新节点添加OSD:                                  │   │
│   │   ceph orch daemon add osd newnode:/dev/sdb           │   │
│   │                                                         │   │
│   │   # Ceph会自动平衡数据!                              │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │              Q4: Ceph和NAS/普通存储的区别?              │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   ┌─────────────────────────────────────────────────┐   │   │
│   │   │                                                 │   │   │
│   │   │   普通NAS/存储:                                  │   │   │
│   │   │   ├── 容量有限                                   │   │   │
│   │   │   ├── 坏一块盘可能全部丢失                       │   │   │
│   │   │   └── 需要人工备份                               │   │   │
│   │   │                                                 │   │   │
│   │   │   Ceph:                                         │   │   │
│   │   │   ├── 容量可无限扩展                             │   │   │
│   │   │   ├── 多副本保证数据安全                         │   │   │
│   │   │   ├── 故障自动恢复                               │   │   │
│   │   │   └── 支持三种存储方式                           │   │   │
│   │   │                                                 │   │   │
│   │   └─────────────────────────────────────────────────┘   │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

八、总结

8.1 Ceph核心要点

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
┌─────────────────────────────────────────────────────────────────┐
│                    Ceph学习要点                                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                                                         │   │
│   │   1. 一个系统,三种存储方式                            │   │
│   │      ├── RBD = 块存储 (像硬盘)                        │   │
│   │      ├── RGW = 对象存储 (像S3网盘)                    │   │
│   │      └── CephFS = 文件系统 (像NFS共享目录)            │   │
│   │                                                         │   │
│   │   2. 核心组件要记住                                    │   │
│   │      ├── MON = 集群监视器 (管状态)                    │   │
│   │      ├── OSD = 存储守护进程 (存数据)                  │   │
│   │      ├── MGR = 管理器 (监控统计)                      │   │
│   │      └── MDS = 元数据服务器 (CephFS专用)             │   │
│   │                                                         │   │
│   │   3. 高可用靠多副本                                    │   │
│   │      ├── 3副本 = 坏1个OSD不怕                         │   │
│   │      ├── 自动故障恢复                                  │   │
│   │      └── 自动数据重平衡                               │   │
│   │                                                         │   │
│   │   4. 用cephadm部署简单                                │   │
│   │      ├── bootstrap初始化                              │   │
│   │      ├── 添加主机                                      │   │
│   │      ├── 添加OSD                                       │   │
│   │      └── 创建存储池和启用服务                         │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

8.2 下一步学习建议

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
┌─────────────────────────────────────────────────────────────────┐
│                    下一步学习路径                                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   初级: 熟练基本操作                                            │
│   ├── 完成本文的部署练习                                        │
│   ├── 练习创建/删除存储池                                      │
│   ├── 练习RBD/CephFS的使用                                    │
│   └── 模拟OSD故障,观察恢复过程                                │
│                                                                 │
│   中级: 深入原理                                                │
│   ├── 学习CRUSH算法原理                                        │
│   ├── 学习PG的工作机制                                         │
│   ├── 学习故障恢复流程                                         │
│   └── 学习性能调优                                             │
│                                                                 │
│   高级: 生产部署                                                │
│   ├── 学习生产环境架构设计                                     │
│   ├── 学习监控和告警配置                                       │
│   ├── 学习数据迁移和备份                                       │
│   └── 学习Kubernetes CSI集成                                  │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

希望这篇教程能帮助你入门Ceph!记住,多动手、多折腾是学习Ceph最好的方式。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计