近年来,我行联机交易业务量和数据量随着移动支付的发展而快速增长,手机银行、网银等互联网金融业务的创新,使得业务种类更加灵活、多样,人工智能、物联网等创新技术与金融行业的融合,使得业务场景更加敏捷、丰富,同时也会产生大量场景化、碎片化、移动化的非结构数据。业务品种、业务量、业务数据爆炸式的增长,给 IT 系统基础架构带来了很大的压力,我行积极在云化、分布式存储、开源数据库及新型数据库等基础架构方面进行相关调研和尝试,为建立灵活开放、高效协同、安全稳定的 IT 架构体系做技术储备。
Ceph 是当前非常流行的开源分布式存储系统,可以在单一平台上提供对象、块和文件系统存储。目前我行已经在开发测试中使用了 Ceph 作为开发测试平台的存储,主要为虚拟化平台提供 Datastore ,几乎所有系统的开发测试应用及数据库均有使用,主要为 rbd+iscsi 的方式。容器云平台目前也已经调研过多家商用平台,最后选定业内排名第一的 OpenShift ,计划未来一到两年,基于 OpenShift 容器云平台在开发测试环境完成上线。大部分新建系统,在条件具备的情况下,都会在容器云上尝试部署。部分具备条件的现有系统也会尝试向容器云迁移,例如直销银行、全媒体等。
OpenShift 和 Ceph 的使用场景在容器云环境中具有相当的代表性,也是本次测试选择的组合,我们希望可以验证容器云平台使用 Ceph 相关接口和场景,并且对容器和物理机对接分布式块存储做性能对比。
测试环境的设计,我们需要构建一个 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% )。
OCP 及 Ceph 软件版本:
OpenShift 支持的存储类型接口详见附表 1
Ceph 集群配置
操作步骤请参考以下文档:
https://github.com/powerlsr/ocp-ceph/blob/main/ceph-csi%E6%90%AD%E5%BB%BA.txt
操作步骤请参考以下文档:
https://github.com/powerlsr/ocp-ceph/blob/main/%E5%88%9B%E5%BB%BAcephfs%E5%BF%AB%E7%85%A7.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 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
}
操作步骤请参考以下文档:
https://github.com/powerlsr/ocp-ceph/blob/main/%E5%88%9B%E5%BB%BArbd%E5%BF%AB%E7%85%A7.txt
# 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
操作步骤参考以下文档:
https://github.com/powerlsr/ocp-ceph/blob/main/cephfs%E5%85%8B%E9%9A%86.txt
# echo clone >> 1
/tmp # cat 1
before
after
clone
操作步骤参考以下文档:
https://github.com/powerlsr/ocp-ceph/blob/main/rbd%E5%85%8B%E9%9A%86.txt
操作步骤参考以下文档:
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
操作步骤参考以下文档:
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
# ssh 10.152.15.42
yum install ceph-common
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 create rbdpool/rbdtest --size 20480
# 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
- 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
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
- 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
# 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
test-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
- 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
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
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
本次测试基于 K1 Power 容器云存储平台,测试验证了分布式文件存储和块存储在容器应用场景下的在线扩容、快照、克隆等生产环境常用功能,其中容器云后端存储采用开源统一分布式存储系统 Ceph ,提供了高性能,高可用性,高扩展性,作为 OpenShift 容器云平台后端存储可以保证数据的高可用性,验证了 ceph 作为容器云平台存储的可行性。从性能测试结果来看,容器内 rbd 块设备性能与物理机 rbd 块设备性能相比,大概有 6% 的损耗。在容器环境中 4k 小文件读 IOPS 达到 3W 以上,得益于 K1 Power Linux 服务器采用 POWER9 处理器,支持 SMT4 ,整机物理线程多达 176 ,特别是在小文件处理场景下能快速的响应高并发的前端 I/O 请求。
RWX = read-write many (shared)
* Dependent on containerized Spectrum Scale (GA in 4Q)
RWO = read-write only (dedicated)
* Planned for OCP/OCS 4,6
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞11
添加新评论4 条评论
2021-06-30 10:25
2021-06-29 10:55
2021-06-29 10:36
2021-06-24 14:43