ceph/ceph
GitHub: ceph/ceph
一个开源的统一分布式存储平台,在同一集群中同时提供对象存储、块设备和文件系统三种存储接口。
Stars: 16351 | Forks: 6329
# Ceph - 可扩展分布式存储系统
请参阅 https://ceph.com/ 获取关于 Ceph 的最新信息。
## 状态
[](https://www.bestpractices.dev/projects/2220)
[](https://github.com/ceph/ceph/actions/workflows/create-backport-trackers.yml)
## 贡献代码
Ceph 的大部分代码采用 LGPL 版本 2.1 或 3.0 双重许可。一些
杂项代码属于公共领域,或者基于 BSD 风格的
许可证授权。
Ceph 文档基于 Creative Commons Attribution Share
Alike 3.0 (CC-BY-SA-3.0) 许可授权。
`ceph/ceph` 仓库中包含的某些头文件基于 GPL 许可。
有关按文件列出的完整许可证清单,请参阅文件 `COPYING`。
所有代码贡献必须包含有效的 "Signed-off-by" 行。有关详细信息以及如何生成
和提交补丁的说明,请参阅文件 `SubmittingPatches.rst`。
贡献代码不需要转让版权。代码
根据适用许可证的条款进行贡献。
## 检出源代码
通过在已安装 git 的系统上运行以下命令,从 github 克隆 ceph/ceph 仓库:
```
git clone git@github.com:ceph/ceph
```
或者,如果您不是 github 用户,则应在已安装 git 的系统上运行以下命令:
```
git clone https://github.com/ceph/ceph.git
```
当 `ceph/ceph` 仓库克隆到您的系统后,运行
以下命令进入克隆的 `ceph/ceph` 仓库,并检出与其关联的 git 子模块:
```
cd ceph
git submodule update --init --recursive --progress
```
## 构建前置条件
*章节最后更新于 2024 年 9 月 6 日*
我们在本流程中提供了 Debian 和 Ubuntu 的 ``apt`` 命令。如果您使用
具有不同包管理器的系统,则必须使用不同的
命令。
#. 安装 ``curl``:
```
apt install curl
```
#. 通过运行 ``install-deps.sh`` 脚本安装包依赖项:
```
./install-deps.sh
```
#. 安装 ``python3-routes`` 包:
```
apt install python3-routes
```
## 构建 Ceph
这些说明旨在帮助开发人员编译用于
开发和测试的代码。要构建适合安装的二进制文件,
我们建议您构建 `.deb` 或 `.rpm` 包,或者参考
``ceph.spec.in`` 或 ``debian/rules`` 以查看为生产构建指定了哪些配置选项。
要构建 Ceph,请遵循以下流程:
1. 确保您位于包含 `do_cmake.sh` 和 `CONTRIBUTING.rst` 的顶层 `ceph` 目录中。
2. 运行 `do_cmake.sh` 脚本:
./do_cmake.sh
参见 [构建类型](#build-types)。
3. 进入 `build` 目录:
cd build
4. 使用 `ninja` 构建系统构建开发环境:
ninja -j3
本文档假设您的构建目录是 `ceph.git` 检出目录的子目录。如果构建目录位于其他位置,请将 `CEPH_GIT_DIR` 指向检出目录的正确路径。在调用 ``do_cmake.sh`` 之前,可以通过设置 ARGS 来指定额外的 CMake 参数。有关更多详细信息,请参见 [cmake 选项](#cmake-options)。例如:
ARGS="-DCMAKE_C_COMPILER=gcc-7" ./do_cmake.sh
要仅构建某些目标,请运行以下形式的命令:
ninja [target name]
5. 安装 vstart 集群:
ninja install
## 构建类型
默认情况下,``do_cmake.sh`` 会创建 Ceph 的 "debug build"(假设存在 `.git`)。
``Debug`` 构建的运行时性能可能仅为非调试构建的 20%。
向 ``do_cmake.sh`` 传递 ``-DCMAKE_BUILD_TYPE=RelWithDebInfo`` 以创建
非调试构建。
一旦 `.git` 不存在,默认构建类型即为 ``RelWithDebInfo``。
| CMake 模式 | 调试信息 | 优化级别 | Sanitizers | 检查 | 用途 |
| ------------------- | ---------- | -------------------|-------------------- | -------------------------| ------------------|
| `Debug` | 是 | `-Og` | 无 | `ceph_assert`, `assert` | gdb, 开发 |
| `RelWithDebInfo` | 是 | `-O2`, `-DNDEBUG` | 无 | 仅 `ceph_assert` | 生产 |
### CMake 选项
`-D` 标志可与 `cmake` 一起使用,以加快构建 Ceph 的过程
并进行自定义构建。
#### 不构建 RADOS Gateway
默认情况下会构建 RADOS Gateway。要在不构建 RADOS Gateway 的情况下构建 Ceph,
请运行以下形式的命令:
```
cmake -DWITH_RADOSGW=OFF [path to top-level ceph directory]
```
#### 使用调试和任意依赖位置进行构建
运行以下形式的命令,以在启用调试并为某些外部依赖指定备用
位置的情况下构建 Ceph:
```
cmake -DCMAKE_INSTALL_PREFIX=/opt/ceph -DCMAKE_C_FLAGS="-Og -g3 -gdwarf-4" \
..
```
Ceph 包含多个捆绑依赖项,例如 Boost、RocksDB 和 Arrow。默认情况下,`cmake` 从源代码构建这些捆绑依赖项,而不是使用系统上已安装的库。只要满足 Ceph 的版本要求,您可以选择使用这些系统库。要使用系统库,请使用 `cmake` 选项(例如 `WITH_SYSTEM_BOOST`),如下面的示例所示:
```
cmake -DWITH_SYSTEM_BOOST=ON [...]
```
要查看 -D 选项的详尽列表,请调用 `cmake -LH`:
```
cmake -LH
```
#### 保留诊断颜色
如果您将 `ninja` 通过管道传输给 `less`,并希望保留输出中的诊断颜色
以便更清晰地查看错误和警告,请运行
以下命令:
```
cmake -DDIAGNOSTICS_COLOR=always ...
```
上述命令仅适用于受支持的编译器。
当运行以下命令时,诊断颜色将可见:
```
ninja | less -R
```
`DIAGNOSTICS_COLOR` 的其他可用值为 `auto`(默认)和 `never`。
## 技巧与诀窍
* 仅在需要时使用 "debug builds"。调试构建有助于开发,但可能会降低性能。当不需要调试时,请使用 `-DCMAKE_BUILD_TYPE=Release`。
* 在测试特定组件时启用 Selective Daemons。不要启动不必要的守护进程。
* 保留现有数据,通过使用 `-n` 标志跳过测试之间的集群重新初始化。
* 要管理 vstart 集群,请使用 `./stop.sh` 停止守护进程,并使用 `./vstart.sh --daemon osd.${ID} [--nodaemonize]` 启动它们。
* 通过停止并重启与套接字关联的守护进程来重启套接字。这可以确保集群中不存在过时的套接字。
* 要跟踪 RocksDB 性能,请设置 `export ROCKSDB_PERF=true` 并使用命令 `./vstart.sh -n -d -x --bluestore` 启动集群。
* 在 cmake 中使用调试标志通过 `vstart-base` 构建,编译,并通过 `./vstart.sh -d -n --bluestore` 部署。
* 要进行容器化,请使用 `vstart.sh` 生成配置,并使用 Docker 部署,映射目录并配置网络。
* 使用 `docker run`、`stop` 和 `rm` 管理容器。有关详细设置,请参阅 Ceph-Container 仓库。
## 故障排除
* 集群无法启动:在 `out/` 目录下的日志中查找错误。
* OSD 崩溃:检查 OSD 日志中的错误。
* 集群处于 `Health Error` 状态:运行 `ceph status` 命令以识别问题。
* RocksDB 错误:在 OSD 日志中查找与 RocksDB 相关的错误。
## 构建源码压缩包
要构建包含从源代码构建和/或构建(deb 或 rpm)包所需的所有内容的完整源码压缩包,请运行
```
./make-dist
```
这将从 git 创建一个类似 ceph-$version.tar.bz2 的压缩包。
(确保您想要包含在工作目录中的任何更改
都已提交到 git。)
## 运行测试集群
从 `ceph/` 目录运行以下命令以启动测试 Ceph 集群:
```
cd build
ninja vstart # builds just enough to run vstart
../src/vstart.sh --debug --new -x --localhost --bluestore
./bin/ceph -s
```
大多数 Ceph 命令都位于 `bin/` 目录中。例如:
```
./bin/rbd create foo --size 1000
./bin/rados -p foo bench 30 write
```
要关闭测试集群,请从 `build/` 目录运行以下命令:
```
../src/stop.sh
```
使用 sysvinit 脚本启动或停止单个守护进程:
```
./bin/init-ceph restart osd.0
./bin/init-ceph stop
```
## 运行单元测试
要构建并运行所有测试(使用所有处理器并行运行),请使用 `ctest`:
```
cd build
ninja
ctest -j$(nproc)
```
(注意:许多从 src/test 构建的目标不使用 `ctest` 运行。
以 "unittest" 开头的目标在 `ninja check` 中运行,因此可以
使用 `ctest` 运行。以 "ceph_test" 开头的目标则不能,应
手动运行。)
发生失败时,请在 build/Testing/Temporary 中查看日志。
要构建并运行所有测试及其依赖项,而不包含 Ceph 中的其他
不必要目标:
```
cd build
ninja check -j$(nproc)
```
要手动运行单个测试,请使用 -R(正则匹配)运行 `ctest`:
```
ctest -R [regex matching test name(s)]
```
(注意:`ctest` 不会构建它正在运行的测试或运行它所需的依赖项)
要手动运行单个测试并查看所有测试输出,请使用 -V(详细)标志运行 `ctest`:
```
ctest -V -R [regex matching test name(s)]
```
要手动运行测试并并行运行作业,请使用 `-j` 标志运行 `ctest`:
```
ctest -j [number of jobs]
```
您还可以为 `ctest` 提供许多其他标志,以便更好地
控制手动测试执行。要查看这些选项,请运行:
```
man ctest
```
### 使用容器构建 Ceph
Ceph 现在提供工具,可以使用 Podman 或 Docker 从 OCI 风格的容器内部构建代码、运行单元测试或构建包!这允许
为您系统上以外的发行版构建代码,避免了
在本地系统上安装 Ceph 构建依赖项的需要,并
提供了在官方构建基础设施尚不支持的平台上测试构建的机会。有关更多详细信息,请参阅 [容器构建文档](ContainerBuild.md)。
## 构建文档
### 前置条件
构建文档的包依赖项列表可在 `doc_deps.deb.txt` 中找到:
```
sudo apt-get install `cat doc_deps.deb.txt`
```
### 构建文档
要构建文档,请确保您位于顶层 `/ceph` 目录中,并执行构建脚本。例如:
```
admin/build-doc
```
## 报告问题
要报告问题并查看现有问题,请访问 https://tracker.ceph.com/projects/ceph。
标签:Bash脚本, C++, Ceph, RADOS, SDS, 企业级存储, 便携式工具, 分布式存储, 后端开发, 块存储, 大数据存储, 存储平台, 存储集群, 对象存储, 开源, 数据擦除, 文件系统, 统一存储, 软件定义存储, 逆向工具