ceph 简介

Ceph是一个可靠地、自动重均衡、自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备存储和文件系统服务。在虚拟化领域里,比较常用到的是Ceph的块设备存储,比如在OpenStack项目里,Ceph的块设备存储可以对接OpenStack的cinder后端存储、Glance的镜像存储和虚拟机的数据存储,比较直观的是Ceph集群可以提供一个raw格式的块存储来作为虚拟机实例的硬盘。

Ceph相比其它存储的优势点在于它不单单是存储,同时还充分利用了存储节点上的计算能力,在存储每一个数据时,都会通过计算得出该数据存储的位置,尽量将数据分布均衡,同时由于Ceph的良好设计,采用了CRUSH算法、HASH环等方法,使得它不存在传统的单点故障的问题,且随着规模的扩大性能并不会受到影响。

最底层的RADOS提供了对象存储的功能,是ceph的根基所在。所有的其他功能都是在RADOS之上构建的。LIBRADOS看名字就能猜到,它提供了一系列语言的接口,可以直接访问RADOS。RADOSGW基于LIBRADOS实现了REST的接口并兼容S3和Swift。RBD也基于LIBRADOS提供了块存储。最后是CEPH FS直接基于RADOS实现了文件存储系统。

image-20230401170358520

实验1. 基于docker的ceph基本操作实验

1. 启动ceph测试环境

启动docker

1
# service docker start

运行结果:

image-20230401170410733

导入镜像

1
2
3
4
# docker load < /root/ceph.tar
# docker images
REPOSITORY TAG IMAGE ID
ceph/demo latest ed38ba053588

运行结果:

image-20230401170419660

查看IP地址及网络

1
# ifconfig

这里假设IP地址为 172.17.0.2,网络为 172.17.0.0/16

运行结果:

image-20230401170441485

启动 ceph测试环境(IP地址和网络需要替换为实际的值)

1
# docker run -d --net=host -v /etc/ceph:/etc/ceph -e MON_IP=172.17.0.2 -e CEPH_PUBLIC_NETWORK=172.17.0.0/16 ceph/demo

2. cephfs挂载

首先查看 key

1
2
# cat /etc/ceph/ceph.client.admin.keyring
AQBni81cnAC9GRAAzY2I9Wz+5gMdcY4ceGBcyA==(以实际输出为准)

挂载cephfs(IP地址和secret替换为上面实际输出的内容)

1
# mount -t ceph -o name=admin,secret=AQBni81cnAC9GRAAzY2I9Wz+5gMdcY4ceGBcyA== 172.17.0.2:/ /mnt/cephfs

查看挂载结果

1
# mount

运行结果:

image-20230401170455147

3. rbd方式

还有一种方式是作为rbd来加载。rbd的模型:最外层是pool,相当于一块磁盘,默认的pool名字叫做rbd。每个pool里面可以有多个image,相当于文件夹。每个image可以映射成一个块设备,有了设备就可以加载它。

首先创建一个名为 test_pool 的 pool :

1
# ceph osd pool create test_pool 128

128代表placement-group的数量。每个pg都是一个虚拟节点,将自己的数据存在不同的位置。这样一旦存储出现问题,pg就会选择新的存储,从而保证了自动高可用。运行这个命令就可以看到现在系统中的所有pool:

1
# ceph osd lspools

然后在 test_pool 这个pool里创建一个名为 test_image 的image:

1
# rbd create test_pool/test_image --size 128

size的单位是MB,所以这个 test_image image的大小为128M。运行下列命令可以看到 test_pool 的pool中的所有 test_image 和查看 test_image 的详细信息:

1
2
# rbd ls test_pool
# rbd info test_pool/test_image

运行结果:

image-20230401170510553