1.前言

1.1 ceph是什么?

ceph是一个分布式文件系统,同时支持对象存储、块存储、文件系统存储,最主要的是,目前很多k8s的生产环境自建的文件系统基本都是ceph,而且支持横向扩展,可以无限的加磁盘扩展容量

1.2 ceph专业术语

  1. mon:ceph集群的监控节点
  2. osb:ceph的物理磁盘
  3. mgr:用于查询mon的相关指标数据
  4. pool:存储池,数据都用于存放在此
  5. pg:供应组,抽象与pool中,有点类似名称空间概念,隔离数据,具体存放数据的地方
  6. pgp:pgs是存放数据的,pgp相当于是pg存放osd的一种排序组合举个例子,比如有3个OSD,OSD.1、OSD.2和OSD.3,副本数是2,如果PGP的数目为1,那么PG存放的OSD组合就只有一种可能:[OSD.1,OSD.2],那么所有的PG主从副本分别存放到OSD.1和OSD.2;如果PGP设为2,那么OSD组合就有两种,[OSD.1,OSD.2]和[OSD.1,OSD.3]
  7. mds:mds是ceph集群中的元数据服务器,通常情况下不是必须的,只有当使用cephFs的时候才需要
  8. rgw:rados gw,ceph的restfult对象存储接口

2.安装

  • 此安装是通过ceph-deploy进行安装
  • 官网推荐使用ceph-adm安装

2.1 安装准备

需要使用三台或以上服务器,并且每台服务器需要有两个网卡,一网卡专门负责ceph的通信,因为ceph会占用大量的网络io,另一网卡针对客户端访问,每台服务器除了系统盘以外,最少需要1块硬盘

2.2 网络规划

2.3 主机规划

操作系统 主机名 角色 public网络 cluster网络 配置 磁盘
CentOS Linux release 7.2.1511 (Core) control deploy、ceph-common 192.168.0.254 172.16.143.254 1c2g
CentOS Linux release 7.2.1511 (Core) node1 mon、osb 192.168.0.21 172.16.143.21 2c2g 2*20G
CentOS Linux release 7.2.1511 (Core) node2 mon、osb 192.168.0.22 172.16.143.22 2c2g 2*20G
CentOS Linux release 7.2.1511 (Core) node3 mon、osb 192.168.0.23 172.16.143.23 2c2g 2*20G
CentOS Linux release 7.2.1511 (Core) node4 osb、mgr、rgw、mds 192.168.0.24 172.16.143.24 2c2g 2*20G

2.4 系统环境准备

  1. 时间同步
  2. 配置hosts文件
  3. 修改主机名
  4. 关闭selinux和防火墙
  5. 创建ceph专用用户
  6. 配置免密ceph专用用户免密登陆
  7. 配置ceph专用用户sudo不需要密码验证

2.4.1 时间同步

  • 需要安装好chrony模块
  • 修改配置文件,修改同步服务器地址
  • 所有主机都需要操作
  • 安装chrony模块

    1. yum -y install chrony
  • 修改配置文件

    在/etc/chrony.conf中修改server的信息为如下信息

  1. server ntp.aliyun.com iburst
  2. server ntp1.aliyun.com iburst
  3. server ntp2.aliyun.com iburst
  4. server ntp3.aliyun.com iburst
  • 启动服务
    1. systemctl start chronyd
    2. systemctl enable chronyd
    3. systemctl status chronyd

    2.4.2 修改主机名

    所有主机通过hostname-ctl命令修改主机名称,按照主机规划进行修改

  1. hostname-ctl set-hostname xxx

2.4.3 配置hosts文件

所有主机,修改/etc/hosts,增加以下内容

  1. 192.168.0.254 control
  2. 192.168.0.21 node1
  3. 192.168.0.22 node2
  4. 192.168.0.23 node3
  5. 192.168.0.24 node4

2.4.4 关闭selinux

所有主机都需要关闭

  1. sudo setenforce 0
  2. sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

2.4.5 创建用户并设置免密登陆

所有的主机都需要创建

  1. groupadd -r -g 2024 cephadm && useradd -r -m -s /bin/bash -u 2024 -g 2024 cephadm && echo cephadm:cephadm | chpasswd

2.4.6 配置免密登陆

在control主机上操作

  1. su cephadm
  2. # 生成秘钥
  3. ssh-keygen -t rsa -b 2048 -C "cephadm@126.com" -f "cephadm"
  4. # 复制秘钥到其他主机
  5. ssh-copy-id cephadm@control
  6. ssh-copy-id cephadm@node1
  7. ssh-copy-id cephadm@node2
  8. ssh-copy-id cephadm@node3
  9. ssh-copy-id cephadm@node4

2.4.7 配置sudo不需要密码验证

所有主机都需要以下配置,在 /etc/sudoers.d下创建cephadm,内容为cephadm ALL=(ALL) NOPASSWD:ALL

  1. echo "cephadm ALL=(ALL) NOPASSWD:ALL" > "/etc/sudoers.d/cephadm"

在/etc/sudoers配置文件中寻找 Defaults specification配置,注释掉它

image.png

2.5 配置好ceph的源

image.png

  • 进入目录,选择我们操作系统对应的版本,这里我们使用el7
    • el7对应centos7
    • el8对应centos8

image.png

  • 进入noarch目录

image.png image.png

2.5.1 安装好源

所有主机都需要安装

  1. # 安装ceph源
  2. rpm -ivh https://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch/ceph-release-1-1.el7.noarch.rpm
  3. # 安装epel-release仓库
  4. yum -y install epel-release

2.5.1 证书过期解决方法

在安装依赖的时候,可能会碰到证书过期的错误,如The certificate issuer‘s certificate has expired

  • 解决
    1. yum install ca-certificates
    2. update-ca-trust extract

    2.6 安装ceph部署工具

    只有control主机安装

  1. yum -y install ceph-deploy

2.7 初始化mon节点

control主机操作

  1. su cephadm
  2. mkdir ceph-cluster
  3. cd ceph-cluster
  4. # 设置node1为mon节点
  5. ceph-deploy new --cluster-network 172.16.143.0/24 --public-network 192.168.0.0/24 node1

image.png

2.8 验证mon节点配置文件

  1. [cephadm@control test]$ ll
  2. 总用量 12
  3. -rw-rw-r--. 1 cephadm cephadm 261 7 3 18:18 ceph.conf
  4. -rw-rw-r--. 1 cephadm cephadm 3286 7 3 18:18 ceph-deploy-ceph.log
  5. -rw-------. 1 cephadm cephadm 73 7 3 18:18 ceph.mon.keyring
  6. [cephadm@control test]$ cat ceph.conf
  7. [global]
  8. fsid = e77cd7fb-3d26-4a59-9c2e-c5f082c9ee73
  9. public_network = 192.168.0.0/24
  10. cluster_network = 172.16.143.0/24
  11. mon_initial_members = node1
  12. mon_host = 192.168.0.21
  13. auth_cluster_required = cephx
  14. auth_service_required = cephx
  15. auth_client_required = cephx

2.9 初始化ceph存储节点

  • 在control节点中执行此命令,需要在/home/cephadm/ceph-cluster目录中执行
  • 此命令可能执行比较慢,可以直接在其他的ceph节点上执行yum -y install ceph ceph-radosgw来提前安装依赖
  • —no-adjust-repos:表示主机如果安装了依赖,则直接使用主机的依赖,如果不指定,则可能会重新安装依赖
  • 初始化ceph节点其实就是安装ceph和ceph-radosgw依赖
  1. ceph-deploy install --no-adjust-repos --nogpgcheck node1 node2 node3 node4

2.10创建mon服务

2.10.1 创建

在前面2.7中,我们只是初始化了mon组件,并没有创建好mon组件,所有这里我们需要创建好mon组件

  1. ceph-deploy mon create-initial

image.png

创建好后,我们会发现多了一些配置文件

image.png

2.10.2 验证

在node1节点上验证mon是否安装成功

image.png

2.11 分发admin秘钥

  • 在 ceph-deploy 节点把配置文件和 admin 密钥拷贝至 Ceph 集群需要执行 ceph 管理命令的节点,从而不需要后期通过 ceph 命令对 ceph 集群进行管理配置的时候每次都需要指定ceph-mon 节点地址和 ceph.client.admin.keyring 文件,另外各 ceph-mon 节点也需要同步ceph 的集群配置文件与认证文件。
  • 这里我们把ceph的相关秘钥全部通过ceph admin命令全部推送到ceph相关的主机上
  • 首先在control控制节点上安装好ceph-common依赖

2.11.1 分发秘钥

control上操作

  1. yum -y install ceph-common
  2. # 分发秘钥 control也需要分发,不然ceph相关命令使用不了,或者把ceph.client.admin.keyrin秘钥拷贝到/etc/ceph下
  3. ceph-deploy admin control node1 node2 node3 node4

2.11.2 验证秘钥

在任意ceph主机上查看/etc/ceph文件夹下是否存在相关秘钥

image.png

这里我们可以查看到,秘钥已经成功的分发了,但是如果使用ceph相关命令是使用不了的,因为目前只有root能读取到秘钥的信息,其他账户是没有权限的,需要对cephadm用户进行授权

  1. sudo setfacl -m u:cephadm:rw /etc/ceph/ceph.client.admin.keyring

2.12 创建mgr服务

  • mrg需要读取ceph(ceph.conf)的配置信息,这里我们使用node4部署mgr,所以ceph的配置就不需要复制过去了
  • 在node4中安装好ceph-mgr依赖,yum -y install ceph-mgr
  • 在control节点创建mgr

2.12.1 创建

  1. # node4上安装依赖
  2. yum -y install ceph-mgr
  3. # 在control节点创建mgr
  4. ceph-deploy mgr create node4

image.png

2.12.2 验证

在node4上验证是否存在有mgr进程

image.png

2.13 使用ceph管理集群

  • 在control中使用ceph查看集群的参数,需要先安装好ceph-common依赖
  • 使用ceph -s命令查看

image.png

2.14 osd使用

2.14.1 准备好osd节点

我们在2.9步骤中已经做过类似的操作,这里就不需要做了,如果不行的话,则执行以下命令

  1. ceph-deploy install node1 node2 node3 node4

2.14.2 列出ceph node节点磁盘

使用ceph-deploy disk list [节点名称]命令

  1. ceph-deploy disk list ceph-node1
  • 按道理这里会列出我们的节点主机的磁盘信息,这里似乎有问题没有列出,不过没关系不影响使用
  • 我们可以通过手动使用ssh cephadm@node1 sudo fdisk -l命令查看磁盘,或者借助于ansible批量查看

image.png

2.14.3 擦除磁盘

我们先需要对磁盘进行擦除操作,防止存在数据,防止出现啥灵异事件

  1. # node1
  2. ceph-deploy disk zap node1 /dev/sdb
  3. ceph-deploy disk zap node1 /dev/sdc
  4. # node2
  5. ceph-deploy disk zap node2 /dev/sdb
  6. ceph-deploy disk zap node2 /dev/sdc
  7. # node3
  8. ceph-deploy disk zap node3 /dev/sdb
  9. ceph-deploy disk zap node3 /dev/sdc
  10. # node4
  11. ceph-deploy disk zap node4 /dev/sdb
  12. ceph-deploy disk zap node4 /dev/sdc

image.png

2.14.4 添加osd

  1. #node1
  2. ceph-deploy osd create node1 --data /dev/sdb
  3. ceph-deploy osd create node1 --data /dev/sdc
  4. #node2
  5. ceph-deploy osd create node2 --data /dev/sdb
  6. ceph-deploy osd create node2 --data /dev/sdc
  7. #node3
  8. ceph-deploy osd create node3 --data /dev/sdb
  9. ceph-deploy osd create node3 --data /dev/sdc
  10. #node4
  11. ceph-deploy osd create node4 --data /dev/sdb
  12. ceph-deploy osd create node4 --data /dev/sdc

2.14.5 验证osd服务

  • 通过ceph -s查看集群信息
  • 这里我们添加了8块osd磁盘,一共160g

    1. ceph -s

    image.png

  • 查看node节点osd进程

    随意找一台node节点查看

  1. ps aux | grep osd

image.png

  • 使用osd tree查看osd树信息
    1. ceph osd tree
    image.png

    2.15 注意事项

    1. 在安装过程中,所有ceph-deploy命令都是在控制(control)节点上的cephadm用户下进行的

3. 测试使用

  • 此小节主要记录ceph的上传和下载相关功能
  • 所有的操作在控制节点(control)上操作

3.1 创建存储池pool

  • 命令格式:ceph osd pool create [] []
    • pool为名称
    • pg_num:为pg数量
    • pgp_num:为pgp数量
  • 一般情况下pg和pgp的数量一致
  • 创建

    1. ceph osd pool create mypool 32 32

    image.png

  • 查看pg和pgp组合

    1. ceph pg ls-by-pool pool名称

    image.png

  • 查看pool列表

    1. ceph osd pool ls

    image.png

    3.2 上传文件

    • 目前ceph环境中没有部署块存储和文件系统,但是也能通过ceph的rsdos命令来访问ceph对象存储过程
    • 命令格式rados put 文件名称 文件路径 —pool=存储池名称
  1. rados put msg1 /var/log/syslog --pool=mypool

3.3 查看文件列表

  1. rados ls --pool=mypool

3.4 查看文件信息

命令格式:ceph osd map 存储池名称 文件名称

  1. ceph osd map mypool msg1

image.png

3.5 下载文件

rados get 文件名称 —pool=存储池名称 下载路径

  1. rados get msg1 --pool=mypool /opt/my.txt

3.6 修改文件

修改文件其实就是先下载文件然后重新上传覆盖

  1. rados put msg1 /etc/passwd --pool=mypool
  2. rados get msg1 --pool=mypool /opt/2.txt

3.7 删除文件

  1. rados rm msg1 --pool=mypool

4. 集群扩展

4.1 扩展mon节点

  1. 首先需要在需要部署mon节点上安装好ceph-mon依赖
  2. 在控制节点上添加mon节点
  3. mon节点个数要为基数,防止脑裂
  4. 这里我们使用node2和node3作为mon的扩展节点

4.1.1 创建扩展

  1. # node2和node3
  2. yum -y install ceph-mon
  3. # control节点
  4. ceph-deploy mon add node2
  5. ceph-deploy mon add node3

4.1.2 验证

使用ceph -s命令查看mon节点信息

image.png

查看/etc/ceph/ceph.conf中mon的主机信息,这里发现还是单一节点的信息,我们可以手动更改mon_host和mon_inital_members的信息(可选)

image.png

手动修改信息

image.png

  1. [global]
  2. fsid = 0dc82e18-2196-48bd-b3b4-cbfda207d526
  3. public_network = 192.168.0.0/24
  4. cluster_network = 172.16.143.0/24
  5. mon_initial_members = node1, node2, node3
  6. mon_host = 192.168.0.21,192.168.0.22,192.168.0.23
  7. auth_cluster_required = cephx
  8. auth_service_required = cephx
  9. auth_client_required = cephx

4.1.3 查看mon状态

  1. ceph quorum_status --format json-pretty

4.2扩展mgr节点

  1. 需要在需要扩展的mgr节点上安装好mgr依赖
  2. 需要在control节点上添加mgr节点
  3. 这里我们使用node3安装mgr节点

4.2.1 创建扩展

  1. # node3节点
  2. yum -y install ceph-mgr
  3. # control节点
  4. ceph-deploy mgr create node3

4.2.2 验证

使用ceph -s命令查看mon节点信息

image.png

4.3 扩展node节点

  1. 新节点上需要仓库源
  2. 安装依赖ceph和ceph-radosgw依赖
  3. 在控制节点上初始化node
  4. 擦除磁盘
  5. 挂载osd

4.3.1 创建扩展

这里以node4为栗子,新增加node4到ceph集群中

  1. # node4
  2. rpm -ivh http://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch/ceph-release-1-1.el7.noarch.rpm
  3. yum -y install --no-adjust-repos ceph ceph-radosgw
  4. # control节点
  5. ceph-deploy install node4
  6. # 清洗osb
  7. ceph-deploy disk zap node4 /dev/sdb
  8. ceph-deploy disk zap node4 /dev/sdc
  9. # 挂载osb
  10. ceph-deploy osd create node4 --data /dev/sdb
  11. ceph-deploy osd create node4 --data /dev/sdc

5.ceph磁盘使用

5.1 ceph磁盘类型

  1. 块设备RBD:RBD即RADOS Block Device的简称,RBD块存储是最稳定且最常用的存储类型。RBD块设备类似磁盘可以被挂载。 RBD块设备具有快照、多副本、克隆和一致性等特性,数据以条带化的方式存储在Ceph集群的多个OSD,rbd是ceph对外的三大存储服务组件之一,也是当前ceph最稳定,应用最广泛的存储接口。在k8s中,如果存储基座是使用的ceph的话,那就是通过使用RBD块设备
  2. RGW:RGW 提供的是 REST 接口,客户端通过 http 与其进行交互,完成数据的增删改查等管理操作。
  3. Ceph-FS文件系统:Ceph FS 即 ceph filesystem,可以实现文件系统共享功能,客户端通过 ceph 协议挂载并使用ceph 集群作为数据存储服务器。

Ceph FS 需要运行 Meta Data Services(MDS)服务,其守护进程为 ceph-mds,ceph-mds 进程管理与 cephFS 上存储的文件相关的元数据,并协调对 ceph 存储集群的访问。

5.2 块设备RBD使用

5.2.1 创建块设备

  1. # control节点
  2. # 先创建存储池,存储池命令格式如下
  3. # ceph osd pool create <poolname> pg_num pgp_num {replicated|erasure}
  4. [cephadm@control ceph-cluster]$ ceph osd pool create myrbd1 64 64
  5. pool 'myrbd1' created
  6. # 对存储池启用 RBD 功能
  7. [cephadm@control ceph-cluster]$ ceph osd pool application enable myrbd1 rbd
  8. enabled application 'rbd' on pool 'myrbd1'
  9. # 通过 RBD 命令对存储池初始化
  10. [cephadm@control ceph-cluster]$ rbd pool init -p myrbd1

5.2.2 创建img

块设备的img其实就是我们虚拟出来的具体磁盘

  1. # 在块设备myrbd1中创建了一个5G空间的img,名称为myimg1
  2. rbd create myimg1 --size 5G --pool myrbd1
  3. rbd create myimg2 --size 3G --pool myrbd1 --image-format 2 --image-feature layering
  4. # 列出当前rbd设备中的img
  5. rbd ls --pool myrbd1
  6. # 查看img信息
  7. rbd --image myimg1 --pool myrbd1 info
  8. rbd --image myimg2 --pool myrbd1 info rbd image 'myimg2':
  1. # control节点
  2. # 在块设备myrbd1中创建了一个5G空间的img,名称为myimg1
  3. [cephadm@control ceph-cluster]$ rbd create myimg1 --size 5G --pool myrbd1
  4. [cephadm@control ceph-cluster]$ rbd create myimg2 --size 3G --pool myrbd1 --image-format 2 --image-feature layering
  5. # 列出当前rbd设备中的img
  6. [cephadm@control ceph-cluster]$ rbd ls --pool myrbd1
  7. myimg1
  8. myimg2
  9. # 查看img信息
  10. [cephadm@control ceph-cluster]$ rbd --image myimg1 --pool myrbd1 info rbd image 'myimg1':
  11. size 16 GiB in 4096 objects
  12. order 22 (4 MiB objects)
  13. snapshot_count: 0
  14. id: ac9198bb3015
  15. block_name_prefix: rbd_data.ac9198bb3015
  16. format: 2
  17. features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
  18. op_features:
  19. flags:
  20. create_timestamp: Mon Jul 4 00:05:16 2022
  21. access_timestamp: Mon Jul 4 00:05:16 2022
  22. modify_timestamp: Mon Jul 4 00:05:16 2022
  23. [cephadm@control ceph-cluster]$ rbd --image myimg2 --pool myrbd1 info rbd image 'myimg2':
  24. size 3 GiB in 768 objects
  25. order 22 (4 MiB objects)
  26. snapshot_count: 0
  27. id: 858487fa1d83
  28. block_name_prefix: rbd_data.858487fa1d83
  29. format: 2
  30. features: layering
  31. op_features:
  32. flags:
  33. create_timestamp: Mon Jul 4 00:05:21 2022
  34. access_timestamp: Mon Jul 4 00:05:21 2022
  35. modify_timestamp: Mon Jul 4 00:05:21 2022

5.2.3 客户端映射img

  1. # 映射img
  2. rbd -p myrbd1 map myimg1
  3. rbd -p myrbd1 map myimg2
  4. # 格式化分区
  5. mkfs.ext4 /dev/rbd0
  6. # 挂载磁盘
  7. mount /dev/rbd0 /data/
  1. # 控制节点
  2. # 查看磁盘信息
  3. [cephadm@control ceph-cluster]$ ceph df
  4. --- RAW STORAGE ---
  5. CLASS SIZE AVAIL USED RAW USED %RAW USED
  6. hdd 120 GiB 113 GiB 613 MiB 6.6 GiB 5.50
  7. TOTAL 120 GiB 113 GiB 613 MiB 6.6 GiB 5.50
  8. --- POOLS ---
  9. POOL ID PGS STORED OBJECTS USED %USED MAX AVAIL
  10. device_health_metrics 1 1 0 B 0 0 B 0 36 GiB
  11. mypool 2 32 0 B 0 0 B 0 36 GiB
  12. mypool2 3 32 0 B 0 0 B 0 36 GiB
  13. myrbd1 6 64 143 MiB 58 431 MiB 0.39 36 GiB
  14. # 映射img
  15. [cephadm@control ceph-cluster]$ rbd -p myrbd1 map myimg1
  16. /dev/rbd0
  17. [cephadm@control ceph-cluster]$ rbd -p myrbd1 map myimg2
  18. /dev/rbd1
  19. # 映射完成后此时我们会发现多了两个分区,我们可以格式化分区挂载路径
  20. [cephadm@control ceph-cluster]$ lsblk
  21. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
  22. loop1 7:1 0 2G 0 loop
  23. └─docker-253:0-284814-pool 253:2 0 100G 0 dm
  24. rbd0 252:0 0 5G 0 disk
  25. sr0 11:0 1 1024M 0 rom
  26. rbd1 252:16 0 3G 0 disk
  27. loop0 7:0 0 100G 0 loop
  28. └─docker-253:0-284814-pool 253:2 0 100G 0 dm
  29. sda 8:0 0 20G 0 disk
  30. ├─sda2 8:2 0 19.5G 0 part
  31. ├─centos-swap 253:1 0 2G 0 lvm [SWAP]
  32. └─centos-root 253:0 0 17.5G 0 lvm /
  33. └─sda1 8:1 0 500M 0 part /boot
  34. # 格式化分区
  35. [cephadm@control ceph-cluster]$ mkfs.ext4 /dev/rbd0
  36. mke2fs 1.42.9 (28-Dec-2013)
  37. Discarding device blocks: 完成
  38. 文件系统标签=
  39. OS type: Linux
  40. 块大小=4096 (log=2)
  41. 分块大小=4096 (log=2)
  42. Stride=16 blocks, Stripe width=16 blocks
  43. 327680 inodes, 1310720 blocks
  44. 65536 blocks (5.00%) reserved for the super user
  45. 第一个数据块=0
  46. Maximum filesystem blocks=1342177280
  47. 40 block groups
  48. 32768 blocks per group, 32768 fragments per group
  49. 8192 inodes per group
  50. Superblock backups stored on blocks:
  51. 32768, 98304, 163840, 229376, 294912, 819200, 884736
  52. Allocating group tables: 完成
  53. 正在写入inode表: 完成
  54. Creating journal (32768 blocks):
  55. 完成
  56. Writing superblocks and filesystem accounting information: mkdir /data
  57. 完成
  58. # 挂载磁盘
  59. [cephadm@control ceph-cluster]$ mount /dev/rbd0 /data/
  60. [cephadm@control ceph-cluster]$ df -h
  61. 文件系统 容量 已用 可用 已用% 挂载点
  62. devtmpfs 461M 0 461M 0% /dev
  63. tmpfs 475M 0 475M 0% /dev/shm
  64. tmpfs 475M 6.8M 468M 2% /run
  65. tmpfs 475M 0 475M 0% /sys/fs/cgroup
  66. /dev/mapper/centos-root 18G 2.5G 15G 15% /
  67. /dev/sda1 497M 178M 320M 36% /boot
  68. tmpfs 95M 0 95M 0% /run/user/0
  69. /dev/rbd0 4.8G 20M 4.6G 1% /data

5.2.4 扩容img

  • 在我们磁盘挂载完成后,如果发现容量不够,我们可以扩容我们的img
  • 只能扩容、不能缩容(ceph是可以扩容和缩容的,但是磁盘不能缩容)
# 将名字为myrbd1的rbd下的myimg1扩容为10G
rbd resize myrbd1/myimg1 --size 10G
# 刷新磁盘空间
resize2fs /dev/rbd0
# control节点
# 将名字为myrbd1的rbd下的myimg1扩容为10G
[cephadm@control ceph-cluster]$  rbd resize myrbd1/myimg1 --size 10G
# 刷新磁盘空间
[cephadm@control ceph-cluster]$ resize2fs /dev/rbd0
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/rbd0 is mounted on /data; on-line resizing required
resize2fs: On-line shrinking not supported
[root@control data]# df -f
df:无效选项 -- f
Try 'df --help' for more information.
[cephadm@control ceph-cluster]$ df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 461M     0  461M    0% /dev
tmpfs                    475M     0  475M    0% /dev/shm
tmpfs                    475M  6.8M  468M    2% /run
tmpfs                    475M     0  475M    0% /sys/fs/cgroup
/dev/mapper/centos-root   18G  2.5G   15G   15% /
/dev/sda1                497M  178M  320M   36% /boot
tmpfs                     95M     0   95M    0% /run/user/0
/dev/rbd0                 15G   25M   14G    1% /data

# 将名字为myrbd1的rbd下的myimg1缩容为5G,缩容需要指定--allow-shrink参数
[cephadm@control ceph-cluster]$  rbd resize myrbd1/myimg1 --size 5G --allow-shrink

5.2.5 ceph验证

我们挂载了把img挂载到了具体的目录后,上传文件,ceph可以查看到磁盘的使用大小

# control节点
[cephadm@control ceph-cluster]$ ceph df
--- RAW STORAGE ---
CLASS  SIZE     AVAIL    USED     RAW USED  %RAW USED
hdd    120 GiB  113 GiB  613 MiB   6.6 GiB       5.50
TOTAL  120 GiB  113 GiB  613 MiB   6.6 GiB       5.50

--- POOLS ---
POOL                   ID  PGS  STORED   OBJECTS  USED     %USED  MAX AVAIL
device_health_metrics   1    1      0 B        0      0 B      0     36 GiB
mypool                  2   32      0 B        0      0 B      0     36 GiB
mypool2                 3   32      0 B        0      0 B      0     36 GiB
myrbd1                  6   64  143 MiB       58  431 MiB   0.39     36 GiB

5.3 ceph radosgw(RGW)对象存储使用

5.3.1 部署RGW

首先需要安装好RGW的依赖,依赖名称为ceph-radosgw

# node4 节点
yum -y install ceph-radosgw
# control节点,--overwrite-conf为覆盖配置文件
ceph-deploy --overwrite-conf rgw create node4
# control节点
[cephadm@control ceph-cluster]$ ceph-deploy --overwrite-conf rgw create node4
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadm/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /usr/bin/ceph-deploy --overwrite-conf rgw create node4
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  rgw                           : [('node4', 'rgw.node4')]
[ceph_deploy.cli][INFO  ]  overwrite_conf                : True
[ceph_deploy.cli][INFO  ]  subcommand                    : create
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x1312440>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  func                          : <function rgw at 0x127ad70>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.rgw][DEBUG ] Deploying rgw, cluster ceph hosts node4:rgw.node4
[node4][DEBUG ] connection detected need for sudo
[node4][DEBUG ] connected to host: node4 
[node4][DEBUG ] detect platform information from remote host
[node4][DEBUG ] detect machine type
[ceph_deploy.rgw][INFO  ] Distro info: CentOS Linux 7.2.1511 Core
[ceph_deploy.rgw][DEBUG ] remote host will use systemd
[ceph_deploy.rgw][DEBUG ] deploying rgw bootstrap to node4
[node4][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[node4][WARNIN] rgw keyring does not exist yet, creating one
[node4][DEBUG ] create a keyring file
[node4][DEBUG ] create path recursively if it doesn't exist
[node4][INFO  ] Running command: sudo ceph --cluster ceph --name client.bootstrap-rgw --keyring /var/lib/ceph/bootstrap-rgw/ceph.keyring auth get-or-create client.rgw.node4 osd allow rwx mon allow rw -o /var/lib/ceph/radosgw/ceph-rgw.node4/keyring
[node4][INFO  ] Running command: sudo systemctl enable ceph-radosgw@rgw.node4
[node4][WARNIN] Created symlink from /etc/systemd/system/ceph-radosgw.target.wants/ceph-radosgw@rgw.node4.service to /usr/lib/systemd/system/ceph-radosgw@.service.
[node4][INFO  ] Running command: sudo systemctl start ceph-radosgw@rgw.node4
[node4][INFO  ] Running command: sudo systemctl enable ceph.target
[ceph_deploy.rgw][INFO  ] The Ceph Object Gateway (RGW) is now running on host node4 and default port 7480

5.3.2 验证

我们在node4上可以查看是否存在rgw进程

[root@node4 ~]# ps aux | grep rgw
ceph      564354  0.6  3.1 5247980 62884 ?       Ssl  00:26   0:23 /usr/bin/radosgw -f --cluster ceph --name client.rgw.node4 --setuser ceph --setgroup ceph
root      634052  0.0  0.1 112840  2280 pts/0    S+   01:28   0:00 grep --color=auto rgw

通过node4的ip:7480可访问api接口

image.png

在control节点上,也可以查看ceph状态

[cephadm@control ceph-cluster]$ ceph -s
  cluster:
    id:     e256014e-6197-45b4-842a-060ad3a269a9
    health: HEALTH_WARN
            mons are allowing insecure global_id reclaim
            Module 'restful' has failed dependency: No module named 'pecan'
            clock skew detected on mon.node2, mon.node3

  services:
    mon: 3 daemons, quorum node1,node2,node3 (age 93m)
    mgr: node4(active, since 91m), standbys: node3
    osd: 6 osds: 6 up (since 43m), 6 in (since 45m)
    # 发现多了rgw
    rgw: 1 daemon active (node4)

  task status:

  data:
    pools:   10 pools, 329 pgs
    objects: 300 objects, 156 MiB
    usage:   6.6 GiB used, 113 GiB / 120 GiB avail
    pgs:     329 active+clean

5.4 Ceph FS使用

Ceph FS 需要运行 Meta Data Services(MDS)服务,其守护进程为 ceph-mds,ceph-mds 进程管理与 cephFS 上存储的文件相关的元数据,并协调对 ceph 存储集群的访问

5.4.1 部署mds服务

  • node4中验证好ceph-mds依赖,yum -y install ceph-mds
  • control中创建mds
# control节点
[cephadm@control ceph-cluster]$ ceph-deploy mds create node4
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/cephadm/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /usr/bin/ceph-deploy mds create node4
[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  ]  subcommand                    : create
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x2a1a5f0>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  func                          : <function mds at 0x29bcc08>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  mds                           : [('node4', 'node4')]
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.mds][DEBUG ] Deploying mds, cluster ceph hosts node4:node4
[node4][DEBUG ] connection detected need for sudo
[node4][DEBUG ] connected to host: node4 
[node4][DEBUG ] detect platform information from remote host
[node4][DEBUG ] detect machine type
[ceph_deploy.mds][INFO  ] Distro info: CentOS Linux 7.2.1511 Core
[ceph_deploy.mds][DEBUG ] remote host will use systemd
[ceph_deploy.mds][DEBUG ] deploying mds bootstrap to node4
[node4][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[node4][WARNIN] mds keyring does not exist yet, creating one
[node4][DEBUG ] create a keyring file
[node4][DEBUG ] create path if it doesn't exist
[node4][INFO  ] Running command: sudo ceph --cluster ceph --name client.bootstrap-mds --keyring /var/lib/ceph/bootstrap-mds/ceph.keyring auth get-or-create mds.node4 osd allow rwx mds allow mon allow profile mds -o /var/lib/ceph/mds/ceph-node4/keyring
[node4][INFO  ] Running command: sudo systemctl enable ceph-mds@node4
[node4][WARNIN] Created symlink from /etc/systemd/system/ceph-mds.target.wants/ceph-mds@node4.service to /usr/lib/systemd/system/ceph-mds@.service.
[node4][INFO  ] Running command: sudo systemctl start ceph-mds@node4
[node4][INFO  ] Running command: sudo systemctl enable ceph.target
[cephadm@control ceph-cluster]$ ceph mds stat
 1 up:standby

5.4.2 验证mds服务

# control节点
[cephadm@control ceph-cluster]$ ceph -s
  cluster:
    id:     e256014e-6197-45b4-842a-060ad3a269a9
    health: HEALTH_WARN
            mons are allowing insecure global_id reclaim
            Module 'restful' has failed dependency: No module named 'pecan'
            clock skew detected on mon.node2, mon.node3

  services:
    mon: 3 daemons, quorum node1,node2,node3 (age 100m)
    mgr: node4(active, since 99m), standbys: node3
    # 发现多了msd服务,表示正常
    mds: mycephfs:1 {0=node4=up:active}
    osd: 6 osds: 6 up (since 51m), 6 in (since 52m)
    rgw: 1 daemon active (node4)

  task status:

  data:
    pools:   10 pools, 329 pgs
    objects: 300 objects, 156 MiB
    usage:   6.6 GiB used, 113 GiB / 120 GiB avail
    pgs:     329 active+clean

5.4.3 创建ceph fs所需存储池

使用 CephFS 之前需要事先于集群中创建一个文件系统,并为其分别指定元数据和数据相关的存储池,如下命令将创建名为 mycephfs 的文件系统,它使用 cephfs-metadata 作为元数据存储池,使用 cephfs-data 为数据存储池

ceph osd pool create cephfs-metadata 32 32 
ceph osd pool create cephfs-data 64 64

5.4.4 创建ceph fs

# 创建存储池
ceph fs new mycephfs cephfs-metadata cephfs-data
# 查看fs列表
ceph fs ls
# 查看状态 fs
ceph fs status mycephfs
[cephadm@control ceph-cluster]$ ceph fs new mycephfs cephfs-metadata cephfs-data
new fs with metadata pool 11 and data pool 12
[cephadm@control ceph-cluster]$ ceph fs ls
name: mycephfs, metadata pool: cephfs-metadata, data pools: [cephfs-data ]
[cephadm@control ceph-cluster]$ ceph fs status mycephfs
mycephfs - 0 clients
========
RANK  STATE    MDS      ACTIVITY     DNS    INOS  
 0    active  node4  Reqs:    0 /s    10     13   
      POOL         TYPE     USED  AVAIL  
cephfs-metadata  metadata  1536k  47.7G  
  cephfs-data      data       0   47.7G  
MDS version: ceph version 15.2.16 (d46a73d6d0a67a79558054a3a5a72cb561724974) octopus (stable)

5.4.4 验证ceph fs状态

[cephadm@control ceph-cluster]$ ceph mds stat
mycephfs:1 {0=node4=up:active}

5.4.5 客户端挂载ceph fs

  • 在 ceph 的客户端测试 cephfs 的挂载,需要指定 mon 节点的 6789 端口
  • 其中需要指定协议为ceph协议
  • 192.168.0.24为mon节点,可以填写多个
  • secret为秘钥,秘钥在/etc/ceph/ceph.client.admin.keyring文件中查看
# 单个mon节点
mount -t ceph 192.168.0.24:6789:/ /mnt -o name=admin,secret=AQD/6ShariweMRAAkc1xN/H0ocAlpjp09z5blw==
# 多个mon节点
mount -t ceph 192.168.0.21:6789,192.168.0.22:6789,192.168.0.23:6789:/ /mnt2 -o name=admin,secret=AQDlTsFiVnGJCRAApycv38P6DmB+qdyF3bcXFw==

6 集群维护

6.1 集群停止和重启

6.1.1 重启重要事项

重启之前,要提前设置 ceph 集群不要将 OSD 标记为 out,避免 node 节点关闭服务后被踢出ceph 集群外

#control节点
[cephadm@control ceph-cluster]$ceph osd set noout #关闭服务前设置 noout
noout is set


[cephadm@control ceph-cluster]$ ceph osd unset noout #启动服务后取消 noout
noout is unset

6.1.2 关闭顺序

服务的查询可以通过 systemctl list-units —type=service|grep ceph命令搜索

#关闭服务前设置 noout 
关闭存储客户端停止读写数据 
如果使用了 RGW,关闭 RGW
关闭 cephfs 元数据服务 
关闭 ceph OSD 
关闭 ceph manager 
关闭 ceph monitor

6.1.3 启动顺序

启动 ceph monitor
启动 ceph manager
启动 ceph OSD
关闭 cephfs 元数据服务
启动 RGW
启动存储客户端
#启动服务后取消 noout-->ceph osd unset noout

6.2 删除osd磁盘

  • 先将磁盘标记为out
    ceph osd out osd.6
    ceph osd out osd.7
    
    ```bash [root@control mnt]# ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.15588 root default
    -3 0.03897 host 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 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 node3
    4 hdd 0.01949 osd.4 up 1.00000 1.00000 5 hdd 0.01949 osd.5 up 1.00000 1.00000 -9 0.03897 host node4
    6 hdd 0.01949 osd.6 up 1.00000 1.00000 7 hdd 0.01949 osd.7 up 1.00000 1.00000

[root@control mnt]# ceph osd out osd.6 marked out osd.6. [root@control mnt]# ceph osd out osd.7


- 等待权重REWEIGHT为0
```bash
[root@control mnt]# ceph osd tree
ID  CLASS  WEIGHT   TYPE NAME       STATUS  REWEIGHT  PRI-AFF
-1         0.15588  root default                             
-3         0.03897      host 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 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 node3                           
 4    hdd  0.01949          osd.4       up   1.00000  1.00000
 5    hdd  0.01949          osd.5       up   1.00000  1.00000
-9         0.03897      host node4                           
 6    hdd  0.01949          osd.6       up         0  1.00000
 7    hdd  0.01949          osd.7       up         0  1.00000
  • 停止osd.x进程

    需要去对应的服务器停止ceph-osd的服务

[root@node4 ~]# systemctl list-units --type=service|grep ceph
  ceph-crash.service                 loaded active running Ceph crash dump collector
  ceph-mds@node4.service             loaded active running Ceph metadata server daemon
● ceph-mgr@ceph.service              loaded failed failed  Ceph cluster manager daemon
  ceph-mgr@node4.service             loaded active running Ceph cluster manager daemon
  ceph-osd@6.service                 loaded active running Ceph object storage daemon osd.6
  ceph-osd@7.service                 loaded active running Ceph object storage daemon osd.7
  ceph-radosgw@rgw.node4.service     loaded active running Ceph rados gateway
[root@node4 ~]# systemctl stop ceph-osd@6.service
[root@node4 ~]# systemctl  stop ceph-osd@7.service
  • 删除osd

    停止了对应的osd服务,状态会从up变为down,再进行rm,状态会再进行变化成DNE

[root@control mnt]# ceph osd rm osd.6
removed osd.6
[root@control mnt]# ceph osd rm osd.7
removed osd.7
[root@control mnt]# ceph osd tree
ID  CLASS  WEIGHT   TYPE NAME       STATUS  REWEIGHT  PRI-AFF
-1         0.15588  root default                             
-3         0.03897      host 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 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 node3                           
 4    hdd  0.01949          osd.4       up   1.00000  1.00000
 5    hdd  0.01949          osd.5       up   1.00000  1.00000
-9         0.03897      host node4                           
 6    hdd  0.01949          osd.6      DNE         0         
 7    hdd  0.01949          osd.7      DNE         0         
在crush算法中和auth验证中删除
[root@control mnt]# ceph osd crush remove osd.6 
removed item id 6 name 'osd.6' from crush map
[root@control mnt]# ceph osd crush remove osd.7
removed item id 7 name 'osd.7' from crush map
[root@control mnt]# ceph osd tree
ID  CLASS  WEIGHT   TYPE NAME       STATUS  REWEIGHT  PRI-AFF
-1         0.11691  root default                             
-3         0.03897      host 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 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 node3                           
 4    hdd  0.01949          osd.4       up   1.00000  1.00000
 5    hdd  0.01949          osd.5       up   1.00000  1.00000
-9               0      host node4                           
# 删除认证
[root@control mnt]# ceph auth rm osd.6
removed item id 6 name 'osd.6' from crush map
[root@control mnt]# ceph auth rm osd.7
removed item id 7 name 'osd.7' from crush map
[root@control mnt]# ceph osd tree
ID  CLASS  WEIGHT   TYPE NAME       STATUS  REWEIGHT  PRI-AFF
-1         0.11691  root default                             
-3         0.03897      host 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 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 node3                           
 4    hdd  0.01949          osd.4       up   1.00000  1.00000
 5    hdd  0.01949          osd.5       up   1.00000  1.00000
-9               0      host node4