文章目录

  • 1.概念简介
  • 1.1 存储类型
  • 1.1.1 DAS设备
  • 1.1.2 NAS设备:文件服务
  • 1.1.3 SAN设备:块服务
  • 1.2 Ceph 架构简介
  • 2.集群节点规划
  • 3.准备工作
  • 4.使用 cephadm 部署一个 ceph 集群
  • 4.1 离线安装包
  • 4.2 在 ceph-mon1 节点进行部署
  • 4.3 添加 ceph-ods1、ceph-ods2 节点到集群
  • 4.3.1 集群节点间的 SSH 免密访问设置
  • 4.3.2 添加节点到集群
  • 4.4 在 ceph-ods1、ceph-ods2 节点安装 OSDs
  • 4.4.1 依赖项安装
  • 4.4.2 添加 OSD 角色(服务)到集群
  • 5.创建一个文件系统卷


1.概念简介

官方地址:https://ceph.com/en/
官方文档:https://docs.ceph.com/en/latest/
Github地址:https://github.com/ceph/ceph
版本发布地址:https://docs.ceph.com/en/latest/releases/
版本命名规则,第二个数字表示:
x.0.x:开发版
x.1.x:候选版
x.2.x:稳定、修正版,建议都是用稳定版本进行

1.1 存储类型

1.1.1 DAS设备

DAS设备:SAS、SATA、SCSI、IDE、USB
无论哪种接口,都是存储设备驱动下的磁盘设备,磁盘设备这种存储是直接接入到主板总线的

1.1.2 NAS设备:文件服务

NAS设备:NFS、CIFS、FTP
几乎所有的网络存储设备都是以文件系统进行使用

1.1.3 SAN设备:块服务

SCSI协议、FC SAN、iSCSI
基于SAN提供给客户端操作系统的一种块设备接口,设备之间主要通过SCSI协议完成通信
SCSI结构类似于TCP/IP协议,也有很多层,但是SCSI协议主要用来进行存储数据操作。既然分层实现,即有的层可以被替代。例如将物理层基于FC方式实现,就形成了FCSAN,如果基于以太网方式来传递数据,就形成了iSCSI模式。

1.2 Ceph 架构简介

Ceph: 是一个多版本存储系统,把每一个待管理的数据流(如一个文件)切分为一到多个固定大小的对象数据,并以其为原子单元完成数据存取。对象数据的底层存储服务: 由多台主机组成的存储集群,该集群也被称为 RADOS(Reliable Automatic Distributed Object Store)存储集群,即可靠、自动化、分布式对象存储系统。librados: 是RADOS存储集群的API,支持C、C++、Java、Python、Ruby、PHP等编程语言。

centosroute离线包 centos8 离线安装_文件系统

不管是为云平台提供 Ceph 对象存储、 Ceph 块设备、Ceph 文件系统还是把 Ceph 作为他用,所有 Ceph 存储集群的部署都始于部署一个个 Ceph 节点、网络和 Ceph 存储集群。 Ceph 存储集群至少需要一个 Ceph Monitor 和两个 OSD 守护进程。而运行 Ceph 文件系统客户端时,则必须要有元数据服务器( Metadata Server )。

centosroute离线包 centos8 离线安装_文件系统_02

Ceph OSDs: Ceph OSD 守护进程( Ceph OSD )的功能是存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD 守护进程的心跳来向 Ceph Monitors 提供一些监控信息。当 Ceph 存储集群设定为有2个副本时,至少需要2个 OSD 守护进程,集群才能达到 active+clean 状态( Ceph 默认有3个副本,但可以调整副本数)。

Monitors: Ceph Monitor 维护着展示集群状态的各种图表,包括监视器图、 OSD 图、归置组( PG )图、和 CRUSH 图。 Ceph 保存着发生在Monitors 、 OSD 和 PG上的每一次状态变更的历史信息(称为 epoch )。

MDSs: Ceph 元数据服务器( MDS )为 Ceph 文件系统存储元数据(也就是说,Ceph 块设备和 Ceph 对象存储不使用MDS )。元数据服务器使得 POSIX 文件系统的用户们,可以在不对 Ceph 存储集群造成负担的前提下,执行诸如 ls、find 等基本命令。

Ceph 把客户端数据保存为存储池内的对象。通过使用 CRUSH 算法, Ceph 可以计算出哪个归置组(PG)应该持有指定的对象(Object),然后进一步计算出哪个 OSD 守护进程持有该归置组。 CRUSH 算法使得 Ceph 存储集群能够动态地伸缩、再均衡和修复。

2.集群节点规划

操作系统:CentOS-8-x86_64-1905-dvd1.iso
使用虚拟机搭建集群,虚拟机创建的时候,系统盘设置50G,数据盘设置100G

节点

IP

数据盘(OSD)

角色

ceph-mon1

192.168.120.61

MON、MDS、PROM、GRAFANA

ceph-osd1

192.168.120.62

/dev/sdb

OSD

ceph-osd2

192.168.120.63

/dev/sdb

OSD

3.准备工作

# 集群三台节点,修改 /etc/hosts 文件,并添加下面内容:
192.168.120.61 ceph-mon1
192.168.120.62 ceph-osd1
192.168.120.63 ceph-osd2

4.使用 cephadm 部署一个 ceph 集群

Ceph官网支持部署方式:https://docs.ceph.com/en/pacific/install/

部署方式

描述

Cephadm

使用容器和 systemd 安装和管理 Ceph 集群,并与 CLI 和仪表板 GUI 紧密集成,支持 Octopus 以后的版本,当前官方推荐部署方式,cephadm 需要容器支持(podman或docker)和Python 3

Rook

部署和管理运行在 Kubernetes 中的 Ceph 集群,同时也支持通过 Kubernetes api 管理存储资源和供应。推荐使用 Rook 在 Kubernetes 中运行 Ceph,或者将现有的 Ceph 存储集群连接到 Kubernetes,只支持Nautilus和以后的新版本

4.1 离线安装包

因为后续需要离线部署到实际工作环境中,所以参照网上的部署方案,制作了一个简单的离线安装部署包。安装包里面的 cephadm 程序被修改了,将里面的 command_pull 函数里面 cmd 数组中的 ‘pull’ 改为了 ‘images’ 。因为离线部署不需要使用 docker 或者 podman 去实际拉取镜像,使用本地镜像即可。离线安装包只适合在 CentOS 8 x86_64 下使用,其他系统环境无法兼顾。离线安装包主要是打包了 podman、python3、smartmontools、chrony 的安装包,以及 cephadm 及其需要用到的几个容器镜像。

cephadm 使用到的镜像列表如下:

sudo podman images
REPOSITORY                   TAG      IMAGE ID      CREATED        SIZE
quay.ceph.io/ceph-ci/ceph    v17.0.0  fb6c62c88122  11 hours ago   1.14 GB
docker.io/ceph/ceph-grafana  6.7.4    80728b29ad3f  3 months ago   495 MB
docker.io/prom/prometheus    v2.18.1  de242295e225  11 months ago  141 MB
docker.io/prom/alertmanager  v0.20.0  0881eb8f169f  16 months ago  53.5 MB

离线安装包下载地址:
安装包1:需要修改脚本,不建议使用,如果使用,请参考4.2章节进行修改
链接:https://pan.baidu.com/s/1_0lDcH8I4CsgI6eRPFbcJQ
提取码:tq0z
ceph_centos8_x86_64_20210412_114555.7z、p7zip-16.02-16.el8.x86_64.rpm
安装包2: 不需要修改脚本,可以直接执行 ./install.sh,建议下载使用安装包2
链接:https://pan.baidu.com/s/1H9tT74Wo2QwJ_s1wWH2e9A
提取码:txy4
ceph_centos8_x86_64.tar.gz

注意:在安装完成之后,可以将 cephadm 复制到 /usr/bin 目录下,后续可以直接使用,无需指定路径。

4.2 在 ceph-mon1 节点进行部署

将离线安装包上传到 ceph-mon1 节点:ceph_centos8_x86_64_20210412_114555.7z、p7zip-16.02-16.el8.x86_64.rpm
安装:rpm -ivh p7zip-16.02-16.el8.x86_64.rpm
解压:7za x ceph_centos8_x86_64_20210412_114555.7z
解压后进入 ceph_centos8_x86_64 文件夹,执行下面命令进行基础依赖组件安装:

# 修改脚本
vim cephadm
# Default container images -----------------------------------------------------
DEFAULT_IMAGE = 'quay.ceph.io/ceph-ci/ceph:master'
修改为:
# Default container images -----------------------------------------------------
DEFAULT_IMAGE = 'quay.ceph.io/ceph-ci/ceph:v17.0.0'
vim install.sh
podman load -i docker.io/prom/node-exporter.tar  docker.io/prom/node-exporter:v0.18.1
修改为:
podman load -i docker.io/prom/node-exporter.tar  docker.io/prom/node-exporter:v0.18.1
vim目录添加如下两个rpm包,否则,导入镜像报错:
libseccomp-2.5.1-1.el8.x86_64.rpm
libseccomp-devel-2.5.1-1.el8.x86_64.rpm
# 执行 install.sh 脚本,安装必要的一些软件,以及导入镜像到容器
[root@ceph-mon1 ceph_centos8_x86_64]# ./install.sh

安装完成基础组件后,再执行 cluster.gen.sh 脚本来创建集群,执行的过程中,会要求输入 MON 节点的 IP,直接输入后回车即可:

[root@ceph-mon1 ceph_centos8_x86_64]# ./cluster.gen.sh
... ...
Ceph Monitor维护着展示集群状态的各种图表,包括监视器图、 OSD 图、归置组( PG )图、和 CRUSH 图。
请输入 MON (Ceph Monitor) 节点 IP:192.168.120.61
... ...
Enabling firewalld port 8443/tcp in current zone...
Ceph Dashboard is now available at:

             URL: https://ceph-mon1:8443/
            User: admin
        Password: 0yaqy67njv

You can access the Ceph CLI with:

        sudo ./cephadm shell --fsid 192e064c-e56a-11ec-92a0-000c2965ed0e -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring

Please consider enabling telemetry to help improve Ceph:

        ceph telemetry on

For more information see:

        https://docs.ceph.com/docs/master/mgr/telemetry/

Bootstrap complete.
sudo ./cephadm shell --fsid 192e064c-e56a-11ec-92a0-000c2965ed0e -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring
使用以上用户名和密码访问:https://192.168.120.61:8443/

centosroute离线包 centos8 离线安装_Ceph_03


centosroute离线包 centos8 离线安装_安装包_04

4.3 添加 ceph-ods1、ceph-ods2 节点到集群

4.3.1 集群节点间的 SSH 免密访问设置

# 在 ceph-mon1节点执行
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-osd1
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-osd2

# 或者,需要在集群三个节点,都执行以下命令,保证集群间所有节点都是免密登录的:
ssh-keygen -t rsa
ssh-copy-id -f -i /root/.ssh/id_rsa.pub root@ceph-osd1
ssh-copy-id -f -i /root/.ssh/id_rsa.pub root@ceph-osd2

4.3.2 添加节点到集群

直接将离线安装包拷贝到 ceph-osd1、ceph-osd2 节点上,并执行 install.sh 脚本
其实保证 ceph-osd1、ceph-osd2节点(python3、podman)即可

# 执行完成上面的操作之后,可以回到 ceph-mon1 节点,执行下面的命令将 ceph-osd1 和 ceph-osd2 添加到集群:
ceph orch host add ceph-osd1 192.168.120.62
ceph orch host add ceph-osd2 192.168.120.63

[root@ceph-mon1 ~]# ceph orch host add ceph-osd1 192.168.120.62
Added host 'ceph-osd1'
[root@ceph-mon1 ~]# ceph orch host add ceph-osd2 192.168.120.63
Added host 'ceph-osd2'

centosroute离线包 centos8 离线安装_离线_05

# 在 ceph-mon1 节点执行,给节点添加标签
ceph orch host label add ceph-osd1 mgr
ceph orch host label add ceph-osd2 mgr

ceph orch apply mgr label:mgr

[root@ceph-mon1 ~]# ceph orch host label add ceph-osd1 mgr
Added label mgr to host ceph-osd1
[root@ceph-mon1 ~]# ceph orch host label add ceph-osd2 mgr
Added label mgr to host ceph-osd2
[root@ceph-mon1 ~]# ceph orch apply mgr label:mgr
Scheduled mgr update...

centosroute离线包 centos8 离线安装_离线_06

4.4 在 ceph-ods1、ceph-ods2 节点安装 OSDs

下面的操作都是在 ceph-ods1、ceph-ods2 节点进行的,两个节点都要执行

4.4.1 依赖项安装

保证节点 ceph-osd1、ceph-osd2 节点(ceph-common、chrony、docker.io、quay.ceph.io)即可

将 ceph-mon1 节点上的 /etc/ceph/ceph.conf 和 ceph.client.admin.keyring 文件拷贝到其他节点即可
scp /etc/ceph/ceph.conf root@ceph-osd1:/etc/ceph/
scp /etc/ceph/ceph.client.admin.keyring root@ceph-osd1:/etc/ceph/

scp /etc/ceph/ceph.conf root@ceph-osd2:/etc/ceph/
scp /etc/ceph/ceph.client.admin.keyring root@ceph-osd2:/etc/ceph/

保证 ceph-osd1、ceph-osd2 节点 执行 ceph 命令不报错

4.4.2 添加 OSD 角色(服务)到集群

前面添加了节点到集群,并且也在每个节点都进行必要的依赖项安装,以及 podman 镜像的导入,下面可以进行 OSD 角色(服务)的添加了。
在任意节点执行(因为都已经安装了 ceph-common,所以那个节点都一样)

# 在 ceph-osd1 和 ceph-osd2 节点创建 osd 服务
# 注意:下面的  /dev/sdb 是在节点机器上的一个未使用的磁盘
ceph orch daemon add osd ceph-osd1:/dev/sdb
ceph orch daemon add osd ceph-osd2:/dev/sdb

# 添加别的角色也是类似的操作,比如添加一个 mon
ceph orch daemon add mon ceph-osd1:192.168.120.62/24

centosroute离线包 centos8 离线安装_离线_07


centosroute离线包 centos8 离线安装_文件系统_08

查看集群状态(因为只有两个 OSDs ,所以会有警告):
[root@ceph-mon1 ~]# ceph -s
  cluster:
    id:     192e064c-e56a-11ec-92a0-000c2965ed0e
    health: HEALTH_WARN
            OSD count 2 < osd_pool_default_size 3

  services:
    mon: 2 daemons, quorum ceph-mon1,ceph-osd1 (age 69s)
    mgr: ceph-mon1.otlyjq(active, since 6m)
    osd: 2 osds: 2 up (since 109s), 2 in (since 2m)

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   9.9 MiB used, 200 GiB / 200 GiB avail
    pgs:

5.创建一个文件系统卷

# 可以先创建两个 Pool,如果不创建的话,会默认创建的
# ceph osd pool create testfs.data    # 用于保存数据
# ceph osd pool create testfs.meta    # 用于保存元数据

# 创建一个文件系统卷 testfs
# 下面命令中的 testfs.meta testfs.data 不指定就会创建默认名称是
# cephfs.testfs.meta 和 cephfs.testfs.data 的 Pool
# 如果上面创建了别的名字的 Pool ,这里也是可以用的,指定 Pool 名称就是
ceph fs volume create testfs        # testfs.meta testfs.data

# 查看一下当前的文件系统卷有哪些
[root@ceph-mon1 ~]# ceph fs volume ls
[
    {
        "name": "testfs"
    }
]

创建完成之后,添加一个 mds (元数据)服务

# 设置一下副本数量
ceph orch apply mds testfs --placement="2 ceph-osd1 ceph-osd2"

# 在节点 ceph-mon1 上添加 mds 服务
ceph orch daemon add mds testfs ceph-mon1

# 查看一下文件系统状态
[root@ceph-mon1 ~]# ceph fs status testfs
testfs - 0 clients
======
RANK  STATE             MDS               ACTIVITY     DNS    INOS   DIRS   CAPS
 0    active  testfs.ceph-mon1.mzkpbb  Reqs:    0 /s    10     13     12      0
       POOL           TYPE     USED  AVAIL
cephfs.testfs.meta  metadata  64.0k  94.9G
cephfs.testfs.data    data       0   63.3G
MDS version: ceph version 17.0.0-2904-g116ef525 (116ef52566c5fb8f7621439218fb492595e2d85a) quincy (dev)

使用命令 ceph mds stat 查看下 mds 服务状态

[root@ceph-mon1 ~]# ceph mds stat
testfs:1 {0=testfs.ceph-mon1.mzkpbb=up:active}

重新看一下集群状态:

[root@ceph-mon1 ~]# ceph -s
  cluster:
    id:     192e064c-e56a-11ec-92a0-000c2965ed0e
    health: HEALTH_WARN
            Degraded data redundancy: 22/66 objects degraded (33.333%), 10 pgs degraded, 128 pgs undersized
            OSD count 2 < osd_pool_default_size 3

  services:
    mon: 2 daemons, quorum ceph-mon1,ceph-osd1 (age 8m)
    mgr: ceph-mon1.otlyjq(active, since 13m)
    mds: 1/1 daemons up
    osd: 2 osds: 2 up (since 9m), 2 in (since 9m)

  data:
    volumes: 1/1 healthy
    pools:   4 pools, 128 pgs
    objects: 22 objects, 2.3 KiB
    usage:   12 MiB used, 200 GiB / 200 GiB avail
    pgs:     22/66 objects degraded (33.333%)
             118 active+undersized
             10  active+undersized+degraded

centosroute离线包 centos8 离线安装_文件系统_09