用容器轻松搭建ceph实验环境
Ceph是一个高性能的PB级分布式文件系统。它能够在一个系统中提供对象存储、块存储和文件存储。本文的主要内容是怎样用docker从零开始搭建ceph环境,并分别以cephfs和rbd的方式加载它。
这是ceph的模块架构图:
最底层的RADOS提供了对象存储的功能,是ceph的根基所在。所有的其他功能都是在RADOS之上构建的。LIBRADOS看名字就能猜到,它提供了一系列语言的接口,可以直接访问RADOS。RADOSGW基于LIBRADOS实现了REST的接口并兼容S3和Swift。RBD也基于LIBRADOS提供了块存储。最后是CEPH FS直接基于RADOS实现了文件存储系统。想要详细了解它的朋友可以看看这篇文章](http://www.wzxue.com/why-ceph-and-how-to-use-ceph/),把ceph介绍得很清楚。笔者的另一篇文章《通过RADOSGW提供ceph的S3和Swift接口》介绍了RADOSGW的使用方法。
cephfs方式
Talk is cheap,让我们来看看如何用最简单的方式来搭建一个ceph环境吧。Ceph提供了一个deph/demo的docker镜像来给我们做实验,注意别在产品环境用它(THIS CONTAINER IS NOT RECOMMENDED FOR PRODUCTION USAGE)。只要装好了docker,跑起来是很容易的:
上面的MON_IP
可以填写运行这个镜像的机器IP,CEPH_NETWORK
填写允许访问这个ceph的IP范围。启动之后,由于挂载了宿主机的/etc/ceph
,这个文件夹里面会生成几个配置文件。其中有一个叫ceph.client.admin.keyring
的文件里面有一个key
,作为cephfs加载的时候认证会用到。
直接作为cephfs来加载就是一句话的事情:
用的时候记得事先创建好/mnt/cephfs/
这个文件夹,替换secret
为你自己的key
,再改成用你的ceph服务器ip就好了。
rbd方式
还有一种方式是作为rbd来加载。这边需要啰嗦几句rbd的模型:最外层是pool,相当于一块磁盘,默认的pool名字叫做rbd。每个pool里面可以有多个image,相当于文件夹。每个image可以映射成一个块设备,有了设备就可以加载它。下面我们来尝试一下。如果打算用另一台机器,需要先把/etc/ceph
这个文件夹复制过去,这个文件夹里面包含了ceph的连接信息。为了运行ceph的命令,我们还需要安装ceph-common
,自己选一个命令吧:
准备工作做完了,我们首先创建一个名为ggg的pool:
128代表placement-group的数量。每个pg都是一个虚拟节点,将自己的数据存在不同的位置。这样一旦存储挂了,pg就会选择新的存储,从而保证了自动高可用。运行这个命令就可以看到现在系统中的所有pool:
然后在ggg这个pool里创建一个名为qqq的image:
size的单位是MB,所以这个qqq image的大小为1GB。要是这条命令一直没有响应,试着重启一下ceph/demo容器docker restart ceph
,说了这不适合用于生产环境…运行下列命令可以看到ggg的pool中的所有image和查看qqq image的详细信息:
接下来要把qqq image映射到块设备中,可能需要root权限:
运行这个命令就可以看到映射到哪个设备去了,我的是/dev/rbd1
:
格式化之:
然后就可以加载了!里面应该有一个lost+found
的文件夹:
还原环境
最后把我们的环境恢复回去:卸载->解除映射->删除image->删除pool:
如果严格按照上面的命令,你应该会在最后一步得到一个错误提示:Error EPERM: WARNING: this will PERMANENTLY DESTROY all data stored in pool ggg. If you are ABSOLUTELY CERTAIN that is what you want, pass the pool name twice, followed by –yes-i-really-really-mean-it.
删掉pool,里面的数据就真没有啦,所以要谨慎,除了pool名写两遍(重要的事情不应该是三遍么),还得加上--yes-i-really-really-mean-it
的免责声明:
最后删掉ceph容器(如果你愿意,还有ceph/demo镜像),就当一切都没有发生过:
悄悄的我走了,正如我悄悄的来;我挥一挥衣袖,不带走一个byte。