67、ceph

一、ceph

1.1、ceph概念

ceph是一个开源的,用c++语言写的分布式的存储系统。存储文件数据。

/dev/sdb

fdisk /dev/sdb

gdisk /dev/sdb

lvm 逻辑卷

可以扩容

raid 磁盘阵列

高可用

基于物理意义上的单机的存储系统。

分布式有多台物理磁盘组成一个集群,在这个基础之上实现高可用,扩展。

ceph集群

通过网络访问磁盘集群

1、远程访问

2、多个服务器组成的虚拟的硬盘

3、分布式存储

4、负载均衡和数据同步

1.2、ceph是一个统一的存储系统,统一-----同时提供块设备存储,文件系统存储和对象存储三种存续。

1.2.1、对象存储:

对象存储就是键值存储,通过接口指令,get put del和其他的命令向对象存储上传或者下载数据。

把数据作为对象,按照一定的逻辑和算法,存储到不同的硬盘上(可以是不同机器上的硬盘,依靠网络来进行互相通信)

优点:

​ 使用的是硬盘组,不受目录系统的影响,读写效率高。

​ 集群的扩展性很强,支持多副本存储。

​ 可以之间通过URL访问文件。简单,也好管理。

缺点:

​ 内容变动比较大文件不适合作为对象存储,每一次变动都要重新上传。

​ 静态图片等等不需要变动的数据。

1.2.2、文件系统存储 ceph-fs

ceph集群的存储看做是一个大的分区或者共享文件挂载到客户端的本地,客户端可以在本地直接进行操作,可以存储的数据类型也没有限制。

内核态和用户态

mount ----内核态 速度快,读写快

ceph-fuse ----用户态 速度慢,读写稍慢

优点:

​ 成本低,随便的一台服务器都可以做

​ 公司内部都会使用这种方式。

缺点:

​ 读写速度和传输速度相对比较慢(本地使用不再此列)

1.2.3、块存储RBD

rdb为kvm虚拟化和云服务(openstack)提供高性能和无线可扩展的存储后端。

磁盘映射,raid和lvm提供磁盘空间,多个主机上的raid或者lvm组成一个逻辑上的raid和lvm。

多块磁盘组成这种逻辑空间,可以并行的执行读写操作,io效率比较高。

缺点:

​ 对网络传输的要求比较高,windows无法访问linux的RBD操作。

1.3、ceph的主要特点:

1、统一存储:对象、块、文件系统(常见)

2、crush算法,算法来实现数据的寻址。数据完整性的校验和一致性。理论上可以支持上千个数据存储节点。

3、高扩展性 扩容方便,可靠性比较强,副本,创建数据的时候可以对数据进行副本操作,副本数据由管理定义。副本可以跨主机保存,跨架构,跨机构,数跨据中心进行保存。

4、高性能,因为是多副本,读写的时候可以做到并行处理。

二、ceph的组件和作用

2.1、OSD

OSD ceph当中的osd的守护进程,是集群的基础。

主要功能:存储数据,保存副本数据,数据恢复,平衡数据分布(中在a,国在b,再做镜像)

冗余和高可用至少要有3个OSD(三个机器上的三个物理硬盘)

2.2、Monitors

Monitors mon 守护进程,监视ceph集群的状态,维护ceph集群的健康OSD的状态也属于MON的监控范围。

ceph存储集群必须要有一个Monitors进程,和两个OSD进程

服务器的数量必须是奇数台。3-5

管理节点 mon(管理者)

​ osd(硬盘组)

​ osd(硬盘组)

2.3、MDS

MDS也是一个守护进程,保存ceph文件系统的元数据。(文件的权限,所有者,所在组,修改时间等等,在ceph集群当中的inode号)

2.4、managers

managers也是作为守护进程运行,跟踪集群的运行时间的指标和ceph集群的状态:存储的利用率,性能指标和系统的负载

2.5、RADOS

RADOS:分布式存储系统,所有的存储功能都是基于RADOS实现的。高可用,高性能也是基于RADOS实现的,他是所有一切的底层,也是整个ceph集群的核心。

RADOS由两部分组成:OSD和Monitor

2.6、LIBRADOS

LIBRADOS:这是一个动态库,用来允许应用程序和RADOS系统进行交互。

通过端口进行通信。

三、存储的概念:

3.1、存储的概念:

存储数据和object的关系:

对象,块,文件系统挂载,都需要object,存储的数据会被分成多个object,分成之后每一个数据都有一个object id。

每个数据object的大小是可以调整的,默认是4M

ceph的最小存储单位

3.2、object和pg的关系:

object数量太多了,在一个集群当中,object的数量太多,遍历和寻址都很慢,于是引入pg

PG,就是归置组,placcment group 管理object

object通过CRUSH算法映射到PG当中,(pg相当于找组,组告知组成员在哪),一个pg里面可以包含多个object。

3.3、pg和osd之间的关系:

pg也是CRUSH算法映射到osd当中去存储。如果有3个副本,每个pg会映射到三个osd当中,

三个osd A B C

pg-----------A

pg-----------B

pg-----------C

3.4、PG和PGP的关系:

PG和PGP的关系:

pgp是存放pg的排列组合。

3个osd

A(主) B C 副本数2 pgd1

[A B] C

PGD 2

[A B]

[A C]

8m:

4m 1

4m 2

pg--------1 2

A B C

1 2

A 12

B 12

A(主) B C 副本数2 pgd2

A 12

B 12

C 12

AB

AC

3.5、存储池:pool

存储池:pool

ceph的集群进行逻辑划分,设置ceph存储集群的权限,副本数pg的数量和算法的规则。

pool是由管理员自定义,相当于一个独立的空间。每个pool之间是独立的,数据也是隔离的。

ceph60

60g

XY102 30g

XY103 30g

12m

为3份4m-----object

再分到PG组-----------pg组员由pgd的个数决定2

再做副本

2个副本

返回给客户

四、实验架构

4台

192.168.168.11 admin osd mon mgr

192.168.168.12 osd mds mon mgr

192.168.168.13 osd mds mon mgr

192.168.168.21 client

--------------------------------所有节点---------------------

#关闭所有点的防火墙和selinux 
[root@test1 ~]# systemctl stop firewalld

[root@test1 ~]# setenforce 0

#添加主机映射关系:
vim /etc/hosts
192.168.168.11 mysql1
192.168.168.12 mysql2
192.168.168.13 mysql3
192.168.168.21 test1

#主节点生成密钥队:
[root@test1 ~]# ssh-keygen
#一路回车即可

#将密钥发送到每个从节点
[root@mysql1 ~]# ssh-copy-id 192.168.168.12

[root@mysql1 ~]# ssh-copy-id 192.168.168.13

[root@mysql1 ~]# ssh-copy-id 192.168.168.21

#所有节点安装源
cat> /etc/yum.repos.d/ceph.repo <<eof
[ceph]
name=ceph
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=ceph-noarch
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/noarch/
gpgcheck=0
eof

yum clean all && yum makecache

#主节点和从节点添加硬盘
alias scan='echo "- - -" > /sys/class/scsi_host/host0/scan;echo "- - -" > /sys/class/scsi_host/host1/scan;echo "- - -" > /sys/class/scsi_host/host2/scan'
执行scan
lsblk

#所有节点安装服务
yum install -y ceph-deploy ceph ceph-radosgw snappy leveldb gdisk python-argparse gperftools-libs

--------------------报错---------------------:##需要epel源和阿里云源------------
方法1:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
方法2:
[root@mysql1 yum.repos.d]# wget http://mirrors.aliyun.com/repo/Centos-7.repo

vim epel.repo 

[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch/debug
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1

[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/epel/7/SRPMS
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1

3、[root@mysql1 yum.repos.d]# yum clean all && yum makecache

[root@mysql1 yum.repos.d]# ls
Centos-7.repo  ceph.repo  epel.repo

所有节点安装

yum install -y ceph-deploy ceph ceph-radosgw snappy leveldb gdisk python-argparse gperftools-libs

----------------------------------主节点操作------------------------------------------

cd /etc/ceph/

[root@mysql1 ceph]#ceph-deploy new mysql1 mysql2 mysql3

yes

yes

设置副本数

[root@mysql1 ceph]# vim ceph.conf 

osd_pool_default_size = 2

[root@mysql1 ceph]# ceph-deploy mon create-initial
[root@mysql1 ceph]# ceph -s
  cluster:
    id:     8e2e4afa-b7b5-44f0-b0f6-c39db089a842
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum mysql1,mysql2,mysql3
    mgr: no daemons active
    osd: 0 osds: 0 up, 0 in

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0B
    usage:   0B used, 0B / 0B avail
    pgs:     

三个节点添加硬盘

alias scan='echo "- - -" > /sys/class/scsi_host/host0/scan;echo "- - -" > /sys/class/scsi_host/host1/scan;echo "- - -" > /sys/class/scsi_host/host2/scan'
scan
lsblk

自动分区在主节点操作

[root@mysql1 ceph]# ceph-deploy disk zap mysql1 /dev/sdb

[root@mysql1 ceph]# ceph-deploy disk zap mysql2 /dev/sdb

[root@mysql1 ceph]# ceph-deploy disk zap mysql3 /dev/sdb

mysql1 在主节点操作

[root@mysql1 ceph]# ceph-deploy osd create mysql1 --data /dev/sdb

[root@mysql1 ceph]# ceph-deploy osd create mysql2 --data /dev/sdb

[root@mysql1 ceph]# ceph-deploy osd create mysql3 --data /dev/sdb

查看os的状态

[root@mysql1 ceph]#ceph-deploy osd list mysql1 mysql2 mysql3

[root@mysql1 ceph]# ceph -s
  cluster:
    id:     f3407f51-b004-4587-bdbc-96de5d4cf994
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum mysql1,mysql2,mysql3
    mgr: mysql1(active)
    osd: 3 osds: 3 up, 3 in

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0B
    usage:   3.01GiB used, 57.0GiB / 60.0GiB avail

创建管理

[root@mysql1 ceph]#ceph-deploy mgr create mysql1 mysql2 mysql3

[root@mysql1 ceph]# ceph -s

[root@mysql1 ceph]# ceph -s
  cluster:
    id:     f3407f51-b004-4587-bdbc-96de5d4cf994
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum mysql1,mysql2,mysql3
    mgr: mysql1(active), standbys: mysql2, mysql3
    osd: 3 osds: 3 up, 3 in

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0B
    usage:   3.01GiB used, 57.0GiB / 60.0GiB avail
    pgs:     

[root@mysql1 ceph]# ls
ceph.bootstrap-mds.keyring  ceph.conf
ceph.bootstrap-mgr.keyring  ceph-deploy-ceph.log
ceph.bootstrap-osd.keyring  ceph.mon.keyring
ceph.bootstrap-rgw.keyring  rbdmap
ceph.client.admin.keyring

传给从

[root@mysql1 ceph]#ceph-deploy admin  mysql1 mysql2 mysql3

[root@mysql1 ceph]# ceph-deploy --overwrite-conf config push mysql1 mysql2 mysql3 ##报错使用此代码

赋权,读权限

[root@mysql1 ceph]# chmod +r ceph.client.admin.keyring

[root@mysql2 ceph]# lsblk

[root@mysql2 ceph]# chmod +r ceph.client.admin.keyring

[root@mysql3 ceph]# chmod +r ceph.client.admin.keyring

[root@mysql1 ceph]# ceph-deploy mds create mysql2 mysql3

[root@mysql1 ceph]# ceph mds stat
, 2 up:standby

准备工作就绪

[root@mysql1 ceph]# ceph -s
  cluster:
    id:     f3407f51-b004-4587-bdbc-96de5d4cf994
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum mysql1,mysql2,mysql3
    mgr: mysql1(active), standbys: mysql2, mysql3
    osd: 3 osds: 3 up, 3 in

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0B
    usage:   3.01GiB used, 57.0GiB / 60.0GiB avail

--------------------------------以上ceph架构创建完成-----------------

------------------------------以下创建在线硬盘文件系统---------------------

文件系统 ceph-fs

第一个存储数据的pool

第二个存储元数据的pool

ceph osd pool create cephfs_date pg_num

少于5个osd的情况下,pg的数量等于128个

5-10个osd 512个pg

10-50个osd 4096个pg

pg总数:750个,不能超过750个

128*3=384

750-384=366

存储元数据也要pg

128*2=256

存储数据:

osd*pg值

元数据

2*pg值

osd * pg值+2 * pg 值 < 750

pg_num =(osd*100)/副本数

设定pg的目的:通过管理较少的pg,ceph获取数据,分配,管理数据的效率越高。

pg值越多,数据分布的越多,管理就越复杂。

存储数据

[root@mysql1 ceph]# ceph osd pool create cephfs_date 128
pool 'cephfs_date' created

存储元数据

[root@mysql1 ceph]# ceph osd pool create ceph_metadata 128
pool 'ceph_metadata' created

存储名称

[root@mysql1 ceph]# ceph fs new cephfs ceph_metadata cephfs_date
new fs with metadata pool 2 and data pool 1

[root@mysql1 ceph]# ceph fs ls
name: cephfs, metadata pool: ceph_metadata, data pools: [cephfs_date 

[root@mysql1 ceph]# ceph fs status cephfs

cephfs - 0 clients
======

+------+--------+--------+---------------+-------+-------+
| Rank | State  |  MDS   |    Activity   |  dns  |  inos |
+------+--------+--------+---------------+-------+-------+
|  0   | active | mysql3 | Reqs:    0 /s |   10  |   12  |
+------+--------+--------+---------------+-------+-------+
+---------------+----------+-------+-------+
|      Pool     |   type   |  used | avail |
+---------------+----------+-------+-------+
| ceph_metadata | metadata | 2246  | 17.9G |
|  cephfs_date  |   data   |    0  | 17.9G |
+---------------+----------+-------+-------+

+-------------+
| Standby MDS |
+-------------+
|    mysql2   |
+-------------+
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)

MDS监控元数据的进程

-----------------------------在线硬盘存储文件系统cephfs------------布置完成

client端

内核挂载

[root@mysql1 ceph]# cat ceph.client.admin.keyring 
[client.admin]
	key = AQB9FLNmNWJGJRAAOoobv+CQrp7HffxC8PUj2Q==
[root@test1 ceph]# mount -t ceph 192.168.168.11:6789:/ /data1 -o name=admin,secret=AQB9FLNmNWJGJRAAOoobv+CQrp7HffxC8PUj2Q==
[root@test1 ceph]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   38G  5.1G   32G   14% /
devtmpfs                 1.9G     0  1.9G    0% /dev
tmpfs                    1.9G     0  1.9G    0% /dev/shm
tmpfs                    1.9G   13M  1.9G    1% /run
tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sr0                 4.3G  4.3G     0  100% /mnt
/dev/sda1               1014M  179M  836M   18% /boot
/dev/mapper/centos-home   19G   37M   19G    1% /home
tmpfs                    378M  4.0K  378M    1% /run/user/42
tmpfs                    378M   36K  378M    1% /run/user/0
192.168.168.11:6789:/     18G     0   18G    0% /data1

[root@test1 data]# dd if=/dev/zero of=/data1/test1 bs=10M count=10

记录了10+0 的读入
记录了10+0 的写出
104857600字节(105 MB)已复制,0.181681 秒,577 MB/秒

[root@mysql1 ceph]# ceph -s
  cluster:
    id:     f3407f51-b004-4587-bdbc-96de5d4cf994
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum mysql1,mysql2,mysql3
    mgr: mysql1(active), standbys: mysql2, mysql3
    mds: cephfs-1/1/1 up  {0=mysql3=up:active}, 1 up:standby
    osd: 3 osds: 3 up, 3 in

  data:
    pools:   2 pools, 178 pgs
    objects: 46 objects, 100MiB
    usage:   3.30GiB used, 56.7GiB / 60.0GiB avail
    pgs:     178 active+clean

[root@mysql1 ceph]# ceph fs status cephfs

cephfs - 1 clients
======

+------+--------+--------+---------------+-------+-------+
| Rank | State  |  MDS   |    Activity   |  dns  |  inos |
+------+--------+--------+---------------+-------+-------+
|  0   | active | mysql3 | Reqs:    0 /s |   11  |   13  |
+------+--------+--------+---------------+-------+-------+
+---------------+----------+-------+-------+
|      Pool     |   type   |  used | avail |
+---------------+----------+-------+-------+
| ceph_metadata | metadata | 15.1k | 17.8G |
|  cephfs_date  |   data   |  100M | 17.8G |
+---------------+----------+-------+-------+

+-------------+
| Standby MDS |
+-------------+
|    mysql2   |
+-------------+
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)

[root@test1 data]# dd if=/dev/zero of=/data1/test2 bs=10M count=10
记录了10+0 的读入
记录了10+0 的写出
104857600字节(105 MB)已复制,0.15274 秒,687 MB/秒


[root@mysql1 ceph]# ceph fs status cephfs

cephfs - 1 clients
======

+------+--------+--------+---------------+-------+-------+
| Rank | State  |  MDS   |    Activity   |  dns  |  inos |
+------+--------+--------+---------------+-------+-------+
|  0   | active | mysql3 | Reqs:    0 /s |   12  |   14  |
+------+--------+--------+---------------+-------+-------+
+---------------+----------+-------+-------+
|      Pool     |   type   |  used | avail |
+---------------+----------+-------+-------+
| ceph_metadata | metadata | 29.3k | 17.7G |
|  cephfs_date  |   data   |  200M | 17.7G |
+---------------+----------+-------+-------+

+-------------+
| Standby MDS |
+-------------+
|    mysql2   |
+-------------+
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)

[root@test1 ceph]# umount 192.168.168.11:6789:/ 
[root@test1 ceph]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   38G  5.5G   32G   15% /
devtmpfs                 1.9G     0  1.9G    0% /dev
tmpfs                    1.9G     0  1.9G    0% /dev/shm
tmpfs                    1.9G   13M  1.9G    1% /run
tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sr0                 4.3G  4.3G     0  100% /mnt
/dev/sda1               1014M  179M  836M   18% /boot
/dev/mapper/centos-home   19G   37M   19G    1% /home
tmpfs                    378M  4.0K  378M    1% /run/user/42
tmpfs                    378M   36K  378M    1% /run/user/0

[root@mysql1 ceph]# ceph fs status cephfs

cephfs - 0 clients

+------+--------+--------+---------------+-------+-------+
| Rank | State  |  MDS   |    Activity   |  dns  |  inos |
+------+--------+--------+---------------+-------+-------+
|  0   | active | mysql3 | Reqs:    0 /s |   12  |   14  |
+------+--------+--------+---------------+-------+-------+
+---------------+----------+-------+-------+
|      Pool     |   type   |  used | avail |
+---------------+----------+-------+-------+
| ceph_metadata | metadata | 27.9k | 26.7G |
|  cephfs_date  |   data   |  200M | 26.7G |
+---------------+----------+-------+-------+

+-------------+
| Standby MDS |
+-------------+
|    mysql2   |
+-------------+
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)

免密登录

[root@test1 data1]# yum -y install ceph-fuse

[root@test1 data1]# scp root@192.168.168.11:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
ceph.client.admin.keyring           100%   63    75.1KB/s   00:00    
[root@test1 data1]# scp root@192.168.168.11:/etc/ceph/ceph.conf /etc/ceph/
ceph.conf                           100%  269   176.3KB/s   00:00 

免密登录

[root@test1 data1]# ceph-fuse -m 192.168.168.11:6789 /data3
2024-08-07 16:29:16.786668 7f685076c240 -1 init, newargv = 0x55ba2451b260 newargc=9
ceph-fuse[17245]: starting ceph client
ceph-fuse[17245]: starting fuse

[root@test1 data1]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   38G  5.1G   32G   14% /
devtmpfs                 1.9G     0  1.9G    0% /dev
tmpfs                    1.9G     0  1.9G    0% /dev/shm
tmpfs                    1.9G   13M  1.9G    1% /run
tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sr0                 4.3G  4.3G     0  100% /mnt
/dev/sda1               1014M  179M  836M   18% /boot
/dev/mapper/centos-home   19G   37M   19G    1% /home
tmpfs                    378M  4.0K  378M    1% /run/user/42
tmpfs                    378M   36K  378M    1% /run/user/0
192.168.168.11:6789:/     18G  200M   18G    2% /data1
ceph-fuse                 18G  200M   18G    2% /data3



[root@mysql1 ceph]# ceph fs status cephfs

cephfs - 2 clients

+------+--------+--------+---------------+-------+-------+
| Rank | State  |  MDS   |    Activity   |  dns  |  inos |
+------+--------+--------+---------------+-------+-------+
|  0   | active | mysql3 | Reqs:    0 /s |   12  |   14  |
+------+--------+--------+---------------+-------+-------+
+---------------+----------+-------+-------+
|      Pool     |   type   |  used | avail |
+---------------+----------+-------+-------+
| ceph_metadata | metadata | 29.7k | 17.7G |
|  cephfs_date  |   data   |  200M | 17.7G |
+---------------+----------+-------+-------+

+-------------+
| Standby MDS |
+-------------+
|    mysql2   |
+-------------+
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)

同一个文件系统,文件相同

[root@test1 data1]# touch 123
[root@test1 data1]# ls
123  test1  test2

[root@test1 data1]# cd /data3
[root@test1 data3]# ls
123  test1  test2

[root@test1 data3]# touch 234
[root@test1 data3]# ls
123  234  test1  test2
[root@test1 data3]# cd /data1
[root@test1 data1]# ls
123  234  test1  test2

##使用统一文件系统,数据同步

调整副本数可以

vim ceph.conf

osd_pool_default_size=2

##查看文件系统的副本数量

[root@mysql1 ceph]# ceph osd pool get cephfs_date size
size: 3 

  ##调整文件系统的副本数量

[root@mysql1 ceph]# ceph osd pool get cephfs_date size
size: 3
[root@mysql1 ceph]# ceph osd pool set cephfs_date size 2
set pool 1 size to 2
[root@mysql1 ceph]# ceph fs status cephfs

cephfs - 2 clients

+------+--------+--------+---------------+-------+-------+
| Rank | State  |  MDS   |    Activity   |  dns  |  inos |
+------+--------+--------+---------------+-------+-------+
|  0   | active | mysql3 | Reqs:    0 /s |   14  |   16  |
+------+--------+--------+---------------+-------+-------+
+---------------+----------+-------+-------+
|      Pool     |   type   |  used | avail |
+---------------+----------+-------+-------+
| ceph_metadata | metadata | 38.7k | 17.8G |
|  cephfs_date  |   data   |  200M | 26.7G |
+---------------+----------+-------+-------+

+-------------+
| Standby MDS |
+-------------+
|    mysql2   |
+-------------+
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)

五、ceph-test1-----作业

第一次

[root@mysql1 ceph]# ceph fs flag set enable_multiple true --yes-i-really-mean-it

[root@mysql1 ceph]# ceph osd pool create ceph-test1_date 30
pool 'ceph-test1_date' created

[root@mysql1 ceph]# ceph osd pool create ceph_metadata1 30
pool 'ceph_metadata1' created

[root@mysql1 ceph]# ceph fs new ceph-test1 ceph_metadata1 ceph-test1_date
new fs with metadata pool 4 and data pool 3



[root@mysql1 ceph]# ceph fs ls
name: cephfs, metadata pool: ceph_metadata, data pools: [cephfs_date ]
name: ceph-test1, metadata pool: ceph_metadata1, data pools: [ceph-test1_date ]



[root@mysql1 ceph]# ceph fs status ceph-test1

ceph-test1 - 0 clients

+------+--------+--------+---------------+-------+-------+
| Rank | State  |  MDS   |    Activity   |  dns  |  inos |
+------+--------+--------+---------------+-------+-------+
|  0   | active | mysql2 | Reqs:    0 /s |   10  |   12  |
+------+--------+--------+---------------+-------+-------+
+-----------------+----------+-------+-------+
|       Pool      |   type   |  used | avail |
+-----------------+----------+-------+-------+
|  ceph_metadata1 | metadata | 2246  | 17.8G |
| ceph-test1_date |   data   |    0  | 17.8G |
+-----------------+----------+-------+-------+

+-------------+
| Standby MDS |
+-------------+
+-------------+
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)



 mount -t ceph 192.168.168.11:6789:/ /data5 -o name=admin,secret=AQB9FLNmNWJGJRAAOoobv+CQrp7HffxC8PUj2Q==,mds_namespace=ceph-test1 





[root@mysql1 ceph]# ceph fs status ceph-test1

ceph-test1 - 1 clients

+------+--------+--------+---------------+-------+-------+
| Rank | State  |  MDS   |    Activity   |  dns  |  inos |
+------+--------+--------+---------------+-------+-------+
|  0   | active | mysql2 | Reqs:    0 /s |   11  |   13  |
+------+--------+--------+---------------+-------+-------+
+-----------------+----------+-------+-------+
|       Pool      |   type   |  used | avail |
+-----------------+----------+-------+-------+
|  ceph_metadata1 | metadata | 15.2k | 17.6G |
| ceph-test1_date |   data   |  100M | 17.6G |
+-----------------+----------+-------+-------+

+-------------+
| Standby MDS |
+-------------+
+-------------+
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)



mount -t ceph 192.168.118.61:6789:/ /data2 -o name=admin,secret=AQBa/LJmAn2OMxAA7EEZTaurchJ+K4uPyQNhfQ==,mds_namespace=cephfs2

第二次

[root@mysql1 ceph]# ceph osd pool create ceph-test1_date 30
pool 'ceph-test1_date' created

[root@mysql1 ceph]# ceph osd pool create ceph-test1_metadata 30
pool 'ceph-test1_metadata' created

[root@mysql1 ceph]# ceph fs new ceph-test1 ceph-test1_metadata ceph-test1_date
Error EINVAL: Creation of multiple filesystems is disabled.  To enable this experimental feature, use 'ceph fs flag set enable_multiple true'

[root@mysql1 ceph]# ceph fs new ceph-test1 ceph-test1_metadata ceph-test1_date
new fs with metadata pool 4 and data pool 3

[root@mysql1 ceph]# ceph fs ls
name: cephfs, metadata pool: ceph_metadata, data pools: [cephfs_date ]
name: ceph-test1, metadata pool: ceph-test1_metadata, data pools: [ceph-test1_date ]



[root@mysql1 ceph]# ceph fs status ceph-test1

ceph-test1 - 0 clients

+------+--------+--------+---------------+-------+-------+
| Rank | State  |  MDS   |    Activity   |  dns  |  inos |
+------+--------+--------+---------------+-------+-------+
|  0   | active | mysql2 | Reqs:    0 /s |   10  |   12  |
+------+--------+--------+---------------+-------+-------+
+---------------------+----------+-------+-------+
|         Pool        |   type   |  used | avail |
+---------------------+----------+-------+-------+
| ceph-test1_metadata | metadata | 2246  | 26.7G |
|   ceph-test1_date   |   data   |    0  | 26.7G |
+---------------------+----------+-------+-------+

+-------------+
| Standby MDS |
+-------------+
+-------------+
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)

[root@test1 ceph]# mount -t ceph 192.168.168.11:6789:/ /data -o name=admin,secret=AQBQibNmHYf2IRAAMpxFBtuJQcTX9iF9+fNnjQ==
[root@test1 ceph]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   38G  5.5G   32G   15% /
devtmpfs                 1.9G     0  1.9G    0% /dev
tmpfs                    1.9G     0  1.9G    0% /dev/shm
tmpfs                    1.9G   13M  1.9G    1% /run
tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sr0                 4.3G  4.3G     0  100% /mnt
/dev/sda1               1014M  179M  836M   18% /boot
/dev/mapper/centos-home   19G   37M   19G    1% /home
tmpfs                    378M  4.0K  378M    1% /run/user/42
tmpfs                    378M   36K  378M    1% /run/user/0
192.168.168.11:6789:/     27G  200M   27G    1% /data
[root@test1 ceph]# mount -t ceph 192.168.168.11:6789:/ /data1 -o name=admin,secret=AQBQibNmHYf2IRAAMpxFBtuJQcTX9iF9+fNnjQ==,mds_namespace=ceph-test1
[root@test1 ceph]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   38G  5.5G   32G   15% /
devtmpfs                 1.9G     0  1.9G    0% /dev
tmpfs                    1.9G     0  1.9G    0% /dev/shm
tmpfs                    1.9G   13M  1.9G    1% /run
tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sr0                 4.3G  4.3G     0  100% /mnt
/dev/sda1               1014M  179M  836M   18% /boot
/dev/mapper/centos-home   19G   37M   19G    1% /home
tmpfs                    378M  4.0K  378M    1% /run/user/42
tmpfs                    378M   36K  378M    1% /run/user/0
192.168.168.11:6789:/     27G  200M   27G    1% /data
[root@test1 ceph]# 



虽然只显示一个挂载点,但是两个目录已经挂载

[root@test1 data1]# dd if=/dev/zero of=/data1/test2 bs=10M count=10
记录了10+0 的读入
记录了10+0 的写出
104857600字节(105 MB)已复制,0.0665461 秒,1.6 GB/秒
[root@test1 data1]# dd if=/dev/zero of=/data1/test3 bs=10M count=10
记录了10+0 的读入
记录了10+0 的写出
104857600字节(105 MB)已复制,0.062335 秒,1.7 GB/秒
[root@test1 data1]# ls
test2  test3

[root@mysql1 ceph]# ceph fs status ceph-test1

ceph-test1 - 1 clients

+------+--------+--------+---------------+-------+-------+
| Rank | State  |  MDS   |    Activity   |  dns  |  inos |
+------+--------+--------+---------------+-------+-------+
|  0   | active | mysql2 | Reqs:    0 /s |   12  |   14  |
+------+--------+--------+---------------+-------+-------+
+---------------------+----------+-------+-------+
|         Pool        |   type   |  used | avail |
+---------------------+----------+-------+-------+
| ceph-test1_metadata | metadata | 31.2k | 26.5G |
|   ceph-test1_date   |   data   |  200M | 26.5G |
+---------------------+----------+-------+-------+

+-------------+
| Standby MDS |
+-------------+
+-------------+
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)







[root@test1 data]# ls
test1  test2

[root@mysql1 ceph]# ceph fs status cephfs

cephfs - 1 clients

+------+--------+--------+---------------+-------+-------+
| Rank | State  |  MDS   |    Activity   |  dns  |  inos |
+------+--------+--------+---------------+-------+-------+
|  0   | active | mysql3 | Reqs:    0 /s |   12  |   14  |
+------+--------+--------+---------------+-------+-------+
+---------------+----------+-------+-------+
|      Pool     |   type   |  used | avail |
+---------------+----------+-------+-------+
| ceph_metadata | metadata | 29.4k | 26.5G |
|  cephfs_date  |   data   |  200M | 26.5G |
+---------------+----------+-------+-------+

+-------------+
| Standby MDS |
+-------------+
+-------------+
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)
什么是ceph
Ceph是一个开源的、统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。
其中"统一"是说Ceph可以一套存储系统同时提供块设备存储、文件系统存储和对象存储三种存储功能。

Ceph项目最早起源于加州大学Santa Cruz分校的Sage Weil的博士论文所设计开发的新一代自由软件分布式文件系统,
其设计目标是良好的可扩展性(PB级别以上)、高性能及高可靠性,并随后贡献给开源社区。
在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。

Ceph是一个开源的分布式文件系统。因为它还支持块存储、对象存储,
所以很自然的被用做云计算框架openstack或cloudstack整个存储后端。
当然也可以单独作为存储,例如部署一套集群作为对象存储、SAN存储、NAS存储等

官网:https://ceph.com/

ceph支持的三种存储方式
1)块存储RBD
RBD(RADOS Block Devices)即为块存储的一种,RBD 通过 librbd 库与 OSD 进行交互,
RBD 为 KVM 等虚拟化技术和云服务(如 OpenStack 和 CloudStack)提供高性能和无限可扩展性的存储后端,
这些系统依赖于 libvirt 和 QEMU 实用程序与 RBD 进行集成,
客户端基于 librbd 库 即可将 RADOS 存储集群用作块设备,
不过,用于 rbd 的存储池需要事先启用 rbd 功能并进行初始化。

优点:
使用磁盘映射,如RAID/LVM的方式提供磁盘空间给主机使用,进一步维护了数据的安全性
因为是多块磁盘组合而成的逻辑盘空间,所以多块盘可以并行执行读写操作,提升IO效率
很多大型企业或数据中心使用SAN架构组网,数据传输速度和读写效率进一步得到提升

缺点:
如果采取FC_SAN的方式,需要HBA光纤通道卡和光纤交换机,成本较高
不利于不同操作系统主机间的数据共享,例如Linux主机把盘给格式化为ext4格式,
那么在Windows中对这个盘的操作使用就不太友好了,或者无法操作

2)对象存储RGW
对象存储,也就是键值存储,通过其接口指令,也就是简单GET、PUT、DEL和其他扩展指令,
向存储服务上传下载数据等

RGW 提供的是 REST 接口,客户端通过 http 与其进行交互,完成数据的增删改查等管理操作。 
radosgw 用在需要使用 RESTful API 接口访问 ceph 数据的场合,
因此在使用 RBD 即块存储得场合或者使用 cephFS 的场合可以不用启用 radosgw 功能。



优点:
后端使用大量硬盘组,且不受复杂目录系统影响,达到高水平的读写效率
集群可扩展性强,且支持多副本存储,保证数据安全性
通过URL直接访问存储文件,简单易管理

缺点:
不适合存放内容变动性大的文件,不然每次变动都要重新更新上传对象,
适合放静态的图 片镜像等非结构性的文件
不太适合作为数据库存储数据使用
操作系统无法像常规磁盘一样安装或挂载对象存储

3)文件系统存储ceph-fs
Ceph文件系统(CEPH FS)是一个POSIX兼容的文件系统,可以将ceph集群看做一个共享文件系统挂载到本地,
使用Ceph的存储集群来存储其数据,同时支持用户空间文件系统FUSE。
它可以像 NFS 或者 SAMBA 那样,提供共享文件夹,客户端通过挂载目录的方式使用 Ceph 提供的存储。

在CEPH FS中,与对象存储与块存储最大的不同就是在集群中增加了文件系统元数据服务节点MDS(Ceph Metadata Server)。
MDS也支持多台机器分布式的部署,以实现系统的高可用性。
文件系统客户端需要安装对应的Linux内核模块Ceph FS Kernel Object或者Ceph FS FUSE组件。

用户可以在块设备上创建xfs文件系统,也可以创建ext4等其他文件系统。
Ceph集群实现了自己的文件系统来组织管理集群的存储空间,
用户可以直接将Ceph集群的文件系统挂载到用户机上使用

优点:
成本低,随便一台服务器都可以来搭建
方便于公司内部的文件共享,内网云盘共享一些资料等等

缺点:
网络带宽影响,读写效率慢,传输速率稍低


ceph的主要特点
统一存储
Ceph支持三种调用接口:对象存储,块存储,文件系统挂载。
三种方式可以一同使用。在国内一些公司的云环境中,
通常会采用ceph作为openstack的唯一后端存储来提升数据转发效率。
所以在开源存储软件中,能够一统江湖。

Crush算法
Crush算法是ceph的两大创新之一,简单来说,ceph摒弃了传统的集中式存储元数据寻址的方案,
转而使用CRUSH算法完成数据的寻址操作。CRUSH在一致性哈希基础上很好的考虑了容灾域的隔离,
能够实现各类负载的副本放置规则,例如跨机房、机架感知等。Crush算法有相当强大的扩展性,
理论上支持数千个存储节点。

高扩展性
扩容方便、容量大。能够管理数千台服务器、EB级的容量。

可靠性强
Ceph中的数据副本数量可以由管理员自行定义,副本能够垮主机、机架、机房、数据中心存放。
所以安全可靠。存储节点可以自管理、自动修复。无单点故障,容错性强。

高性能
因为是多个副本,因此在读写操作时候能够做到高度并行化。理论上,节点越多,
整个集群的IOPS和吞吐量越高。另外一点ceph客户端读写数据直接与存储设备(osd) 交互。


ceph组件作用
OSD:(Object Storage Device)
Ceph的OSD(Object Storage Device)守护进程。
主要功能包括:存储数据、副本数据处理、数据恢复、数据回补、平衡数据分布,
并将数据相关的一些监控信息提供给Ceph Moniter,以便Ceph Moniter来检查其他OSD的心跳状态。
一个Ceph OSD存储集群,要求至少两个Ceph OSD,才能有效的保存两份数据。
注意,这里的两个Ceph OSD是指运行在两台物理服务器上,
并不是在一台物理服务器上运行两个Ceph OSD的守护进程。
通常,冗余和高可用性至少需要3个Ceph OSD。

Monitors
Ceph的Monitor守护进程:负责监视Ceph集群,维护Ceph集群的健康状态,
同时维护着Ceph集群中的各种Map图,包括监视器图、OSD 图、归置组( PG )图、和 CRUSH 图。

还维护了monitor、OSD和PG的状态改变历史信息,这些Map统称为Cluster Map,
Cluster Map是RADOS的关键数据结构,管理集群中的所有成员、关系、属性等信息以及数据的分发,
比如当用户需要存储数据到Ceph集群时,OSD需要先通过Monitor获取最新的Map图,
然后根据Map图和object id等计算出数据最终存储的位置。
Ceph 存储集群至少需要一个 Ceph Monitor(服务器数量必须是奇数) 和两个 OSD 守护进程。
而运行 Ceph 文件系统客户端时,则必须要有元数据服务器( Metadata Server )。

MDS
Ceph的MDS(Metadata Server)守护进程,主要保存的是Ceph文件系统的元数据。
注意,对于Ceph的块设备和Ceph对象存储都不需要Ceph MDS守护进程。
Ceph MDS为基于POSIX文件系统的用户提供了一些基础命令的执行,
比如ls、find等,这样可以很大程度降低Ceph存储集群的压力。

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

RADOS
Ceph的层是RADOS,RADOS本身也是分布式存储系统,CEPH所有的存储功能都是基于RADOS实现,
Ceph的高可靠、高可拓展、高性能、高自动化都是由这一层来提供的,
用户数据的存储最终也都是通过这一层来进行存储的,RADOS可以说就是Ceph的核心。

RADOS系统主要由两部分组成,分别是OSD和Monitor。

OSD:Object StorageDevice,提供存储资源。

Monitor:维护整个Ceph集群的全局状态。

LIBRADOS
基于RADOS层的上一层是LIBRADOS,LIBRADOS是一个库,它允许应用程序通过访问该库来与RADOS系统进行交互,
支持多种编程语言,比如C、C++、Python等。
Ceph的上层应用调用本机上的librados API,
再由后者通过socket与RADOS集群中的其他节点通信并完成各种操作。

ceph存储概念
存储数据和object的关系
无论使用哪种存储方式(对象、块、挂载),当用户要将数据存储到Ceph集群时,
存储数据都会被分割成多个object,每个object都有一个object id,
每个object的大小是可以设置的,默认是4MB,object可以看成是Ceph存储的最小存储单元。

object与pg的关系
由于object的数量很多,对象的size很小,在一个大规模的集群中可能有几百到几千万个对象。
这么多对象光是遍历寻址,速度都是很缓慢的,为了解决这些问题,
ceph引入了归置组(Placcment Group即PG)的概念用于管理object,
每个object最后都会通过CRUSH算法计算映射到某个pg中,一个pg可以包含多个object。

pg与osd的关系
pg也需要通过CRUSH计算映射到osd中去存储,如果是二副本的,则每个pg都会映射到二个osd,
比如[osd.1,osd.2],那么osd.1是存放该pg的主副本,osd.2是存放该pg的从副本,保证了数据的冗余。

pg与pgp的关系
pg是用来存放object的,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],很像我们高中数学学过的排列组合

存储池pool
存储池(pool):是对Ceph集群进行的逻辑划分,主要设置其中存储对象的权限、备份数目、PG数以及CRUSH规则等属性。
Pool是管理员自定义的命名空间,像其他的命名空间一样,用来隔离对象与PG。
我们在调用API存储即使用对象存储时,需要指定对象要存储进哪一个POOL中。除了隔离数据,
我们也可以分别对不同的POOL设置不同的优化策略,比如副本数、数据块及对象大小等。

ceph存储数据的过程:

Ceph存储集群从客户端接收文件,每个文件都会被客户端切分成一个或多个对象,
然后将这些对象进行分组,再根据一定的策略存储到集群的OSD节点中

对象的分发需要经过两个阶段的计算,才能得到存储该对象的OSD,然后将对象存储到OSD中对应的位置。

(1)对象到PG的映射逻辑集合。PG是系统向OSD节点分发数据的基本单位,
相同PG里的对象将被分发到相同的OSD节点中(一个主OSD节点多个备份OSD节点)。
对象的PG是由对象ID号通过Hash算法,结合其他一些修正参数得到的。

(2)PG到相应的OSD的映射。RADOS系统利用相应的哈希算法根据系统当前的状态以及PG的ID号,
将各个PG分发到OSD集群中。OSD集群是根据物理节点的容错区域(比如机架、机房等)来进行划分的。

ceph存储流程:

正常IO流程
步骤:
1、client 创建cluster handler。(集群处理信息)
2、client 读取配置文件。
3、client 连接上monitor,获取集群map信息。
4、client 读写io 根据crushmap 算法请求对应的主osd数据节点。
5、主osd数据节点同时写入另外两个副本节点数据。
6、等待主节点以及另外两个副本节点写完数据状态。
7、主节点及副本节点写入状态都成功后,返回给client,io写入完成。

新主IO流程
如果新加入的OSD1取代了原有的OSD4成为 Primary OSD, 由于OSD1上未创建 PG , 
不存在数据,那么 PG 上的 I/O 无法进行,怎样工作的呢?

步骤:
1、client连接monitor获取集群map信息。
2、同时新主osd1由于没有pg数据会主动上报monitor告知让osd2临时接替为主。
3、临时主osd2会把数据全量同步给新主osd1。
4、client IO读写直接连接临时主osd2进行读写。
5、osd2收到读写io,同时写入另外两副本节点。
6、等待osd2以及另外两副本写入成功。
7、osd2三份数据都写入成功返回给client, 此时client io读写完毕。
8、如果osd1数据同步完毕,临时主osd2会交出主角色。
9、osd1成为主节点,osd2变成副本。


ceph集群详解
ceph存储集群是所有ceph存储方式的基础。基于RADOS,ceph存储集群由3种类型的守护进程组成

ceph osd守护进程(osd)将数据作为对象存储在存储节点上
ceph monitor(mon)维护集群映射的主副本
ceph manager管理器守护进程
一个ceph存储集群可能包含数千个存储节点。一个最小的系统至少有一个Ceph monitor和两个ceph osd daemons用于数据复制

Ceph 文件系统、Ceph 对象存储和 Ceph 块设备从 Ceph 存储集群读取数据并将数据写入到 Ceph 存储集群

服务器						ip					角色
ceph01(管理节点)    192.168.233.10      admin、osd、mon、mgr
ceph02                192.168.233.20      osd、mds、mon、mgr
ceph03                192.168.233.30      osd、mds、mon、mgr
client                192.168.233.40      client

#关闭所有点的防火墙和selinux 
[root@test1 ~]# systemctl stop firewalld

[root@test1 ~]# setenforce 0

#添加主机映射关系:
vim /etc/hosts
192.168.233.10 test1
192.168.233.20 test2
192.168.233.30 test3


#主节点生成密钥队:
[root@test1 ~]# ssh-keygen
#一路回车即可

#将密钥发送到每个从节点
[root@test1 ~]# ssh-copy-id 192.168.233.20

[root@test1 ~]# ssh-copy-id 192.168.233.30

[root@test1 ~]# ssh-copy-id 192.168.233.40

#所有节点安装源
cat> /etc/yum.repos.d/ceph.repo <<eof
[ceph]
name=ceph
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=ceph-noarch
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/noarch/
gpgcheck=0
eof

yum clean all && yum makecache

#主节点和从节点添加硬盘
alias scan='echo "- - -" > /sys/class/scsi_host/host0/scan;echo "- - -" > /sys/class/scsi_host/host1/scan;echo "- - -" > /sys/class/scsi_host/host2/scan'
执行scan

#所有节点安装服务
yum install -y ceph-deploy ceph ceph-radosgw snappy leveldb gdisk python-argparse gperftools-libs

#配置集群:
[root@test1 ceph]# cd /etc/ceph/

[root@test1 ceph]# ceph-deploy new test1 test2 test3


# 管理节点,多个mon模式

cd /etc/ceph/
ceph-deploy new test1 test2 test3
执行完毕后,可以看到/etc/ceph目录中生成了三个文件
ceph.conf 为 ceph 配置文件,ceph-deploy-ceph.log 为 ceph-deploy 日志文件,ceph.mon.keyring 为 ceph monitor 
的密钥环。

把 Ceph 配置文件里的默认副本数从 3 改成 2 ,
这样只有两个 OSD 也可以达到 active + clean 状态。
把下面这行加入 [global] 段:
ceph.conf 配置文件,增加副本数为 2。

[root@test1 ceph]# echo "osd_pool_default_size = 2" >> ceph.conf
osd_pool_default_size = 2 是 Ceph 存储集群中的一个参数设置。
它指定了在创建新的 Ceph 存储池(pool)时,默认的副本数或者分片数。
在这种情况下,设置为 2 意味着每个对象会有两个副本(或者两个分片,具体取决于 Ceph 的配置方式)。


初始化mon节点并收集所有秘钥

# 管理节点初始化

ceph-deploy mon create-initial

# 查看集群状态

[root@test1 ceph]# ceph -s
  cluster:
    id:     7400f7ac-0613-4048-bd80-125ebc02446f
    health: HEALTH_OK
#这里ok表示没问题
  services:
    mon: 3 daemons, quorum test1,test2,test3
    mgr: no daemons active
    osd: 0 osds: 0 up, 0 in

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0B
    usage:   0B used, 0B / 0B avail
    pgs:

Health Status:
集群的健康状态显示为 HEALTH_OK,这通常表示集群的整体状态是正常的。然而,这并不意味着所有组件都正常运行。

Services:
mon: 有3个监视器(mon)守护进程正在运行,显示quorum的节点是test1、test2、test3,这表示监视器集群是正常的。
mgr: 管理器(mgr)没有活动的守护进程,这可能是一个问题。通常情况下,至少应该有一个活跃的mgr进程来收集和显示集群的状态数据。
osd: 没有OSD(对象存储守护进程)在运行。通常情况下,Ceph集群应该至少有一个OSD守护进程来存储数据。
	

---------------------------------------------------

添加osd服务
Ceph 12版本部署osd格式化命令跟之前不同
添加完硬盘直接使用,不要分区

ceph自动分区
接下来需要创建 OSD 了,OSD 是最终数据存储的地方,这里我们准备了3个 OSD 节点。
官方建议为 OSD 及其日志使用独立硬盘或分区作为存储空间,也可以使用目录的方式创建。

[root@test1 ceph]# ceph-deploy disk zap test1 /dev/sdb
[root@test1 ceph]# ceph-deploy disk zap test2 /dev/sdb
[root@test1 ceph]# ceph-deploy disk zap test3 /dev/sdb


添加osd节点
[root@test1 ceph]# ceph-deploy osd create test1 --data /dev/sdb
[root@test1 ceph]# ceph-deploy osd create test2 --data /dev/sdb
[root@test1 ceph]# ceph-deploy osd create test3 --data /dev/sdb

查看osd节点的状态
[root@test1 ceph]# ceph-deploy osd list test1 test2 test3

#添加mgr服务
ceph-deploy mgr create test1 test2 test3

统一集群配置
用 ceph-deploy 把配置文件和 admin 密钥拷贝到管理节点和 Ceph 节点,
这样你每次执行 Ceph 命令行时就无需指定 monitor 地址和 ceph.client.admin.keyring 了。

# 管理节点

[root@ceph01 ceph]# ceph-deploy admin test1 test2 test3

# 集群每一个节点授权

[root@test1 ceph]# chmod +r /etc/ceph/ceph.client.admin.keyring
[root@test2 ceph]# chmod +r /etc/ceph/ceph.client.admin.keyring
[root@test3 ceph]# chmod +r /etc/ceph/ceph.client.admin.keyring


5、添加mds服务
Mds是ceph集群中的元数据服务器,而通常它都不是必须的,
因为只有在使用cephfs的时候才需要它,而目在云计算中用的更广泛的是另外两种存储方式。

Mds虽然是元数据服务器,但是它不负责存储元数据,
元数据也是被切成对象存在各个osd节点中的

在创建CEPH FS时,要至少创建两个POOL,一个用于存放数据,另一个用于存放元数据。
Mds只是负责接受用户的元数据查询请求,然后从osd中把数据取出来映射进自己的内存中供客户访问。
所以mds其实类似一个代理缓存服务器,替osd分担了用户的访问压力

 # 管理节点

[root@test1 ceph]# ceph-deploy mds create test2 test3

查看mds服务状态
[root@test11 ceph]# ceph mds stat
, 2 up:standby

# 查看集群状态

[root@test1 ceph]# ceph -s

ceph集群运用
1、文件系统运用
创建文件系统存储池

# 查看文件系统

[root@test1 ~]# ceph fs ls
No filesystems enabled     ## 没有文件系统

# 首先创建存储池

语法:
ceph osd pool create cephfs_data <pg_num>
ceph osd pool create cephfs_metadata <pg_num>
其中:<pg_num> = 128 ,
关于创建存储池
      确定 pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值:
       *少于 5 个 OSD 时可把 pg_num 设置为 128
       *OSD 数量在 5 到 10 个时,可把 pg_num 设置为 512
       *OSD 数量在 10 到 50 个时,可把 pg_num 设置为 4096
       *OSD 数量大于 50 时,你得理解权衡方法、以及如何自己计算 pg_num 取值
       *自己计算 pg_num 取值时可借助 pgcalc 工具
       https://ceph.com/pgcalc/

放置组(PG)的作用
数据分布: PG 是 Ceph 数据分布机制的基本单位。Ceph 会将数据对象映射到 PG 上,
然后再将这些 PG 映射到 OSD(对象存储守护进程)上。
这样,即使对象的数量非常庞大,通过管理较少数量的 PG,Ceph 也能有效地分配和管理数据。

负载均衡: 通过 PG,Ceph 可以将数据均匀地分布在所有 OSD 上,从而实现负载均衡。
增加或减少 OSD 时,Ceph 只需要调整 PG 的映射,从而尽可能减少数据迁移。

选择合适的 pg_num
计算方式: 选择合适的 PG 数量对于系统的性能和效率非常重要。
一般来说,PG 数量越多,数据分布越均匀,但管理的复杂度也会增加。
常用的计算方式是:pg_num = (OSD数量 * 100) / 副本数量。

#CephFS 需要两个 Pools - cephfs-data 和 cephfs-metadata, 分别存储文件数据和文件元数据

[root@test1 ~]# ceph osd pool create ceph_data 128
pool 'ceph_data' created

[root@test1 ~]# ceph osd pool create ceph_metadata 64
pool 'ceph_metadata' created

您在创建 ceph_metadata 池时,指定了 128 个 PG(pg_num),副本数为 3。

PG 数量将达到 768(这包括了所有池的 PG 数量乘以副本数),而系统允许的最大 PG 数量是 750。
这个限制是由 mon_max_pg_per_osd 参数(每个 OSD 的最大 PG 数量)和 OSD 数量决定的。

总 PG 数量 = (128 * 3) + (128 * 3) = 768 #不能超过750

创建文件系统
创建好存储池后,你就可以用 fs new 命令创建文件系统了
命令:ceph fs new <fs_name> cephfs_metadata cephfs_data  
其中:<fs_name> = cephfs  可自定义


# 给创建的2个存储池创建文件系统

[root@ceph01 ~]# ceph fs new cephfs ceph_metadata ceph_data
new fs with metadata pool 2 and data pool 1


# 查看文件系统

[root@ceph01 ~]# ceph fs ls
name: cephfs, metadata pool: ceph_metadata, data pools: [ceph_data ]

# 查看mds的状态

[root@ceph01 ~]# ceph fs status cephfs

挂载客户端
要挂载 Ceph 文件系统,如果你知道监视器 IP 地址可以用 mount 命令、
或者用 mount.ceph 工具来自动解析监视器 IP 地址。

# 内核驱动的方式挂载文件系统

# 在client创建挂载点

[root@test4 ~]# mkdir /data

# 查看秘钥

[root@ceph01 ~]# cat /etc/ceph/ceph.client.admin.keyring 

# 使用秘钥挂载

[root@test4 ~]# mount -t ceph 192.168.233.10:6789:/ /data/ -o name=admin,secret=AQALTDBm6g0FChAApdTfxOY+Y1nP4c2L2XR2qw==

# 取消挂载

[root@test4 ~]# umount /data/

用户空间的方式挂载文件系统
[root@client ~]# yum install -y ceph-fuse

# 挂载

[root@ceph01 ceph]# scp ceph.client.admin.keyring ceph.conf client:/etc/ceph/
ceph.client.admin.keyring                                 100%   63    52.5KB/s   00:00    
ceph.conf                                                 100%  266   266.9KB/s   00:00

[root@client ~]# ceph-fuse -m 192.168.1.115:6789 /data/

[root@client ~]# df -hT
Filesystem              Type            Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs              98G  1.6G   96G   2% /
devtmpfs                devtmpfs        980M     0  980M   0% /dev
tmpfs                   tmpfs           992M     0  992M   0% /dev/shm
tmpfs                   tmpfs           992M  9.5M  982M   1% /run
tmpfs                   tmpfs           992M     0  992M   0% /sys/fs/cgroup
/dev/sr0                iso9660         4.2G  4.2G     0 100% /mnt/cdrom
/dev/sda1               xfs             497M  123M  375M  25% /boot
tmpfs                   tmpfs           199M     0  199M   0% /run/user/0
ceph-fuse               fuse.ceph-fuse  141G     0  141G   0% /data

# 取消挂载

[root@client ~]# umount /data/


用户空间的方式挂载文件系统
[root@client ~]# yum install -y ceph-fuse

# 挂载

[root@test4 /]# mkdir /etc/ceph

[root@ceph01 ceph]# scp ceph.client.admin.keyring ceph.conf 192.168.233.40:/etc/ceph/
ceph.client.admin.keyring                                 100%   63    52.5KB/s   00:00    
ceph.conf                                                 100%  266   266.9KB/s   00:00

[root@client ~]# ceph-fuse -m 192.168.233.10:6789 /data/

[root@client ~]# df -hT
Filesystem              Type            Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs              98G  1.6G   96G   2% /
devtmpfs                devtmpfs        980M     0  980M   0% /dev
tmpfs                   tmpfs           992M     0  992M   0% /dev/shm
tmpfs                   tmpfs           992M  9.5M  982M   1% /run
tmpfs                   tmpfs           992M     0  992M   0% /sys/fs/cgroup
/dev/sr0                iso9660         4.2G  4.2G     0 100% /mnt/cdrom
/dev/sda1               xfs             497M  123M  375M  25% /boot
tmpfs                   tmpfs           199M     0  199M   0% /run/user/0
ceph-fuse               fuse.ceph-fuse  141G     0  141G   0% /data

# 取消挂载

[root@client ~]# umount /data/

mount -t ceph 和 ceph-fuse 都可以用于将 Ceph 文件系统(CephFS)挂载到客户端,但它们有一些关键的区别:

内核支持:
使用 mount -t ceph 需要 Ceph 内核模块(ceph 和 ceph-fuse)来支持内核级挂载。它通过内核实现,通常会提供比用户空间工具更好的性能。

ceph-fuse
用户态实现:
ceph-fuse 是一个用户态工具,通过 FUSE(Filesystem in Userspace)实现 Ceph 文件系统挂载。它不需要内核级支持。

性能: mount -t ceph(内核级)通常提供更好的性能,而 ceph-fuse(用户空间)可能在性能上略逊一筹。
兼容性: ceph-fuse 可以在不支持 Ceph 内核模块的系统上使用,适用于用户空间挂载。
实现: mount -t ceph 是内核级挂载,而 ceph-fuse 是用户空间挂载工具。


ceph osd pool get cephfs_data size #查询副本数

ceph osd pool set cephfs_data size 2 #修改副本数


块存储运用
Ceph支持一个非常好的特性,以COW(写时复制copy-on-write)的方式从RBD快照创建克隆,在Ceph中被称为快照分层。
分层特性允许用户创建多个CEPH RBD克隆实例。
这些特性应用于OpenStack等云平台中,使用快照形式保护ceph RBD 镜像,快照是只读的,
但COW克隆是完全可以写 ,可以多次来孵化实例,对云平台来说是非常有用的。

注:

什么是copy-on-write呢?

copy-on-write的意思就是在复制一个对象(数据或文件)的时候并不是真正的把原先的对象复制到内存的另外一个位置上,
而是在新对象的内存映射表中设置一个指针,指向原对象的位置,并把那块内存的Copy-On-Write位设置为1.

这样,在对新的对象执行读操作的时候,内存数据不发生任何变动,直接执行读操作;而在对新的对象执行写操作时,
将真正的对象复制到新的内存地址中,并修改新对象的内存映射表指向这个新的位置,并在新的内存位置上执行写操作。

什么是快照?

快照是镜像在某个特定时间点的一份只读副本。 Ceph 块设备的一个高级特性就是你可以为映像创建快照来保留其历史。
Ceph 还支持分层快照,让你快速、简便地克隆镜像。

Ceph RBD镜像有format-1 和 format-2两种类型。

format-1:新建rbd镜像是使用最初的格式。此格式兼容所有版本的librbd和内核模块,但不支持新功能,像克隆。

format-2:使用第二版本rbd格式,此格式增加了对克隆的支持,日后扩展以增加新功能也变得更加容易。默认RBD创建的镜像是format-2。

#创建块存储的存储池:

# 查看内核是否支持使用RBD

[root@test1 ceph]# modprobe 

[root@test1 ceph]# lsmod | grep rbd
rbd                    83640  0 
libceph               306625  1 rbd

# 创建存储池

[root@test1 ceph]# ceph osd pool create rbd 64
pool 'rbd' created

注:
PG计算方式
total PGs = ((Total_number_of_OSD * 100) / max_replication_count) / pool_count
例如,当前ceph集群是9个osd,3副本,1个默认的rbd pool
所以PG计算结果为300,一般把这个值设置为与计算结果最接近的2的幂数,跟300比较接近的是256

注:
查看当前的PG值

# ceph osd pool get rbd pg_num

手动设置pg数量

# ceph osd pool set rbd pg_num 256

创建块设备镜像
要想把块设备加入某节点,你得先在 Ceph 存储集群中创建一个镜像,使用下列命令:

#rbd create --size {megabytes} {pool-name}/{image-name} -m mon节点的ip地址

如果创建镜像时不指定存储池,它将使用默认的 rbd 存储池

[root@test1 ceph]# rbd create --size 10240 rbd/test1
这里需要注意size的大小,这个大小可以超过你实际pool的大小,这个叫做瘦分配(即精简配置),
也叫超卖和按需分配。创建块之后可以通过指令rbd resize  --size 20240 test1 --allow-shrink来动态的更改。

注:ceph块设备镜像是精简配置,只有在你开始写入数据时它们才会占用物理空间

# 查看rbd的信息

[root@test1 ceph]# rbd ls
test1
注:用下列命令罗列某个特定存储池中的块设备,用存储池的名字替换 {poolname} :

# rbd ls {poolname}

# 查看镜像的信息

[root@test1 ceph]# rbd info test1
rbd image 'test1':
	size 100GiB in 25600 objects
	order 22 (4MiB objects)
	block_name_prefix: rbd_data.196d76b8b4567
	format: 2
	features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
	flags: 
	create_timestamp: Wed Jul  6 17:11:01 2022

注:
用下列命令检索某存储池内的镜像的信息,用镜像名字替换 {image-name} 、用存储池名字替换 {pool-name} :

# rbd info {pool-name}/{image-name}

映射块设备
映射进内核操作之前,首先查看内核版本, 2.x及之前的内核版本需手动调整format为1, 4.x之前要关闭object-map, fast-diff, deep-flatten功能才能成功映射到内核,这里使用的是centos7.5,内核版本3.10。

客户端要确定ceph-common包要安装:
yum -y install ceph-common

[root@test4 ~]# rbd feature disable test1 object-map fast-diff deep-flatten exclusive-lock

[root@test4 ~]# rbd map test1
/dev/rbd0
[root@test4 ~]# ls /dev/rbd0 
/dev/rbd0
可以看见在/dev下创建了一个叫rbd0的设备文件
挂载使用
挂载rbd的Linux 服务器首先需要机器支持ceph客户端,如果是一台新机器的话,请安装ceph,然后同步下配置文件。

# 创建挂载点

[root@test4 ~]# mkdir /cephrbd

# 格式化磁盘

[root@test4 ~]# mkfs.xfs /dev/rbd0
meta-data=/dev/rbd0              isize=512    agcount=16, agsize=1638400 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=26214400, imaxpct=25
         =                       sunit=1024   swidth=1024 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=12800, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0


# 挂载

[root@test4 ~]# mount /dev/rbd0 /cephrbd/
[root@test4 ~]# df -hT
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs        98G  1.6G   96G   2% /
devtmpfs                devtmpfs  980M     0  980M   0% /dev
tmpfs                   tmpfs     992M     0  992M   0% /dev/shm
tmpfs                   tmpfs     992M  9.5M  982M   1% /run
tmpfs                   tmpfs     992M     0  992M   0% /sys/fs/cgroup
/dev/sr0                iso9660   4.2G  4.2G     0 100% /mnt/cdrom
/dev/sda1               xfs       497M  123M  375M  25% /boot
tmpfs                   tmpfs     199M     0  199M   0% /run/user/0
/dev/rbd0               xfs       100G   33M  100G   1% /cephrbd

# 测试写入数据

[root@test4 ~]# dd if=/dev/zero of=/cephrbd/file bs=100M count=1
1+0 records in
1+0 records out
104857600 bytes (105 MB) copied, 0.218325 s, 480 MB/s

创建快照并测试回滚

# 创建了一个test1快照,快照的名字叫做mysnap

[root@test4 ~]# rbd snap create --snap mysnap rbd/test1

# 首先删除文件

[root@test4 ~]# rm -rf /cephrbd/file 

# 取消挂载

[root@test4 ~]# umount /dev/rbd0 
#回滚
[root@test4 ~]# rbd snap rollback rbd/test1@mysnap
Rolling back to snapshot: 100% complete...done.

# 查看挂载信息

[root@test4 ~]# df -hT
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs        98G  1.6G   96G   2% /
devtmpfs                devtmpfs  980M     0  980M   0% /dev
tmpfs                   tmpfs     992M     0  992M   0% /dev/shm
tmpfs                   tmpfs     992M  9.5M  982M   1% /run
tmpfs                   tmpfs     992M     0  992M   0% /sys/fs/cgroup
/dev/sr0                iso9660   4.2G  4.2G     0 100% /mnt/cdrom
/dev/sda1               xfs       497M  123M  375M  25% /boot
tmpfs                   tmpfs     199M     0  199M   0% /run/user/0

# 再挂载

[root@test4 ~]# mount /dev/rbd0 /cephrbd/

# 查看文件

[root@test4 ~]# ls /cephrbd/
file


模板与克隆

# 查看块设备的format(format必须为2)

[root@test4 ~]# rbd info rbd/test1
rbd image 'test1':
	size 100GiB in 25600 objects
	order 22 (4MiB objects)
	block_name_prefix: rbd_data.196d76b8b4567
	format: 2
	features: layering
	flags: 
	create_timestamp: Wed Jul  6 17:11:01 2022

如果不是format 2 可以创建时指定

# rbd create rbd/test1 --size 10240 --image-format 2


# 创建克隆前,把快照保存起来,不然会出错

[root@test4 ~]# rbd snap protect rbd/test1@mysnap

可以使用rbd snap unprotect rbd/test1@mysnap去掉这个保护,但是这样的话就 不能克隆了


# 克隆块设备

# 卸载挂载点

[root@test4 ~]# umount /dev/rbd0 

#克隆设备
[root@test4 ~]# rbd clone rbd/test1@mysnap rbd/test2

# 查看rbd

[root@test4 ~]# rbd ls rbd
test1
test2

如上看到rbd这个池上有两个块设备了,一个是原来的test1,一个是通过test1的镜像模板克隆出来的test2。

# 内核映射块设备

[root@test4 ~]# rbd map rbd/test2
/dev/rbd1

# 挂载克隆的块设备

[root@test4 ~]# mkdir /cephrbd1
[root@test4 ~]# mount /dev/rbd1 /cephrbd1/
[root@test4 ~]# ls /cephrbd1/
file
因为是克隆test1,test1上有文件系统,所以test2也有文件系统,直接挂载使用就可以


# 查看克隆的块设备

[root@test4 ~]# rbd info rbd/test2
rbd image 'test2':
	size 100GiB in 25600 objects
	order 22 (4MiB objects)
	block_name_prefix: rbd_data.196ee6b8b4567
	format: 2
	features: layering
	flags: 
	create_timestamp: Wed Jul  6 17:53:15 2022
	parent: rbd/test1@mysnap
	overlap: 100GiB

这个时候的test2还是依赖test1的镜像mysnap,如test1的mysnap被删除test2也不能够使用了,
要想独立出去,就必须将父镜像的信息合并flatten到子镜像中	


独立克隆的块设备
拍平克隆映像:
克隆出来的映像仍保留了对父快照的引用。要从子克隆删除这些到父快照的引用,你可以把快照的信息复制给子克隆,也就是"拍平"它。
拍平克隆镜像的时间随快照尺寸增大而增加。要删除快照,必须先拍平子镜像。
因为拍平的镜像包含了快照的所有信息,所以拍平的映像占用的存储空间会比分层克隆要大。

[root@client ~]# rbd flatten rbd/test2
Image flatten: 100% complete...done.

[root@client ~]# rbd info rbd/test2
rbd image 'test2':
	size 100GiB in 25600 objects
	order 22 (4MiB objects)
	block_name_prefix: rbd_data.196ee6b8b4567
	format: 2
	features: layering
	flags: 
	create_timestamp: Wed Jul  6 17:53:15 2022

# 删除镜像

# 去掉镜像test1的保护

root@client ~]# rbd snap unprotect rbd/test1@mysnap

# 删除镜像test1

[root@client ~]# rbd snap rm rbd/test1@mysnap
Removing snap: 100% complete...done.

# 查看test1的快照

[root@client ~]# rbd snap ls rbd/test1

d image 'test1':

size 100GiB in 25600 objects

order 22 (4MiB objects)

block_name_prefix: rbd_data.196d76b8b4567

format: 2

features: layering

flags:

create_timestamp: Wed Jul 6 17:11:01 2022

如果不是format 2 可以创建时指定

rbd create rbd/test1 --size 10240 --image-format 2

创建克隆前,把快照保存起来,不然会出错

[root@test4 ~]# rbd snap protect rbd/test1@mysnap

可以使用rbd snap unprotect rbd/test1@mysnap去掉这个保护,但是这样的话就 不能克隆了

克隆块设备

卸载挂载点

[root@test4 ~]# umount /dev/rbd0

#克隆设备

[root@test4 ~]# rbd clone rbd/test1@mysnap rbd/test2

查看rbd

[root@test4 ~]# rbd ls rbd

test1

test2

如上看到rbd这个池上有两个块设备了,一个是原来的test1,一个是通过test1的镜像模板克隆出来的test2。

内核映射块设备

[root@test4 ~]# rbd map rbd/test2

/dev/rbd1

挂载克隆的块设备

[root@test4 ~]# mkdir /cephrbd1

[root@test4 ~]# mount /dev/rbd1 /cephrbd1/

[root@test4 ~]# ls /cephrbd1/

file

因为是克隆test1,test1上有文件系统,所以test2也有文件系统,直接挂载使用就可以

查看克隆的块设备

[root@test4 ~]# rbd info rbd/test2

rbd image 'test2':

size 100GiB in 25600 objects

order 22 (4MiB objects)

block_name_prefix: rbd_data.196ee6b8b4567

format: 2

features: layering

flags:

create_timestamp: Wed Jul 6 17:53:15 2022

parent: rbd/test1@mysnap

overlap: 100GiB

这个时候的test2还是依赖test1的镜像mysnap,如test1的mysnap被删除test2也不能够使用了,

要想独立出去,就必须将父镜像的信息合并flatten到子镜像中

独立克隆的块设备

拍平克隆映像:

克隆出来的映像仍保留了对父快照的引用。要从子克隆删除这些到父快照的引用,你可以把快照的信息复制给子克隆,也就是"拍平"它。

拍平克隆镜像的时间随快照尺寸增大而增加。要删除快照,必须先拍平子镜像。

因为拍平的镜像包含了快照的所有信息,所以拍平的映像占用的存储空间会比分层克隆要大。

[root@client ~]# rbd flatten rbd/test2

Image flatten: 100% complete...done.

[root@client ~]# rbd info rbd/test2

rbd image 'test2':

size 100GiB in 25600 objects

order 22 (4MiB objects)

block_name_prefix: rbd_data.196ee6b8b4567

format: 2

features: layering

flags:

create_timestamp: Wed Jul 6 17:53:15 2022

删除镜像

去掉镜像test1的保护

root@client ~]# rbd snap unprotect rbd/test1@mysnap

删除镜像test1

[root@client ~]# rbd snap rm rbd/test1@mysnap

Removing snap: 100% complete...done.

查看test1的快照

[root@client ~]# rbd snap ls rbd/test1

复制代码
相关推荐
斯普信专业组2 天前
CephFS管理秘籍:全面掌握文件系统与MDS守护程序命令
ceph·cephfs
45° 微笑5 天前
k8s集群 ceph rbd 存储动态扩容
ceph·容器·kubernetes·rbd
查士丁尼·绵5 天前
ceph补充介绍
ceph
Hello.Reader7 天前
Ceph 存储系统全解
分布式·ceph
Clarence_Ls10 天前
<十六>Ceph mon 运维
运维·ceph
手持钩笼引天下10 天前
踩坑:关于使用ceph pg repair引发的业务阻塞
运维·ceph
Clarence_Ls10 天前
<十七>Ceph 块存储理论与实践
ceph
知本知至13 天前
ceph rgw使用sts Security Token Service
linux·网络·ceph
一名路过的小码农14 天前
ubantu 编译安装ceph 18.2.4
linux·c++·ceph
大新新大浩浩14 天前
ceph 删除rbd 锁的命令
ceph·1024程序员节