一文掌握Cephadm部署Ceph存储集群

server/2024/10/22 14:27:22/

📚 博客主页: StevenZeng学堂

🎉 本文专栏:

  • 一文读懂Kubernetes
  • 一文读懂Harbor
  • 云原生安全实战指南
  • 云原生存储实践指南

❤️ 摘要:随着企业数据量的增长和存储需求的复杂化,Ceph因其高可扩展性和灵活性,能够同时提供对象存储、块存储和文件存储三种服务,成为云计算、数据中心以及企业级应用中的核心存储方案。在本篇博客中,我们将使用Cephadm快速部署ceph集群,从浅到深了解和部署ceph集群。

目录

  • 1 概念
    • 1.1 什么是Ceph
      • 1.1.1 Ceph的架构组件
    • 1.2 什么是Cephadm
      • 1.2.1 Cephadm的优势
    • 1.3 什么是LVM
      • 1.3.1 LVM的组成介绍
  • 2 实践:部署Ceph集群
    • 2.1 部署准备
      • 2.1.1 修改主机名
      • 2.1.2 添加hosts
      • 2.1.3 配置网络
      • 2.1.4 设置时区
      • 2.1.5 设置时间同步服务
      • 2.1.6 安装组件
    • 2.2 引导集群
      • 2.2.1 初始化集群
      • 2.2.2 登录dashboard
      • 2.2.3 添加节点
      • 2.2.4 添加OSD设备
      • 2.2.5 查看OSD的状态和信息
      • 2.2.6 查看集群的状态
    • 2.3 测试ceph集群
  • 3 总结
  • 4 参考资料

1 概念

1.1 什么是Ceph

Ceph 是一款开源的分布式存储平台,它通过 RADOS(Reliable Autonomic Distributed Object Store)作为底层存储架构,提供以下三种存储模式:

  • 块存储(RBD):面向虚拟机、数据库等应用场景,提供高性能和可扩展性。
  • 对象存储(RGW):提供与 Amazon S3、OpenStack Swift 兼容的对象存储接口,适合非结构化数据存储。
  • 文件存储(CephFS):分布式文件系统,支持大规模并发访问的文件共享应用场景。

1.1.1 Ceph的架构组件

  • Monitor(Mon):维护集群状态,包括集群成员关系和映射信息。
  • Object Storage Daemon(OSD):存储数据、处理数据复制、恢复、重平衡任务,是数据存储的核心。
  • Manager(Mgr):管理集群的监控、日志、元数据等扩展功能。
  • Metadata Server(MDS):用于Ceph文件系统(CephFS),管理文件系统元数据。

上图可见,Ceph 中的核心存储层是可靠的自治分布式对象存储 (RADOS)。Ceph 中的 RADOS 层由 Ceph 组件(对象存储守护进程 (OSD) 和 Ceph 监控器 (MON) 等)组成。

1.2 什么是Cephadm

Cephadm 是 Ceph 社区提供的集群管理工具,专为简化 Ceph 的部署、升级和日常运维而设计。Cephadm 使用容器(如 Docker、Podman)运行 Ceph 服务,使得集群节点可以快速安装、升级和回滚。

1.2.1 Cephadm的优势

  • 容器化部署:使用容器运行 Ceph 服务,简化了软件依赖管理,避免了包管理冲突。
  • 自动化管理:提供了自动化的监控、日志和集群状态管理功能。
  • 无缝扩展:支持动态添加或删除节点,适用于云原生环境的横向扩展需求。
  • 简化操作:只需要一个初始节点,之后可通过 Cephadm 自动引导其他节点,降低了手动配置的复杂度。

1.3 什么是LVM

LVM(Logical Volume Manager) 是 Linux 内核提供的一种逻辑卷管理工具,能够将多个物理存储设备(如磁盘、SSD)组合成逻辑卷进行管理。它的动态扩展性和灵活的分区管理,使得 Ceph OSD 可以在底层磁盘管理上更高效。

在 Ceph 中,LVM 主要用于 OSD 的底层存储管理,通过 LVM 可以创建多个物理卷、卷组和逻辑卷,为 Ceph 的数据存储提供支持。

1.3.1 LVM的组成介绍

下面是 LVM 中主要涉及的一些概念。

  • 物理存储设备(Physical Media): 指系统的存储设备文件,比如 /dev/sda、/dev/sdb 等。
  • PV(物理卷 Physical Volume):是 LVM 管理的基础单元, LVM 可以将一个物理存储设备(如整个硬盘或某个分区)转化为一个物理卷。
  • VG(卷组 Volume Group): 由一个或多个物理卷(PV)组合而成的逻辑存储池,类似于基于磁盘阵列组合的传统磁盘。在 VG 中,你可以创建一个或多个逻辑卷(LV),这些 LV 就像传统的磁盘分区一样,可用于创建文件系统、挂载目录等操作。
  • LV(逻辑卷 Logical Volume):是 LVM 中的最终使用单元, 类似于传统磁盘分区。与传统的分区不同,LV 的大小可以灵活调整,而不需要重新分区整个磁盘。


2 实践:部署Ceph集群

以下实践过程,使用cephadm工具部署一套三节点的Ceph存储集群。

2.1 部署准备

角色系统配置public网络cluster网络
ceph-node1Ubuntu22.042U4G192.168.3.10110.10.50.101
ceph-node2Ubuntu22.042U4G192.168.3.10210.10.50.102
ceph-node3Ubuntu22.042U4G192.168.3.10310.10.50.103

2.1.1 修改主机名

❔说明: cephadm工具会使用主机名管理节点主机,包括新增、删除、修改等,所以建议统一主机命令规范和做好主机名解析。

修改ceph-node1主机名,命令如下:

hostnamectl set-hostname ceph-node1

修改ceph-node2主机名,命令如下:

hostnamectl set-hostname ceph-node2

修改ceph-node3主机名,命令如下:

hostnamectl set-hostname ceph-node3

2.1.2 添加hosts

三个节点都需要修改/etc/hosts文件,添加以下内容:

192.168.3.101 ceph-node1
192.168.3.102 ceph-node2
192.168.3.103 ceph-node3
10.10.50.101 ceph-node1
10.10.50.102 ceph-node2
10.10.50.103 ceph-node3

2.1.3 配置网络

使用netplan配置主机节点网络, 三个节点都需要操作, 按实际环境修改配置。

备份原配置文件,并创建新的配置文件

 mv /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.baktouch /etc/netplan/ceph-node.yaml

ceph-node1配置如下:

network:version: 2renderer: networkdethernets:ens33:dhcp4: nodhcp6: noaddresses:- 192.168.3.101/24nameservers:addresses:- 114.114.114.114- 8.8.8.8routes:- to: defaultvia: 192.168.3.1ens37:dhcp4: nodhcp6: noaddresses:- 10.10.50.101/24

ceph-node2配置如下:

network:version: 2renderer: networkdethernets:ens33:dhcp4: nodhcp6: noaddresses:- 192.168.3.102/24nameservers:addresses:- 114.114.114.114- 8.8.8.8routes:- to: defaultvia: 192.168.3.1ens37:dhcp4: nodhcp6: noaddresses:- 10.10.50.102/24

ceph-node3配置如下:

network:version: 2renderer: networkdethernets:ens33:dhcp4: nodhcp6: noaddresses:- 192.168.3.103/24nameservers:addresses:- 114.114.114.114- 8.8.8.8routes:- to: defaultvia: 192.168.3.1ens37:dhcp4: nodhcp6: noaddresses:- 10.10.50.103/24

执行命令检查和生效配置

netplan try

成功配置输出

WARNING:root:Cannot call Open vSwitch: ovsdb-server.service is not running.
Do you want to keep these settings?Press ENTER before the timeout to accept the new configurationChanges will revert in 120 secondsConfiguration accepted.

2.1.4 设置时区

三个节点都设置时区,时区为中国上海时区:

timedatectl set-timezone Asia/Shanghai

检查是否设置成功

timedatectl show

输出如下:

Timezone=Asia/Shanghai LocalRTC=no
CanNTP=yes
NTP=yes
NTPSynchronized=yes
TimeUSec=Mon 2024-10-21 15:47:01 CST
RTCTimeUSec=Mon 2024-10-21 15:47:01 CST

2.1.5 设置时间同步服务

三个节点都要操作,更新apt源

apt-get update
apt-get upgrade

安装chrony工具,实现集群内时间同步

apt-get install -y chrony

node1作为node2、3的时间服务器:

修改node1配置

# 保留一个外部ntp服务即可
pool ntp.ubuntu.com        iburst maxsources 4
#pool 0.ubuntu.pool.ntp.org iburst maxsources 1
#pool 1.ubuntu.pool.ntp.org iburst maxsources 1
#pool 2.ubuntu.pool.ntp.org iburst maxsources 2
#
# 当外部ntp服务失效,系统基于本地时钟作为参考时间
local stratum 10

然后修改node2、node3配置

# 新增一行,指向ceph-node1
pool ceph-node1             iburst
# 注释原配置
#pool ntp.ubuntu.com        iburst maxsources 4
#pool 0.ubuntu.pool.ntp.org iburst maxsources 1
#pool 1.ubuntu.pool.ntp.org iburst maxsources 1
#pool 2.ubuntu.pool.ntp.org iburst maxsources 2

启动时间服务

systemctl enable chrony --now
systemctl restart chrony

查看node1的同步情况

chrony source -v

输出如下:

.-- Source mode  '^' = server, '=' = peer, '#' = local clock./ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| /             'x' = may be in error, '~' = too variable, '?' = unusable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^? prod-ntp-4.ntp4.ps5.cano>     2   6     1     2    +24ms[  +24ms] +/-  160ms
^? alphyn.canonical.com          2   6     1     1  +2451us[+2451us] +/-  148ms
^? prod-ntp-5.ntp4.ps5.cano>     2   6     1     2    -10ms[  -10ms] +/-  127ms
^? prod-ntp-3.ntp4.ps5.cano>     2   6     1     2  +4574us[+4574us] +/-  142ms

查看node2、node3的同步情况

chrony source -v

输出如下:

.-- Source mode  '^' = server, '=' = peer, '#' = local clock./ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| /             'x' = may be in error, '~' = too variable, '?' = unusable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^? ceph-node1                    0   8     0     -     +0ns[   +0ns] +/-    0ns

2.1.6 安装组件

三个节点都要操作,安装组件

apt install -y lvm2 python3 python3-pip

重启虚拟机

reboot
  • 系统升级后,重启使用最新的linux内核版本。

2.2 引导集群

查看cephadm版本

apt search cephadm

输出如下:

cephadm/jammy-updates,now 17.2.7-0ubuntu0.22.04.1 amd64 [installed]cephadm utility to bootstrap ceph daemons with systemd and containers
  • 自带源版本不是ceph官方最新版本

在node1上安装cephadm工具

apt install -y cephadm ceph-common

2.2.1 初始化集群

执行以下命令初始化ceph集群, 该命令会拉取cephadm对应版本的ceph组件容器镜像,然后并根据网络等初始化参数进行部署相关组件。

cephadm bootstrap --mon-ip 192.168.3.101 --cluster-network 10.10.50.0/24 --allow-fqdn-hostname

❔ 参数说明:

参数说明
–mon-ip指定第一个monitor的ip,即对外提供服务的ip地址
–cluster-network指定集群子网, 该子网用于集群数据复制、数据重均衡、数据回复等。
–allow-fqdn-hostname允许解析节点主机名

部署过程输出:

Verifying podman|docker is present...
Verifying lvm2 is present...
Verifying time synchronization is in place...
Unit systemd-timesyncd.service is enabled and running
Repeating the final host check...
docker (/usr/bin/docker) is present
systemctl is present
lvcreate is present
Unit systemd-timesyncd.service is enabled and running
Host looks OK
Cluster fsid: 38c60b7c-8c6f-11ef-8b92-c929f534b368
Verifying IP 192.168.3.101 port 3300 ...
Verifying IP 192.168.3.101 port 6789 ...
Mon IP `192.168.3.101` is in CIDR network `192.168.3.0/24`
Mon IP `192.168.3.101` is in CIDR network `192.168.3.0/24`
Pulling container image quay.io/ceph/ceph:v17...
Ceph version: ceph version 17.2.7 (b12291d110049b2f35e32e0de30d70e9a4c060d2) quincy (stable)
Extracting ceph user uid/gid from container image...
Creating initial keys...
Creating initial monmap...
Creating mon...
Waiting for mon to start...
Waiting for mon...
mon is available
Assimilating anything we can from ceph.conf...
Generating new minimal ceph.conf...
Restarting the monitor...
Setting mon public_network to 192.168.3.0/24
Setting cluster_network to 10.10.50.0/24
Wrote config to /etc/ceph/ceph.conf
Wrote keyring to /etc/ceph/ceph.client.admin.keyring
Creating mgr...
Verifying port 9283 ...
Waiting for mgr to start...
Waiting for mgr...
mgr not available, waiting (1/15)...
mgr not available, waiting (2/15)...
mgr not available, waiting (3/15)...
mgr not available, waiting (4/15)...
mgr not available, waiting (5/15)...
mgr is available
Enabling cephadm module...
Waiting for the mgr to restart...
Waiting for mgr epoch 5...
mgr epoch 5 is available
Setting orchestrator backend to cephadm...
Generating ssh key...
Wrote public SSH key to /etc/ceph/ceph.pub
Adding key to root@localhost authorized_keys...
Adding host ceph-node1...
Deploying mon service with default placement...
Deploying mgr service with default placement...
Deploying crash service with default placement...
Deploying prometheus service with default placement...
Deploying grafana service with default placement...
Deploying node-exporter service with default placement...
Deploying alertmanager service with default placement...
Enabling the dashboard module...
Waiting for the mgr to restart...
Waiting for mgr epoch 9...
mgr epoch 9 is available
Generating a dashboard self-signed certificate...
Creating initial admin user...
Fetching dashboard port number...
Ceph Dashboard is now available at:URL: https://ceph-node1:8443/User: adminPassword: wer53x48hkEnabling client.admin keyring and conf on hosts with "admin" label
Saving cluster configuration to /var/lib/ceph/38c60b7c-8c6f-11ef-8b92-c929f534b368/config directory
Enabling autotune for osd_memory_target
You can access the Ceph CLI as following in case of multi-cluster or non-default config:sudo /usr/sbin/cephadm shell --fsid 38c60b7c-8c6f-11ef-8b92-c929f534b368 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyringOr, if you are only running a single cluster on this host:sudo /usr/sbin/cephadm shellPlease consider enabling telemetry to help improve Ceph:ceph telemetry onFor more information see:https://docs.ceph.com/docs/master/mgr/telemetry/Bootstrap complete.

❔ 工作流程说明:

  1. 在本地主机上拉取容器镜像,为新集群创建 Monitor 和 Manager 守护程序。
  2. 为 Ceph 集群生成新的 SSH 密钥,并将其添加到 root 用户的 /root/.ssh/authorized_keys 文件中。
  3. 将公钥的副本写入 /etc/ceph/ceph.pub
  4. 将最小配置文件写入 /etc/ceph/ceph.conf。需要此文件才能与 Ceph 守护进程通信。
  5. client.admin 管理(特权)密钥的副本写入 /etc/ceph/ceph.client.admin.keyring
  6. _admin 标签添加到引导主机。默认情况下,任何具有此标签的主机都将(也)获得 /etc/ceph/ceph.conf/etc/ceph/ceph.client.admin.keyring 的副本。

⚠️ 注意:

部署后,提示dashboard的登录地址和权限,记得保存。

Ceph Dashboard is now available at:URL: https://ceph-node1:8443/User: adminPassword: wer53x48hk

2.2.2 登录dashboard

ceph-dashboard可以进行ceph集群初始化、ceph集群节点和组件管理、ceph集群监控等常用的运维功能,接下来尝试登录dashboard。

首先,修改访问主机的hosts,这里使用火绒修改:

添加ceph-node1的主机解析记录。

使用初始化密码登录, 登录后提示修改初始化密码:

如果忘记了初始化密码, 也可以使用命令修改dashboard密码:

echo admin@12345 | ceph dashboard set-login-credentials admin -i -

输出如下:

******************************************************************
***          WARNING: this command is deprecated.              ***
*** Please use the ac-user-* related commands to manage users. ***
******************************************************************
Username and password updated

新版的命令推荐使用:

echo "admin@12345" | ceph dashboard ac-user-set-password admin -i -

效果一样,输出如下:

{"username": "admin", "password": "$2b$12$xoDkxE3.mCr6bThmUSrpJOiBcLRvGjPGLYIAYCQOz492jxdur18za", "roles": ["administrator"], "name": null, "email": null, "lastUpdate": 1729498208, "enabled": true, "pwdExpirationDate": null, "pwdUpdateRequired": false}

2.2.3 添加节点

查看ceph集群现在的主机

ceph orch host ls

输出如下:

HOST        ADDR           LABELS  STATUS
ceph-node1  192.168.3.101  _admin

node1节点对其他节点进行ssh免密登录,在初始化后,cephadm会生成一对ssh密钥,存放在/etc/ceph/目录。

执行以下命令,把秘钥放到其他节点上:

ssh-copy-id -f -i /etc/ceph/ceph.pub ceph-node2
ssh-copy-id -f -i /etc/ceph/ceph.pub ceph-node3

在dashboard添加主机

输入node2的主机信息,包括主机名和Public网络ip地址

这样就添加上node2了。

或者可以使用命名添加主机到集群。

将node3主机添加到ceph集群中,执行以下命令:

 ceph orch host add ceph-node3 192.168.3.103

输出如下:

Added host 'ceph-node3' with addr '192.168.3.103'

再查看ceph集群中的主机

ceph orch host ls

输出如下:

HOST        ADDR           LABELS        STATUS
ceph-node1  192.168.3.101  _admin
ceph-node2  192.168.3.102  _no_schedule
ceph-node3  192.168.3.103
3 hosts in cluster

如果要删除某台主机,可以执行以下命令:

ceph orch host rm ceph-node3

输出如下:

Removed  host 'ceph-node3'

2.2.4 添加OSD设备

2.2.4.1 添加OSD之前查看节点配置

查看集群可用的物理设备

ceph orch device ls

输出如下:

HOST        PATH      TYPE  DEVICE ID   SIZE  AVAILABLE  REFRESHED  REJECT REASONS
ceph-node1  /dev/sdb  hdd              10.0G  Yes        4m ago
ceph-node1  /dev/sdc  hdd              10.0G  Yes        4m ago
ceph-node2  /dev/sdb  hdd              10.0G  Yes        5m ago
ceph-node2  /dev/sdc  hdd              10.0G  Yes        5m ago
ceph-node3  /dev/sdb  hdd              10.0G  Yes        4m ago
ceph-node3  /dev/sdc  hdd              10.0G  Yes        4m ago
  • 命令输出结果是当前添加ceph集群的节点的空闲设备清单。

⚠️提示: 如果一个存储设备想要加入ceph集群,要求满足2个条件:

  • 1.设备未被使用。
  • 2.设备的存储大小必须大于5GB。

如果担心不准确,可以登录到各节点,执行命令确认空闲设备信息:

lsblk

输出如下:


NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
...
sda                         8:0    0  100G  0 disk
├─sda1                      8:1    0    1M  0 part
├─sda2                      8:2    0    2G  0 part /boot
└─sda3                      8:3    0   98G  0 part└─ubuntu--vg-ubuntu--lv 253:0    0   98G  0 lvm  /
sdb                         8:16   0   10G  0 disk
sdc                         8:32   0   10G  0 disk
sr0                        11:0    1 1024M  0 rom

查看OSD当前列表, 执行以下命令

ceph osd tree

输出如下:

ID  CLASS  WEIGHT  TYPE NAME     STATUS  REWEIGHT  PRI-AFF
-1              0  root default
  • 默认是没有osd的, 即没有安装osd服务。
  • 等添加完osd设备后,才会统一安装osd服务,并物理设备和osd服务的关系是一对一。
2.2.4.2 添加OSD设备到集群

ceph- node1的设备添加到ceph集群

ceph orch daemon add osd ceph-node1:/dev/sdb,/dev/sdc

该命令允许您一次添加多个设备成osd,命令格式为

Usage:ceph orch daemon add osd host:device1,device2,...ceph orch daemon add osd host:data_devices=device1,device2,db_devices=device3,osds_per_device=2,...

或者, 使用dashboard添加osd,将node2、node3的设备添加到ceph集群

直接下一步

  • 创建osd需要一定时间,等创建好后再查看结果。

2.2.5 查看OSD的状态和信息

执行命令查看osd添加情况:

ceph osd tree

输出如下:

ID  CLASS  WEIGHT   TYPE NAME            STATUS  REWEIGHT  PRI-AFF
-1         0.05878  root default
-3         0.01959      host ceph-node10    hdd  0.00980          osd.0            up   1.00000  1.000001    hdd  0.00980          osd.1            up   1.00000  1.00000
-7         0.01959      host ceph-node22    hdd  0.00980          osd.2            up   1.00000  1.000004    hdd  0.00980          osd.4            up   1.00000  1.00000
-5         0.01959      host ceph-node33    hdd  0.00980          osd.3            up   1.00000  1.000005    hdd  0.00980          osd.5            up   1.00000  1.00000

❔ 字段说明:

字段说明
ID表示设备或节点的唯一标识符,负值表示聚合节点(如 roothost),正值代表具体的 OSD。
CLASS存储设备的类型,比如 hdd(机械硬盘)、ssd(固态硬盘)。如果没有显示,通常表示设备的类型没有分类。
WEIGHTOSD 在数据分布和权重计算中的权重值,通常基于设备的存储容量。WEIGHT 值越高,表示该 OSD 可以存储更多的数据。
TYPE节点类型,root 表示根节点,host 表示主机,osd 表示具体的对象存储守护进程(OSD)。
NAME节点名称或 OSD 守护进程名称,如 ceph-node1 表示主机名,osd.0 表示 OSD 守护进程编号。
STATUS显示 OSD 的状态,up 表示 OSD 正在运行,down 表示 OSD 已关闭或无法访问。
REWEIGHTOSD 的动态权重,用于手动调整数据分布。如果需要减小或增加某个 OSD 的数据分布,可以通过调节此值。通常为 1.00000,表示正常权重。
PRI-AFF表示 OSD 的主优先级关联,通常用于调节数据在 OSD 之间的读取优先级。值为 1.00000 表示正常优先级。

查看设备状态

lsblk -o NAME,FSTYPE,MOUNTPOINT /dev/sdb

输出如下:

NAME                                                                                                  FSTYPE         MOUNTPOINT
sdb                                                                                                   LVM2_member
└─ ceph--bdd67cca--30c4--4bb7--99b2--7e8b613f8e75 - osd--block--3ff1a40f--8794--4241--b110--73438330491a  ceph_bluestore

❔说明:

  • /dev/sdb设备被格式化为lvm格式
  • 将一个设备规划成一个PV、VG和LV,命名格式是VG+LV

指定osd0查看vg

vgdisplay ceph-bdd67cca-30c4-4bb7-99b2-7e8b613f8e75

输出如下:

  --- Volume group ---VG Name               ceph-bdd67cca-30c4-4bb7-99b2-7e8b613f8e75System IDFormat                lvm2Metadata Areas        1Metadata Sequence No  5VG Access             read/writeVG Status             resizableMAX LV                0Cur LV                1Open LV               1Max PV                0Cur PV                1Act PV                1VG Size               <10.00 GiBPE Size               4.00 MiBTotal PE              2559Alloc PE / Size       2559 / <10.00 GiBFree  PE / Size       0 / 0VG UUID               zHjqjG-68Z2-sS7n-Q2cw-ncNk-kukF-U3Arlp

指定osd0查看lv

 lvdisplay ceph-bdd67cca-30c4-4bb7-99b2-7e8b613f8e75

输出如下:

  --- Logical volume ---LV Path                /dev/ceph-bdd67cca-30c4-4bb7-99b2-7e8b613f8e75/osd-block-3ff1a40f-8794-4241-b110-73438330491aLV Name                osd-block-3ff1a40f-8794-4241-b110-73438330491aVG Name                ceph-bdd67cca-30c4-4bb7-99b2-7e8b613f8e75LV UUID                jGDapH-Iy4V-rkR7-sDTc-zTAz-1O8S-9irpUTLV Write Access        read/writeLV Creation host, time ceph-node1, 2024-10-18 14:12:59 +0800LV Status              available# open                 24LV Size                <10.00 GiBCurrent LE             2559Segments               1Allocation             inheritRead ahead sectors     auto- currently set to     256Block device           253:0

新版Ceph默认是使用bluestore引擎,osd格式化后挂载到主机的/var/lib/ceph/<Ceph_Cluster_ID>/osd.<OSD_ID>/目录中。 指定osd0路径,执行命令查看:

root@ceph-node1:~# ll /var/lib/ceph/38c60b7c-8c6f-11ef-8b92-c929f534b368/osd.0/
total 72
drwx------  2 167 167 4096 Oct 18 14:13 ./
drwx------ 14 167 167 4096 Oct 18 14:13 ../
lrwxrwxrwx  1 167 167   93 Oct 18 14:13 block -> /dev/ceph-bdd67cca-30c4-4bb7-99b2-7e8b613f8e75/osd-block-3ff1a40f-8794-4241-b110-73438330491a
-rw-------  1 167 167   37 Oct 18 14:13 ceph_fsid
-rw-------  1 167 167  277 Oct 18 14:18 config
-rw-------  1 167 167   37 Oct 18 14:13 fsid
-rw-------  1 167 167  142 Oct 18 14:18 keyring
-rw-------  1 167 167    6 Oct 18 14:13 ready
-rw-------  1 167 167    3 Oct 18 14:13 require_osd_release
-rw-------  1 167 167   10 Oct 18 14:13 type
-rw-------  1 167 167   38 Oct 18 14:18 unit.configured
-rw-------  1 167 167   48 Oct 18 14:13 unit.created
-rw-------  1 167 167   90 Oct 18 14:13 unit.image
-rw-------  1 167 167  361 Oct 18 14:13 unit.meta
-rw-------  1 167 167 1644 Oct 18 14:13 unit.poststop
-rw-------  1 167 167 2827 Oct 18 14:13 unit.run
-rw-------  1 167 167  330 Oct 18 14:13 unit.stop
-rw-------  1 167 167    2 Oct 18 14:13 whoami

❔ 目录结构说明:

目录说明作用
block指向实际存储数据的 块设备/dev/ceph-xxxx/osd-block-xxxx)。该链接指向 OSD 数据存储的物理卷或逻辑卷。在 BlueStore 引擎中,数据会直接写入块设备,而不通过文件系统,这可以提高性能。
ceph_fsid文件内容是集群的 FSID(文件系统 ID),即整个 Ceph 集群的唯一标识符。用于标识该 OSD 所属的 Ceph 集群。每个 Ceph 集群都有一个唯一的 FSID,所有 OSD 和守护进程会使用这个 FSID 来确认它们属于同一个集群。
config这是 OSD 的配置文件,其中包含 Ceph OSD 守护进程的具体配置参数。该文件包含了 OSD 的运行参数和配置选项。这些设置通常是由 ceph.conf 继承的,可以覆盖或调整 OSD 的个性化配置。
fsid这是 OSD 自身的 FSID(文件系统 ID),与 ceph_fsid 不同,它是唯一标识该 OSD 的 UUID。这个文件保存了每个 OSD 自己的 UUID,这对于 Ceph 集群管理和识别 OSD 非常重要。
keyringOSD 使用的身份认证密钥。该文件包含 OSD 用于与其他 Ceph 守护进程(如 MON、MDS)进行认证和通信的密钥。Ceph 使用这种方式确保集群中的各个组件之间的通信是安全的。
ready标志文件,用于指示 OSD 已经准备好运行。Ceph 启动 OSD 时会检查该文件是否存在,文件内容通常为 1,表示 OSD 已经准备好。如果没有这个文件,OSD 不会被标记为 “ready” 状态。
type表示 OSD 使用的存储类型。这个文件的内容通常是 bluestore,表示该 OSD 使用的是 BlueStore 存储引擎。
unit.* 系列文件这些文件是与 systemd 相关的服务管理文件,主要用于跟踪和控制 OSD 守护进程的状态。帮助 Ceph 通过 systemd 来管理 OSD 的生命周期,跟踪 OSD 守护进程的启动、停止和运行状态。
whoami文件内容为该 OSD 的编号。这个文件存储了 OSD 的唯一编号(如文件内容 0 表示 osd.0),Ceph 通过该编号识别 OSD。这个文件确保 OSD 的编号与 Ceph 集群中的 OSD ID 一致。

2.2.6 查看集群的状态

执行以下命令查看集群状态:

ceph -s

输出如下:

cluster:id:     38c60b7c-8c6f-11ef-8b92-c929f534b368health: HEALTH_WARNclock skew detected on mon.ceph-node2services:mon: 3 daemons, quorum ceph-node1,ceph-node3,ceph-node2 (age 75m)mgr: ceph-node3.ctgktz(active, since 68m)osd: 6 osds: 6 up (since 74m), 6 in (since 74m)data:pools:   1 pools, 1 pgsobjects: 2 objects, 449 KiB# 集群可用容量大小共计60GBusage:   1.7 GiB used, 58 GiB / 60 GiB availpgs:     1 active+clean

❔ 字段说明:

  • 集群信息(Cluster Information)
字段说明
Cluster ID是 Ceph 集群的唯一标识符(UUID)。这个 ID 在集群中每个节点上都是一致的,用于标识集群
Health Status (健康状态)表示集群的健康状态
  • 服务状态(Services Information)
字段说明
mon (Monitor)显示当前有 3Monitor 守护进程,运行在 ceph-node1ceph-node3ceph-node2 上。这些监控节点组成了 仲裁(quorum),它们共同负责 Ceph 集群的状态管理和集群成员关系的协调。
mgr (Manager)显示有一个 Manager 守护进程,运行在 ceph-node3 上,并且标记为 active,表示它是当前的活跃管理节点,管理集群监控、统计和调度功能。
osd (Object Storage Daemon)显示集群中有 6 个 OSD 守护进程,所有的 OSD 都处于 up(运行状态)和 in(集群中)状态。
  • 数据状态(Data Information)
字段说明
pools集群中有 1 个池(pool)。池是 Ceph 存储数据的逻辑分区,通常用来组织和管理存储对象。
pgs (Placement Groups)显示集群中有 1PG(Placement Group,放置组),PG 是 Ceph 数据分布的基本单元。PG 用于在 OSD 之间分布数据,1 个 PG 表示存储数据的分片数较少,适合小型集群。
objects集群中存储了 2 个对象,共计占用 449 KiB 的存储空间。Ceph 将数据对象分布到 OSD 中,并对这些对象进行存储管理。
usage集群总共使用了 1.7 GiB 的存储空间,当前可用存储空间为 58 GiB,总存储容量为 60 GiB
pgs显示当前有 1 个 PG 处于 active+clean 状态,表示 PG 是活跃的并且所有数据都被正确复制且一致。

ceph_1028">2.3 测试ceph集群

创建存储池

ceph osd pool create stevenzeng

输出如下:

pool 'stevenzeng' created

⚠️ 注意: 通常创建池后会出现以下警告“1 pool(s) do not have an application enabled”

执行以下命令处理

  • 查看详细信息
root@ceph-node1:~# ceph health detail
[WRN] POOL_APP_NOT_ENABLED: 1 pool(s) do not have an application enabledapplication not enabled on pool 'stevenzeng'use ' ceph osd pool application enable <pool-name> <app-name> ', where <app-name> is 'cephfs', 'rbd', 'rgw', or freeform for custom applications.
  • 使用以上提示命令,启动应用功能,每个池只能开启一个应用功能
root@ceph-node1:~# ceph osd pool application enable stevenzeng rbd
enabled application 'rbd' on pool 'stevenzeng'

上传文件到测试存储池

 rados put sys.txt /etc/os-release -p stevenzeng

查看存储池的文件

rados ls -p stevenzeng

输出如下:

os.txt

查看存储池文件的状态信息

rados -p stevenzeng stat os.txt

输出如下:

stevenzeng/os.txt mtime 2024-10-18T15:56:22.000000+0800, size 386

查看PG的副本在哪些OSD上,执行以下命令:

ceph osd map stevenzeng os.txt

输出如下:

osdmap e39 pool 'stevenzeng' (2) object 'os.txt' -> pg 2.486f5322 (2.2) -> up ([5,1,2], p5) acting ([5,1,2], p5)
  • 不难发现,pg的三个副本分别在osd5,1,2。

删除文件

rados -p stevenzeng rm os.txt  

查看文件是否存在

rados -p stevenzeng ls

在查看pg的映射关系

ceph osd map stevenzeng sys.txt

❓思考: 删除文件后发现映射信息还在,那如何删除这些映射信息呢?

  • Ceph存储中默认设置了延迟删除的回收机制,Ceph的删除操作并不一定是即时生效的,特别是在繁忙的集群中。RADOS对象删除后,Ceph可能还会保留该对象的元数据(例如OSD映射关系)一段时间,等待后台的清理任务(如垃圾回收进程)来真正释放资源,同时这样也会保持数据一致性和优化性能。

3 总结

Cephadm 使得 Ceph 的部署流程简化为几条命令,特别适合云原生环境的快速扩展需求。通过Cephadm,你可以快速高效地部署 Ceph 集群,并利用容器化技术实现集群的自动化管理。本篇博客能够帮助你从浅入深了解Ceph存储的概念,并顺利部署 Ceph存储集群, 为业务构建高效、稳定的分布式存储系统。 接下来会为您解Ceph为Kubernetes集群提供存储的实践应用。

4 参考资料

[1] Ceph官方文档


http://www.ppmy.cn/server/133925.html

相关文章

Python爬虫:urllib_post请求百度翻译(06)

#post的请求 import urllib.request import urllib.parse import jsonurl https://fanyi.baidu.com/sugheaders {user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36}data {kw : spider }#post请…

AI创新驱动教育:科技革命下的教育转型

日前&#xff0c;2024教育装备创新大会在杭州市余杭区举行&#xff0c;会上集中展示了AI技术如何赋能教学并深入探讨了其影响。AI技术正在以前所未有的力度&#xff0c;引领教育步入智能新时代&#xff0c;成为教育改革创新的催化剂。 在国家政策的积极推动下&#xff0c;AI技…

【前端】如何制作一个自己的网页(14)

当我们还需要对网页中的内容进行局部样式的修改。这时候&#xff0c;就需要用到HTML中的重要元素&#xff1a;span。 span是一个行内元素&#xff0c;可以对HTML文档中的内容进行局部布局。 如图&#xff0c;我们给标题和段落元素的部分内容设置了各种样式。 接下来&#xff0…

Redis入门:在Java程序中高效使用Redis

准备工作 下载windows版的Redis&#xff08;自行查找网络资源&#xff09; 解压到指定文件夹 如图所示&#xff1a;Redis的目录结构 redis本质上也是一个数据库&#xff0c;只不过经常被用作缓存 。redis分为服务端和客户端&#xff0c;先启动服务器redis-server&#xff0c;在…

华为od面试手撕代码真题题型4——链表

链表 1 单链表相交 160. 相交链表 - 力扣&#xff08;LeetCode&#xff09; 解法一 指针 pA 指向 A 链表&#xff0c;指针 pB 指向 B 链表&#xff0c;依次往后遍历。如果 pA 到了末尾&#xff0c;则 pA headB 继续遍历、如果 pB 到了末尾&#xff0c;则 pB headA 继续遍历…

CVTE Android面试题及参考答案(100道题)

目录 插件化 组件化 合并相似接口 抽象通用方法 使用接口代理 引入设计模式 编写源代码 资源文件准备 编译资源文件 编译源代码 生成 dex 文件 打包 APK 文件 技术能力提升 项目经验积累 职业发展 知识分享与团队协作 建立良好的沟通机制 明确团队目标和职责…

大数据新视界 --大数据大厂之大数据与边缘计算的协同:实时分析的新前沿

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

11 django管理系统 - 管理员管理 - 分页复习(REVIEW)

下面实现分页功能&#xff0c;还是按照固定步骤来。 我先随机插入100条数据。然后分页&#xff0c;每页显示10条数据。 分页类&#xff1a;在前面"08 django管理系统 - 部门管理 - 部门分页"讲到过&#xff0c;代码如下&#xff1a; from django.utils.safestring …