ceph/ceph

GitHub: ceph/ceph

一个开源的统一分布式存储平台,在同一集群中同时提供对象存储、块设备和文件系统三种存储接口。

Stars: 16351 | Forks: 6329

# Ceph - 可扩展分布式存储系统 请参阅 https://ceph.com/ 获取关于 Ceph 的最新信息。 ## 状态 [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/2220/badge)](https://www.bestpractices.dev/projects/2220) [![Issue Backporting](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/d11788c752203724.svg)](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, 企业级存储, 便携式工具, 分布式存储, 后端开发, 块存储, 大数据存储, 存储平台, 存储集群, 对象存储, 开源, 数据擦除, 文件系统, 统一存储, 软件定义存储, 逆向工具