Ceph集群(一)

1. Ceph简介

不管你是想为云平台提供 Ceph 对象存储和/或 Ceph 块设备服务、部署 Ceph 文件系统还是将 Ceph 用于其他目的,所有 Ceph 存储集群部署都从设置每个 Ceph 节点、您的网络和 Ceph 开始存储集群。一个 Ceph 存储集群至少需要一个 Ceph Monitor、Ceph Manager 和 Ceph OSD(对象存储守护进程)。运行 Ceph 文件系统客户端时也需要 Ceph 元数据服务器。

1.1 Ceph组件

image.png
Monitor:Ceph 监视器(ceph-mon)维护集群状态的映射,包括监视器映射、管理器映射、OSD 映射、MDS 映射和 CRUSH 映射。这些映射是 Ceph 守护进程相互协调所需的关键集群状态。监视器还负责管理守护进程和客户端之间的身份验证。通常至少需要三个监视器才能实现冗余和高可用性。

Manager :Ceph 管理器守护进程 (ceph-mgr) 负责跟踪运行时指标和 Ceph 集群的当前状态,包括存储利用率、当前性能指标和系统负载。 Ceph 管理器守护进程还托管基于 Python 的模块来管理和公开 Ceph 集群信息,包括基于 Web 的 Ceph 仪表板和 REST API。高可用性通常至少需要两个管理器。

OSD:Ceph OSD(对象存储守护进程,ceph-osd)存储数据,处理数据复制、恢复、重新平衡,并通过检查其他 Ceph OSD 守护进程的心跳来向 Ceph 监视器和管理器提供一些监控信息。通常至少需要 3 个 Ceph OSD 来实现冗余和高可用性。

MDS:Ceph 元数据服务器(MDS,ceph-mds)代表 Ceph 文件系统存储元数据(即 Ceph 块设备和 Ceph 对象存储不使用 MDS)。 Ceph 元数据服务器允许 POSIX 文件系统用户执行基本命令(如 ls、find 等),而不会给 Ceph 存储集群带来巨大负担。

Ceph 将数据作为对象存储在逻辑存储池中。使用 CRUSH 算法,Ceph 计算出哪个归置组应该包含该对象,并进一步计算出哪个 Ceph OSD Daemon 应该存储该归置组。 CRUSH 算法使 Ceph 存储集群能够动态扩展、重新平衡和恢复。

1.2 Ceph体系结构

Ceph 在一个统一的系统中独特地提供对象、块和文件存储。 Ceph 高度可靠、易于管理且免费。 Ceph 的强大功能可以改变您公司的 IT 基础架构以及您管理大量数据的能力。 Ceph 提供非凡的可扩展性——成千上万的客户端访问 PB 到 EB 的数据。 Ceph 节点利用商品硬件和智能守护进程,而 Ceph 存储集群容纳大量节点,这些节点相互通信以动态复制和重新分配数据。


image.png

1.3 数据的存储

Ceph 存储集群从 Ceph 客户端接收数据——无论是通过 Ceph 块设备、Ceph 对象存储、Ceph 文件系统还是您使用 librados 创建的自定义实现——这些数据存储为 RADOS 对象。每个对象都存储在对象存储设备上。 Ceph OSD 守护进程处理存储驱动器上的读、写和复制操作。使用较旧的 Filestore 后端,每个 RADOS 对象都作为一个单独的文件存储在传统文件系统(通常是 XFS)上。使用新的和默认的 BlueStore 后端,对象以类似整体数据库的方式存储。


image.png

Ceph OSD 守护进程将数据作为对象存储在平面命名空间中(例如,没有目录层次结构)。对象具有标识符、二进制数据和由一组名称/值对组成的元数据。语义完全取决于 Ceph 客户端。例如,CephFS 使用元数据来存储文件属性,例如文件所有者、创建日期、上次修改日期等。


image.png

对象 ID 在整个集群中是唯一的,而不仅仅是本地文件系统。

1.4 可扩展性和高可用性

在传统架构中,客户端与集中式组件(例如,网关、代理、API、门面等)对话,后者充当复杂子系统的单一入口点。这对性能和可扩展性施加了限制,同时引入了单点故障(即,如果集中式组件出现故障,整个系统也会出现故障)。

Ceph 消除了集中式网关,使客户端能够直接与 Ceph OSD 守护进程交互。 Ceph OSD 守护进程在其他 Ceph 节点上创建对象副本,以确保数据安全和高可用性。 Ceph 还使用一组监视器来确保高可用性。为了消除中心化,Ceph 使用了一种叫做 CRUSH 的算法。

1.4.1 CRUSH 简介

Ceph 客户端和 Ceph OSD 守护进程都使用 CRUSH 算法来有效地计算有关对象位置的信息,而不必依赖中央查找表。与旧方法相比,CRUSH 提供了更好的数据管理机制,并通过将工作干净地分配给集群中的所有客户端和 OSD 守护程序来实现大规模扩展。 CRUSH 使用智能数据复制来确保弹性,更适合超大规模存储。以下部分提供了有关 CRUSH 如何工作的更多详细信息。有关 CRUSH 的详细讨论,请参阅 CRUSH - Controlled, Scalable, Decentralized Placement of Replicated Data.

1.4.2 集群运行图

Ceph 依赖于具有集群拓扑知识的 Ceph 客户端和 Ceph OSD 守护进程,其中包括 5 个统称为“集群映射”的映射:

  • Monitor Map:包含集群fsid、每个监视器的位置、名称地址和端口。它还指示当前时期、地图创建时间以及上次更改时间。要查看监视器映射,请执行 ceph mon dump。

  • OSD Map:包含集群 fsid、映射创建和上次修改时间、池列表、副本大小、PG 编号、OSD 列表及其状态(例如,up、in)。要查看 OSD 映射,请执行 ceph osd dump。

  • PG Map:包含 PG 版本、它的时间戳、最后一个 OSD 映射 epoch、完整比率以及每个归置组的详细信息,例如 PG ID、Up Set、Acting Set、PG 的状态(例如、active + clean),以及每个池的数据使用统计。

  • CRUSH Map:包含存储设备列表、故障域层次结构(例如,设备、主机、机架、行、房间等)以及存储数据时遍历层次结构的规则。要查看 CRUSH 映射,请执行 ceph osd getcrushmap -o {filename};然后,通过执行 crashtool -d {comp-crushmap-filename} -o {decomp-crushmap-filename} 反编译它。您可以在文本编辑器中或使用 cat 查看反编译的地图。

  • MDS Map:包含当前 MDS 地图时期、地图创建时间以及上次更改时间。它还包含用于存储元数据的池、元数据服务器列表以及哪些元数据服务器正在运行。要查看 MDS 映射,请执行 ceph fs dump。

每个映射维护其操作状态变化的迭代历史。 Ceph Monitor 维护集群映射的主副本,包括集群成员、状态、更改和 Ceph 存储集群的整体健康状况

1.4.3 高可用监视器

在 Ceph 客户端读取或写入数据之前,它们必须联系 Ceph 监视器以获取集群映射的最新副本。 Ceph 存储集群可以使用单个监视器运行;然而,这会引入单点故障(即,如果监视器出现故障,Ceph 客户端无法读取或写入数据)。

为了增加可靠性和容错性,Ceph 支持一组监视器。在监视器集群中,延迟和其他故障可能导致一个或多个监视器落后于集群的当前状态。因此,Ceph 必须在各种监视器实例之间就集群状态达成一致。 Ceph 总是使用大多数监视器(例如,1、2:3、3:5、4:6 等)和 Paxos 算法在监视器之间建立关于集群当前状态的共识。

有关配置监视器的详细信息,请参阅监视器配置参考.

1.4.4 智能守护进程实现超大规模

在许多集群架构中,集群成员资格的主要目的是使集中式接口知道它可以访问哪些节点。然后集中式接口通过双重调度向客户端提供服务——这在 PB 到 EB 规模是一个巨大的瓶颈。

Ceph 消除了瓶颈:Ceph 的 OSD 守护进程和 Ceph 客户端是集群感知的。与 Ceph 客户端一样,每个 Ceph OSD 守护进程都知道集群中的其他 Ceph OSD 守护进程。这使 Ceph OSD 守护进程能够直接与其他 Ceph OSD 守护进程和 Ceph 监视器交互。此外,它还使 Ceph 客户端能够直接与 Ceph OSD 守护进程交互。

Ceph 客户端、Ceph 监视器和 Ceph OSD 守护进程相互交互的能力意味着 Ceph OSD 守护进程可以利用 Ceph 节点的 CPU 和 RAM 轻松执行会使中央服务器陷入困境的任务。利用这种计算能力的能力带来了几个主要好处:

  1. OSD 直接服务客户端:由于任何网络设备对它可以支持的并发连接数都有限制,因此集中式系统在大规模时具有较低的物理限制。通过使 Ceph 客户端能够直接联系 Ceph OSD 守护进程,Ceph 同时提高了性能和总系统容量,同时消除了单点故障。 Ceph 客户端可以在需要时保持会话,并使用特定的 Ceph OSD 守护进程而不是中央服务器。

  2. OSD 成员资格和状态:Ceph OSD 守护进程加入集群并报告它们的状态。在最低级别,Ceph OSD 守护进程状态为 up 或 down,反映它是否正在运行以及是否能够为 Ceph 客户端请求提供服务。如果 Ceph OSD 守护进程关闭并且在 Ceph 存储集群中,此状态可能表示 Ceph OSD 守护进程出现故障。如果 Ceph OSD 守护进程没有运行(例如,它崩溃了),则 Ceph OSD 守护进程无法通知 Ceph 监视器它已关闭。 OSD 会定期向 Ceph Monitor 发送消息(MPGStats pre-luminous,以及一个新的 MOSDBeacon in luminous)。如果 Ceph Monitor 在可配置的时间段后没有看到该消息,则它会将 OSD 标记为关闭。然而,这种机制是一种故障保护。通常,Ceph OSD 守护进程会确定相邻的 OSD 是否关闭并将其报告给 Ceph 监视器。这确保了 Ceph Monitor 是轻量级进程。有关更多详细信息,请参阅监控 OSD 和心跳。

  3. 数据清理:作为维护数据一致性和清洁度的一部分,Ceph OSD 守护进程可以清理对象。也就是说,Ceph OSD 守护进程可以将它们的本地对象元数据与其存储在其他 OSD 上的副本进行比较。清理发生在每个展示位置组的基础上。清理(通常每天执行)会捕获大小和其他元数据不匹配的情况。 Ceph OSD 守护进程还通过逐位比较对象中的数据与其校验和来执行更深入的清理。深度清理(通常每周执行一次)会发现驱动器上在轻度清理中不明显的坏扇区。有关配置清理的详细信息,请参阅数据清洗_。

  4. 复制:与 Ceph 客户端一样,Ceph OSD 守护进程使用 CRUSH 算法,但 Ceph OSD 守护进程使用它来计算对象副本的存储位置(以及重新平衡)。在典型的写入场景中,客户端使用 CRUSH 算法计算对象的存储位置,将对象映射到池和归置组,然后查看 CRUSH 映射以确定归置组的主 OSD。

客户端将对象写入主 OSD 中标识的归置组。然后,主 OSD 和它自己的 CRUSH 映射副本识别二级和三级 OSD 以进行复制,并将对象复制到二级和三级 OSD 中的适当归置组(与附加副本一样多的 OSD),并响应客户端一旦确认对象存储成功。


image.png

有了做副本的能力, OSD 守护进程就可以减轻客户端的复制压力,同时保证了数据的高可靠性和安全性。

1.5 动态集群管理

在伸缩性和高可用性一节,我们解释了 Ceph 如何用 CRUSH 、集群感知性和智能 OSD 守护进程来扩展和维护高可靠性。 Ceph 的关键设计是自治,自修复、智能的 OSD 守护进程。让我们深入了解下 CRUSH 如何运作,如何动态实现现代云存储基础设施的数据放置、重均衡、错误恢复。

1.5.1 关于存储池

Ceph 存储系统支持“池”概念,它是存储对象的逻辑分区。

Ceph 客户端从监视器获取一张集群运行图,并把对象写入存储池。存储池的 size 或副本数、 CRUSH 规则集和归置组数量决定着 Ceph 如何放置数据。

image.png

存储池至少可设置以下参数:

  • 对象的所有权/访问权限;
  • 归置组数量;以及,
  • 使用的 CRUSH 规则集。

详情见调整存储池

1.5.2 PG 映射到 OSD

每个存储池都有很多归置组, CRUSH 动态的把它们映射到 OSD 。 Ceph 客户端要存对象时, CRUSH 将把各对象映射到某个归置组。

把对象映射到归置组在 OSD 和客户端间创建了一个间接层。由于 Ceph 集群必须能增大或缩小、并动态地重均衡。如果让客户端“知道”哪个 OSD 有哪个对象,就会导致客户端和 OSD 紧耦合;相反, CRUSH 算法把对象映射到归置组、然后再把各归置组映射到一或多个 OSD ,这一间接层可以让 Ceph 在 OSD 守护进程和底层设备上线时动态地重均衡。下列图表描述了 CRUSH 如何将对象映射到归置组、再把归置组映射到 OSD 。


image.png

有了集群运行图副本和 CRUSH 算法,客户端就能精确地计算出到哪个 OSD 读、写某特定对象。

1.5.3 计算 PG ID

Ceph 客户端绑定到某监视器时,会索取最新的集群运行图副本,有了此图,客户端就能知道集群内的所有监视器、 OSD 、和元数据服务器。然而它对对象的位置一无所知。

对象位置是计算出来的。

客户端只需输入对象 ID 和存储池,此事简单: Ceph 把数据存在某存储池(如 liverpool )中。当客户端想要存命名对象(如 john 、 paul 、 george 、 ringo 等等)时,它用对象名,一个哈希值、 存储池中的归置组数、存储池名计算归置组。 Ceph 按下列步骤计算 PG ID 。

  1. 客户端输入存储池 ID 和对象 ID (如 pool=”liverpool” 和 object-id=”john” );
  2. CRUSH 拿到对象 ID 并哈希它;
  3. CRUSH 用 PG 数(如 58)对哈希值取模,这就是归置组 ID ;
  4. CRUSH 根据存储池名取得存储池 ID (如liverpool = 4 );
  5. CRUSH 把存储池 ID 加到PG ID(如 4.58 )之前。

计算对象位置远快于查询定位, CRUSH算法允许客户端计算对象应该存到哪里,并允许客户端连接主 OSD 来存储或检索对象。

2. ceph集群环境部署

2.1 基础设置

服务器及组件详情,如下

组件名 IP信息 配置信息
deploy 192.168.1.110-eth0、172.16.1.110-eth1 1核1G
mon、mgr、osd 192.168.1.100-eth0、172.16.1.100-eth1 2核2G
mon、mgr、osd 192.168.1.101-eth0、172.16.1.102-eth1 2核2G
mon、osd 192.168.1.103-eth0、172.16.1.103-eth1 2核2G
client 192.168.1.120-eth0、172.16.1.120-eth1 1核1G

2.1.1 设置主机名

192.168.1.100
# hostname ceph-node1   //临时
# echo "ceph-node1" > /etc/hostname //永久

192.168.1.101
# hostname ceph-node2   //临时
# echo "ceph-node2" > /etc/hostname //永久

192.168.1.102
# hostname ceph-node3   //临时
# echo "ceph-node3" > /etc/hostname //永久

192.168.1.110
# hostname ceph-deploy  //临时
# echo "ceph-deploy" > /etc/hostname    //永久

192.168.1.120
# hostname ceph-client  //临时
# echo "ceph-client" > /etc/hostname    //永久

2.1.2 绑定hosts(每个节点服务器都执行)

cat <<"EOF">>/etc/hosts
172.16.1.110    ceph-deploy
172.16.1.100   ceph-mon1 ceph-mgr1 ceph-node1
172.16.1.101   ceph-mon2 ceph-mgr2 ceph-node2
172.16.1.102   ceph-mon3 ceph-node3
172.16.1.120    ceph-client
EOF

2.1.3 创建用户

1> 在各个节点服务器上创建cephadm用户
# groupadd -r -g 2001 cephadm && useradd -r -m -s /bin/bash -u 2001 -g 2001 cephadm && echo cephadm:123456 | chpasswd

2> 设置sudo权限
# echo "cephadm ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephadm
# sudo chmod 0440 /etc/sudoers.d/cephadm

2.1.4 设置国内yum镜像源

# cat <<"EOF">/etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
EOF

# apt update

2.1.5 设置国内ceph yum镜像源

$ wget -q -O- 'https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc' | sudo apt-key add -
$ sudo apt-add-repository 'deb https://mirrors.aliyun.com/ceph/debian-pacific/ bionic main'
$ sudo apt update

2.1.6 设置定时任务更新系统时间

# sudo apt install ntp -y
# echo "*/5 * * * * /usr/sbin/ntpdate -u cn.pool.ntp.org &> /dev/null &&  hwclock  -w &> /dev/null" >> /var/spool/cron/crontabs/root

2.1.7 配置cephadm免密码登录(每个节点服务器都执行)

root@ceph-node1:~# su - cephadm
cephadm@ceph-node1:~$ ssh-keygen -t rsa -P ''
Generating public/private rsa key pair.
Enter file in which to save the key (/home/cephadm/.ssh/id_rsa): 
Created directory '/home/cephadm/.ssh'.
Your identification has been saved in /home/cephadm/.ssh/id_rsa.
Your public key has been saved in /home/cephadm/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:8sEMGQp9lD4f53hw21JFavZR9OWJUSkbA9aBglYcXtQ cephadm@ceph-node1
The key's randomart image is:
+---[RSA 2048]----+
|  .. .o.+oo==++o=|
|   ...o=.oo. E+++|
|    .o+  .. +o*.o|
|      o+o oo.o . |
|      .oSB +  .  |
|       oo.= .    |
|        .. .     |
|                 |
|                 |
+----[SHA256]-----+
cephadm@ceph-node1:~$ ssh-copy-id cephadm@ceph-node1
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/cephadm/.ssh/id_rsa.pub"
The authenticity of host 'ceph-node1 (172.16.1.100)' can't be established.
ECDSA key fingerprint is SHA256:9kHyC5k68pyboHx6VtTk2Id+y5UEBN3P0ZyM0srTZBc.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
cephadm@ceph-node1's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'cephadm@ceph-node1'"
and check to make sure that only the key(s) you wanted were added.

cephadm@ceph-node1:~$ ssh-copy-id cephadm@ceph-node2
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/cephadm/.ssh/id_rsa.pub"
The authenticity of host 'ceph-node2 (172.16.1.101)' can't be established.
ECDSA key fingerprint is SHA256:9kHyC5k68pyboHx6VtTk2Id+y5UEBN3P0ZyM0srTZBc.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
cephadm@ceph-node2's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'cephadm@ceph-node2'"
and check to make sure that only the key(s) you wanted were added.

cephadm@ceph-node1:~$ ssh-copy-id cephadm@ceph-node3
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/cephadm/.ssh/id_rsa.pub"
The authenticity of host 'ceph-node3 (172.16.1.102)' can't be established.
ECDSA key fingerprint is SHA256:9kHyC5k68pyboHx6VtTk2Id+y5UEBN3P0ZyM0srTZBc.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
cephadm@ceph-node3's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'cephadm@ceph-node3'"
and check to make sure that only the key(s) you wanted were added.

cephadm@ceph-node1:~$

2.2 ceph-deploy节点配置

2.2.1 安装工具

cephadm@ceph-deploy:~$ sudo apt-get install ceph-deploy

2.2.2 创建目录,存放ceph-deploy生成配置文件和密钥对

cephadm@ceph-deploy:~$ mkdir ceph-cluster
cephadm@ceph-deploy:~$ pwd
/home/cephadm
cephadm@ceph-deploy:~$ cd ceph-cluster/
cephadm@ceph-deploy:~/ceph-cluster$ pwd
/home/cephadm/ceph-cluster

2.3 集群部署

2.3.1 创建集群

1. 各个节点安装Python2
cephadm@ceph-node1:~$ sudo apt install python2.7 -y
cephadm@ceph-node1:~$ sudo ln -sv /usr/bin/python2.7 /usr/bin/python2
'/usr/bin/python2' -> '/usr/bin/python2.7'

2. 创建集群
cephadm@ceph-deploy:~/ceph-cluster$ ceph-deploy new --cluster-network 192.168.1.0/24 --public-network 172.16.1.0/24 ceph-node1
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadm/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /usr/bin/ceph-deploy new --cluster-network 192.168.1.0/24 --public-network 172.16.1.0/24 ceph-node1
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : 
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  ssh_copykey                   : True
[ceph_deploy.cli][INFO  ]  mon                           : ['ceph-node1']
[ceph_deploy.cli][INFO  ]  func                          : 
[ceph_deploy.cli][INFO  ]  public_network                : 172.16.1.0/24
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  cluster_network               : 192.168.1.0/24
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.cli][INFO  ]  fsid                          : None
[ceph_deploy.new][DEBUG ] Creating new cluster named ceph
[ceph_deploy.new][INFO  ] making sure passwordless SSH succeeds
[ceph-node1][DEBUG ] connected to host: ceph-deploy 
[ceph-node1][INFO  ] Running command: ssh -CT -o BatchMode=yes ceph-node1
[ceph-node1][DEBUG ] connection detected need for sudo
[ceph-node1][DEBUG ] connected to host: ceph-node1 
[ceph-node1][DEBUG ] detect platform information from remote host
[ceph-node1][DEBUG ] detect machine type
[ceph-node1][DEBUG ] find the location of an executable
[ceph-node1][INFO  ] Running command: sudo /bin/ip link show
[ceph-node1][INFO  ] Running command: sudo /bin/ip addr show
[ceph-node1][DEBUG ] IP addresses found: [u'192.168.1.100', u'172.16.1.100', u'2408:8207:7836:ec90:250:56ff:fe22:6337']
[ceph_deploy.new][DEBUG ] Resolving host ceph-node1
[ceph_deploy.new][DEBUG ] Monitor ceph-node1 at 172.16.1.100
[ceph_deploy.new][DEBUG ] Monitor initial members are ['ceph-node1']
[ceph_deploy.new][DEBUG ] Monitor addrs are [u'172.16.1.100']
[ceph_deploy.new][DEBUG ] Creating a random mon key...
[ceph_deploy.new][DEBUG ] Writing monitor keyring to ceph.mon.keyring...
[ceph_deploy.new][DEBUG ] Writing initial config to ceph.conf...

3. 查看生成的文件
cephadm@ceph-deploy:~/ceph-cluster$ ll
total 16
drwxrwxr-x 2 cephadm cephadm   75 Aug 17 23:26 ./
drwxr-xr-x 4 cephadm cephadm  113 Aug 17 23:22 ../
-rw-rw-r-- 1 cephadm cephadm  263 Aug 17 23:26 ceph.conf  #自动生成的配置文件
-rw-rw-r-- 1 cephadm cephadm 7921 Aug 17 23:26 ceph-deploy-ceph.log #初始化日志
-rw------- 1 cephadm cephadm   73 Aug 17 23:26 ceph.mon.keyring #用于ceph mon 节点内部通讯认证的密钥环文件

cephadm@ceph-deploy:~/ceph-cluster$ cat ceph.conf 
[global]
fsid = f617c091-42a0-4bf9-a775-5adf4f0f9d89 #ceph 的集群id
public_network = 172.16.1.0/24
cluster_network = 192.168.1.0/24
mon_initial_members = ceph-node1    #可以用逗号做分割添加多个mon节点
mon_host = 172.16.1.100
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

4. 在各个节点上安装ceph
cephadm@ceph-deploy:~/ceph-cluster$ ceph-deploy install --no-adjust-repos --nogpgcheck ceph-deploy ceph-node1 ceph-node2 ceph-node3

5. 初始化 monitor 节点并收集所有密钥
cephadm@ceph-deploy:~/ceph-cluster$ ceph-deploy mon create-initial

6. 验证
cephadm@ceph-deploy:~/ceph-cluster$ ssh ceph-node1 'ps auxf | grep ceph-mon | grep -v grep'
ceph        3229  0.5  1.9 480392 39032 ?        Ssl  23:16   0:00 /usr/bin/ceph-mon -f --cluster ceph --id ceph-node1 --setuser ceph --setgroup ceph

7. 创建admin节点
在ceph-deploy节点把配置文件和admin密钥拷贝至Ceph集群需要执行ceph管理命令的节点,从而不需要后期通过 ceph命令对ceph集群进行管理配置的时候每次都需要指定ceph-mon节点地址和ceph.client.admin.keyring文件,另外各ceph-mon节点也需要同步ceph的集群配置文件与认证文件。
如果在ceph-deploy节点管理集群:
需要在各个节点上安装ceph的公共组件
root@ceph-node1:~# sudo apt install ceph-common -y
root@ceph-node2:~# sudo apt install ceph-common -y
root@ceph-node3:~# sudo apt install ceph-common -y

cephadm@ceph-deploy:~/ceph-cluster$ ceph-deploy admin ceph-node1 ceph-node2 ceph-node3
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadm/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /usr/bin/ceph-deploy admin ceph-node1 ceph-node2 ceph-node3
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : 
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  client                        : ['ceph-node1', 'ceph-node2', 'ceph-node3']
[ceph_deploy.cli][INFO  ]  func                          : 
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to ceph-node1
[ceph-node1][DEBUG ] connection detected need for sudo
[ceph-node1][DEBUG ] connected to host: ceph-node1 
[ceph-node1][DEBUG ] detect platform information from remote host
[ceph-node1][DEBUG ] detect machine type
[ceph-node1][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to ceph-node2
[ceph-node2][DEBUG ] connection detected need for sudo
[ceph-node2][DEBUG ] connected to host: ceph-node2 
[ceph-node2][DEBUG ] detect platform information from remote host
[ceph-node2][DEBUG ] detect machine type
[ceph-node2][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to ceph-node3
[ceph-node3][DEBUG ] connection detected need for sudo
[ceph-node3][DEBUG ] connected to host: ceph-node3 
[ceph-node3][DEBUG ] detect platform information from remote host
[ceph-node3][DEBUG ] detect machine type
[ceph-node3][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf

8. 验证admin密钥是否分发到各个节点上
cephadm@ceph-deploy:~/ceph-cluster$ ssh ceph-node1 'ls -l /etc/ceph/'
total 8
-rw------- 1 root root 151 Aug 18 23:19 ceph.client.admin.keyring
-rw-r--r-- 1 root root 264 Aug 18 23:19 ceph.conf
-rw------- 1 root root   0 Aug 18 23:16 tmp1GMllX

9. 认证文件的属主和属组为了安全考虑,默认设置为了root用户和root组,如果需要ceph用户也能执行ceph命令,那么就需要对ceph用户进行授权
cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-node1 'sudo apt install acl -y && sudo setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring'
cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-node2 'sudo apt install acl -y && sudo setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring'
cephyd@ceph-deploy:~/ceph-cluster$ ssh ceph-node3 'sudo apt install acl -y && sudo setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring'

10. 创建mgr节点
cephadm@ceph-deploy:~/ceph-cluster$ ceph-deploy mgr create ceph-node1
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadm/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /usr/bin/ceph-deploy mgr create ceph-node1
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  mgr                           : [('ceph-node1', 'ceph-node1')]
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  subcommand                    : create
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : 
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  func                          : 
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.mgr][DEBUG ] Deploying mgr, cluster ceph hosts ceph-node1:ceph-node1
[ceph-node1][DEBUG ] connection detected need for sudo
[ceph-node1][DEBUG ] connected to host: ceph-node1 
[ceph-node1][DEBUG ] detect platform information from remote host
[ceph-node1][DEBUG ] detect machine type
[ceph_deploy.mgr][INFO  ] Distro info: Ubuntu 18.04 bionic
[ceph_deploy.mgr][DEBUG ] remote host will use systemd
[ceph_deploy.mgr][DEBUG ] deploying mgr bootstrap to ceph-node1
[ceph-node1][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph-node1][WARNIN] mgr keyring does not exist yet, creating one
[ceph-node1][DEBUG ] create a keyring file
[ceph-node1][DEBUG ] create path recursively if it doesn't exist
[ceph-node1][INFO  ] Running command: sudo ceph --cluster ceph --name client.bootstrap-mgr --keyring /var/lib/ceph/bootstrap-mgr/ceph.keyring auth get-or-create mgr.ceph-node1 mon allow profile mgr osd allow * mds allow * -o /var/lib/ceph/mgr/ceph-ceph-node1/keyring
[ceph-node1][INFO  ] Running command: sudo systemctl enable ceph-mgr@ceph-node1
[ceph-node1][WARNIN] Created symlink /etc/systemd/system/ceph-mgr.target.wants/[email protected] → /lib/systemd/system/[email protected].
[ceph-node1][INFO  ] Running command: sudo systemctl start ceph-mgr@ceph-node1
[ceph-node1][INFO  ] Running command: sudo systemctl enable ceph.target

11. 测试ceph命令
root@ceph-node1:~# sudo ceph -s
  cluster:
    id:     06d842e1-95c5-442d-b7fe-618050963147
    health: HEALTH_WARN
            mon is allowing insecure global_id reclaim
            OSD count 0 < osd_pool_default_size 3
 
  services:
    mon: 1 daemons, quorum ceph-node1 (age 25m)
    mgr: ceph-node1(active, since 16m)
    osd: 0 osds: 0 up, 0 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:     
 

12. 解决HEALTH_WARN报警
root@ceph-node1:~# sudo ceph config set mon auth_allow_insecure_global_id_reclaim false
root@ceph-node1:~# sudo ceph -s
  cluster:
    id:     06d842e1-95c5-442d-b7fe-618050963147
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3
 
  services:
    mon: 1 daemons, quorum ceph-node1 (age 27m)
    mgr: ceph-node1(active, since 18m)
    osd: 0 osds: 0 up, 0 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:     
 
13. 准备osd节点
cephadm@ceph-deploy:~/ceph-cluster$ ceph-deploy install --release pacific ceph-node1
cephadm@ceph-deploy:~/ceph-cluster$ ceph-deploy install --release pacific ceph-node2
cephadm@ceph-deploy:~/ceph-cluster$ ceph-deploy install --release pacific ceph-node3

14. 列出node节点磁盘
cephadm@ceph-deploy:~/ceph-cluster$ ceph-deploy disk list ceph-node1
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadm/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /usr/bin/ceph-deploy disk list ceph-node1
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  debug                         : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  subcommand                    : list
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : 
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  host                          : ['ceph-node1']
[ceph_deploy.cli][INFO  ]  func                          : 
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph-node1][DEBUG ] connection detected need for sudo
[ceph-node1][DEBUG ] connected to host: ceph-node1 
[ceph-node1][DEBUG ] detect platform information from remote host
[ceph-node1][DEBUG ] detect machine type
[ceph-node1][DEBUG ] find the location of an executable
[ceph-node1][INFO  ] Running command: sudo fdisk -l
[ceph-node1][INFO  ] Disk /dev/sda: 120 GiB, 128849018880 bytes, 251658240 sectors
[ceph-node1][INFO  ] Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
[ceph-node1][INFO  ] Disk /dev/sdc: 20 GiB, 21474836480 bytes, 41943040 sectors

cephadm@ceph-deploy:~/ceph-cluster$ ceph-deploy disk list ceph-node2
cephadm@ceph-deploy:~/ceph-cluster$ ceph-deploy disk list ceph-node3

14. 擦除磁盘
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy disk zap ceph-node1 /dev/sdb /dev/sdc
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy disk zap ceph-node2 /dev/sdb /dev/sdc
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy disk zap ceph-node3 /dev/sdb /dev/sdc

15. 添加osd
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy osd create ceph-node1 --data /dev/sdb
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy osd create ceph-node1 --data /dev/sdc
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy osd create ceph-node2 --data /dev/sdb
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy osd create ceph-node2 --data /dev/sdc
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy osd create ceph-node3 --data /dev/sdb
cephyd@ceph-deploy:~/ceph-cluster$ ceph-deploy osd create ceph-node3 --data /dev/sdc

16. 验证
root@ceph-node1:~# sudo ceph -s
  cluster:
    id:     06d842e1-95c5-442d-b7fe-618050963147
    health: HEALTH_OK
 
  services:
    mon: 1 daemons, quorum ceph-node1 (age 38m)
    mgr: ceph-node1(active, since 28m)
    osd: 6 osds: 6 up (since 16s), 6 in (since 24s)
 
  data:
    pools:   1 pools, 1 pgs
    objects: 0 objects, 0 B
    usage:   32 MiB used, 120 GiB / 120 GiB avail
    pgs:     1 active+clean

cephadm@ceph-deploy:~/ceph-cluster$ sudo ssh ceph-node1 'ps auxf | grep ceph-osd | grep -v grep'
ceph        8141  0.9  2.8 1031108 57328 ?       Ssl  23:52   0:01 /usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph
ceph        9911  0.9  2.7 1030084 56044 ?       Ssl  23:53   0:01 /usr/bin/ceph-osd -f --cluster ceph --id 1 --setuser ceph --setgroup ceph
cephadm@ceph-deploy:~/ceph-cluster$ sudo ssh ceph-node2 'ps auxf | grep ceph-osd | grep -v grep'
ceph        5669  1.0  2.8 1030084 56796 ?       Ssl  23:53   0:01 /usr/bin/ceph-osd -f --cluster ceph --id 2 --setuser ceph --setgroup ceph
ceph        7454  1.1  2.7 1031112 55436 ?       Ssl  23:53   0:01 /usr/bin/ceph-osd -f --cluster ceph --id 3 --setuser ceph --setgroup ceph
cephadm@ceph-deploy:~/ceph-cluster$ sudo ssh ceph-node3 'ps auxf | grep ceph-osd | grep -v grep'
ceph        4472  1.1  2.8 1030080 57148 ?       Ssl  23:53   0:01 /usr/bin/ceph-osd -f --cluster ceph --id 4 --setuser ceph --setgroup ceph
ceph        6251  1.1  2.8 997316 57036 ?        Ssl  23:54   0:00 /usr/bin/ceph-osd -f --cluster ceph --id 5 --setuser ceph --setgroup ceph

2.4 测试集群

要把对象存入 Ceph 存储集群,客户端必须做到:

  1. 指定对象名
  2. 指定存储池

Ceph客户端查出最新集群运行图,用CRUSH算法计算出如何把对象映射到PG,然后动态地计算如何把PG分配到OSD。要定位对象,只需要对象名和存储池名字即可,例如:

ceph osd map {poolname} {object-name}
为了测试集群的数据存取功能,这里首先创建一个用于测试的存储池ydpool,并设定其PG数量为32个

cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph osd pool create popool 32 32
pool 'popool' created

查看32种组合
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph pg ls-by-pool popool | awk '{print $1,$2,$15}'
PG OBJECTS ACTING
2.0 0 [3,5,0]p3
2.1 0 [1,5,3]p1
2.2 0 [3,1,5]p3
2.3 0 [3,1,5]p3
2.4 0 [1,4,2]p1
2.5 0 [4,0,2]p4
2.6 0 [1,4,3]p1
2.7 0 [3,4,1]p3
2.8 0 [3,5,0]p3
2.9 0 [1,3,4]p1
2.a 0 [5,1,3]p5
2.b 0 [5,3,0]p5
2.c 0 [5,0,2]p5
2.d 0 [5,3,1]p5
2.e 0 [1,4,2]p1
2.f 0 [4,3,0]p4
2.10 0 [4,1,2]p4
2.11 0 [3,1,5]p3
2.12 0 [5,1,2]p5
2.13 0 [5,3,1]p5
2.14 0 [2,4,0]p2
2.15 0 [4,1,3]p4
2.16 0 [2,5,1]p2
2.17 0 [3,5,1]p3
2.18 0 [5,2,0]p5
2.19 0 [0,3,4]p0
2.1a 0 [3,4,1]p3
2.1b 0 [5,2,0]p5
2.1c 0 [4,2,1]p4
2.1d 0 [4,3,0]p4
2.1e 0 [1,5,3]p1
2.1f 0 [0,3,4]p0
  
* NOTE: afterwards

cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph osd pool ls
device_health_metrics
popool
cephadm@ceph-deploy:~/ceph-cluster$ sudo rados lspools
device_health_metrics
popool

2.4.1

当前的 ceph 环境还没还没有部署使用块存储和文件系统使用 ceph,也没有使用对象存储
的客户端,但是 ceph 的 rados 命令可以实现访问 ceph 对象存储的功能

1. 把 messages 文件上传到 popool 并指定对象 id 为 msg1
cephadm@ceph-deploy:~/ceph-cluster$ sudo rados put msg1 /var/log/syslog --pool=popool

2. 列出文件
cephadm@ceph-deploy:~/ceph-cluster$ sudo rados ls --pool=popool
msg1
cephadm@ceph-deploy:~/ceph-cluster$ sudo rados -p popool  ls
msg1

3. 查看文件信息
ceph osd map 命令可以获取到存储池中数据对象的具体位置信息
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph osd map popool msg1
osdmap e39 pool 'popool' (2) object 'msg1' -> pg 2.c833d430 (2.10) -> up ([4,1,2], p4) acting ([4,1,2], p4)
表示文件放在了存储池id为2的c833d430的PG上,10为当前PG的id,2.10表示数据是在id为2的存储池当中id为10的 PG中存储,在线的OSD编号4,1,2,主OSD为4, 活动的OSD4,1,2,三个OSD表示数据放一共3个副本,PG中的OSD是 ceph的crush算法计算出三份数据保存在哪些OSD。

2.4.2 下载文件

cephadm@ceph-deploy:~/ceph-cluster$ sudo rados get msg1 --pool=popool /tmp/pop.txt
cephadm@ceph-deploy:~/ceph-cluster$ ll -h /tmp/pop.txt 
-rw-r--r-- 1 root root 6.1M Aug 19 00:10 /tmp/pop.txt

2.4.3 修改文件

cephadm@ceph-deploy:~/ceph-cluster$ sudo rados put msg1 /var/log/lastlog --pool=popool
cephadm@ceph-deploy:~/ceph-cluster$ sudo rados get msg1 --pool=popool /tmp/pop1.txt
cephadm@ceph-deploy:~/ceph-cluster$ ll -h /tmp/pop1.txt
-rw-r--r-- 1 root root 18M Aug 19 00:12 /tmp/pop1.txt

2.4.4 删除文件

cephadm@ceph-deploy:~/ceph-cluster$ sudo rados rm msg1 --pool=popool
cephadm@ceph-deploy:~/ceph-cluster$ sudo rados ls --pool=popool
cephadm@ceph-deploy:~/ceph-cluster$

2.5 扩展ceph集群实现高可用

主要是扩展ceph集群的mon组成3个节点以及mgr组成2个节点,以实现集群高可用

2.5.1 扩展ceph-mon节点

ceph-mon是原生具备自选举以实现高可用机制的ceph服务,节点数量通常是奇数。

添加节点:

cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph-deploy mon add ceph-node2
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph-deploy mon add ceph-node3

验证
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph -s
  cluster:
    id:     06d842e1-95c5-442d-b7fe-618050963147
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 21s)
    mgr: ceph-node1(active, since 50m)
    osd: 6 osds: 6 up (since 22m), 6 in (since 22m)
 
  data:
    pools:   2 pools, 33 pgs
    objects: 0 objects, 0 B
    usage:   177 MiB used, 120 GiB / 120 GiB avail
    pgs:     33 active+clean
    
验证mon状态
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph quorum_status
{"election_epoch":12,"quorum":[0,1,2],"quorum_names":["ceph-node1","ceph-node2","ceph-node3"],"quorum_leader_name":"ceph-node1","quorum_age":56,"features":{"quorum_con":"4540138297136906239","quorum_mon":["kraken","luminous","mimic","osdmap-prune","nautilus","octopus","pacific","elector-pinging"]},"monmap":{"epoch":3,"fsid":"06d842e1-95c5-442d-b7fe-618050963147","modified":"2021-08-18T16:16:06.952552Z","created":"2021-08-18T15:16:31.209683Z","min_mon_release":16,"min_mon_release_name":"pacific","election_strategy":1,"disallowed_leaders: ":"","stretch_mode":false,"features":{"persistent":["kraken","luminous","mimic","osdmap-prune","nautilus","octopus","pacific","elector-pinging"],"optional":[]},"mons":[{"rank":0,"name":"ceph-node1","public_addrs":{"addrvec":[{"type":"v2","addr":"172.16.1.100:3300","nonce":0},{"type":"v1","addr":"172.16.1.100:6789","nonce":0}]},"addr":"172.16.1.100:6789/0","public_addr":"172.16.1.100:6789/0","priority":0,"weight":0,"crush_location":"{}"},{"rank":1,"name":"ceph-node2","public_addrs":{"addrvec":[{"type":"v2","addr":"172.16.1.101:3300","nonce":0},{"type":"v1","addr":"172.16.1.101:6789","nonce":0}]},"addr":"172.16.1.101:6789/0","public_addr":"172.16.1.101:6789/0","priority":0,"weight":0,"crush_location":"{}"},{"rank":2,"name":"ceph-node3","public_addrs":{"addrvec":[{"type":"v2","addr":"172.16.1.102:3300","nonce":0},{"type":"v1","addr":"172.16.1.102:6789","nonce":0}]},"addr":"172.16.1.102:6789/0","public_addr":"172.16.1.102:6789/0","priority":0,"weight":0,"crush_location":"{}"}]}}

以json格式展示
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph quorum_status --format json-pretty

2.5.2 扩展ceph-mgr节点

cephadm@ceph-deploy:~/ceph-cluster$ ceph-deploy mgr create ceph-node2

同步配置文件到ceph-node2节点
cephadm@ceph-deploy:~/ceph-cluster$ ceph-deploy admin ceph-mgr2

验证
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph -s
  cluster:
    id:     06d842e1-95c5-442d-b7fe-618050963147
    health: HEALTH_WARN
            clock skew detected on mon.ceph-node3
 
  services:
    mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 5m)
    mgr: ceph-node1(active, since 56m), standbys: ceph-node2
    osd: 6 osds: 6 up (since 27m), 6 in (since 28m)
 
  data:
    pools:   2 pools, 33 pgs
    objects: 0 objects, 0 B
    usage:   177 MiB used, 120 GiB / 120 GiB avail
    pgs:     33 active+clean

2.5.3 从RADOS移除osd

Ceph集群中的一个OSD是一个ceph-osd节点的服务进程且对应于一个物理磁盘设备,是一个专用的守护进程。在OSD设备出现故障,或管理员出于管理之需确实要移除特定的OSD设备时,需要先停止相关的守护进程,而后再进行移除操作。

对于Luminous及其之后的版 本来说,停止和移除命令的格式分别如下所示:

  1. 停用设备:ceph osd out {osd-num}
  2. 停止进程:sudo systemctl stop ceph-osd@{osd-num}
  3. 移除设备:ceph osd purge {id} --yes-i-really-mean-it

操作,如下:

1. 查看
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph osd tree
ID  CLASS  WEIGHT   TYPE NAME            STATUS  REWEIGHT  PRI-AFF
-1         0.11691  root default                                  
-3         0.03897      host ceph-node1                           
 0    hdd  0.01949          osd.0            up   1.00000  1.00000
 1    hdd  0.01949          osd.1            up   1.00000  1.00000
-5         0.03897      host ceph-node2                           
 2    hdd  0.01949          osd.2            up   1.00000  1.00000
 3    hdd  0.01949          osd.3            up   1.00000  1.00000
-7         0.03897      host ceph-node3                           
 4    hdd  0.01949          osd.4            up   1.00000  1.00000
 5    hdd  0.01949          osd.5            up   1.00000  1.00000
 
 2. 查看msg1文件信息
 cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph osd map popool msg1
osdmap e39 pool 'popool' (2) object 'msg1' -> pg 2.c833d430 (2.10) -> up ([4,1,2], p4) acting ([4,1,2], p4)

3. 移除osd4 后msg1会转移并保持3副本
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph osd out 4
marked out osd.4. 
cephadm@ceph-deploy:~/ceph-cluster$ ssh ceph-node3 'sudo systemctl stop ceph-osd@4'
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph osd purge 4 --yes-i-really-mean-it
purged osd.4
cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph osd tree
ID  CLASS  WEIGHT   TYPE NAME            STATUS  REWEIGHT  PRI-AFF
-1         0.09743  root default                                  
-3         0.03897      host ceph-node1                           
 0    hdd  0.01949          osd.0            up   1.00000  1.00000
 1    hdd  0.01949          osd.1            up   1.00000  1.00000
-5         0.03897      host ceph-node2                           
 2    hdd  0.01949          osd.2            up   1.00000  1.00000
 3    hdd  0.01949          osd.3            up   1.00000  1.00000
-7         0.01949      host ceph-node3                           
 5    hdd  0.01949          osd.5            up   1.00000  1.00000
 
 4. 验证
 cephadm@ceph-deploy:~/ceph-cluster$ sudo ceph osd map popool msg1
osdmap e44 pool 'popool' (2) object 'msg1' -> pg 2.c833d430 (2.10) -> up ([0,5,2], p0) acting ([0,5,2], p0)

你可能感兴趣的:(Ceph集群(一))