
【作者】潘猛,成都农商银行系统工程师,从业18年。在网络、存储、系统、云计算等领域都有10年以上工作经验,熟悉数据库、大数据、python、zabbix、ansible等。目前主要从事项目管理、方案设计、产品选型、POC测试等运维工作。热衷处理各种系统故障。
1.背景和需求
近年来,我行联机交易业务量和数据量随着移动支付的发展而快速增长,手机银行、网银等互联网金融业务的创新,使得业务种类更加灵活、多样,人工智能、物联网等创新技术与金融行业的融合,使得业务场景更加敏捷、丰富,同时也会产生大量场景化、碎片化、移动化的非结构数据。业务品种、业务量、业务数据爆炸式的增长,给IT系统基础架构带来了很大的压力,我行积极在云化、分布式存储、开源数据库及新型数据库等基础架构方面进行相关调研和尝试,为建立灵活开放、高效协同、安全稳定的IT架构体系做技术储备。
Ceph是当前非常流行的开源分布式存储系统,可以在单一平台上提供对象、块和文件系统存储。目前我行已经在开发测试中使用了Ceph作为开发测试平台的存储,主要为虚拟化平台提供Datastore,几乎所有系统的开发测试应用及数据库均有使用,主要为rbd+iscsi的方式。容器云平台目前也已经调研过多家商用平台,最后选定业内排名第一的OpenShift,计划未来一到两年,基于OpenShift容器云平台在开发测试环境完成上线。大部分新建系统,在条件具备的情况下,都会在容器云上尝试部署。部分具备条件的现有系统也会尝试向容器云迁移,例如直销银行、全媒体等。
OpenShift和Ceph的使用场景在容器云环境中具有相当的代表性,也是本次测试选择的组合,我们希望可以验证容器云平台使用Ceph相关接口和场景,并且对容器和物理机对接分布式块存储做性能对比。
2.测试方案设计
测试环境的设计,我们需要构建一个OpenShift容器云平台,一套Ceph分布式存储集群, OpenShift容器云平台使用cephfs和rbd来作为存储,进行功能验证和性能测试。
硬件最终选用浪潮商用机器K1 Power Linux 服务器FP5280G2和FP5466G2共5台,1台FP5280G2部署OpenShift集群,1台FP5280G2 用作客户端压力机,3台FP5466G2用于部署Ceph 分布式存储集群。
测试内容中功能主要是cephfs和rbd的在线扩容、快照和克隆,性能主要为4k 读、4k写、4k读写(写20%)。
3.测试环境
3.1.软硬件环境
K1 Power Linux 机型 | 名称 | cpu | 内存 | 网络 | IP |
FP5280G2 (创建7个虚机部署OCP 集群) | OCP Console | 16C | 16G | 1Gb | 10.152.20.11 |
OCP Master01 | 16C | 64G | 1Gb | 10.152.20.13 | |
OCP Master02 | 16C | 64G | 1Gb | 10.152.20.14 | |
OCP Master03 | 16C | 64G | 1Gb | 10.152.20.15 | |
OCP Worker01 | 16C | 64G | 1Gb | 10.152.20.16 | |
OCP Worker02 | 16C | 64G | 1Gb | 10.152.20.17 | |
OCP Worker03 | 16C | 64G | 1Gb | 10.152.20.18 | |
FP5466G2 | Ceph-node1 | 128C | 256G | 10Gb | 10.152.20.50 |
FP5466G2 | Ceph-node2 | 128C | 256G | 10Gb | 10.152.20.51 |
FP5466G2 | Ceph-node3 | 128C | 256G | 10Gb | 10.152.20.52 |
FP5280G2 | 压力测试机 | 128C | 128G | 1Gb | 10.152.15.42 |
OCP及Ceph软件版本:
软件 | 版本号 |
Ceph | 14.2.13 |
OCP | 4.3 |
OpenShift支持的存储类型接口详见附表1
Ceph集群配置
名称 | OSD | MGR | MDS | MON |
Ceph-node1 | 0-9 | y | 30 | y |
Ceph-node2 | 10-19 | y | 31 | y |
Ceph-node3 | 20-29 | y | 32 | y |
3.2 环境配置
RBD:rbdpool
CephFS:hddpool metadatapool
Ceph集群public网络:10.152.20.0/24
cluster 网络 192.168.10.0/24
OCP通过10.152.20.0/24网段与 Ceph集群通信
3.3 Ceph-CSI搭建
下载相关镜像
image | 下载地址 | 软件版本 |
openshifttests/csi-provisioner:v1.0.1-ppc64le | https://hub.docker.com/r/openshifttests/csi-provisioner/tags | v1.0.1-0-g9a258a0 |
svenkatdock/csi-resizer:v4.3 | https://hub.docker.com/r/svenkatdock/csi-resizer/tags | 21e6fdd04f7358199dbde8e1d0da15809d181e53 |
openshifttests/csi-attacher:v1.0.1 | https://hub.docker.com/r/openshifttests/csi-attacher/tags | v2.0.0-27-gc3bb7f0b |
openshifttests/csi-snapshotter:v1.0.1 | https://hub.docker.com/r/openshifttests/csi-snapshotter/tags | v2.0.0-rc1-28-g89889f00-dirty |
openshifttests/csi-node-driver-registrar:v1.0.2-ppc64le | https://hub.docker.com/r/openshifttests/csi-node-driver-registrar/tags | v1.0.2-0-g9f37716 |
下载软件制作镜像
image | 制作方法 |
ceph/daemon:HEAD-luminous-centos-7-ppc64le | giit clone https://github.com/ceph/ceph-container.git |
cd ceph-container | |
git checkout -b 5.0 remotes/origin/stable-5.0 | |
git apply ceph5.0.patch | |
make FLAVORS=nautilus,centos,7 build | |
ceph-csi | git clone https://github.com/ceph/ceph-csi.git |
cd ceph-csi | |
git checkout -b 3.1 remotes/origin/release-v3. | |
git apply cephcsi.patch | |
修改build.env文件中https_proxy的翻墙代理 | |
make image-cephcsi BASE_IMAGE=ceph/daemon:5.0-nautilus-centos-7-ppc64le | |
csi-provisioner | git clone https://github.com/kubernetes-csi/external-provisioner.git |
git checkout -b 1.6 remotes/origin/release-1.6 | |
cd external-provisioner | |
make | |
docker build -t quay.io/k8scsi/csi-provisioner:v1.6.0 . | |
csi-attacher | git clone //github.com/kubernetes-csi/external-attacher.git |
cd external-attacher | |
git checkout -b 2.1 remotes/origin/release-2.1 | |
make | |
docker build -t quay.io/k8scsi/csi-attacher:v2.1.1 . | |
csi-resizer | git clone -b https://github.com/kubernetes-csi/external-resizer.git |
cd csi-resizer | |
git checkout -b 0.5 remotes/origin/release-0.5 make | |
docker build -t quay.io/k8scsi/csi-resizer:v0.5.0 . | |
external-snapshotter | git clone https://github.com/kubernetes-csi/external-snapshotter.git ( |
cd external-snapshotter | |
git checkout -b 2.1 remotes/origin/release-2.1 make | |
docker build -t quay.io/k8scsi/csi-snapshotter:v2.1.0 -f cmd/csi-snapshotter/Dockerfile . | |
git clone https://github.com/kubernetes-csi/node-driver-registrar.git | |
node-driver-registrar | cd node-driver-registrar |
git checkout -b 1.3.1 remotes/origin/release-1.3 make | |
docker build -t quay.io/k8scsi/csi-node-driver-registrar:v1.3.0 . |
操作步骤请参考以下文档:
https://github.com/powerlsr/ocp-ceph/blob/main/ceph-csi%E6%90%AD%E5%BB%BA.txt
4.功能测试
4.1 CephFS快照
操作步骤请参考以下文档:
https://github.com/powerlsr/ocp-ceph/blob/main/%E5%88%9B%E5%BB%BAcephfs%E5%BF%AB%E7%85%A7.txt
查看ceph上的快照
# oc get pvc cephfs-pvc-test-1
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
cephfs-pvc-test-1 Bound pvc-fe16865e-73e5-41a0-b25f-f689689325a9 6Gi RWO csi-cephfs-sc 3d8h
# oc get pv pvc-fe16865e-73e5-41a0-b25f-f689689325a9 --template {{.spec.csi.volumeAttributes.subvolumeName}}
csi-vol-ff6a2fd2-48f0-11eb-af6f-0a580abc021a
# ceph fs subvolume snapshot ls cephfs csi-vol-ff6a2fd2-48f0-11eb-af6f-0a580abc021a csi
[
{
"name": "csi-snap-81a2894f-4b85-11eb-8689-0a580abc021b"
}
]
# ceph fs subvolume snapshot info cephfs csi-vol-ff6a2fd2-48f0-11eb-af6f-0a580abc021a csi-snap-81a2894f-4b85-11eb-8689-0a580abc021b csi
{
"created_at": "2021-01-01 00:31:07.223110",
"data_pool": "cephfsdatapool",
"has_pending_clones": "no",
"size": 13
}
复制
4.2 RBD快照
操作步骤请参考以下文档:
https://github.com/powerlsr/ocp-ceph/blob/main/%E5%88%9B%E5%BB%BArbd%E5%BF%AB%E7%85%A7.txt
查看ceph上的rbd快照snapshot_count: 1
# oc get pvc | grep test | grep rbd
rbd-pvc-test-1 Bound pvc-c962d9f8-d369-4220-b32c-a2192067f076 6Gi RWO csi-rbd-sc 32h
# oc get pv pvc-c962d9f8-d369-4220-b32c-a2192067f076 --template {{.spec.csi.volumeAttributes.imageName}}
csi-vol-ad53e44d-4a7e-11eb-8b7e-0a580abd0212
# rbd info rbdpool/csi-vol-ad53e44d-4a7e-11eb-8b7e-0a580abd0212
rbd image 'csi-vol-ad53e44d-4a7e-11eb-8b7e-0a580abd0212':
size 6 GiB in 1536 objects
order 22 (4 MiB objects)
snapshot_count: 1
id: 456c3fd86a570
block_name_prefix: rbd_data.456c3fd86a570
format: 2
features: layering, operations
op_features: clone-parent, snap-trash
flags:
create_timestamp: Wed Dec 30 17:09:44 2020
access_timestamp: Fri Jan 1 01:51:58 2021
modify_timestamp: Wed Dec 30 17:09:44 2020
复制
4.3 CephFS克隆
操作步骤参考以下文档:
https://github.com/powerlsr/ocp-ceph/blob/main/cephfs%E5%85%8B%E9%9A%86.txt
查看clone pvc的数据,并写入数据
# echo clone >> 1
/tmp # cat 1
before
after
clone
复制
4.4 RBD克隆
操作步骤参考以下文档:
https://github.com/powerlsr/ocp-ceph/blob/main/rbd%E5%85%8B%E9%9A%86.txt
4.5 CephFS在线扩容
操作步骤参考以下文档:
https://github.com/powerlsr/ocp-ceph/blob/main/cephfs%E5%9C%A8%E7%BA%BF%E6%89%A9%E5%AE%B9.txt
确认扩容成功
# oc get pvc cephfs-pvc-test-1
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
cephfs-pvc-test-1 Bound pvc-fe16865e-73e5-41a0-b25f-f689689325a9 18Gi RWO csi-cephfs-sc 6d21h
复制
4.6 RBD动态扩容
操作步骤参考以下文档:
https://github.com/powerlsr/ocp-ceph/blob/main/rbd%E5%8A%A8%E6%80%81%E6%89%A9%E5%AE%B9.txt
确认扩容成功,由于块设备扩容还需要扩容文件系统,所以时间会比较久一些
# oc get pvc rbd-pvc-test-1
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
rbd-pvc-test-1 Bound pvc-c962d9f8-d369-4220-b32c-a2192067f076 18Gi RWO csi-rbd-sc 4d22h
复制
5.性能测试
5.1.Ceph性能测试
登录压力测试机
# ssh 10.152.15.42
复制
安装ceph-common-12.2.11-0.el7.ppc64le
# yum install ceph-common
复制
拷贝ceph集群的ceph.conf 及admin的key
# scp 10.152.20.50:/etc/ceph/ceph.conf etc/ceph/
# scp 10.152.20.50:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
复制
创建 rbd image
# rbd create rbdpool/rbdtest --size 20480
复制
映射image
# rbd map rbdpool/rbdtest
# rbd showmapped
id pool image snap device
0 rbdpool rbdtest - /dev/rbd0
复制
格式化并挂载
# mkfs -t ext4 dev/rbd0
# mount /dev/rbd0 /data
复制
测试项目一:
4k随机写
测试脚本
- fio -filename=/data/fiotest1 -direct=1 -iodepth 2 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=50 -runtime=60 -name=fio_randread4k -group_reporting
测试结果
IOPS: 6409
BW: 25.0MiB/s
LAT: min=696, max=1415.4k, avg=15583.58, stdev=55881.34
测试项目二:
4k随机读
测试脚本
- fio -filename=/data/fiotest1 -direct=1 -iodepth 2 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=50 -runtime=60 -name=fio_randwrite4k -group_reporting
测试结果
IOPS: 32.1k
BW: 125MiB/s
LAT: min=7, max=13707, avg=3108.38, stdev=1456.98
测试项目三:
4k随机写,20%写
测试脚本
- fio -filename=/data/fiotest1 -direct=1 -iodepth 2 -rw=randrw -rwmixwrite=20 -ioengine=libaio -bs=4k -size=1G -numjobs=50 -runtime=60 -name=fio_randrw4k -group_reporting
测试结果
IOPS write: 4212
IOPS read: 16.8k
BW write: 16.5MiB/s
BW read:65.7MiB/s
LAT write: min=717, max=575125, avg=6605.51, stdev=25104.31
LAT read:min=7, max=596678, avg=4281.64, stdev=19703.22
5.2 容器中的Ceph性能测试
新建性能测试用pvc rbd-pvc-ptest-1
# cat >> rbd-pvc-ptest-1.yaml << EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rbd-pvc-ptest-1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: csi-rbd-sc
EOF
# oc apply -f rbd-pvc-ptest-1.yaml
复制
新建性能测试用pod
# cat >> rbd-ptest-pod-1.yaml << EOF
apiVersion: v1
kind: Pod
metadata:
name: rbd-ptest-pod-1
namespace: default
spec:
containers:
- command:
image: centos
tty: true
name: mysql
volumeMounts:
- mountPath: data
name: mypvc
volumes:
- name: mypvc
persistentVolumeClaim:
claimName: rbd-pvc-ptest-1
EOF
# oc apply -f rbd-ptest-pod-1.yaml
# oc rsh rbd-ptest-pod-1
复制
测试项目一:
4k随机写
测试脚本
- fio -filename=/data/fiotest1 -direct=1 -iodepth 2 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=50 -runtime=60 -name=fio_randread4k -group_reporting
测试结果
IOPS: 6047
BW: 23.6MiB/s
LAT: min=684, max=814875, avg=16518.81, stdev=48518.86
测试项目二:
4k随机读
测试脚本
- fio -filename=/data/fiotest1 -direct=1 -iodepth 2 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=50 -runtime=60 -name=fio_randwrite4k -group_reporting
测试结果
IOPS: 30.4k
BW: 119MiB/s
LAT: min=5, max=323491, avg=3282.20, stdev=3044.63
测试项目三:
4k随机写,20%写
测试脚本
- fio -filename=/data/fiotest1 -direct=1 -iodepth 2 -rw=randrw -rwmixwrite=20 -ioengine=libaio -bs=4k -size=1G -numjobs=50 -runtime=60 -name=fio_randrw4k -group_reporting
测试结果
IOPS write: 3174
IOPS read: 12.7k
BW write: 12.4MiB/s
BW read:49.6MiB/s
LAT write: min=717, max=601613, avg=8937.87, stdev=31338.40
LAT read:min=5, max=625524, avg=5608.13, stdev=24048.41
5.3 性能对比
测试类型 | 测试项目 | IOPS | BW | LAT |
物理机 | 4K随机写 | 6409 | 25.0MiB/s | 15583.58 |
4K随机读 | 32.1k | 125MiB/s | 3108.38 | |
4K随机读写/80%读 | 16.8k | 65.7MiB/s | 4281.64 | |
4K随机读写/20%写 | 4212 | 16.5MiB/s | 6605.51 | |
容器 | 4K随机写 | 6047 | 23.6MiB/s | 16518.81 |
4K随机读 | 30.4k | 119MiB/s | 3282.2 | |
4K随机读写/80%读 | 12.7k | 49.6MiB/s | 5608.13 | |
4K随机读写/写 | 3174 | 12.4MiB/s | 8937.87 |
6 测试结论
本次测试基于K1 Power 容器云存储平台,测试验证了分布式文件存储和块存储在容器应用场景下的在线扩容、快照、克隆等生产环境常用功能,其中容器云后端存储采用开源统一分布式存储系统Ceph,提供了高性能,高可用性,高扩展性,作为OpenShift容器云平台后端存储可以保证数据的高可用性,验证了ceph作为容器云平台存储的可行性。从性能测试结果来看,容器内rbd块设备性能与物理机rbd块设备性能相比,大概有6%的损耗。在容器环境中4k小文件读 IOPS 达到3W 以上,得益于K1 Power Linux服务器采用POWER9处理器,支持SMT4,整机物理线程多达176,特别是在小文件处理场景下能快速的响应高并发的前端I/O 请求。
附表一:
Storage | Type | ppc64le (Power Systems) | S390x (z/LinuxONE) | amd64 (Intel, AMD) |
Raw Block | RWO | 1Q 20 | 1Q 21 | 2Q19 |
NFS (Spectrum Scale CES, no dynamic provisioning) | RWX | 2Q 20 | 1Q 20 | 2Q19 |
PowerVC CSI (container storage interface) | RWO | 2Q 20 | N/A | N/A |
IBM Spectrum Virtualize (CSI) Block | RWO | 2Q 20 | 1Q 20 | 4Q 19 |
IBM Spectrum Scale File | RWX | 4Q 20* | 4Q 20* | 4Q 19 |
FC | RWO | 1Q 21 | 1Q 21 | 1Q 20 |
iSCSI | RWO | 4Q 20 | 4Q 20 | 1Q 20 |
HostPath | RWO | 4Q 20 | 4Q 20 | 1Q 20 |
CephFS (OCS) File | RWX | 4Q 20** | 4Q 20** | 1Q 20 |
CephRBD (OCS) Block | RWO | 4Q 20** | 4Q 20** | 1Q 20 |
VMware vSphere | RWO | N/A | N/A | 2Q 19 |
RWX = read-write many (shared) *Dependent on containerized Spectrum Scale (GA in 4Q)
RWO = read-write only (dedicated) ** Planned for OCP/OCS 4,6
资料/文章推荐:
欢迎关注社区 “K1 Power”技术主题 ,将会不断更新优质资料、文章。地址:https://www.talkwithtrend.com/Topic/135157
扫描下图二维码
查阅产品资料、解决方案、成功案例
预约活动与直播培训课程