ceph介绍与部署

云存储用户角色

  • 存储管理员,安装、配置和维护 Ceph 存储集群。提供弹性和恢复,例如复本、备份和灾难恢复方法。
  • 存储操作员:协助存储集群的日常操作。负责日常存储管理任务,例如更换故障存储设备。
  • 云操作员,管理组织中的云资源,例如 OpenStack 或 OpenShift 基础设施。存储管理员与云操作员密切合作,维护 Ceph 集群。
  • 自动化工程师,负责为常见的重复任务创建剧本。
  • 应用程序开发人员(DevOps 开发人员),可以是原始代码开发人员、维护人员或其他负责应用程序正确部署和行为的云用户。存储管理员与应用程序开发人员协调以确保存储资源可用、设置配额并保护应用程序存储。
  • 服务管理员,管理最终用户服务(不同于操作系统服务)。服务管理员具有与项目经理类似的角色,但针对的是现有的生产服务产品。
  • 部署工程师(DevOps 工程师),在更大的环境中,专职人员与存储管理员和应用程序开发人员一起执行、管理和调整应用程序部署。
  • 应用架构师,应用程序架构师可以在 Ceph 基础架构布局与资源可用性、扩展和延迟之间建立关联。这种架构专业知识可帮助存储管理员有效地设计复杂的应用程序部署。为了支持云用户及其应用程序,存储管理员必须了解资源可用性、扩展和延迟的这些相同方面。
  • 基础架构架构师,存储管理员必须掌握存储集群的架构布局,才能管理资源位置、容量和延迟。 Ceph 集群部署和维护的基础架构架构师是存储管理员的主要信息来源。 基础架构架构师可能是云服务提供商员工或供应商解决方案架构师或顾问。
  • 数据中心操作员,是较低 Ceph 存储基础设施层的角色,负责数据供应。数据中心操作员通常受雇于公共云服务提供商或私有数据中心云中组织的内部 IT 团队。

Ceph 介绍

  • 开源、分布式、软件定义存储 。
  • 极高的可用性、 扩展性和易用性, 用于存储海量数据。
  • 可部署在通用服务器上, 这些服务器的CPU可以是x86架构, 也可以是ARM架构。 Ceph 支持在同一集群内既有x86主机,又有ARM 主机。

技术优势

  • 采用 RADOS 系统将所有数据作为对象, 存储在存储池中。
  • 去中心化, 客户端可根据CRUSH算法自行计算出对象存储位置, 然后进行数据读写。
  • 集群可自动进行扩展、 数据再平衡、 数据恢复等。

Ceph 架构介绍

Ceph旨在提供卓越的性能、可靠性和可扩展性。采用模块化分布式架构,包含下列元素:

  • 对象存储后端,称为RADOS(可靠的自主分布式对象存储),RADOS是一种自我修复、自我管理、基于软件的对象存储。RADOS(ReliableAutonomicDistributed Object Store),即可靠的、自主的、分布式的对象存储,是Ceph存储系统的核心。Ceph的所有优秀特性都是由RADOS提供的,包括分布式对象存储、高可用性、高可靠性、没有单点故障、自我修复以及自我管理等。Ceph中的一切数据都以对象的形式存储,RADOS负责存储这些对象,而不考虑它们的数据类型。
  • 与RADOS交互的多种访问方式。

Ceph访问方式

  • Ceph原生API(librados),librados库是原生C语言库,可以让应用直接与RADOS协作来访问Ceph集群存储的对象。为了最大限度地提高性能,请编写用户的应用程序以直接使用 librados 。

  • Ceph块设备(RBD、librbd),也称为 RADOS块设备(RBD)镜像,Ceph集群中虚拟磁盘的存储,Linux内核中的挂载支持,QEMU、KVM和 OpenStack Cinder 的启动支持。

  • Ceph对象网关(RADOSGW、librgw),使用librados构建的对象存储接口。它使用这个库来与Ceph集群通信,并且直接写入到OSD进程。它通过RESTfulAPI为应用提供了网关,并且支持两种接口:Amazon S3和 OpenStack Swift。

  • Ceph文件系统(CephFS、libcephfs),并行文件系统,提供可扩展的、单层级结构共享磁盘。Ceph元数据服务器(MDS)管理与CephFS中存储的文件相关联的元数据,包括文件访问、更改和修改时间戳。

Ceph存储后端组件

  • 监控器(MON)维护集群状态映射。它们可帮助其他守护进程互相协调。配置奇数个监视器
  • **对象存储设备(OSD)**存储数据并处理数据复制、恢复和重新平衡。使用可扩展哈希下的受控复制 (CRUSH) 算法来高效地计算有关对象位置的信息,而不是依赖于中央查找表。
  • **管理器(MGR)**通过基于浏览器的仪表板和RESTAPI,跟踪运行时指标并公开集群信息。
  • **元数据服务器(MDS)**存储CephFS使用的元数据(而非对象存储或块存储),以便客户端能够高效运行 POSIX命令。

CRUSH映射

CRUSH 将每个对象分配给一个放置组 (PG),也就是单个哈希存储桶, PG 将对象映射给多个OSD。

集群映射(Cluster Map)

  • 监视器映射(Monitor Map), 包含集群的 fs id; 每个监视器(monitor)的位置、名称、地址和端口; 和地图时间戳。 fsid 是一个唯一的、自动生成的标识符 (UUID),用于标识 Ceph 集群。Ceph Monitor 守护进程维护集群映射。 使用 ceph mon dump 命令查看监视器图。
  • OSD映射(OSD Map), 包含集群的 fs id、池列表、复本大小、归置组编号、OSD 列表及其状态以及映射时间戳。 使用 ceph osd dump 命令查看 OSD 映射。
  • 放置组映射(Placement Group Map),包含 PG 版本; 使用百分比; 每个归置组的详细信息,例如 PG ID、Up Set、Acting Set、PG 的状态、每个池的数据使用统计信息; 和地图时间戳。 使用 ceph pg dump 命令查看 PG Map 统计信息。
  • CRUSH映射(CRUSH Map), 包含存储设备列表、故障域层次结构(例如设备、主机、机架、行、房间)以及在存储数据时遍历层次结构的规则。 使用 ceph osd crush dump 命令查看 cursh Map 统计信息。
  • 元数据服务器映射(MDS map),包含用于存储元数据的池、元数据服务器列表、元数据服务器状态和映射时间戳。 使用 ceph fs dump 命令查看 MDS 映射。

分布式存储部署

官方推荐部署方式

  • Cephadm:基于容器部署,支持 Octopus 及以后版本,部署完成后可通过命令行和图形界面进行ceph集群的管理。
  • Rook:基于 kubernetes 部署,支持 Nautilus 及以后版本,部署完成后可通过命令行和图形界面进行ceph集群的管理,同时可通过 kubernetes 对组件所在 pod 进行管理。

Cephadm 简介

  • Cephadm 是一个ceph全生命周期管理工具, 通过“引导( bootstrapping ) ” 可创建一个包含一个MON和一个MGR的单节点集群, 后续可通过自带的编排接口进行集群的扩容、 主机添加、 服务部署。

  • Cephadm 使用容器部署 Ceph,大大降低了部署 Ceph 集群的复杂性和包依赖性。

  • cephadm 软件包安装在集群第一个节点中,该节点充当引导节点。Cephadm 是部署新集群时启动的第一个守护程序,同时也是管理器守护程序 (MGR) 中的一个模块。

Cephadm 管理接口

Ceph 使用容器化部署,首先创建一个最小的集群,只有一个主机(引导节点)和两个守护进程(监视器和管理器守护进程)。

Ceph 提供两个管理接口:Ceph CLIDashboard GUI,用于配置 Ceph 守护进程和服务以及扩展或收缩集群。

cephadm 工具与 Ceph Manager 编排模块交互,Ceph Manager Orchestrator 再与其他组件交互:

Ceph CLI 接口

#`cephadm shell` 命令启动一个容器化版本的 shell,容器中安装了所有必需的 Ceph 包。

[root@ceph1 ~]# cephadm shell
Inferring fsid 2faf683a-7cbf-11f0-b5ba-000c29e0ad0e
Using recent ceph image quay.io/ceph/ceph@sha256:f15b41add2c01a65229b0db515d2dd57925636ea39678ccc682a49e2e9713d98
[ceph: root@ceph1 /]# 

[root@ceph1 ~]# cephadm shell -- ceph status
Inferring fsid 2faf683a-7cbf-11f0-b5ba-000c29e0ad0e
Using recent ceph image quay.io/ceph/ceph@sha256:f15b41add2c01a65229b0db515d2dd57925636ea39678ccc682a49e2e9713d98
  cluster:
    id:     2faf683a-7cbf-11f0-b5ba-000c29e0ad0e
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum ceph1.laogao.cloud,ceph2,ceph3 (age 12m)
    mgr: ceph2.oetbal(active, since 11m), standbys: ceph1.laogao.cloud.zoqmbt, ceph3.npaxvt
    osd: 9 osds: 9 up (since 12m), 9 in (since 3w)

  data:
    pools:   1 pools, 1 pgs
    objects: 0 objects, 0 B
    usage:   2.6 GiB used, 177 GiB / 180 GiB avail
    pgs:     1 active+clean
  
# 为了操作方便,可以直接在物理主机执行ceph命令,需要安装ceph-common软件包。
[root@ceph1 ~]# dnf install -y ceph-common
[root@ceph1 ~]# ceph status    

Ceph Dashboard 接口

基于 Web 的应用程序,用于监视和管理集群。与 Ceph CLI 一样,Dashboard GUI Web 是 ceph-mgr 守护进程的一个模块。 默认情况下,Ceph 在创建集群时将 Dashboard GUI 部署在引导节点,并使用 TCP 端口 8443。还实现了集群管理和监控功能。

Ceph 集群安装过程

部署方法:cephadm

操作系统:Centos Stream 8(最小化安装)

硬件配置:2 cpu、4G memory、1个系统盘+3个20G数据盘

使用7台虚拟机:

  • 客户端:client
  • 主集群:ceph1、ceph2、ceph3
  • 备集群:ceph4、ceph5、ceph6
准备虚拟机模板
# 1 配置主机名解析
[root@localhost ~]# cat >> /etc/hosts << EOF

###### ceph ######
192.168.108.10 client.demo.cloud client
192.168.108.11 ceph1.demo.cloud ceph1
192.168.108.12 ceph2.demo.cloud ceph2
192.168.108.13 ceph3.demo.cloud ceph3
192.168.108.14 ceph4.demo.cloud ceph4
192.168.108.15 ceph5.demo.cloud ceph5
192.168.108.16 ceph6.demo.cloud ceph6
EOF

# 2 关闭 SELinux
[root@localhost ~]# sed -ri 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

# 3 关闭防火墙
[root@localhost ~]# systemctl disable firewalld --now

# 4 配置yum仓库
[root@localhost ~]# cat << 'EOF' > /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph 
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/storage/x86_64/ceph-pacific
enabled=1
gpgcheck=0
EOF

# 5 安装基础软件包
[root@localhost ~]# dnf install -y bash-completion vim lrzsz unzip rsync sshpass tar

# 6 配置时间同步
[root@localhost ~]# dnf install -y chrony
[root@localhost ~]# systemctl enable chronyd --now

# 7 安装 cephadm
[root@localhost ~]# dnf install -y cephadm
[root@localhost ~]# cephadm --help
usage: cephadm [-h] [--image IMAGE] [--docker] [--data-dir DATA_DIR]
               [--log-dir LOG_DIR] [--logrotate-dir LOGROTATE_DIR]
               [--sysctl-dir SYSCTL_DIR] [--unit-dir UNIT_DIR] [--verbose]
               [--timeout TIMEOUT] [--retry RETRY] [--env ENV]
               [--no-container-init]
               {version,pull,inspect-image,ls,list-networks,adopt,rm-daemon,rm-cluster,run,shell,enter,ceph-volume,zap-osds,unit,logs,bootstrap,deploy,check-host,prepare-host,add-repo,rm-repo,install,registry-login,gather-facts,exporter,host-maintenance,disk-rescan}
               ...

Bootstrap Ceph daemons with systemd and containers.

positional arguments:
  {version,pull,inspect-image,ls,list-networks,adopt,rm-daemon,rm-cluster,run,shell,enter,ceph-volume,zap-osds,unit,logs,bootstrap,deploy,check-host,prepare-host,add-repo,rm-repo,install,registry-login,gather-facts,exporter,host-maintenance,disk-rescan}
                        sub-command
    version             get ceph version from container
    pull                pull the default container image
    inspect-image       inspect local container image
    ls                  list daemon instances on this host
......

# 安装 cephadm 的时候,会自动安装官方推荐的容器引擎 podman
[root@localhost ~]# rpm -q podman
podman-4.9.4-0.1.module_el8+971+3d3df00d.x86_64

# 8 提前下载镜像
[root@localhost ~]# podman pull quay.io/ceph/ceph:v16  
[root@localhost ~]# podman pull quay.io/ceph/ceph-grafana:8.3.5
[root@localhost ~]# podman pull quay.io/prometheus/node-exporter:v1.3.1
[root@localhost ~]# podman pull quay.io/prometheus/alertmanager:v0.23.0
[root@localhost ~]# podman pull quay.io/prometheus/prometheus:v2.33.4

#  准备配置主机脚本
[root@localhost ~]# cat > /usr/local/bin/sethost <<'EOF'
#/bin/bash
hostnamectl set-hostname ceph$1.demo.cloud
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.108.1$1/24 ipv4.gateway 192.168.108.2 ipv4.dns 192.168.108.2
init 0
EOF

[root@localhost ~]# chmod +x /usr/local/bin/sethost

#关机打快照
准备集群节点
#克隆

#ceph1到ceph6按以下修改
[root@localhost ~]# sethost 1     #ceph1用1,ceph2到ceph6分别为2-6

#client做以下修改
[root@localhost ~]# hostnamectl set-hostname client.demo.cloud
[root@localhost ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.108.10/24 ipv4x.gateway 192.168.108.2 ipv4.dns 192.168.108.2
Ceph 集群初始化
[root@ceph1 ~]# cephadm bootstrap --mon-ip 192.168.108.11 --allow-fqdn-hostname --initial-dashboard-user admin --initial-dashboard-password demo@123 --dashboard-password-noupdate

选项说明

  • –mon-ip 192.168.108.11,指定 monitor ip。
  • –allow-fqdn-hostname,指定允许使用长名称。当主机名是长名称时,初始化时必须使用该参数。
  • –initial-dashboard-user admin,指定 Web UI 登录的管理员账户。
  • –initial-dashboard-password demo@123,指定 Web UI 登录的管理员账户对应密码。
  • –dashboard-password-noupdate,指定不要更新 Web UI 登录密码。
Dashboard 登录信息
Ceph Dashboard is now available at:

             URL: https://ceph1.demo.cloud:8443/
            User: admin
        Password: demo@123

客户端访问方法

Enabling client.admin keyring and conf on hosts with "admin" label
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 2faf683a-7cbf-11f0-b5ba-000c29e0ad0e -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring

Or, if you are only running a single cluster on this host:

        sudo /usr/sbin/cephadm shell

添加节点

  1. Ceph采用共享秘钥进行身份验证, 使用命令“ceph cephadm get-pub-key” 获取到主机接入集群时所需的ssh 公钥。
  2. 获取到公钥后, 使用该公钥实现对节点的免密ssh管理。
  3. 使用命令“ceph orch host add” 添加主机。
# 为了配置方便,我们在ceph1上安装ceph客户端工具 ceph-common
[root@ceph1 ~]# dnf install -y ceph-common

# 获取集群公钥
[root@ceph1 ~]# ceph cephadm get-pub-key > ~/ceph.pub

# 推送公钥到其他节点
[root@ceph1 ~]# ssh-copy-id -f -i ~/ceph.pub root@ceph2.demo.cloud
[root@ceph1 ~]# ssh-copy-id -f -i ~/ceph.pub root@ceph3.demo.cloud

# 添加节点
[root@ceph1 ~]# ceph orch host add ceph2.demo.cloud
Added host 'ceph2.demo.cloud' with addr '192.168.108.12'
[root@ceph1 ~]# ceph orch host add ceph3.demo.cloud
Added host 'ceph3.demo.cloud' with addr '192.168.108.13'

[root@ceph1 ~]# ceph orch host ls
HOST                ADDR            LABELS  STATUS
ceph1.demo.cloud  192.168.108.11  _admin
ceph2.demo.cloud  192.168.108.12
ceph3.demo.cloud  192.168.108.13
3 hosts in cluster

# 等待自动部署服务到其他节点,部署完成后效果如下:
[root@ceph1 ~]# ceph orch ls
NAME           PORTS        RUNNING  REFRESHED  AGE  PLACEMENT
alertmanager   ?:9093,9094      1/1  8m ago     9m   count:1
crash                           3/3  8m ago     9m   *
grafana        ?:3000           1/1  8m ago     9m   count:1
mgr                             2/2  8m ago     9m   count:2
mon                             3/5  8m ago     9m   count:5
node-exporter  ?:9100           3/3  8m ago     9m   *
prometheus     ?:9095           1/1  8m ago     9m   count:1
# crash 3/3个
# mgr 2/2个
# mon 3/5个
# node-exporter 3/3个

部署 mon 和 mgr

# 禁用 mon 和 mgr 服务的自动扩展功能
[root@ceph1 ~]# ceph orch apply mon --unmanaged=true
[root@ceph1 ~]# ceph orch apply mgr --unmanaged=true
[root@ceph1 ~]# ceph orch ls
NAME           PORTS        RUNNING  REFRESHED  AGE  PLACEMENT
alertmanager   ?:9093,9094      1/1  56s ago    12m  count:1
crash                           3/3  57s ago    12m  *
grafana        ?:3000           1/1  56s ago    12m  count:1
mgr                             2/2  57s ago    3s   <unmanaged>
mon                             3/5  57s ago    8s   <unmanaged>
node-exporter  ?:9100           3/3  57s ago    12m  *
prometheus     ?:9095           1/1  56s ago    12m  count:1
# mon 和 mgr 的 PLACEMENT 状态为 <unmanaged>

# 配置主机标签,ceph2 和 ceph3 添加标签“ _admin”
[root@ceph1 ~]# ceph orch host label add ceph2.demo.cloud _admin
Added label _admin to host ceph2.demo.cloud
[root@ceph1 ~]# ceph orch host label add ceph3.demo.cloud _admin
Added label _admin to host ceph3.demo.cloud
[root@ceph1 ~]# ceph orch host ls
HOST                ADDR            LABELS  STATUS
ceph1.demo.cloud  192.168.108.11  _admin
ceph2.demo.cloud  192.168.108.12  _admin
ceph3.demo.cloud  192.168.108.13  _admin
3 hosts in cluster

# 将 mon 和 mgr 组件部署到具有_admin标签的节点上
[root@ceph1 ~]# ceph orch apply mon --placement="label:_admin"
Scheduled mon update...
[root@ceph1 ~]# ceph orch apply mgr --placement="label:_admin"
Scheduled mgr update...
#观察现象
[root@ceph1 ~]# ceph orch ls | egrep 'mon|mgr'
mgr                             3/3  2m ago     14s  label:_admin
mon                             3/3  2m ago     28s  label:_admin

[root@ceph1 ~]# ceph orch ps | egrep 'mon|mgr'

部署 OSD

# 将所有主机上闲置的硬盘添加为 OSD
[root@ceph1 ~]# ceph orch apply osd --all-available-devices
Scheduled osd.all-available-devices update...

验证

#查看集群中部署的服务

[root@ceph1 ~]# ceph orch ls
NAME                       PORTS        RUNNING  REFRESHED  AGE  PLACEMENT
alertmanager               ?:9093,9094      1/1  3s ago     15m  count:1
crash                                       3/3  4s ago     15m  *
grafana                    ?:3000           1/1  3s ago     15m  count:1
mgr                                         3/3  4s ago     2m   label:_admin
mon                                         3/3  4s ago     2m   label:_admin
node-exporter              ?:9100           3/3  4s ago     15m  *
osd.all-available-devices                     9  4s ago     25s  *
prometheus                 ?:9095           1/1  3s ago     15m  count:1

#查看集群状态
[root@ceph1 ~]# ceph -s
  cluster:
    id:     2faf683a-7cbf-11f0-b5ba-000c29e0ad0e
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum ceph1.demo.cloud,ceph2,ceph3 (age 6m)
    mgr: ceph1.demo.cloud.zoqmbt(active, since 15m), standbys: ceph2.oetbal, ceph3.npaxvt
    osd: 9 osds: 9 up (since 30s), 9 in (since 45s)

  data:
    pools:   1 pools, 1 pgs
    objects: 0 objects, 0 B
    usage:   2.6 GiB used, 177 GiB / 180 GiB avail
    pgs:     1 active+clean
    
#查看集群 osd 结构
[root@ceph1 ~]# ceph osd tree
ID  CLASS  WEIGHT   TYPE NAME       STATUS  REWEIGHT  PRI-AFF
-1         0.17537  root default
-3         0.05846      host ceph1
 0    hdd  0.01949          osd.0       up   1.00000  1.00000
 3    hdd  0.01949          osd.3       up   1.00000  1.00000
 6    hdd  0.01949          osd.6       up   1.00000  1.00000
-5         0.05846      host ceph2
 2    hdd  0.01949          osd.2       up   1.00000  1.00000
 4    hdd  0.01949          osd.4       up   1.00000  1.00000
 7    hdd  0.01949          osd.7       up   1.00000  1.00000
-7         0.05846      host ceph3
 1    hdd  0.01949          osd.1       up   1.00000  1.00000
 5    hdd  0.01949          osd.5       up   1.00000  1.00000
 8    hdd  0.01949          osd.8       up   1.00000  1.00000
 
 #查看集群组件
 ceph orch ps

5846 host ceph2
2 hdd 0.01949 osd.2 up 1.00000 1.00000
4 hdd 0.01949 osd.4 up 1.00000 1.00000
7 hdd 0.01949 osd.7 up 1.00000 1.00000
-7 0.05846 host ceph3
1 hdd 0.01949 osd.1 up 1.00000 1.00000
5 hdd 0.01949 osd.5 up 1.00000 1.00000
8 hdd 0.01949 osd.8 up 1.00000 1.00000

#查看集群组件
ceph orch ps


Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐