物无弃材 —— 混闪机型部署 OceanBase 集群的探索
本文作者:联通研究院 邱永刚
首先为大家推荐这个 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 集群的探索的更多相关文章
- OceanBase数据库实践入门——手动搭建OceanBase集群
前言 目前有关OceanBase功能.案例.故事的文章已经很多,对OceanBase感兴趣的朋友都想安装一个数据库试试.本文就是分享初学者如何手动搭建一个OceanBase集群.这也是学习理解Ocea ...
- 使用docker安装部署Spark集群来训练CNN(含Python实例)
使用docker安装部署Spark集群来训练CNN(含Python实例) http://blog.csdn.net/cyh_24/article/details/49683221 实验室有4台神服务器 ...
- 4. 利用MySQL Shell安装部署MGR集群 | 深入浅出MGR
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 1. 安装准备 2. 利用MySQL Shell构建MGR集群 3. MySQL Shell接管现存的MGR集群 4 ...
- window下使用Redis Cluster部署Redis集群
日常的项目很多时候都需要用到缓存.redis算是一个比较好的选择.一般情况下做一个主从就可以满足一些比较小的项目需要.在一些并发量比较大的项目可能就需要用到集群了,redis在Windows下做集群可 ...
- Docker部署Hadoop集群
Docker部署Hadoop集群 2016-09-27 杜亦舒 前几天写了文章"Hadoop 集群搭建"之后,一个朋友留言说希望介绍下如何使用Docker部署,这个建议很好,Doc ...
- Docker 容器部署 Consul 集群
Docker 容器部署 Consul 集群 一.docker安装与启动1.1安装docker[root@localhost /]# yum -y install docker-io 1.2更改配置文件 ...
- zookeeper部署及集群测试
zookeeper部署及集群测试 环境 三台测试机 操作系统: centos7 ; hostname: c1 ; ip: 192.168.1.80 操作系统: centos7 ; hostname: ...
- MariaDB Galera Cluster 部署(如何快速部署 MariaDB 集群)
MariaDB Galera Cluster 部署(如何快速部署 MariaDB 集群) OneAPM蓝海讯通7月3日 发布 推荐 4 推荐 收藏 14 收藏,1.1k 浏览 MariaDB 作为 ...
- MariaDB Galera Cluster 部署(如何快速部署MariaDB集群)
MariaDB Galera Cluster 部署(如何快速部署MariaDB集群) [日期:--] 来源:Linux社区 作者:Linux [字体:大 中 小] MariaDB作为Mysql的一个分 ...
- Linux环境快速部署Zookeeper集群
一.部署前准备: 1.下载ZooKeeper的安装包: http://zookeeper.apache.org/releases.html 我下载的版本是zookeeper-3.4.9. 2.将下载的 ...
随机推荐
- SpringBoot+Nginx大文件传输
Nginx配置 # 公众端的附件上传 location /api/visitor/upload { # Pass altered request body to this location uploa ...
- [Winform]在Form里显示模态对话框ModalDialog
问题 如何在WinForm的一个Form里面弹出一个模态Dialog? 背景 程序的框架是Winform,只有一个窗口MainForm.MainForm里面是一个TabControl,每个TabPag ...
- MQ 如何保证数据一致性?
前言 上个月,我们有个电商系统出了个灵异事件:用户支付成功了,但订单状态死活不改成"已发货". 折腾了半天才定位到问题:订单服务的MQ消息,像人间蒸发一样消失了. 这个Bug让我明 ...
- 在IIS Express下部署NuGet私服
用途 个人开发,部署自己的NuGet pkg. 环境 Win11 IIS Express (轻度使用,不安装IIS,而使用VS预装的IIS Express) VS2022 步骤 开发环境准备 因我拟用 ...
- 学习unigui【25】关于图标
网上有不少介绍. 自己的经验: 是否需要下载文件fontawesome-free-6.5.1-web(),没有研究.说ext_js已经下载配套了. 我很懒,得过且过. 1.下载fontawesome- ...
- study Rust-3【表达式和函数】
1. Rust与优美的pascal很相似.但是这个表达式概念很有意思.见上图.[1.条件赋值语句:2.表达式返回值] 2.注意变量和隐藏变量的概念,这个也有创意. 3.函数在Rust无处不在.
- 【开源推荐】AI Interviewer:基于Spring-Alibaba-AI的智能面试官系统(附GitHub实战教程)
项目背景 作为开发者,你是否经历过: 技术面试时因紧张发挥失常? 刷了1000+LeetCode却不会表达解题思路? 花费上千元购买模拟面试服务? 今天推荐的AI Interviewer开源项目,正是 ...
- Go操作MySQL总结
1.下载驱动包 打开GoLand->Terminal,输入:go get github.com/go-sql-driver/mysql 2.编写代码 package mainimport ( & ...
- 使用注解的方式编写:@Aspect运用
列子. public interface Calculator { // 加 public int add(int i,int j); // 减 public int sub(int i,int j) ...
- kettle使用MD5加密增量获取接口数据
kettle使用MD5加密增量获取接口数据 场景介绍: 使用JavaScript组件进行MD5加密得到Http header,调用API接口增量获取接口数据,使用json input组件解析数据入库 ...