找回密码
 立即注册
首页 业界区 安全 [Ceph 14.2.22] 使用deploy部署多机集群

[Ceph 14.2.22] 使用deploy部署多机集群

周濡霈 2026-1-21 14:45:17
1. 前言


上表中是 Ceph 官方文档给出的 Ceph 14 系列的系统和内核推荐,其中在centos 7、ubuntu 14.04、ubuntu 16.04、ubuntu 18.04上都做了完整的测试。本文将介绍如何在ubuntu 18.04中使用 ceph-deploy 部署 ceph 集群,ceph 版本为14.2.22。
2. 准备

2.1. 集群规划
  1. component name            component type    node ip         node name----------------------------------------------------------------------[mon.node1]               mon               192.168.3.11    node1[mgr.node1]               mgr               192.168.3.11    node1[osd.0]                   osd               192.168.3.11    node1[osd.1]                   osd               192.168.3.12    node2[osd.2]                   osd               192.168.3.13    node3[ceph-deploy]             -                 192.168.3.10    node0
复制代码
在 ceph 集群中,安装了 ceph 软件的并且部署了一系列 ceph 集群服务的主机被称之为 ceph 集群节点。node0 虽然属于管理节点,但它并不属于 ceph 集群,它没有安装任何 ceph 软件,也没有部署任何 ceph 集群服务。
2.2. 新建用户

ceph-deploy 部署 ceph 到不同节点上,是通过 ssh 方式登录到不同节点上,然后执行一系列指令。默认情况下,ssh 需要输入对应的用户名和节点 ip。为了方便管理集群中每一个节点,官方建议为 ceph 集群中每一个节点都创建一个新的相同的用户名。由于 ceph-deploy 是完全自动化脚本,在部署 ceph 集群时,是不支持交互式操作。当使用 ssh 登录到集群中某个节点时,要求输入远程节点的密码,因此必须要设置 ssh 免密登录。同时 ceph-deploy 中使用了大量的 sudo 权限的指令,因此必须要求当前用户免输入密码。
如果想直接将 root 用户作为 ceph 集群用户,可以直接忽略此步骤,本文就是使用的 root 用户,以下创建用户以及用户设置只是一个参考。
2.2.1. 创建一个新用户

在集群所有节点(node1-node3)上执行以下命令:
  1. useradd -d /home/cephtest -m cephtestpasswd cephtest
复制代码
其中cephtest 为用户名,该命令将会在 node1、node2 和 node3 上创建名为 cephtest 的普通用户,用户密码为 cephtest。
2.2.2. 获取免密的 sudo 权限

在集群所有节点(node1-node3)上执行以下命令:
  1. echo "cephtest ALL = (root) NOPASSWD:ALL" > /etc/sudoers.d/cephtestchmod 0440 /etc/sudoers.d/cephtest
复制代码
其中cephtest为用户名,该命令将使得 node1、node2 和 node3 上名为 cephtest 的普通用户获取免密的 root 权限。
2.2.3. 设置 ssh 免密登录

生成 ssh key
在管理节点(node0)上执行ssh-keygen,一路回车,不要输入任何东西。
将 ssh key 拷贝到所有节点上
在管理节点(node0)上执行以下命令:
  1. ssh-copy-id cephtest@192.168.3.11ssh-copy-id cephtest@192.168.3.12ssh-copy-id cephtest@192.168.3.13
复制代码
其中cephtest为用户名,192.168.3.11、192.168.3.12、192.168.3.13为集群节点的 ip 地址,该命令将 ssh key 分发到集群所有节点中。
以上 2 个步骤是设置免密登录,以下的步骤是设置免用户登录。由前述可知,ssh 远程登录需要指定用户名和节点 ip。当然 ceph-deploy 可以通过--username参数指定用户名。此处建议在~/.ssh/config文件中指定用户名,可以避免 ceph-deploy 部署时要求指定用户。
2.2.4. 设置 ssh 免用户登录

2.2.4.1. 修改/etc/hosts

在集群节点(node1-node3)和管理节点(node0)的/etc/hosts文件中追以下相同内容:
  1. 192.168.3.11 node1192.168.3.12 node2192.168.3.13 node3
复制代码
2.2.4.2. 修改~/.ssh/config

在管理节点(node0)上,新建~/.ssh/config文件,并添加以下内容:
  1. Host node1        Hostname node1        User cephtestHost node2        Hostname node2        User cephtestHost node3        Hostname node3        User cephtest
复制代码
2.2.4.3. 修改 hostname

建议统一修改集群节点的主机名,在集群节点之间来回切换时,很容易通过终端主机名查看该主机是哪个节点。
在集群所有节点(node1-node3)上执行以下命令:
  1. hostname node1hostname node2hostname node3
复制代码
其中node1、node2和node3是集群节点的 hostname。
通过以上步骤,就可以直接用形如ssh node1方式直接远程登录集群中其他节点上,而不用输入用户名和密码。
2.3. 设置时间同步

在 ceph 集群中,osd 进程心跳机制,mon 进程维护集群 map,要求每个主机之间时间同步,否则会影响集群。在 ubuntu 系统上可以安装 ntp 服务和 ntpdate 客户端工具实现时间同步。在集群节点中只需要一个 ntp 服务,其他集群节点安装 ntpdate 客户端工具即可。
2.3.1. 安装 ntp 服务

在集群节点(node1)上执行以下命令:
  1. apt install ntp
复制代码
2.3.2. 安装 ntpdate 客户端

在集群节点(node2-node3)上执行以下命令:
  1. apt install ntpdate
复制代码
以上将 node1 作为 ntp 服务端,node2-node3 为 ntp 客户端,node2-node3 通过 ntpdate 工具实现与 node1 时间同步。
2.4. 安装 ceph-deploy

使用 ceph-deploy 部署 ceph 集群,需要下载安装 ceph-deploy 工具。ubuntu 自带 ceph-deploy 安装包,但该版本不一定支持 ceph-14.2.22 版本,需要从 ceph 官方下载 ceph14.2.22 对应版本的 ceph-deploy 工具。
2.4.1. 配置 ceph-14.2.22 软件源

为了加快下载速度,此处使用阿里云开源镜像站,在管理节点(node0)上执行以下命令:
  1. echo "deb https://mirrors.aliyun.com/ceph/debian-nautilus/ bionic main" > /etc/apt/sources.list.d/ceph.list
复制代码
2.4.2. 添加 release key

在管理节点(node0)上执行以下命令
  1. wget -q -O- 'https://mirrors.aliyun.com/ceph/keys/release.asc' | apt-key add -
复制代码
2.4.3. 安装 ceph-deploy

在管理节点(node0)上执行以下命令:
  1. apt install ceph-deploy
复制代码
3. 集群部署

如果之前已经安装了 ceph,无论是哪个版本的,请按照集群卸载步骤执行卸载操作。
3.1. 创建临时目录

ceph-deploy 在部署 ceph 集群过程中会产生一些日志文件、配置文件以及 ceph 必备的文件。为了方便管理,建议创建一个临时目录来存放这些文件。
在管理节点(node0)上执行以下命令:
  1. mkdir cluster
复制代码
上述命令创建一个名为 clustre 的临时文件夹,之后所有的关于 ceph-deploy 的操作都必须在cluster目录下执行。
3.2. 初始化集群

在管理节点(node0)上执行以下命令:
  1. ceph-deploy new node1
复制代码
其中 node1 为集群 MON 节点的 hostname,该命令将初始化 Ceph 集群 conf 和 keyring 文件并初始化 MON 名字,可以同时指定多个 MON 节点 hostname。
3.3. 安装 ceph 软件

在管理节点(node0)上执行以下命令:
  1. ceph-deploy install node1 node2 node3 \--repo-url=https://mirrors.aliyun.com/ceph/debian-nautilus \--gpg-url=https://mirrors.aliyun.com/ceph/keys/release.asc
复制代码
其中node1 node2和node3为集群节点。--repo-url是 ceph 软件仓库的地址,--gpg-url是 ceph 软件仓库中 key 的地址。默认情况下,ceph-deploy 安装脚本中指定的是 ceph13 版本的地址,所以需要重新指定为 ceph14 版本的地址。上述命令将在 node1、node2 和 node3 上安装 ceph 相关软件,可以同时指定多个 hostname。
3.4. 创建和初始化 mon 进程

在管理节点(node0)上执行以下命令:
  1. ceph-deploy mon create-initial
复制代码
上述命令将会初始化所有的 mon 进程。
3.5. 创建 mgr 进程

在管理节点(node0)上执行以下命令:
  1. ceph-deploy mgr create node1
复制代码
上述命令将在 node1 上创建 mgr 进程。
3.6. 创建 osd 进程

ceph 支持 2 种存储引擎:bluestore和filestore。filestore 模式下,可以看到数据存在哪个目录下,而 bluestore 则无法看到。filestore 是一个过时的技术,在后续版本中逐渐被 Ceph 弃用,filestore 已经没有任何研究价值,因此本文默认以 bluestore 为准。
在管理节点(node0)上执行以下命令:
  1. ceph-deploy osd create --data /dev/sdb node1ceph-deploy osd create --data /dev/sdb node2ceph-deploy osd create --data /dev/sdb node3
复制代码
其中/dev/sdb是磁盘设备,node1、node2和node3是集群节点的 hostname。
3.7. 分发 key

ceph 通过 ceph 命令来管理集群,如果想要使用 ceph 命令,需要将相关的 key 文件和 ceph.conf 文件放到指定路径下。
在管理节点(node0)上执行以下命令:
  1. ceph-deploy admin node1 node2 node3
复制代码
其中node1、node2和node3是集群节点 hostname,该命令将 key 文件和 ceph.conf 文件分发到 node1、node2 和 node3 上,可以同时指定多个 hostname。
3.8. 修改 ceph.client.admin.keyring 权限

普通用户对/etc/ceph/ceph.client.admin.keyring文件没有读权限,在执行 ceph 相关命令的时候,需要读取该文件中的 key 值信息,因此需要为该文件添加普通用户读权限。
在集群所有节点(node1-node3)上执行以下命令:
  1. chmod +r /etc/ceph/ceph.client.admin.keyring
复制代码
3.9. 查看集群状态

在上述分发的任意的一个集群节点(node1、node2、node3)上执行ceph -s便可以查看到集群的状态信息。
  1. ceph -s---------  cluster:    id:     4a7760d1-22b6-49d3-8236-31962c941632    health: HEALTH_WARN            mon is allowing insecure global_id reclaim  services:    mon: 1 daemons, quorum node1 (age 3m)    mgr: node1(active, since 3m)    osd: 3 osds: 3 up (since 80s), 3 in (since 80s)  data:    pools:   0 pools, 0 pgs    objects: 0 objects, 0 B    usage:   3.0 GiB used, 12 GiB / 15 GiB avail    pgs:
复制代码
4. 集群卸载

删除集群很简单,但也容易删除不干净,主要包括:卸载 ceph 软件、清楚磁盘数据、删除逻辑卷。
4.1. 删除 ceph 软件

在管理节点(node0)上执行以下命令:
  1. ceph-deploy purge node1 node2 node3
复制代码
其中node1、node2和node3是集群节点的 hostname,该命令将会删除 node1、node2 和 node3 中 ceph 相关的所有软件,可以同时指定多个 hostname。
4.2. 删除数据

在管理节点(node0)上执行以下命令:
  1. ceph-deploy purgedata node1 node2 node3
复制代码
其中node1、node2和node3是集群节点的 hostname,该命令将会清除 node1、node2 和 node3 中 ceph 所有配置文件和数据文件,可以同时指定多个 hostname。
4.3. 删除密钥

在管理节点(node0)上执行以下命令:
  1. ceph-deploy forgetkeys
复制代码
4.4. 删除逻辑卷

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

在部署 osd 的集群节点上执行以下命令:
  1. vgdisplay -s | grep ceph-----------------------------------------------------------------------------------------------------------------------"ceph-7d7f39a3-f9f1-47ba-88ea-1f9b1c53e7a4" 9.00 GiB  [9.00 GiB  used / 0    free]"ceph-310bbc06-b539-42aa-a7d6-ed430310f95f" 9.00 GiB  [9.00 GiB  used / 0    free]"ceph-4258b146-2d7d-4132-985d-63a2148e6d4a" 9.00 GiB  [9.00 GiB  used / 0    free]
复制代码
其中ceph-7d7f39a3-f9f1-47ba-88ea-1f9b1c53e7a4 就是 vg name。
4.4.2. 删除 osd 逻辑卷

在部署 osd 节点上执行以下命令:
  1. vgremove ceph-7d7f39a3-f9f1-47ba-88ea-1f9b1c53e7a4
复制代码
5. 参考资料


  • https://docs.ceph.com/en/octopus/start/os-recommendations
  • https://docs.ceph.com/en/nautilus/start/

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册