ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2022-01-28 10:33:06  阅读:468  来源: 互联网

标签:ceph dists deploy 离线 Ceph 源码 bionic Linux 节点


Ceph版本:14.2.22
Linux版本:ubuntu-server 18.04

 
 

第一部分 集群组织架构

在这里插入图片描述
注:上图中的管理节点并不属于ceph集群,只是一个普通的主机,没有安装ceph,下文所说的集群节点指的是安装了ceph软件的节点。
 
 

第二部分 下载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 --build=binary -us -ui -uc -j4

注:

  1. 上面制作过程很漫长,另外所有的包全部放在了ceph源码外面,和ceph源码同级目录
  2. 默认会生成2种deb包,一种是带dbg后缀的,一种是不带dbg后缀的;区别在于,dbg包可以用来调试代码。比如:如果想要调试osd进程,需要同时安装ceph-osd和ceph-osd-dbg包

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和dists/bionic目录生成Packages和Release文件,如果只为pools生成Packages和Release文件,在执行apt update时会因为无法找到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 为dists/bionic生成Packages和Release文件

cd package
apt-ftparchive release dists/bionic | tee -a dists/Release | mv dists/Release dists/bionic

 

4.5 生成签名

签名会根据上面的Release文件和用户的key生成Release.gpg文件,因此首先要生成用户key,然后再分别为pools和dists/bionic单独生成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 为dists/bionic生成InRelease和Release.gpg文件

cd package
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 -a --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]

4.5.5 添加key到系统

使用apt update时,必须将public key添加到系统中,否则会提示NO_PUBKEY错误信息

cd package
sudo apt-key add keys/release.asc

最终的目录结构如下

├── 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/下,该步骤可以省略,因为ceph-deploy在安装ceph时会自动创建该文件

echo "deb http://192.168.3.10/ceph bionic main" | sudo tee -a /etc/apt/sources.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集群中,每一个主机是一个节点,为了方便管理集群,建议同时修改主机名

5.1.1 修改/etc/hostname文件

登录每一个集群节点,修改/etc/hostname文件,用以下内容覆盖文件中原内容

node1

5.1.2 修改/etc/hosts文件

登录每一个 集群节点,修改/etc/hosts文件

192.168.3.11 node1 #模拟真实ip地址

注:

  1. 实际环境,每个主机都有一个真正的ip,因此为每虚拟机增加一个虚拟网卡,ip地址范围192.168.3.11-192.168.3.12
  2. 其他节点主机的修改以此类推

5.1.3 添加节点host到管理节点

在ssh远程登录一个节点时,默认情况下必须要输入对应的ip地址,为了方便管理集群,避免直接使用ip,可以将集群节点的主机名和ip添加到管理节点hosts文件中

192.168.3.11 node1
192.168.3.12 node2
192.168.3.13 node3

 

5.2 新建用户并获取sudo权限

ceph-deploy安装ceph软件到不同主机的过程中需要以拥有sudo权限的用户登录到不同主机上,因此官方推荐为集群中每一个主机新建一个用户,用户名可以相同。但用户名不能为ceph

5.2.1 创建一个新用户

登录每一个 集群节点,执行以下命令,格式如下
sudo useradd -d /home/用户名 -m 用户名 sudo passwd 用户名

sudo useradd -d /home/siscte -m siscte
sudo passwd siscte

5.2.2 新用户获取sudo权限

登录每一个 集群节点,执行以下命令 ,格式如下
echo "用户名 ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/用户名 sudo chmod 0440 /etc/sudoers.d/用户名

echo "siscte ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/siscte
sudo chmod 0440 /etc/sudoers.d/siscte

注:

  1. 如果当前用户是root,可以忽略2.2.1和2.2.2
  2. 如果非要新建一个新的普通用户,则必须执行2.2.1和2.2.2
  3. 如果当前已经是普通用户,不建议按照官方说的再新建一个新用户,只需要为当前用户获取sudo权限即可
     

5.3 设置免密登录

ceph-deploy工具安装ceph软件到不同主机的过程中需要以拥有sudo权限的用户登录到不同主机上,如果用户是普通用户,必然需要输入密码。但是ceph-deploy工具在实现过程中完全采取自动化方式去部署软件,不支持交互式操作。所以需要设置免密

5.3.1 生成ssh key

登录 管理节点,执行以下命令,一路回车,不要输入任何东西

ssh-keygen

5.3.2 将ssh key拷贝到所有主机上

登录 管理节点,执行以下命令 ,格式如下:
ssh-copy-id 用户名@主机名 或者 ssh-copy-id 用户名@ip地址

ssh-copy-id siscte@node1
ssh-copy-id siscte@node2
ssh-copy-id siscte@node3

注:此处免密方式是使用ssh key管理方式

5.3.3 设置免用户名登录

ceph-deploy部署ceph软件到集群中各个节点的过程,实际上是通过ssh远程登录的方式,而ssh远程登录需要指定用户名和密码。当然ceph-deploy可以通过 --username 参数指定用户名。此处建议在 ~/.ssh/config 文件中指定用户名,可以避免ceph-deploy部署时要求指定用户。
登录 管理节点,使用vim新建~/.ssh/config,并添加以下内容

Host node1
   Hostname node1
   User siscte
Host node2
   Hostname node2
   User siscte
Host node3
   Hostname node3
   User siscte

 

5.4 设置时间同步

ceph集群,OSD进程心跳机制,MON进程维护集群map,要求每个主机之间时间同步,否则会影响集群。登录每一个 集群节点,执行以下命令,安装ntp

sudo apt install ntp

5.5 安装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.6 创建一个集群

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

ceph-deploy new node1

5.7 修改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.8 安装ceph软件

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

ceph-deploy install node1 node2 node3

5.9 创建和初始化mon进程

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

ceph-deploy mon create-initial

5.10 创建mgr进程

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

ceph-deploy mgr create node1

5.11 创建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.12 将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.13 修改ceph.client.admin.keyring权限

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

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

5.14 查看集群状态

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

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

标签:ceph,dists,deploy,离线,Ceph,源码,bionic,Linux,节点
来源: https://www.cnblogs.com/siscte/p/15852031.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有