【ceph】手动编译14.2.22 ceph版本---超详细版本,生产可用

时间:2024-10-27 15:14:59

  本站以分享各种运维经验和运维所需要的技能为主

《python零基础入门》:python零基础入门学习

《python运维脚本》: python运维脚本实践

shell》:shell学习

《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战

《k8》暂未更新

docker学习》暂未更新

《ceph学习》ceph日常问题解决分享

《日志收集》ELK+各种中间件

《运维日常》运维日常

《linux》运维面试100问

《DBA》db的介绍使用(mysql、redis、mongodb...)

ceph手动编译进行代码层面修复

一、ceph编译

前言:

由于编译环境还是有要求的,建议在虚拟机或者容器下去编译,方便以后自己debug,容器也好做成镜像存储,方便以后更换机器也可以更好地去编译环境。

docker pull centos:7
docker run -itd --name my_container -v /your_ml:/container_ml centos:7
docker commit my_container my_new_image
​
#导出导入
docker save -o /path/to/save/my_image.tar my_image
docker load -i /path/to/my_image.tar
​

拉取代码进行编译

git clone /ceph/
git fetch --tags
git checkout tags/v14.2.22
​
编译过程:
./ # --- 看下面补充依赖
./do_cmake.sh -DWITH_MANPAGE=OFF -DWITH_BABELTRACE=OFF -DWITH_MGR_DASHBOARD_FRONTEND=OFF -DCMAKE_BUILD_TYPE=release -DWITH_CCACHE=ON
cd build
nohup make -j20 >  # 如果想单独编译某个二进制:make ceph-osd -j20 

添加编译时需要的依赖:
​
./ 
​
在执行./时,提示“Error: No Package found for python-scipy”,
​
先跳过:
cd /ceph-build/ceph
sed -i -e '/BuildRequires: python%{_python_buildid}-scipy/d' 
​
 补充依赖:
 yum -y install libaio-devel openssl-devel expat-devel liboath-devel lttng-ust-devel libbabeltrace-devel python36-Cython fuse-devel libnl3-devel librabbitmq-devel libcap-ng-devel gperf librabbitmq-devel librdkafka-devel nss python-sphinx rdma-core-devel systemd-devel libblkid-devel keyutils-libs-devel openldap-devel leveldb-devel snappy-devel lz4-devel curl-devel nss-devel.x86_64 python-devel.x86_64 Cython.x86_64 ncurses-devel ccache
​
​
​

换ceph-osd bin文件后osd起不来:

0、缺ceph-common,ldd ceph-osd看一下,看下集群原本的ldd ceph-osd-bak的common路径,然后用这个common路径做个软链接放在当前目录下(ceph-osd在哪儿,软链接common就在哪儿)
1、load dlopen(/usr/local/lib64/ceph/erasure-code/libec_jerasure.so): /usr/local/lib64/ceph/erasure-code/libec_jerasure.so: cannot open shared object file: No such file or directory

修改方式:编译时build目录的修改条目为 去掉 /local CMAKE_INSTALL_PREFIX:PATH=/usr/local _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX:INTERNAL=/usr/local

改完后:

cd build
sed -i 's/CMAKE_INSTALL_PREFIX:PATH=\/usr\/local/CMAKE_INSTALL_PREFIX:PATH=\/usr/g' 
sed -i 's/_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX:INTERNAL=\/usr\/local/_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX:INTERNAL=\/usr/g' 
​
[ build]$ cat -n  | egrep "CMAKE_INSTALL_PREFIX|_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX"
   212  CMAKE_INSTALL_PREFIX:PATH=/usr
  1911  //CMAKE_INSTALL_PREFIX during last run
  1912  _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX:INTERNAL=/usr

2、ceph-osd: 2023-01-04 15:18:11.277 7f448d846a80 -1 load: jerasure expected plugin /usr/lib64/ceph/erasure-code/libec_lrc.so version IT-NOTFOUND but it claims to be 14.2.22 instead

修改方式:src/

就是先把检查版本给OFF掉,然后在后面强制将版本设置为14.2.22。

 180  option(ENABLE_GIT_VERSION "build Ceph with git version string" OFF)# ON ---> OFF
   181  if(${ENABLE_GIT_VERSION})
   182    get_git_head_revision(GIT_REFSPEC CEPH_GIT_VER)
   183    git_describe(CEPH_GIT_NICE_VER --always)
   184    #if building from a source tarball via make-dist
   185    if(${CEPH_GIT_VER} STREQUAL "GITDIR-NOTFOUND")
   186      message(STATUS "Ceph/.git directory not found, parsing ${CMAKE_CURRENT_SOURCE_DIR}/.git_version for CEPH_GIT_VER and CEPH_GIT_NICE_VER")
   187      file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/.git_version CEPH_GIT_SHA_AND_TAG)
   188      list(GET CEPH_GIT_SHA_AND_TAG 0 CEPH_GIT_VER)
   189      list(GET CEPH_GIT_SHA_AND_TAG 1 CEPH_GIT_NICE_VER)
   190    endif(${CEPH_GIT_VER} STREQUAL "GITDIR-NOTFOUND")
   191    # remove 'v' prefix from raw git version
   192    string(SUBSTRING ${CEPH_GIT_NICE_VER} 1 -1 CEPH_GIT_NICE_VER)
   193  else(${ENABLE_GIT_VERSION})
   194    set(CEPH_GIT_VER "no_version")
   195    set(CEPH_GIT_NICE_VER "Development")
   196  endif(${ENABLE_GIT_VERSION})
   197  set(CEPH_GIT_NICE_VER "14.2.22") # --- 添加变量直接覆盖你当下版本
这个错误表明你当前使用的 GCC 版本低于 Ceph 所需的最低版本。Ceph 14.2.22 需要 GCC 7 或者更高版本,因为它使用了 C++17 的一些特性。
​
你可以使用以下命令来查看你当前的 GCC 版本:
​
```bash
gcc --version
```
​
如果你的 GCC 版本低于 7,你需要升级你的 GCC。在 CentOS 7 上,你可以使用以下命令来安装 GCC 7:
​
```bash
sudo yum install centos-release-scl
sudo yum install devtoolset-7-gcc*
```
​
安装完成后,你需要启用新安装的 GCC。你可以使用以下命令来启用:
​
```bash
scl enable devtoolset-7 bash
```
​
这将会在新的 shell 会话中启用 GCC 7。你可以再次使用 `gcc --version` 命令来确认你的 GCC 版本。
​
注意,`scl enable` 命令只会在当前的 shell 会话中启用 GCC 7。如果你退出了 shell 会话,或者在新的 shell 会话中编译 Ceph,你需要再次运行 `scl enable` 命令。
​

二、将编译后bin下的二进制cp到集群下node进行替换

我的集群二进制都在 /usr/bin/下,其他看自己情况。

替换完之后重启即可