11月初有幸去参加了在香港举行的OpenStack Summit,在体验了祖国特别行政区的繁华同时,也体验了ceph如火如荼的势头。ceph提出的统一存储(united storage:file system、block storage、object storage)开始被大家广泛认可。而glusterfs同样也是一款很出色的分布式文件系统,很多公司在生产环境中已经应用了glusterfs。
最近正在对本篇文章主要带大家简单熟悉下ceph和gluster的部署并使用fio对两款文件系统性能进行测试。
1.ceph
下面先来说一下ceph的部署,部署坏境为CentOS 6.4,ceph官方推出了一个部署工具ceph-deploy,我是使用这个来部署ceph的。
如上图所示,我们这次集群规模以3台服务器为例,并额外选取一台作为管理节点。
1)在管理节点上生成公钥,并在管理节点上建立到3台存储节点的信任关系。
1 2 3 4 |
ssh-keygen ssh-copy-id ceph-node1 ssh-copy-id ceph-node2 ssh-copy-id ceph-node3 |
2)添加源,在/etc/yum.repos.d/目录中创建ceph.repo文件,并写入如下内容。
1 2 3 4 5 6 7 |
[ceph-noarch] name=Ceph noarch packages baseurl=http://ceph.com/rpm-{ceph-stable-release}/{distro}/noarch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc |
其中{}部分需要替换,目前ceph最新版本v0.72.1叫emperor,管理节点系统为centos 6.4。因此修改为的源文件如下所示。
1 2 3 4 5 6 7 |
[ceph-noarch] name=Ceph noarch packages baseurl=http://ceph.com/rpm-emperor/el6/noarch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc |
3)更新源并安装
1 |
yum update && yum install ceph-deploy |
4)搭建存储集群,要搭建集群的架构如下图所示。
在搭建集群过程中会生成一些文件,因此我们最好先创建个文件夹,在文件夹当中进行操作。
1 |
ceph-deploy new {ceph-node} |
这里new后面接mon节点主机名称,我们这里在每个存储节点上都运行mon进程,因此执行如下命令。
1 |
ceph-deploy new ceph-node1 ceph-node2 ceph-node3 |
成功执行该命令后,将会生成集群的配置文件,keyring文件以及日志文件。
接下来,将安装ceph。
1 |
ceph-deploy install ceph-node1 ceph-node2 ceph-node3 |
安装ceph monitor。
1 |
ceph-deploy mon create ceph-node1 ceph-node2 ceph-node3 |
收集各个节点的keyring文件。
1 |
ceph-deploy gatherkeys ceph-node1 ceph-node2 ceph-node3 |
当成功执行上面命令的时候,在本地目录下会生成如下文件:
1 2 3 |
ceph.client.admin.keyring ceph.bootstrap-osd.keyring ceph.bootstrap-mds.keyring |
添加3个OSD,使用过程中我把磁盘做成逻辑卷挂载在/opt/ceph目录下。在管理节点上执行如下命令。
1 |
ceph-deploy osd prepare ceph-node1:/opt/ceph ceph-node2:/opt/ceph ceph-node3:/opt/ceph |
最后,激活这些OSD。
1 |
ceph-deploy osd active ceph-node1:/opt/ceph ceph-node2:/opt/ceph ceph-node3:/opt/ceph |
至此,ceph共享存储集群就搭建完成。由于我们要使用ceph文件系统,因此我们至少还需要一台metadata服务器。在管理节点上执行如下命令创建一个metadata服务器。
1 |
ceph-deploy mds create ceph-node1 |
官方建议目前即使在生产环境中只是用一台metadata服务器也是可以的,但并不是不可以使用多台metadata服务器,只不过是那种情况下将缺少商业支持。
接下来,我将挂载ceph文件系统到我们的服务器上,在该服务器上安装ceph-fuse。
1 |
yum install ceph-fuse |
安装好ceph-fuse后,执行如下命令进行挂载。如果要使用ceph做OpenStack临时存储的话,就将ceph文件系统挂载到/var/lib/nova/instances目录下即可,这里我们测试就将ceph挂载到/mnt/ceph目录下。
1 |
ceph-fuse -m {ip-address-of-monitor}:6789 /mnt/ceph |
2.glusterfs
在搭建glusterfs的时候出现些问题,给出要搭建glusterfs的同学如下建议。
1)在搭建过程中最好使用节点IP;
2)各个节点版本必须一致,目前最新版为3.4.1。
为了保证各个节点glusterfs版本一致,我们先更新各个节点源。
1 2 3 |
cd /etc/yum.repo.d/ wget http://download.gluster.org/pub/gluster/glusterfs/3.4/3.4.1/CentOS/glusterfs-epel.repo yum update |
如上图所示,我们也选择三个存储节点组成glusterfs集群。在glusterfs-node01上安装glusterfs-node01。
1 2 |
yum -y install glusterfs-server /etc/init.d/glusterd start |
glusterfs-node02和glusterfs-node03同样执行如上操作。
1)添加节点,在 glusterfs-node01上进行添加节点。
1 2 3 4 |
gluster peer probe {ip-address-of-glusterfs-node02} gluster peer probe {ip-address-of-glusterfs-node03} #查看节点情况 gluster peer status |
2)创建卷,为了测试和上面ceph类似,我们将逻辑卷挂载到/opt/glusterfs上。
1 2 3 |
gluster volume create shared_vol replica 3 {ip-address-of-glusterfs-node01}:/opt/glusterfs {ip-address-of-glusterfs-node02}:/opt/glusterfs {ip-address-of-glusterfs-node03}:/opt/glusterfs #查看卷状态 gluster volume info |
我们这里设置的每份数据存3份。
3)启动卷。
1 |
gluster volume start shared_vol |
至此服务器端部署完成,下面来部署客户端。
4)安装客户端程序,这里要注意是否与服务器端版本一致。
1 |
yum -y install glusterfs-client |
5)挂载目录
1 |
mount.glusterfs {ip-address-of-glusterfs-node01}:/shared_vol /mnt/glusterfs |
至此ceph和glusterfs部署全部完成,其中ceph参考了官方文档,glusterfs参考了陈沙克老师的文章,在此感谢原作者。
3.性能测试
看了些文章,都说ceph的文件系统性能并不是很好,笔者使用fio对ceph和glusterfs文件系统的读写进行能简单的测试。
使用命令如下:
1 |
fio --direct=1 --rw=rw --bs=1m --size=5g --numjobs=64 --group_reporting --name=test-rw |
ceph所得结果如下:
1 2 3 |
#ceph READ: io=166400MB, aggrb=8680KB/s, minb=8680KB/s, maxb=8680KB/s, mint=19630496msec, maxt=19630496msec WRITE: io=161280MB, aggrb=8412KB/s, minb=8412KB/s, maxb=8412KB/s, mint=19630496msec, maxt=19630496msec |
glusterfs所得结果如下:
1 2 3 |
#glusterfs READ: io=166400MB, aggrb=35152KB/s, minb=35152KB/s, maxb=35152KB/s, mint=4847257msec, maxt=4847257msec WRITE: io=161280MB, aggrb=34070KB/s, minb=34070KB/s, maxb=34070KB/s, mint=4847257msec, maxt=4847257msec |
可以看得出ceph的文件系统读写性能相比glusterfs,还是相差很多。
感觉目前最好的解决方案是文件系统用glusterfs,块存储用ceph,对象存储用swift,但是这么一来ceph的统一存储也荡然无存了,
最后欢迎在生产环境中使用ceph或者gluster的同学给些意见或者一起讨论。
13 Comments
棒!
文中仅仅是用了文件系统挂载的方式,对于块存储如何呢?GlusterFS能够支持块存储么?
glusterfs不支持块设备存储的
GlusterFS和Swift也可以集成在一起了
你这里挂载的是Ceph的fuse文件系统,可以尝试下挂载cephfs,再进行对比测试。
好的,后续会对ceph和glusterfs做一次更为详尽的测试,看来大家对ceph和glusterfs都很关注啊
想了解下测试环境,测试环境是FIL的闪存卡嘛?网络是万兆吗?glusterfs针对4K小文件随机读写的iometer数值?
glusterfs 对单文件读写还是很快的,但是大量散文件读写和做列表的时候就很慢了。文件存储的优势其实不比ceph明显啊
HI,最近也在研究ceph,打算用ceph来搭建本地存储,但是目前遇到一个问题:
使用三台物理机,在每个机器上都开启了mon osd MDS服务,并且同时将三台机器作为客户端挂载,部署的时候没有任何的问题,但是在运行一段时间后,就会出现物理机死机的情况,查看系统日志显示:libceph osd [IP]socket error。不知道你有没有人像我这样尝试过,出现类似的问题,另外本人还想同时使用RBD和CEPHFS。
regards!
我们在简单测试后,觉得glusterfs性能好些,后续使用glusterfs做的共享文件系统,用来存储虚拟机中的内容,ceph没有长时间的使用,不过glusterfs我们在使用过程中发生过文件系统只读的错误
目前推测出是由于网络连接不畅导致。
Lustre完爆glusterFS
READ: io=17472MB, aggrb=81667KB/s, minb=81667KB/s, maxb=81667KB/s, mint=219075msec, maxt=219075msec
WRITE: io=15296MB, aggrb=71496KB/s, minb=71496KB/s, maxb=71496KB/s, mint=219075msec, maxt=219075msec
我在使用glusterfs的过程中碰到一些鸡肋的问题,当在大压力的情况下client端会经常出现Transport endpoint,不知道你们那边是否有这种情况呢