花了三个月,我写了个RDS管控平台(目前进度一半)

💫《博主主页》:

   🔎 CSDN主页: 奈斯DB

   🔎 IF Club社区主页: 奈斯、

🔥《擅长领域》:

   🗃️ 数据库:阿里云AnalyticDB(云原生分布式数据仓库)、Oracle、MySQL、SQLserver、NoSQL(Redis)

   🛠️ 云原生(数据库管控平台方向):K8s、Prometheus、Go、容器化调度、故障自愈、多集群管理

💖如果觉得文章对你有所帮助,欢迎点赞收藏加关注💖

有一件事想了两年。🗓️

记得第一次接触云数据库是2021年,点几下鼠标实例就出来了。当时只觉得:真快啊。 也没多想,用就完了。😶

但用久了,慢慢开始好奇:这东西背后到底怎么实现的?我能不能也搓一个?

然后2024年,我就开始认真开始琢磨这件事。深入了解才发现,云数据库背后依赖的是一整套云原生技术栈:容器化、容器编排、监控告警......这些我都不懂。😇没办法,DBA出身,Oracle、MySQL、Redis这些数据库本身还算熟,但容器、编排、微服务这些,完全是另一个世界。

于是开始补课: 先学Prometheus+Grafana监控,然后Docker,之后K8s,最后Go。📚学一点是一点,心里一直挂着这个事。从2024年到现在,刚好两年。

今年终于动手了。过去三个月,从零写了一个轻量RDS管控平台。

现在长什么样呢?核心链路已经能跑通, 测试环境和预生产都在跑着验证。但像高可用自动切换、按时间点恢复这些企业级能力还在完善,整体完成度我估40%~50%。😅

这篇文章就是复盘:做了什么、用了什么技术、哪里挖了坑、下一步填哪。

平台演示地址(轻点踩,服务器弱):

👉 http://www.rds-db.com

一、为什么写这个

作为DBA,对于Oracle、MySQL、Redis这些还算熟,主从复制、备份恢复、性能调优 算是看家本领。但云原生那套?K8s、Operator、Sidecar......对我来说完全是另一个世界。🌍

刚开始用云数据库那会,纯粹就是用户心态了,点几下就出来,好用、快,完事。😌

后来用多了,开始琢磨:它怎么做到这么快的?底层怎么调的?故障怎么切的?

然后发现,光懂数据库不够,还得懂容器、调度、监控那一整套。

于是从两年前开始,按这个顺序补课:监控→容器→编排→语言。一步步把短板补上,想着总有一天要把老本行(数据库)和新学的(云原生)串起来。🎯

今年终于下定决心,落地成这个项目。✅

二、技术栈

直接列我现在用的这套:

模块 技术栈 备注
前端 React + Ant Design 管理台交互,调用后端REST API
后端 Golang + Gin + GORM 业务逻辑、任务调度、K8s API交互
调度 K8s + client-go 数据库实例的创建、扩缩容、自愈
数据库 MySQL 8.0 + GTID 容器化运行,主从基于GTID复制
备份 XtraBackup + MinIO 全量物理备份,增量备份待完善
监控 Prometheus + Grafana 指标采集、存储、可视化展示

左右拉动查看完整表格 ⬅️➡️

三、核心能力(做到哪算哪)

1. 实例生命周期(大概65%)

能干啥: 创建、删除、重启、改密码。底层K8s StatefulSet。

还缺啥: 在线改规格做了一半,有时候状态同步会乱。克隆实例还没开始。

2. 高可用主从(大概35%)

能干啥: 一主一从部署、主从切换(手动/自动都行)。从库挂了能自动重建,主库挂了也能自动切,探活这块已经调稳了。

还缺啥: 切是能切,但切完之后的业务恢复通知不够优雅------目前是靠轮询,没有做回调。另外跨机房部署的场景还没验证过。

3. 备份恢复(大概45%)

能干啥: 定时全量备份到MinIO、从全量备份恢复。

还缺啥: 增量binlog备份通了但不稳,按时间点恢复能跑通但边界情况会翻车。这俩是下一步重点。

4. 监控告警(大概60%)

能干啥: QPS、连接数、慢查询、复制延迟都有,Grafana面板看着挺唬人。简单告警(实例挂了、延迟高了)也能发。

还缺啥: 告警规则还不够细,有时候误报或漏报。

5. 账号权限(大概80%)

能增删账号、改密码、授权到库。表级别权限还没做,白名单也没有。基本够开发环境用。

6. 只读实例(大概20%)

能加只读节点,但读写分离层还没接。现在要读从库得手动改连接。优先级不高,往后放。

四、遇到的坑

说实话,第一次写遇到的坑还有很多很多,基本上一步一卡。😩

挑三个典型的说:

坑一:K8s里MySQL主从切换

切一次出一次问题。

后来老老实实加了Sidecar,做GTID位点校验,先降级旧主再提新主。现在手动切是稳的,自动还在磨。

坑二:PITR的位点对齐

全量备份记录一个位点,binlog从那个位点往后应用。

说起来简单,但容器重启后路径变了、binlog文件顺序乱了,各种幺蛾子。现在能跑,但代码里一堆TODO。

坑三:前端调后端,后端调K8s,超时了咋办?

方案比较粗暴:提交后立刻返回"操作已提交",结果异步查。

体验不丝滑,但不报错就算赢了。

五、接下来打算填的坑

按优先级排:

  • 自动故障切换------ 把探活和决策引擎磨稳定
  • PITR稳定性------ 把边界情况补上
  • 读写分离接入------ 接个ProxySQL,让读流量自动走从库
  • 部署文档------ 写个Helm Chart,方便别人本地跑
  • 混沌测试------ 杀节点、断网,看系统会不会崩

远期画饼, 支持Redis、审计日志等等。

六、写在最后

其实我也不是非得等做完才发。😅

做到这个程度,核心链路能跑了,测试和预生产也在验证,我觉得就可以拿出来说一说了。剩下的企业级功能边做边补,反正坑就在那里,早晚要填。

发出来的好处是: 逼自己不能烂尾,收到的反馈能及时用到开发里,也给同样在坑里的同学一个活生生的参考。

接下来会继续肝,会继续完善成生产级别。如果你也在做类似的东西,欢迎交流、吐槽、一起踩坑。🍻

地址再贴一次: 👉http://www.rds-db.com

挂了就是我在改代码,隔半天再刷就行。

感谢看完。👋

相关推荐
AAA代码批发商4 分钟前
Days 39 Linux C 开发之 SQLite 数据库完整学习笔记
linux·c语言·数据库
笑梦无境5 分钟前
mysql的安装及配置(3)
数据库·mysql·adb
电商API_180079052475 分钟前
跨境1688代采商家,如何借助API打通供应链,实现效率跃迁
大数据·数据库·网络爬虫
小雪崩6 分钟前
嵌入式学习 day40:数据库
数据库·学习
Aloudata24 分钟前
语义层 vs MCP 工具层:Agent 调用数据时,语义应该放在哪一层
数据库·数据分析·chatbi·data agent·语义层
zcmodeltech25 分钟前
源网荷储一体化沙盘模型多场景控制系统设计——基于STM32与Modbus RTU的源网荷储、多能互补、冷热电三联供全场景联动方案,服务范围覆盖全国
数据库·人工智能·stm32·单片机·嵌入式硬件
数智启示录28 分钟前
PostgreSQL 执行计划实战(第 9 篇):SQL 和索引没变,计划为什么突然慢一百倍
数据库·经验分享·sql·postgresql·面试
Gent_倪43 分钟前
MySQL分库、分表、分区详解
数据库·mysql
额额额对了1 小时前
Linux 数据库开发实战:使用 C 语言与 SQLite3 构建轻量级终端词典
linux·数据库·oracle
qq_246839751 小时前
postgresql xxhash64 哈希函数实现
数据库·postgresql·哈希算法