当前位置: 首页 > 工具软件 > COSBench > 使用案例 >

Ceph+cosbench简介及环境搭建

姚煜
2023-12-01

Ceph+cosbench简介及环境搭建

一.Ceph简述

1.Ceph简介

Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。ceph 的统一体现在可以提供文件系统、块存储和对象存储,分布式体现在可以动态扩展。在国内一些公司的云环境中,通常会采用 ceph 作为openstack 的唯一后端存储来提高数据转发效率。Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。

2.Ceph特点

2.1高性能

  1. 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。

2.考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。

  1. 能够支持上千个存储节点的规模,支持TB到PB级的数据。

高可用性

  1. 副本数可以灵活控制。

  2. 支持故障域分隔,数据强一致性。

  3. 多种故障场景自动进行修复自愈。

  4. 没有单点故障,自动管理。

2.2高可扩展性

  1. 去中心化。

  2. 扩展灵活。

  3. 随着节点增加而线性增长。

2.3特性丰富

  1. 支持三种存储接口:块存储、文件存储、对象存储。

  2. 支持自定义接口,支持多种语言驱动。

3.Ceph结构介绍

3.1.Ceph架构图

Ceph系统可以大致划分为两大部分,客户端和服务端,客户端包含了四种接口,服务端包含了元数据服务器,对象存储集群和集群监视器

图:ceph物理部署架构图

客户端

面向用户的使用提供接口,目前有三种存储方式接口提供,对象存储 RGW(rados gateway)、块存储 RBD(rados
block device) 和文件存储 CephFS。

块存储和文件存储都是基于对象存储来进行封装实现的,块存储和文件存储的底层还是对象存储。

1.对象存储(RGW:RADOS gateway)

Ceph 对象存储服务提供了 REST 风格的 API ,它有与 Amazon S3 和 OpenStack
Swift 兼容的接口。也就是通常意义的键值存储,其接口就是简单的GET、PUT、DEL和其他扩展;

RADOSGW是一套基于当前流行的RESTFUL协议的网关,并且兼容S3和Swift。

2.块存储(RBD:RADOS block device)

RBD通过Linux内核客户端和QEMU/KVM驱动来提供一个分布式的块设备。

RBD 是通过librbd库对应用提供块存储,主要面向云平台的虚拟机提供虚拟磁盘;RBD类似传统的SAN存储,提供数据块级别的访问;

目前 RBD 提供了两个接口,一种是直接在用户态实现,
通过 QEMU Driver 供 KVM 虚拟机使用。 另一种是在操作系统内核态实现了一个内核模块。通过该模块可以把块设备映射给物理主机,由物理主机直接访问。

3.文件存储 (CEPH FS)

CEPH FS通过Linux内核客户端和FUSE来提供一个兼容POSIX的文件系统。

Ceph 文件系统服务提供了兼容 POSIX 的文件系统,可以直接挂载为用户空间文件系统。它跟传统的文件系统如Ext4是一个类型,区别在于分布式存储提供了并行化的能力;

4.原生接口

除了以上3种存储接口,
还可以直接使用 librados 的原生接口,直接和RADOS通信;

原生接口的优点是是它直接和和应用代码集成,操作文件很方便;但它的问题是它不会主动为上传的数据分片;一个1G的大对象上传,落到 Ceph 的存储磁盘上就是1G的文件;

而以上三个接口是具有分片功能(即:条带化 file-striping)

服务端

元数据服务器

主要是实现集群元数据的分布式管理

对象存储集群

因为ceph的三种存储接口都是通过对象存储实现的,对象存储集群将数据和元数据作为对象存储,执行其他关键职能。

对象存储集群的核心组件是RADOS
(Reliable, AutonomicDistributed Object Store)。

集群监视器

执行监视功能,保证集群的健康运行和告警

3.2. Ceph组件介绍

服务端 RADOS 集群主要由两种节点组成:一种是为数众多的、负责完成数据存储和维护功能的OSD(Object Storage Device),另一种则是若干个负责完成系统状态检测和维护的monitor。

Ceph Monitor

Monitor: 集群提供了整个存储系统的节点信息等全局的配置信息,通过 Paxos 算法保持数据的一致性。

由该英文名字我们可以知道它是一个监视器,负责监视Ceph集群,维护Ceph集群的健康状态,同时维护着Ceph集群中的各种Map图,比如OSD Map、Monitor Map、PG Map和CRUSH Map,这些Map统称为Cluster Map,Cluster Map是RADOS的关键数据结构,管理集群中的所有成员、关系、属性等信息以及数据的分发,比如当用户需要存储数据到Ceph集群时,OSD需要先通过Monitor获取最新的Map图,然后根据Map图和object id等计算出数据最终存储的位置。

Mon节点监控着整个ceph集群的状态信息,监听于tcp的6789端口。每一个ceph集群中至少要有一个Mon节点,官方推荐每个集群至少部署三台。Mon节点中保存了最新的版本集群数据分布图(cluster map)的主副本。客户端在使用时,需要挂载mon节点的6789端口,下载最新的cluster map,通过crush算法获得集群中各osd的IP地址,然后再与osd节点直接建立连接来传输数据。所以对于ceph来说,并不需要有集中式的主节点用于计算与寻址,客户端分摊了这部分工作。而且客户端也可以直接和osd通信,省去了中间代理服务器的额外开销。

Mon节点之间使用Paxos算法来保持各节点cluster map的一致性;各mon节点的功能总体上是一样的,相互间的关系可以被简单理解为主备关系。如果主mon节点损坏,其他mon存活节点超过半数时,集群还可以正常运行。当故障mon节点恢复时,会主动向其他mon节点拉取最新的cluster map。

Mon节点并不会主动轮询各个osd的当前状态,相反,osd只有在一些特殊情况才会上报自己的信息,平常只会简单的发送心跳。特殊情况包括:1、新的OSD被加入集群;2、某个OSD发现自身或其他OSD发生异常。Mon节点在收到这些上报信息时,则会更新cluster map信息并加以扩散。

cluster map信息是以异步且lazy的形式扩散的。monitor并不会在每一次cluster map版本更新后都将新版本广播至全体OSD,而是在有OSD向自己上报信息时,将更新回复给对方。类似的,各个OSD也是在和其他OSD通信时,如果发现对方的osd中持有的cluster map版本较低,则把自己更新的版本发送给对方。

Ceph OSD

OSD的英文全称是Object Storage Device,它的主要功能是存储数据、复制数据、平衡数据、恢复数据等,与其它OSD间进行心跳检查等,并将一些变化情况上报给Ceph
Monitor。一般情况下一块硬盘对应一个OSD,由OSD来对硬盘存储进行管理,当然一个分区也可以成为一个OSD。

Ceph OSD的架构实现由物理磁盘驱动器、Linux文件系统和Ceph OSD服务组成,对于Ceph OSD Deamon而言,Linux文件系统显性的支持了其拓展性,一般Linux文件系统有好几种,比如有BTRFS、XFS、Ext4等,BTRFS虽然有很多优点特性,但现在还没达到生产环境所需的稳定性,一般比较推荐使用XFS。

在ceph中,每一个osd进程都可称作是一个osd节点,也就是说,每台存储服务器上可能包含了众多的osd节点,每个osd节点监听不同的端口,类似于在同一台服务器上跑多个mysql或redis。每个osd节点可以设置一个目录作为实际存储区域,也可以是一个分区,一整块硬盘。

Ceph MDS(可选)

全称是Ceph MetaData Server,Mds是ceph集群中的元数据服务器,而通常它都不是必须的,因为只有在使用cephfs的时候才需要它,对象存储和块存储设备是不需要使用该服务的,而目前云计算中用的更广泛的是另外两种存储方式。

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

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

  1. Ceph与云平台的关系

Ceph已经成为OpenStack后端存储标配,OpenStack作为IaaS系统,涉及到存储的部分主要是块存储服务模块、对象存储服务模块、镜像管理模块和计算服务模块,对应为其中的Cinder、Swift、Glance和Nova四个项目。

1.Ceph RBD块存储是以独立卷的方式挂接到OpenStcak
Cinder模块,主要用作数据盘,这种方式主要通过Cinder
Driver实现,删除虚拟机时卷依然存在。

2.Nova对接Ceph时,Ceph RBD块存储卷需要与虚拟机绑定,所以删除虚拟机时卷也删除,一般用作启动盘。

3.Ceph也可以和Glance对接用于镜像卷。

4.Keystone作为OpenStack对象Swift的认证模块,支持Ceph通过RADOSGW网关认证,给OpenStcak提供Swift存储服务。

Ceph做Openstack后端

5.安装部署Ceph

安装部署

1.修改主机名

hostnamectl set-hostname ceph-admin

hostnamectl set-hostname ceph-node1

hostnamectl set-hostname ceph-node2

hostnamectl set-hostname ceph-node3

2.修改hosts :vi
/etc/hosts

192.168.86.128 ceph-admin

192.168.86.129 ceph-node1

192.168.86.130 ceph-node2

192.168.86.131 ceph-node3

3、关闭防火墙

4、安装ntp

yum install ntp ntpdate ntp-doc -y

service ntpd start

5、更改Yum源

yum clean all

mkdir /mnt/bak

mv /etc/yum.repos.d/* /mnt/bak/

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

vim /etc/yum.repos.d/ceph.repo

[ceph]

name=ceph

baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/

gpgcheck=0

priority =1

[ceph-noarch]

name=cephnoarch

baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/

gpgcheck=0

priority =1

[ceph-source]

name=Ceph source packages

baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS

gpgcheck=0

priority=1

6、创建用户

useradd -d /home/cephuser -m cephuser

echo “cephuser”|passwd --stdin
cephuser

echo “cephuser ALL = (root)
NOPASSWD:ALL” | sudo tee /etc/sudoers.d/cephuser

chmod 0440 /etc/sudoers.d/cephuser

sed -i s’/Defaults requiretty/#Defaults
requiretty’/g /etc/sudoers

chmod 777 /dev/null

su - cephuser

ssh-keygen -t rsa

分发到各个node

ssh-copy-id cephuser@192.168.86.128

ssh-copy-id cephuser@192.168.86.129

ssh-copy-id cephuser@192.168.86.130

ssh-copy-id cephuser@192.168.86.131

7、格式化磁盘

sudo parted -s /dev/vdb mklabel gpt mkpart
primary xfs 0% 100%

sudo mkfs.xfs /dev/sdb -f

//查看磁盘格式; sudo blkid -o value -s TYPE /dev/sdb

8、在ceph-admin上安装

sudo yum update -y && sudo yum
install ceph-deploy -y

mkdir cluster

cd cluster

ceph-deploy new ceph-admin

vi /home/cephuser/cluster/ceph.conf

[global]

fsid = b01095b8-d958-406f-b0fb-308ba5ab64e3

mon_initial_members = ceph-admin

mon_host = 192.168.86.128

auth_cluster_required = cephx

auth_service_required = cephx

auth_client_required = cephx

public network = 192.168.86.128/24

osd pool default size = 3

9、开始安装

ceph-deploy install ceph-admin ceph-node1
ceph-node2 ceph-node3

  1. 创建key

cd /home/cephuser/cluster

ceph-deploy mon create-initial

ceph-deploy gatherkeys ceph-admin

11、查看节点可用磁盘

ceph-deploy disk list ceph-node1 ceph-node2
ceph-node3

删除磁盘上所有分区:

ceph-deploy disk zap ceph-node1:/dev/sdb
ceph-node2:/dev/sdb ceph-node3:/dev/sdb

准备OSD:

ceph-deploy osd prepare ceph-node1:/dev/sdb
ceph-node2:/dev/sdb ceph-node3:/dev/sdb

激活OSD:

ceph-deploy osd activate
ceph-node1:/dev/sdb1 ceph-node2:/dev/sdb1 ceph-node3:/dev/sdb1

12、拷贝密钥

ceph-deploy admin ceph-admin ceph-node1
ceph-node2 ceph-node3

sudo chmod 644
/etc/ceph/ceph.client.admin.keyring

以cephFS方式访问

先查看管理节点状态,默认是没有管理节点的。

[cephuser@ceph-admin ~]$ ceph mds stat

e1:

创建管理节点(ceph-admin作为管理节点)。

需要注意:如果不创建mds管理节点,client客户端将不能正常挂载到ceph集群!!

[cephuser@ceph-admin ~]
cd cluster/

[cephuser@ceph-admin cluster]$ ceph-deploy
mds create ceph-admin

再次查看管理节点状态,发现已经在启动中

[cephuser@ceph-admin cluster]$ ceph mds
stat

e2:, 1 up:standby

[cephuser@ceph-admin cluster] ps -ef|grep
cluster|grep ceph-mds

ceph 29093 1 0 12:46 ? 00:00:00
/usr/bin/ceph-mds -f --cluster ceph --id ceph-admin --setuser ceph –set group
ceph

创建pool,pool是ceph存储数据时的逻辑分区,它起到namespace的作用

[cephuser@ceph-admin cluster]$ ceph osd
lspools #先查看pool 0 rbd,

新创建的ceph集群只有rdb一个pool。这时需要创建一个新的pool

[cephuser@ceph-admin cluster]$ ceph osd
pool create cephfs_data 10 #后面的数字是PG的数量

pool ‘cephfs_data’ created

[cephuser@ceph-admin cluster]$ ceph osd
pool create cephfs_metadata 10 #创建pool的元数据

pool ‘cephfs_metadata’ created

[cephuser@ceph-admin cluster]$ ceph fs new
myceph cephfs_metadata cephfs_data

new fs with metadata pool 2 and data pool 1

再次查看pool状态

[cephuser@ceph-admin cluster]$ ceph osd
lspools

0 rbd,1 cephfs_data,2 cephfs_metadata,

检查mds管理节点状态

[cephuser@ceph-admin cluster]$ ceph mds
stat

e5: 1/1/1 up {0=ceph-admin=up:active}

查看ceph集群状态

[cephuser@ceph-admin cluster]$ sudo ceph -s

cluster 33bfa421-8a3b-40fa-9f14-791efca9eb96

health HEALTH_OK

monmap e1: 1 mons at
{ceph-admin=192.168.10.220:6789/0}

election epoch 3, quorum 0 ceph-admin

fsmap e5: 1/1/1 up {0=ceph-admin=up:active}
#多了此行状态

osdmap e19: 3 osds: 3 up, 3 in

flags sortbitwise,require_jewel_osds

pgmap v48: 84 pgs, 3 pools, 2068 bytes
data, 20 objects

101 MB used, 45945 MB / 46046 MB avail

84 active+clean

查看ceph集群端口

[cephuser@ceph-admin cluster]$ sudo lsof
-i:6789

COMMAND PID USER FD TYPE DEVICE SIZE/OFF
NODE NAME

ceph-mon 28190 ceph 10u IPv4 70217 0t0 TCP
ceph-admin:smc-https (LISTEN)

ceph-mon 28190 ceph 19u IPv4 70537 0t0 TCP
ceph-admin:smc-https->ceph-node1:41308 (ESTABLISHED)

ceph-mon 28190 ceph 20u IPv4 70560 0t0 TCP
ceph-admin:smc-https->ceph-node2:48516 (ESTABLISHED)

ceph-mon 28190 ceph 21u IPv4 70583 0t0 TCP
ceph-admin:smc-https->ceph-node3:44948 (ESTABLISHED)

ceph-mon 28190 ceph 22u IPv4 72643 0t0 TCP
ceph-admin:smc-https->ceph-admin:51474 (ESTABLISHED)

ceph-mds 29093 ceph 8u IPv4 72642 0t0 TCP
ceph-admin:51474->ceph-admin:smc-https (ESTABLISHED)

安装ceph-fuse(这里的客户机是centos6系统)

[root@centos6-02~]#rpm-Uvh

https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

[root@centos6-02 ~]# yum install -y
ceph-fuse

创建挂载目录

[root@centos6-02 ~]# mkdir /cephfs

复制配置文件

将ceph配置文件ceph.conf从管理节点copy到client节点(192.168.10.220为管理节点)

[root@centos6-02 ~]# rsync -e “ssh
-p22” -avpgolr root@192.168.10.220:/etc/ceph/ceph.conf /etc/ceph/

或者

[root@centos6-02~]#rsync-e"ssh-p22"-avpgolr
root@192.168.10.220:/home/cephuser/cluster/ceph.conf /etc/ceph/ #两个路径下的文件内容一样

复制密钥

将ceph的ceph.client.admin.keyring从管理节点copy到client节点

[root@centos6-02 ~]# rsync -e “ssh
-p22” -avpgolr root@192.168.10.220:/etc/ceph/ceph.client.admin.keyring
/etc/ceph/

或者

[root@centos6-02 ~]#

rsync-e"ssh-p22"-avpgolr root@192.168.10.220:/home/cephuser/cluster/ceph.client.admin.keyring
/etc/ceph/

查看ceph授权

[root@centos6-02 ~]# ceph auth list

installed auth entries:

mds.ceph-admin

key:
AQAZZxdbH6uAOBAABttpSmPt6BXNtTJwZDpSJg==

caps: [mds] allow

caps: [mon] allow profile mds

caps: [osd] allow rwx

osd.0

key:
AQCuWBdbV3TlBBAA4xsAE4QsFQ6vAp+7pIFEHA==

caps: [mon] allow profile osd

caps: [osd] allow *

osd.1

key:
AQC6WBdbakBaMxAAsUllVWdttlLzEI5VNd/41w==

caps: [mon] allow profile osd

caps: [osd] allow *

osd.2

key:
AQDJWBdbz6zNNhAATwzL2FqPKNY1IvQDmzyOSg==

caps: [mon] allow profile osd

caps: [osd] allow *

client.admin

key: AQCNWBdbf1QxAhAAkryP+OFy6wGnKR8lfYDkUA==

caps: [mds] allow *

caps: [mon] allow *

caps: [osd] allow *

client.bootstrap-mds

key:
AQCNWBdbnjLILhAAT1hKtLEzkCrhDuTLjdCJig==

caps: [mon] allow profile bootstrap-mds

client.bootstrap-mgr

key:
AQCOWBdbmxEANBAAiTMJeyEuSverXAyOrwodMQ==

caps: [mon] allow profile bootstrap-mgr

client.bootstrap-osd

key:
AQCNWBdbiO1bERAARLZaYdY58KLMi4oyKmug4Q==

caps: [mon] allow profile bootstrap-osd

client.bootstrap-rgw

key:
AQCNWBdboBLXIBAAVTsD2TPJhVSRY2E9G7eLzQ==

caps: [mon] allow profile bootstrap-rgw

将ceph集群存储挂载到客户机的/cephfs目录下

[root@centos6-02 ~]# ceph-fuse -m
192.168.10.220:6789 /cephfs

2018-06-06 14:28:54.149796 7f8d5c256760 -1
init, newargv = 0x4273580 newargc=11

ceph-fuse[16107]: starting ceph client

ceph-fuse[16107]: starting fuse

[root@centos6-02 ~]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/vg_centos602-lv_root

50G 3.5G 44G 8% /

tmpfs 1.9G 0 1.9G 0% /dev/shm

/dev/vda1 477M 41M 412M 9% /boot

/dev/mapper/vg_centos602-lv_home

45G 52M 43G 1% /home

/dev/vdb1 20G 5.1G 15G 26% /data/osd1

ceph-fuse 45G 100M 45G 1% /cephfs

由上面可知,已经成功挂载了ceph存储,三个osd节点,每个节点有15G(在节点上通过"lsblk"命令可以查看ceph data分区大小),一共45G

取消ceph存储的挂载

[root@centos6-02 ~]# umount /cephfs

二.使用COSBench工具对ceph进行压力测试

1.COSBench安装(测试Swift时候曾写过安装步骤,此安装步骤跳过)

COSBench是Intel团队基于java开发,对云存储的测试工具,全称是Cloud object Storage Bench,同所有的性能测试工具一样,COSBench也分控制台和发起请求的driver,且driver可以分布式部署。可以支持swift、s3、Openstack等接口

下载COSBench工具

下载地址为:https://github.com/intel-cloud/cosbench

2. 脚本配置

有很多模板的例子,在conf目录下,如librados-config-sample.xml、s3-config-sample.xml

这里只测试s3的接口,所以先关注s3的相关配置

配置的说明如下(参考userGuide.pdf)

对于s3接口来说,一般有下面几种work type: init、prepare、dispose、cleanup,具体可以参考demo文档

这里给出几个示例配置文档:

创建buckets

  •   - -        

获取数据

<?xml version="1.0" encoding="UTF-8" ?> -   - - -          

这里的workers表示并发数,totalOps表示总的操作数,driver为不同的压力机器,根据userGuide文档,里面有很多参数可选

上传数据

<?xml version="1.0" encoding="UTF-8" ?> -   - - -          

3.查看结果

下图为测试完成后的一个结果截图

从图中我们可以看到与任务一个压力工具都是的指标

1、Avg-ResTime  响应平均时间

2、Avg-ProcTime 平均处理时间

3、Throughput:吞吐量,也就是我们常说的TPS

4、bandwith:带宽

5、succ-ratio :成功数

 类似资料: