[Ceph 14.2.22] 使用deploy部署多机集群
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. 集群规划
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 种存储引擎:bluestore和filestore。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

浙公网安备 33010602011771号