本文作者:联通研究院 邱永刚

首先为大家推荐这个 OceanBase 开源负责人老纪的公众号 “老纪的技术唠嗑局”,会持续更新和 #数据库、#AI#技术架构 相关的各种技术内容。欢迎感兴趣的朋友们关注!

目前生产环境 OceanBase 数据库集群部署一般要求磁盘类型为 SSD 存储,OB 的存储高压缩比,大大节省了磁盘存储空间。但面对海量历史归档库等场景,仍存在存储不够用、计算资源浪费等问题。

本文探讨了混闪机型(事务日志盘采用纯 SSD,数据盘采用机械硬盘)的可行性,通过详尽的验证过程,得出不同规格、不同场景下混闪机型相对纯闪机型的性能损耗及稳定性表现。同时结合生产环境的实际应用案例,为海量数据场景下部署 OceanBase 提供了参考。

最终得出的结论是:在满足业务稳定性、性能要求的前提下,使用混闪机型进行部署,可大大降低硬件资源使用量、解决纯闪机型资源不足、存量资源无法使用等问题。

背景

OceanBase 数据库的存储引擎基于 LSM-Tree 架构,基线数据存磁盘,增量数据直接写内存。当内存的增量数据达到一定阀值时,会触发增量数据落盘(转储),同时每天晚上的空闲时刻,系统也会自动进行全局动静数据的归并,生成基线数据(合并)。通过这种准内存的增量数据处理,可以大大提升增量数据增删改的性能。

另外,由于基线数据是只读的,可以采用比较激进的压缩算法,在不损失查询性能的条件下,可以做到很高的压缩比。为了保证数据的持久性,在增量数据写内存的同时会将 redo_log 落盘并同步给从副本,满足多数派成功落盘的情况下事务才是成功的,同时转储合并也会有集中的磁盘 IO 操作,为了保证数据库的高性能,OB 官方会要求使用 SSD 存储来部署集群。

根据我们的理解,使用 SSD 存储主要是为了提高性能,有一些应用对性能要求并不高,所以我们之前也部署了一些机械盘的集群。在运行一段时间之后,陆续出现了一些 clog 不同步、集群不稳定,甚至于集群瘫痪的问题,为此我们也及时进行了固态盘的替换,但我们也一直没有停止对机械盘部署的探索。

在看到 OB 官网发表的《数据库历史库,成本与性能不可以兼得吗?》文章后,我们了解到使用机械盘来部署 OB 也是可行的,于是我们也及时与文章作者进行了沟通,了解到了详细的使用场景与部署方式,得知对数据实时性要求较高的事务日志使用固态盘部署,数据盘使用机械盘部署的方案是可行的,于是,我们对这种混闪机型部署方式进行了验证。以下是详细验证过程。

验证说明

本次测试验证主要针对全闪机型与混闪机型进行对比

全闪机型:磁盘全部为 SSD

混闪机型:事务日志盘为 SSD(本次测试为 NVME),数据盘为 HDD

数据库版本:4.2.1.1

测试验证资源:

全闪机型:

麒麟 ARM * 3:国产化产品(ARM)

CPU 32 core * 2 / 内存 512G / 硬盘 SATA SSD 960G * 12

混闪机型:

麒麟 ARM * 3:国产化产品(ARM)

CPU 32 core * 2 / 内存 512G / 硬盘 NVME 1.8T * 2 + SATA HDD 8T * 12

验证场景 1:批量入库

8c16G 16c32G 32c64G 64c128G
全闪 54903 85870 178158 221443
混闪 38622 61772 121918 164340

结论:批量入库场景下,性能随规格线性增长,32c64G 规格后,性能增长趋缓,混闪机型比全闪机型性能下降约 29%。

验证场景 2:普通入库

8c16G 16c32G 32c64G 64c128G
全闪 24490 48079 87440 91702
混闪 20513 40768 56511 56352

结论:普通入库场景下,性能随规格线性增长,32c64G 规格后,性能增长趋缓,混闪机型比全闪机型性能下降约 26%。

验证场景 3:普通只读

8c16G 16c32G 32c64G 64c128G
全闪 57283 106498 173308 198595
混闪 53010 96702 166397 188010

结论:普通只读场景下,性能随规格线性增长,32c64G 规格后,性能增长趋缓,混闪机型比全闪机型性能下降约 6%。

验证场景4:普通读写

8c16G 16c32G 32c64G 64c128G
全闪读 36029 69911 131861 148802
全闪写 1801 3495 6593 7440
混闪读 34102 61301 111449 125255
混闪写 1705 3065 5572 6262

结论:普通读写场景下,性能随规格线性增长,32c64G 规格后,性能增长趋缓,混闪机型比全闪机型性能下降约 12%。

验证场景5:TP综合测试tpcc

8c16G 16c32G 32c64G 64c128G
全闪 35127 82656 137854 158995
混闪 28042 67327 118766 157774

结论:综合事务 TPCC 测试,混闪机型比全闪机型性能下降约 14%。

验证场景6:稳定性测试

使用 sysbench 进行压力测试,设置并发度为 300,在普通读写场景下,数据库可以稳定运行 72 小时。

验证结论:

  • 通过对不同规格下各场景测试,混闪机型在入库场景下比全闪机型性能下降约 28%,只读场景性能下降约 6%,综合读写性能下降约 13%。
  • 在稳定性方面,通过 72 小时 sysbench 高并发持续读写,数据库稳定运行无异常。但当前测试无法模拟实际生产环境复杂场景,OB 库在真实生产环境复杂场景下可能更易出现转储合并异常问题,影响集群稳定。
  • 混闪机型用高性能的 NVME 或 SSD 来存储需实时落盘的事务日志,用 HDD 来存储数据量较大的业务数据,适用于对性能要求不高、业务相对简单、数据量较大的历史库、日志库、备份库等场景。

通过测试验证,混闪机型相比纯闪机型,会有 20% 左右的性能下降,稳定性方面也没有发现有直接的影响,这个结果极大的鼓舞了我们,因为我们有大量历史库、日志库场景,数据量庞大,但在线业务较少,对性能、计算资源要求不高。为此,我们即时进行了混闪机型替代,针对日志库场景,有业务一天的日志量在近 20 亿条,增量数据考虑多副本在 4T 左右,存储 1 个月数据需要纯闪机型机器 30 台。进行混闪机型替代后,只需要 3 台机器即可满足需求,一下子节省机器 27 台,仅这一个场景便节省硬件投资近 300 万元。另一方面,存量资源池存在大量机械盘主机,这样这些存量资源得以利用,避免了出现大量资源浪费的情况。

总结

经过对混闪机型(即事务日志盘采用纯固态硬盘 SSD,数据盘采用机械硬盘 HDD)在性能与稳定性方面的严格测试与验证,结果显示,相较于纯闪机型,混闪机型在性能上约有 20% 的降幅,但在 OB 4.x 版本上能够保持持续且稳定的运行。混闪机型特别适合于那些对性能要求不苛刻、业务逻辑相对简单但数据量庞大的应用场景,诸如历史库、日志库、备份库等。通过实际生产环境的验证,其可行性得到了充分证实。

鉴于普通机型机械硬盘相较于固态硬盘在存储容量上通常高出一个数量级,混闪机型在这些特定场景下能够显著降低约 90% 的硬件成本。这一优势不仅大幅削减了硬件投入,还显著提升了资源利用率。以电信运营商的日志库为例,电信业务涉及大量且多元化的用户接入,除核心系统外,还会有手机营业厅、网上营业厅、各级子系统以及代理商等,通过服务调用日志分析,可以为业务运营提供宝贵的决策支持。采用混闪存储方案,在减少硬件成本的同时,还能提供更长时间的数据存储,进而为运营决策提供更加精准的数据支撑。

此外,混闪机型的引入打破了纯闪机型在 OceanBase 数据库部署上的单一限制。在当前信创替代加速、IT 技术日新月异的背景下,大大缩短了 IT 设备的更新换代周期,许多被替换下来的设备,其使用寿命往往远未达到 6 ~ 8 年的报废周期,弃之可惜。而这些设备虽然计算能力可能不是最优,但拥有高容量的机械硬盘。

通过混闪部署 OceanBase 的方式,这些旧设备的利用价值得到了显著提升。同时,对于一些大公司而言,其设备采购往往涵盖多种机型,混闪机型的部署方式不仅拓宽了 OceanBase 在部署场景上的适用范围,还为多样化的应用场景提供了更加灵活、经济且高效的解决方案。

老纪的技术唠嗑局 不仅希望能持续给大家带来有价值的技术分享,也希望能和大家一起为开源社区贡献力量。如果你对 OceanBase 开源社区认可,点亮一颗小星星 吧!你的每一个Star,都是我们努力的动力~

https://github.com/oceanbase/oceanbase

物无弃材 —— 混闪机型部署 OceanBase 集群的探索的更多相关文章

  1. OceanBase数据库实践入门——手动搭建OceanBase集群

    前言 目前有关OceanBase功能.案例.故事的文章已经很多,对OceanBase感兴趣的朋友都想安装一个数据库试试.本文就是分享初学者如何手动搭建一个OceanBase集群.这也是学习理解Ocea ...

  2. 使用docker安装部署Spark集群来训练CNN(含Python实例)

    使用docker安装部署Spark集群来训练CNN(含Python实例) http://blog.csdn.net/cyh_24/article/details/49683221 实验室有4台神服务器 ...

  3. 4. 利用MySQL Shell安装部署MGR集群 | 深入浅出MGR

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 1. 安装准备 2. 利用MySQL Shell构建MGR集群 3. MySQL Shell接管现存的MGR集群 4 ...

  4. window下使用Redis Cluster部署Redis集群

    日常的项目很多时候都需要用到缓存.redis算是一个比较好的选择.一般情况下做一个主从就可以满足一些比较小的项目需要.在一些并发量比较大的项目可能就需要用到集群了,redis在Windows下做集群可 ...

  5. Docker部署Hadoop集群

    Docker部署Hadoop集群 2016-09-27 杜亦舒 前几天写了文章"Hadoop 集群搭建"之后,一个朋友留言说希望介绍下如何使用Docker部署,这个建议很好,Doc ...

  6. Docker 容器部署 Consul 集群

    Docker 容器部署 Consul 集群 一.docker安装与启动1.1安装docker[root@localhost /]# yum -y install docker-io 1.2更改配置文件 ...

  7. zookeeper部署及集群测试

    zookeeper部署及集群测试 环境 三台测试机 操作系统: centos7 ; hostname: c1 ; ip: 192.168.1.80 操作系统: centos7 ; hostname: ...

  8. MariaDB Galera Cluster 部署(如何快速部署 MariaDB 集群)

    MariaDB Galera Cluster 部署(如何快速部署 MariaDB 集群)  OneAPM蓝海讯通7月3日 发布 推荐 4 推荐 收藏 14 收藏,1.1k 浏览 MariaDB 作为 ...

  9. MariaDB Galera Cluster 部署(如何快速部署MariaDB集群)

    MariaDB Galera Cluster 部署(如何快速部署MariaDB集群) [日期:--] 来源:Linux社区 作者:Linux [字体:大 中 小] MariaDB作为Mysql的一个分 ...

  10. Linux环境快速部署Zookeeper集群

    一.部署前准备: 1.下载ZooKeeper的安装包: http://zookeeper.apache.org/releases.html 我下载的版本是zookeeper-3.4.9. 2.将下载的 ...

随机推荐

  1. openssl基础使用(密码学 linux)

    目录        实验原理        实验过程            一.对称加密                1.使用rc4加解密                2.使用AES加解密     ...

  2. Pydantic字段元数据指南:从基础到企业级文档增强

    title: Pydantic字段元数据指南:从基础到企业级文档增强 date: 2025/3/28 updated: 2025/3/28 author: cmdragon excerpt: 通过Py ...

  3. study PostgreSQL【2-FireDAC连接PostgreSQL】

    就这么个简单问题,一下午时间.想想就憋屈. 那么牛逼哄哄FireDAC居然连接PostgreSQL出问题了.帮助中说的啥意思,咱也不明白.网上一通也是云里雾里. 上干货,具体点: TFDConnect ...

  4. 本地学习环境minikube安装

    有感于K8S太强大和自己的太无知,索性来系统学习下K8S.网上一番攻略,起码先得有个本地学习环境,所以安装一个minikube,下面记录安装过程,供有需要的人使用. 看看minikube架构: 我是在 ...

  5. .net WorkFlow 流程设计

    WikeFlow官网:www.wikesoft.com WikeFlow学习版演示地址:workflow.wikesoft.com WikeFlow学习版源代码下载:https://gitee.com ...

  6. jmeter使用正则表达式提取器提取返回值中的数据

    场景描述:测试过程中,一个场景经常会调用几个接口,且前后接口之间存在参数传递.前一个接口返回值提取后传给后一个接口使用 操作步骤: 第一步,选中被提取参数的接口请求,依次点击右键-添加-后置处理器-正 ...

  7. DPDI online在线调度系统环境部署

    DPDI online简介: DPDI Online 是一款基于Kettle的强大在线任务调度平台,凭借其高效与灵活性,专为调度和监控Kettle客户端生成的ETL任务而设计 DPDI online部 ...

  8. fiddler断点应用

    一.作用 1.模拟网络中断 2.断点时篡改数据 3.测试时做一些极端测试 二.断点步骤 1.全局断点 1)全局断点的两种方式 点击状态栏空白框,点击一下请求前断点,两下请求后断点,三下取消断点 Rul ...

  9. Python基础 - 字符串处理

    引入 平时工作中, 80% 时间都在跟字符串打交道, 字符串的处理,是编程语言中, 尤其重要的. Python 变得比较流行, 一个大原因, 用 Pandas 的第一作者的话说, 大概是 Python ...

  10. HarmonyOS数据防泄漏服务(DLP)开发实战

    系统级数据防护的核心能力解析 在企业级文档管理.教育课件分发.金融合同处理等场景中,数据泄露风险贯穿文件生命周期.HarmonyOS提供的数据防泄漏服务(DLP),通过沙箱隔离.端云协同认证.细粒度权 ...