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

1. 前言

os-recommend

上表中是 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. 集群规划

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)上执行以下命令:

useradd -d /home/cephtest -m cephtest
passwd cephtest

其中cephtest 为用户名,该命令将会在 node1、node2 和 node3 上创建名为 cephtest 的普通用户,用户密码为 cephtest。

2.2.2. 获取免密的 sudo 权限

在集群所有节点(node1-node3)上执行以下命令:

echo "cephtest ALL = (root) NOPASSWD:ALL" > /etc/sudoers.d/cephtest
chmod 0440 /etc/sudoers.d/cephtest

其中cephtest为用户名,该命令将使得 node1、node2 和 node3 上名为 cephtest 的普通用户获取免密的 root 权限。

2.2.3. 设置 ssh 免密登录

生成 ssh key
在管理节点(node0)上执行ssh-keygen,一路回车,不要输入任何东西。

将 ssh key 拷贝到所有节点上
在管理节点(node0)上执行以下命令:

ssh-copy-id cephtest@192.168.3.11
ssh-copy-id cephtest@192.168.3.12
ssh-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文件中追以下相同内容:

192.168.3.11 node1
192.168.3.12 node2
192.168.3.13 node3

2.2.4.2. 修改~/.ssh/config

在管理节点(node0)上,新建~/.ssh/config文件,并添加以下内容:

Host node1
	Hostname node1
	User cephtest
Host node2
	Hostname node2
	User cephtest
Host node3
	Hostname node3
	User cephtest

2.2.4.3. 修改 hostname

建议统一修改集群节点的主机名,在集群节点之间来回切换时,很容易通过终端主机名查看该主机是哪个节点。
在集群所有节点(node1-node3)上执行以下命令:

hostname node1
hostname node2
hostname node3

其中node1、node2和node3是集群节点的 hostname。

通过以上步骤,就可以直接用形如ssh node1方式直接远程登录集群中其他节点上,而不用输入用户名和密码。

2.3. 设置时间同步

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

2.3.1. 安装 ntp 服务

在集群节点(node1)上执行以下命令:

apt install ntp

2.3.2. 安装 ntpdate 客户端

在集群节点(node2-node3)上执行以下命令:

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)上执行以下命令:

echo "deb https://mirrors.aliyun.com/ceph/debian-nautilus/ bionic main" > /etc/apt/sources.list.d/ceph.list

2.4.2. 添加 release key

在管理节点(node0)上执行以下命令

wget -q -O- 'https://mirrors.aliyun.com/ceph/keys/release.asc' | apt-key add -

2.4.3. 安装 ceph-deploy

在管理节点(node0)上执行以下命令:

apt install ceph-deploy

3. 集群部署

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

3.1. 创建临时目录

ceph-deploy 在部署 ceph 集群过程中会产生一些日志文件、配置文件以及 ceph 必备的文件。为了方便管理,建议创建一个临时目录来存放这些文件。
在管理节点(node0)上执行以下命令:

mkdir cluster

上述命令创建一个名为 clustre 的临时文件夹,之后所有的关于 ceph-deploy 的操作都必须在cluster目录下执行。

3.2. 初始化集群

在管理节点(node0)上执行以下命令:

ceph-deploy new node1

其中 node1 为集群 MON 节点的 hostname,该命令将初始化 Ceph 集群 conf 和 keyring 文件并初始化 MON 名字,可以同时指定多个 MON 节点 hostname。

3.3. 安装 ceph 软件

在管理节点(node0)上执行以下命令:

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)上执行以下命令:

ceph-deploy mon create-initial

上述命令将会初始化所有的 mon 进程。

3.5. 创建 mgr 进程

在管理节点(node0)上执行以下命令:

ceph-deploy mgr create node1

上述命令将在 node1 上创建 mgr 进程。

3.6. 创建 osd 进程

ceph 支持 2 种存储引擎:bluestorefilestore。filestore 模式下,可以看到数据存在哪个目录下,而 bluestore 则无法看到。filestore 是一个过时的技术,在后续版本中逐渐被 Ceph 弃用,filestore 已经没有任何研究价值,因此本文默认以 bluestore 为准。

在管理节点(node0)上执行以下命令:

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

其中/dev/sdb是磁盘设备,node1、node2和node3是集群节点的 hostname。

3.7. 分发 key

ceph 通过 ceph 命令来管理集群,如果想要使用 ceph 命令,需要将相关的 key 文件和 ceph.conf 文件放到指定路径下。
在管理节点(node0)上执行以下命令:

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)上执行以下命令:

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

3.9. 查看集群状态

在上述分发的任意的一个集群节点(node1、node2、node3)上执行ceph -s便可以查看到集群的状态信息。

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)上执行以下命令:

ceph-deploy purge node1 node2 node3

其中node1、node2和node3是集群节点的 hostname,该命令将会删除 node1、node2 和 node3 中 ceph 相关的所有软件,可以同时指定多个 hostname。

4.2. 删除数据

在管理节点(node0)上执行以下命令:

ceph-deploy purgedata node1 node2 node3

其中node1、node2和node3是集群节点的 hostname,该命令将会清除 node1、node2 和 node3 中 ceph 所有配置文件和数据文件,可以同时指定多个 hostname。

4.3. 删除密钥

在管理节点(node0)上执行以下命令:

ceph-deploy forgetkeys

4.4. 删除逻辑卷

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

4.4.1. 查看 osd 逻辑卷

在部署 osd 的集群节点上执行以下命令:

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 节点上执行以下命令:

vgremove ceph-7d7f39a3-f9f1-47ba-88ea-1f9b1c53e7a4

5. 参考资料

posted @ 2026-01-21 14:05  CC在认真做笔记  阅读(6)  评论(0)    收藏  举报