0
点赞
收藏
分享

微信扫一扫

Linux下离线部署指定版本的Ceph集群

MaxWen 2022-01-20 阅读 117
linuxceph



第一部分 集群组织架构

在这里插入图片描述

第二部分 下载Ceph源码

2.1 配置Ceph源码镜像源

Ceph源码是托管在Github上,由于某些原因,国内访问Github网站很慢,所以需要从其他途径加速获取源码。Github官方给出了几个Github的镜像网站:

  1. https://github.com.cnpmjs.org/
  2. https://hub.fastgit.org/

本地需要修改~/.gitconfig文件,才可以从上面镜像网站获取源码,相关配置如下:

#Github镜像源
[url "https://hub.fastgit.org/"]
        insteadOf = https://github.com/

注:国内也有Ceph源码的镜像,比如Gitee、Gitcode,但不建议从这些网站上获取。因为Ceph源码中使用了大量的第三方源码作为自己的子模块,而Gitee、Gitcode不一定将这些子模块全部同步过来。相反,上面的两个镜像网站和Github完全是同步的,所以可以放心使用。

2.2 克隆ceph源码

Ceph源码很大,可根据需要,选择性下载哪个版本或哪个分支。本案例拉取v14.2.22版本的源码。版本和分支的区别:版本的代码不会随时间改变,被定格在打标签的那一刻;分支的代码会随时间不断开发改变。

# 根据自己需要更换 v14.2.22 为自己需要的版本
git clone -b v14.2.22 --depth=1 https://github.com/ceph/ceph.git

2.3 同步子模块源码

Ceph源码中使用大量的子模块,在 ceph/.gitmodules 文件中罗列出所有的子模块。在后面执行do_cmake.sh 脚本生成 build 目录时,do_cmake.sh 首先同步子模块源码到指定目录。根据经验,在同步子模块源码时很容易出现同步不全,或同步失败,这直接会导致构建 build 目录失败。为了防止此状况发生,建议提前手动去同步子模块源码。

git submodule update --init --recursive

注:如果发现同步子模块源码失败,重复执行上面命令即可。如果中断同步子模块源码,此时必须要到相应目录下删除该子模块所有文件,尤其是 .git 文件。如果不删除 .git,重复执行上面命令时,则会直接跳过同步该子模块,导致子模块源码缺失。这个问题无法被检测到,因为执行完上面命令后,依然会显示同步成功,而不会提示哪个子模块没有被同步。


第三部分 源码编译

3.1 安装依赖

Ceph源码安装依赖很简单,直接执行源码根目录下install-deps.sh脚本,根据经验发现,该脚本存在一些问题,需要稍微修改一下。

3.1.1 修改launchpad源

脚本会安装gcc环境,安装包源url只需要保留一个即可,修改install-deps.sh脚本中的函数ensure_decent_gcc_on_ubuntu

deb [lang=none] http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu $codename main
#deb [arch=amd64 lang=none] http://mirror.cs.uchicago.edu/ubuntu-toolchain-r $codename main
#deb [arch=amd64,i386 lang=none] http://mirror.yandex.ru/mirrors/launchpad/ubuntu-toolchain-r $codename main

3.1.2 屏蔽调用安装libboost的部分

脚本会安装 libboost 库,编译源码过程会再次下载 boost 源码包,因此脚本中不应该再安装 libboost,屏蔽install-deps.sh以下2个地方

 *Bionic*)
        #install_boost_on_ubuntu bionic
  ;;

3.1.3 设置pypi镜像源

脚本会安装pypi库,默认url下载很慢,需要设置pypi库镜像源。创建 ~/.pip/pip.conf 文件,并追加以下内容

[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com

3.1.4 安装其他依赖

编译源码过程中会遇到很多函数用到zstd库,默认情况下ubuntu18.04只安装了libzstd1,但没有用,需要安装 libzstd1-dev

sudo apt install libzstd1-dev

3.1.5 执行脚本

./install-deps.sh


3.2 编译Ceph源码

此步骤原则上是可以直接跳过,因为下文中在制作deb包执行dpkg-buildpackage命令时,会自动去编译;为了防止编译过程中出现错误并及时解决报错问题,建议先编译源码。

3.2.1 开启debug模式

如果想要调试Ceph源码,需要设置编译源码模式为debug模式,默认编译模式为release模式,该模式是不能调试源码。向 ceph/CMakeList 文件的 set(VERSION 14.2.22) 后追加以下内容

set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -Wall -g")
set(CMAKE_CXX_FLAGS "-O0 -Wall -g")
set(CMAKE_C_FLAGS "-O0 -Wall -g ")

3.2.2 构建build目录

直接执行do_cmake脚本,该脚本会进行一系列检测,包括源码是不是完整,依赖是不是都安装了等等。如果出现问题,构建出的build目录是不完整的,最直接的影响是无法生成makefile文件,导致无法编译。

./do_cmake.sh

3.2.3 下载boost源码包

在执行make编译的时候,脚本会自动下载 boost_1_72_0.tar.bz2,由于下载地址和网络问题,下载很慢,为了节省时间,提前手动下载,下载地址:https://download.ceph.com/qa/boost_1_72_0.tar.bz2,将下载的好的包放在ceph/build/boost/src即可。

3.2.4 编译

使用make编译必须要到ceph/build目录下执行,ceph源码可以单独编译某一个模块,也可以全部编译。使用make可以指定多线程编译,提高编译速度,但要合理分配线程数,建议使用4线程编译即可。

#方式1:全部编译
make all -j4
#方式2:单独编译osd某块
make ceph-osd -j4
#查看所有模块
make help

注:源码编译会生成很多库文件和二进制文件,分别放在ceph/build/lib和ceph/build/bin目录下


第四部分 制作本地软件仓库源

4.1 制作deb包

Ceph官网提供制作deb包方法,经过测试发现会有问题。如果直接执行dpkg-buildpackage,会出现签证问题,导致制作失败。此处应该禁用签证,并开启多线程。在ceph源码根目录下执行以下命令

dpkg-buildpackage -us -ui -uc -j4

注:上面制作过程很漫长,尤其是在打包源码,源码总大小达8G左右。另外所有的包全部放在了ceph源码外面,和ceph源码同级目录。

4.2 创建Ceph软件目录

mkdir -p package/pools
mkdir -p package/keys
mkdir -p package/dists/bionic/main/binary-i386
mkdir -p package/dists/bionic/main/binary-amd64

注:bionic是ubuntu18.04的名字

4.3 将所有deb包放到pools下

mv *.deb package/pools


4.4 生成Packages和Release文件

经过测试发现,需要分别为pools和main目录生成Packages和Release文件,如果只为pools生成Packages和Release文件,在执行apt update时会因为无法找到Packages和Release文件而报错。

4.4.1 为pools生成Packages和Release文件

cd package
#生成Packages文件
apt-ftparchive packages pools | tee -a dists/bionic/main/binary-i386/Packages
gzip -c dists/bionic/main/binary-i386/Packages > dists/bionic/main/binary-i386/Packages.gz
apt-ftparchive packages pools | tee -a dists/bionic/main/binary-amd64/Packages
gzip -c dists/bionic/main/binary-amd64/Packages > dists/bionic/main/binary-amd64/Packages.gz
#生成Release文件
apt-ftparchive release pools | tee -a dists/bionic/main/binary-i386/Release
apt-ftparchive release pools | tee -a dists/bionic/main/binary-amd64/Release

4.4.2 为main生成Packages和Release文件

cd package/dists/bionic
apt-ftparchive packages main | tee -a dists/bionic/Packages
apt-ftparchive release main | tee -a dists/bionic/Release


4.5 生成签名

签名会根据上面的Release文件和用户的key生成Release.gpg文件,因此首先要生成用户key,然后再分别为pools和main单独生成Release.gpg文件。

4.5.1 生成key

gpg --gen-key

4.5.2 为pools生成InRelease和Release.gpg文件

cd package
gpg --clearsign -o dists/bionic/main/binary-i386/InRelease dists/bionic/main/binary-i386/Release
gpg -abs -o dists/bionic/main/binary-i386/Release.gpg dists/bionic/main/binary-i386/Release
gpg --clearsign -o dists/bionic/main/binary-amd64/InRelease dists/bionic/main/binary-amd64/Release
gpg -abs -o dists/bionic/main/binary-amd64/Release.gpg dists/bionic/main/binary-amd64/Release

4.5.3 为main生成InRelease和Release.gpg文件

cd package/dists/bionic
gpg --clearsign -o dists/bionic/InRelease dists/bionic/Release
gpg -abs -o dists/bionic/Release.gpg dists/bionic/Release

4.5.4 导出key文件

cd package
gpg --export 857BAAF7E89478946A67362DF07995A7191CA249 | tee -a keys/release.asc

注:857BAAF7E89478946A67362DF07995A7191CA249是pubkey id,可以通过以下命令查看并获取

gpg -k

结果如下:

/home/admins/.gnupg/pubring.kbx
-------------------------------
pub   rsa3072 2022-01-17 [SC] [expires: 2024-01-17]
      857BAAF7E89478946A67362DF07995A7191CA249
uid           [ultimate] ceph-14.2.22 <1146038583@qq.com>
sub   rsa3072 2022-01-17 [E] [expires: 2024-01-17]

最终的目录结构如下

├── dists
│   └── bionic
│       ├── InRelease
│       ├── main
│       │   ├── binary-amd64
│       │   │   ├── InRelease
│       │   │   ├── Packages
│       │   │   ├── Packages.gz
│       │   │   ├── Release
│       │   │   └── Release.gpg
│       │   └── binary-i386
│       │       ├── InRelease
│       │       ├── Packages
│       │       ├── Packages.gz
│       │       ├── Release
│       │       └── Release.gpg
│       ├── Release
│       └── Release.gpg
├── keys
│   └── release.asc
└── pools
    ├── ceph_14.2.22-1_amd64.deb
    ├── ceph-base_14.2.22-1_amd64.deb
    ├── ceph-base-dbg_14.2.22-1_amd64.deb
    ├── ceph-common_14.2.22-1_amd64.deb
    ├── ceph-common-dbg_14.2.22-1_amd64.deb
    ├── cephfs-shell_14.2.22-1_all.deb
    ├── ceph-fuse_14.2.22-1_amd64.deb
    ├── ceph-fuse-dbg_14.2.22-1_amd64.deb


4.6 添加ceph.list

创建ceph.list文件,并将该文件添加到/etc/apt/source.list.d/下

echo "deb http://192.168.3.10/ceph bionic main" | sudo tee -a /etc/apt/source.list.d/ceph.list

注:上面采用http方式,需要安装apache服务才可以使用

4.7 安装Apache服务

sudo apt install apache2

安装完之后,浏览器访问http://192.168.3.10,默认是apche界面,需要设置,以便可以访问http://192.168.3.10/ceph

sudo ln -sf /home/admins/package /var/www/html/ceph



第五部分 集群部署

如果之前已经安装了ceph,无论是哪个版本的,请按照 第六部分 集群卸载 步骤执行卸载动作

5.1 安装ceph-deploy部署工具

ubuntu仓库默认自带了ceph-deploy工具,但不建议安装此版本,该版本太低,可能不支持ceph 14.2.22版本相关操作。因此需要到官方下载最新版本的,下载地址:ceph-deploy_2.0.1。下载完之后,执行以下命令安装即可

sudo dpkg -i ceph-deploy_2.0.1_all.deb

5.2 创建一个集群

登录 管理节点,执行以下命令,在node1节点上部署一个新的集群,格式如下
ceph-deploy new 主机名

ceph-deploy new node1

5.3 修改ceph-deploy配置文件

默认情况下,ceph-deploy安装脚本中指定的是ceph13版本的地址,需要重新指定为ceph14版本的地址
登录 管理节点,向~/.cephdeploy.conf文件中追加以下内容

[ceph]
baseurl=http://192.168.3.10/ceph
gpgkey=http://192.168.3.10/ceph/keys/release.asc
default=true

注:

  1. sources.list中ceph软件源地址对ceph-deploy脚本无效,对手动安装ceph有效,因为ceph-deploy安装ceph时会覆盖sources.list中ceph软件源地址
  2. ~/.cephdeploy.conf文件中所有行都必向左顶格,不能有空格,否则会报错

5.4 安装ceph软件

登录 管理节点,执行以下命令,为集群中每一个节点都安装ceph软件,格式如下:
ceph-deploy install 主机名1 主机名2 …

ceph-deploy install node1 node2 node3

5.5 创建和初始化mon进程

登录 管理节点,执行以下命令,在node1节点上初始化mon进程

ceph-deploy mon create-initial

5.6 创建mgr进程

登录 管理节点,执行以下命令,在node1节点上创建mgr进程,格式如下:
ceph-deploy mgr create 主机名

ceph-deploy mgr create node1

5.7 创建osd进程

登录 管理节点,执行以下命令,分别为node1节点、node2节点、node3节点创建osd进程,格式如下:
bluestore模式:
ceph-deploy osd create --data 磁盘设备名 主机名
filestore模式:
ceph-deploy osd create --data 磁盘设备名1 --journal 磁盘设备名2 --filestore 主机名
默认情况下,ceph-deploy采用的是bluestore模式。如果仅仅为了学习或测试,建议采用filestore模式,因为filestore模式下,可以看到数据存在哪个目录下;而bluestore则无法看到
bluestore模式:

ceph-deploy osd create --data /dev/sdb node1
ceph-deploy osd create --data /dev/sdb node2
ceph-deploy osd create --data /dev/sdb node3

filestore模式:

ceph-deploy osd create --data /dev/sdb --journal /dev/sdc --filestore node1
ceph-deploy osd create --data /dev/sdb --journal /dev/sdc --filestore node2
ceph-deploy osd create --data /dev/sdb --journal /dev/sdc --filestore node3

5.8 将ceph.conf和ceph.client.admin.keyring添加到/etc/ceph目录下

ceph通过ceph命令来管理集群,如果想要使用ceph命令,需要将相关的key文件和ceph.conf文件放到指定路径下
登录 管理节点,执行以下命令,将key文件和ceph.conf文件分发到每一个集群节点上,格式如下
ceph-deploy admin 主机名1 主机名2 …

ceph-deploy admin node1 node2 node3

注: 不需要分发到所有集群节点上,如果想要在其他主机上也能使用ceph命令,重复此步骤,将节点名更改为对应节点
如果之前有安装过ceph,并且ceph相关的文件没有删除干净,使用下面命令

5.9 修改ceph.client.admin.keyring权限

登录每一个 集群节点,执行以下命令

sudo chmod +r /etc/ceph/ceph.client.admin.keyring

5.10查看集群状态

登录集群中 任何一个节点,执行以下命令

ceph -s



第六部分 集群卸载

删除集群很简单,但也容易删除不干净,主要包括:卸载ceph软件、删除逻辑卷

6.1 卸载ceph

6.1.1 删除ceph软件

登录 管理节点,执行以下命令,格式如下:
ceph-deploy purge 主机名1 主机名2 …

ceph-deploy purge node1 node2 node3

6.1.2 删除数据

登录 管理节点,执行以下命令,格式如下:
ceph-deploy purgedata 主机名1 主机名2 …

ceph-deploy purgedata node1 node2 node3

6.1.3 删除密钥

登录 管理节点,执行以下命令

ceph-deploy forgetkeys


6.2 删除逻辑卷

ceph-deploy在创建osd时,会将每个osd对应的硬盘以逻辑卷的形式挂在到系统中。如果不删除osd对应的逻辑卷,下次再部署相同id的osd时,会发现osd对应的逻辑卷已经存在,直接导致osd创建失败。

6.2.1 查看osd 逻辑卷

登录每一个 集群节点,执行以下命令

sudo vgdisplay 

结果如下:

  --- Volume group ---
  VG Name               ceph-38503e2e-ff3c-4513-ae4c-27197145c4ac
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <10.00 GiB
  PE Size               4.00 MiB
  Total PE              2559
  Alloc PE / Size       2559 / <10.00 GiB
  Free  PE / Size       0 / 0   
  VG UUID               x0XARi-ztWg-0LI8-y3GS-FbBM-zMQZ-Z6Yhjq
   
  --- Volume group ---
  VG Name               ceph-86ebc595-b0ed-4020-a5a3-469fb43f56db
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <10.00 GiB
  PE Size               4.00 MiB
  Total PE              2559
  Alloc PE / Size       2559 / <10.00 GiB
  Free  PE / Size       0 / 0   
  VG UUID               jLj3vl-EgKz-vqxf-18P4-06pW-2JzD-zk4krZ
  ...... 

6.2.2 删除osd逻辑卷

登录每一个 集群节点,执行以下命令,格式如下:
sudo vgremove VG Name

sudo vgremove ceph-38503e2e-ff3c-4513-ae4c-27197145c4ac
举报

相关推荐

0 条评论