开源PolarDB- X|替换Opengemini时序数据场景下产品力校验

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 本文作者:黄周霖,数据库技术专家,就职于南京北路智控股份有限公司,负责数据库运维及大数据开发。

业务背景

南京北路智控科技股份有限公司,是一家专注于矿山自动化、信息化、智能化等产品设计、研发、生产、销售及服务为一体的国家高新技术企业,始终专注于矿山、危险品化工等领域的自动化、信息化与智能化创新,业务涵盖产品设计、研发、生产、销售及服务全链条,致力于为客户提供从产品到服务的一站式智能化解决方案。

原有的采集数据存储在时序数据库opengemini内,但是生态成熟度较低,遇到问题时可能难以快速找到解决方案。SQL语法兼容性较低,复杂分析能力较弱,缺乏高级分析函数如机器学习扩展、窗口函数等。为了进一步将业务轻量化,考虑使用PolarDB分布式版(PolarDB-X)存储时序数据,因此对PolarDB-X进行性能验证。

了解PolarDB-X

PolarDB-X采⽤Shared-nothing与存储计算分离架构进⾏设计,系统由以下组件组成。

  • 计算节点(CN,ComputeNode)
  • 计算节点是系统的⼊⼝,采⽤⽆状态设计,包括SQL解析器、优化器、执⾏器等模块。负责数据分布式路由、计算及动态调度,负责分布式事务2PC协调、全局⼆级索引维护等,同时提供SQL限流、三权分⽴等企业级特性。
  • 存储节点(DN,DataNode)
  • 存储节点负责数据的持久化,基于多数派Paxos协议提供数据⾼可靠、强⼀致保障,同时通过MVCC维护分布式事务可⻅性。
  • 元数据服务(GMS,GlobalMetaService)
  • 元数据服务负责维护全局强⼀致的Table/Schema,Statistics等系统Meta信息,维护账号、权限等安全信息,同时提供全局授时服务(即TSO)。
  • ⽇志节点(CDC,ChangeDataCapture)
  • ⽇志节点提供完全兼容MySQLBinlog格式和协议的增量订阅能⼒,提供兼容MySQLReplication协议的主从复制能⼒。
  • 列存节点
  • 列存节点提供持久化列存索引,实时消费分布式事务的binlog日志,基于对象存储介质构建列存索引,能满足实时更新的需求、以及结合计算节点可提供列存的快照一致性查询能力

产品关键特性

  • ⾼可⽤
  • 传统的部署⽅式是⼀主⼀备,即主备间通过⽇志同步数据变更。为了保证副本间的强⼀致性,现代数据库往往采⽤以Paxos为代表的多数派复制协议。Paxos通常要求集群中⾄少存3个节点,每次写⼊都要获得超过半数节点的确认,即便其中1个节点宕机,集群也仍然能正常提供服务。Paxos算法能够保证副本间的强⼀致性,彻底解决副本不⼀致问题。
  • 分布式事务
  • ACID
  • 事务2PC提交
  • MVCC多版本
  • ⽔平扩展
  • PolarDB-X将数据表以⽔平分区的⽅式,分布在多个DN(DataNode,数据节点)上。
  • MySQL⽣态兼容
  • 标准版(集中式形态)100%兼容MySQL、企业版(分布式形态)版高度兼容MySQL,支持通过binlog实现上下游数据链路兼容
  • HTAP
  • 透明分布式
  • 默认主键拆分
  • PolarDB-X采用自研的X-Paxos协议,确保在故障切换过程中数据存储的RPO=0
  • 分布式线性扩展
  • 全局Binlog和全局一致性备份
  • 集中式和分布式一体化
  • 全局⽇志变更CDC


安装部署

PolarDB-X支持多种形态的快速部署能力

具体安装操作不赘述,详细可参见官方文档。本次验证以下安装形式,以及相关注意事项:

Docker部署单机版PolarDB-X

  • 注意事项:
  • 此模式部署仅作为快速测试使⽤,不适⽤于⽣产环境
  • 容器启动后,默认⽤⼾名和密码是【polardbx_root/123456】
  • polardbx_root账号的密码不能修改的:管控系统会依赖这个内部账号进⾏⼀些操作,如果内核修改了这个账号的密码、⽽管控系统感知不到,就会产⽣问题。

使⽤polardbx_root账号登录后,执⾏以下命令创建root账号并赋予权限:

create user 'root'@'%' identified by 'NJ_blzk@(5166)&$';
grant all privileges on *.* to 'root'@'%';


使用PXD离线部署分布式集群

环境配置等操作步骤略,可参考官方文档

集群拓扑规划

服务器

节点

容器数量

172.23.57.231

DN1-1(leader)

4

DN2-3(log)

DN3-2(follower)

GMS-1

PXD部署工具

172.23.57.232

cn

5

DN1-2(follower)

DN2-1(leader)

DN3-3(log)

GMS-2

172.23.57.233

cn

5

DN1-3(log)

DN2-2(follower)

DN3-1(leader)

GMS-3

安装了PXD的服务器(172.23.57.231)上执行以下命令:

mkdir /opt/polarDB_deploy_config
vi polarx_pxd.yaml
❗注意:
• mem_limit限制的是每个容器的内存限制,计算下每个宿主机上被分配了多少内存,不
要超过宿主机的规格。
• mem_limit参数在部署完成后⽆法在线修改,若想修改,只能重新部署。

配置文件参考

version: v1
type: polardbx
cluster:
  name: pxc-product
  gms:
    image: polardbx/polardbx-engine:v2.4.0_8.4.19
    host_group: [172.23.57.231, 172.23.57.232, 172.23.57.233]
    resources:
      mem_limit: 2G
      cpu_limit: 8
  cn:
    image: polardbx/polardbx-sql:v2.4.0_5.4.19
    replica: 2
    nodes:
      - host: 172.23.57.232
      - host: 172.23.57.233
    resources:
      mem_limit: 2G
      cpu_limit: 16
  dn:
    image: polardbx/polardbx-engine:v2.4.0_8.4.19
    replica: 3
    nodes:
      - host_group: [172.23.57.231, 172.23.57.232, 172.23.57.233]
      - host_group: [172.23.57.232, 172.23.57.233, 172.23.57.231]
      - host_group: [172.23.57.233, 172.23.57.231, 172.23.57.232]
    resources:
      mem_limit: 3G
      cpu_limit: 16

执⾏以下命令,使⽤PXD快速部署PolarDB-X集群:

cd /opt/polarDB_deploy_config
pxd create -file polarx_pxd.yaml -pull_latest_images="false"
  • 注意事项
  • PolarDB-X管理员账号的密码是随机⽣成的,仅出现这⼀次,请注意保存
  • PolarDB-XCN本⾝是⽆状态的,企业版中会部署多个CN节点,任意的CN都可登陆执⾏SQL。如需要负载均衡,可以通过负载均衡组件(如LVS、HAProxy或F5等)对外提供统⼀的接⼊地址


通过MySQL客⼾端连接成功后,可以执⾏以下showstorage显⽰存储节点信息:

PolarDB-X cluster create successfully, you can try it out now.
Connect PolarDB-X using the following command:
mysql -h172.23.57.232 -P60023 -upolardbx_root -pMSIYXWBR
mysql -h172.23.57.233 -P57757 -upolardbx_root -pMSIYXWBR

推荐⽤PXDcheck⾃动调整存储节点(DN)的当前leader分布:

pxd check pxc-product -t dn -r true

可以通过以下命令查看PolarDB-X集群状态和各个组件的容器

pxd list
docker ps

卸载数据库

# 数据都会丢失
pxd delete pxc-product

集群起停

PXD不提供⼀键启停集群的命令,只能通过dockerstart/stop/restartxxxx在每个节点上
进⾏启停容器。


数据迁移(从MySQL到PolarDB-X)

背景:本次迁移操作使用了BatchTool⼯具,该工具是专为PolarDB-X数据库提供数据导⼊导出服务的⼯具。其结合分布式数据库特点实现⼀站式且⾼效地从⽂件导⼊、导出到⽂件以及跨库的离线数据迁移(MySQL/PolarDB-X1.0/PolarDB-X2.0)等功能。

迁移步骤

  • 下载batch-tool.jar
  • 必须要先将库和表都预先创建好
  • 导出Mysql的数据
mkdir /opt/d
cd /opt/d
java -jar /opt/batch-tool.jar -P 3306 -h 172.23.57.225 -u root -p
"NJ_blzk@(5166)&$" -D iot_web -o export -sharding false
  • 导入PolarDB-X
java -jar /opt/batch-tool.jar -P 56565 -h 172.23.57.206 -u polardbx_root -p 
MSIYXWBR -D iot_web -o import -s, -dir /opt/d


PolarDB-X HA高可用

PolarDB-X提供了供Java使⽤的标准JDBC驱动,结合polardbx-connector-java驱动,提供了⾯向数据库的⽆感切换能⼒,实现:

  • 直连PolarDB-X2.0标准版,并提供在HA后⾃动连接新主节点的能⼒
  • 直连PolarDB-X2.0标准版,并在三节点计划切换时提供⽆感切换能⼒
  • 直连PolarDB-X2.0企业版,并实现多节点的负载均衡

Maven依赖

驱动为:polardbx-connector-java,同时通过provided⽅式依赖mysql-connector-java,

便于⽤⼾⾃⾏选择使⽤的MySQLJDBCconnector。

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>com.alibaba.polardbx</groupId>
<artifactId>polardbx-connector-java</artifactId>
<version>2.1.1</version>
</dependency>
  • 使用说明:
  • JDBCURL样例:标准版三节点其中⼀个IP:port或者VIP:port,或者多个IP0:port0,IP1:port1(必须为同⼀集群中的节点,以英⽂逗号分隔),建连时会被路由到leader节点。 jdbc:polardbx://172.23.57.232:58398,172.23.57.233:60387/iot_web
  • 驱动包名:com.alibaba.polardbx.Driver
  • 驱动JDBCURL兼容MySQLJDBCconnector,⽀持设置user、password、useSSL、 characterEncoding、connectTimeout、socketTimeout、allowLoadLocalInfile、 allowPublicKeyRetrieval、sslMode、characterEncoding、useCursorFetch、 rewriteBatchedStatements、netTimeoutForStreamingResults、 useServerPrepStmts、useUnicode等常⻅参数。
  • 暂未提供go的高可用驱动


高可用方案

本次操作通过使用Haproxy+Keepalived实现连接⾼可⽤,通过虚拟ip172.23.57.206:56565连接,相关配置如下:


PolarDB-X双机热备能力验证

GMS验证:leader挂掉场景,需要重新选举,恢复时间在15S左;测试Follower挂掉场景不影响使用。

流程示意图:


DN验证:leader挂了的情况,需要进⾏选举,不影响使用。


PolarDB时序数据场景验证

作为物联网行业,之前是基于OpenGemini实时采集和存储传感器数据(如温度、湿度、压力、振动等),通过分析历史时序数据,预测设备故障或异常。

IOT场景有⼀个显著的特征:数据有⽐较强的时间属性,经常需要查询或者更新最近的数据,而历史的数据查询频次较少可以归档。业务基本要求:

  • 基本表结构:ID、nodeID(节点ID:Long)、value(节点值:Double)、time(时间戳:long毫秒)
  • 数据写入速率:2w条数据/分钟
  • 数据保留策略:一个月、三个月、半年

此类背景推荐:

  • 建表的分区策略:采⽤hash+range的⼆级分区策略,⼀级分区按照设备ID做hash,⼆级分区按照时间,每天⼀个⼦分区。
  • 过期数据⾃动删除:使⽤PolarDB的TTL表来实现
# 按照create_time列进⾏时间分区,每个分区间隔⼀天,每个分区30天(1个⽉)后过期,提前创建
CREATE TABLE iot_data_ttl_test2 (
`id` bigint NOT NULL AUTO_INCREMENT,
`node_id` bigint NOT NULL,
`node_value` varchar(255) DEFAULT NULL,
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id, create_time)
)
PARTITION BY HASH(id)
PARTITIONS 8
LOCAL PARTITION BY RANGE (create_time)
INTERVAL 1 DAY
EXPIRE AFTER 30
PRE ALLOCATE 2;


遇到的问题

  • 每分钟写入2w条数据,会使得集群各个节点的binlog快速膨胀:12h增⼤7~8G。同时PolarDB-X三节点形态,binlog不能关闭,否则影响数据复制


解决方案一:PXD模式部署,只能⼿动执⾏命令删除或者写个脚本定时清理(建议选择业务低峰期操作)

  • ⾸先获取showconsensuslogs输出的第⼆⾏第三列值xx。
  • 在leader上执⾏calldbms_consensus.purge_log(xx)命令来安全清理
  • 反复进⾏1-2,直到清理的只剩⼀个binlog

备注:当前开源PolarDB-X V2.4.1版本,暂不⽀持设置expire_logs_days参数,无法⾃动purgebinlog。(公有云上已经⽀持的,后续开源版本会考虑增加此功能。)

# 通过 pxd check pxc-product -t dn 或者在客⼾端执⾏ show storage 查看DN的leader节点。
# 进⼊DN的leader节点的容器内部
docker exec -it xxxx /bin/bash
# 执⾏myc登录
# 执⾏ show consensus logs 查看consensus⽇志index
# 执⾏ call dbms_consensus.purge_log(xxx) 来清理binlog⽇志,指定logIndex,此⽅式follower 和logge节点也会清理。(有保护机制,如果有副本还在消费则不会清理成功)
# 或者
#【call dbms_consensus.local_purge_log(%d) 需要在每个leader 、follower、logger节点上执⾏清理】


解决方案二:⽣产环境建议⽤k8s的部署形态。开启binlog备份可以定期purgebinlog


结论

通过PolarDB代替时序数据库,完全可以满足当前业务数据量的需求(超大数据量需要自行测试验证) 。

  1. 简化了技术栈,避免多数据库维护,减少运维成本。
  2. PolarDB支持完整的事务(ACID),适合需要强一致性的场景。
  3. 针对复杂查询比如join,OpenGemini性能较差,使用polarDB的话,通用SQL功能更强大。
  4. 如果数据不仅包含时间序列,还包括大量结构化元数据(如设备信息、用户画像),通用数据库更灵活。

其他建议:关闭xa_detach_on_prepare配置

xa_detach_on_prepare是MySQL数据库中⽤于分布式事务(XA事务)的⼀个参数,这个参数主要控制在XA事务的准备阶段(preparephase)后,是否将资源管理器与事务管理器分

离。

具体来说,当设置xa_detach_on_prepare=1时,在XA事务执⾏到XAPREPARE命令后,会触发资源管理器与事务管理器之间的分离。这意味着,即使后续的XACOMMIT或XAROLLBACK命令由不同的连接发出,也能完成事务的提交或回滚操作。这种机制增加了分布式事务处理的灵活性,尤其是在⾼可⽤性部署环境中,能够有效减少对特定连接的依赖。

相反,如果xa_detach_on_prepare=0,则要求完成整个XA事务(包括XACOMMIT或XAROLLBACK)必须使⽤最初开启该XA事务的同⼀连接。这种⽅式可能限制了某些应⽤场景下的灵活性,但它确保了更严格的事务管理和⼀致性控制。在polardb-x中该参数⽤不上,需要配置指定关闭下。

对于已经启动的集群,需要⼿动在【每个】dn上setglobalxa_detach_on_prepare=0;同时将xa_detach_on_prepare=0加到每个dn的my.cnf⽂件中。


相关文章
|
19天前
|
SQL 关系型数据库 MySQL
开源新发布|PolarDB-X v2.4.2开源生态适配升级
PolarDB-X v2.4.2开源发布,重点完善生态能力:新增客户端驱动、开源polardbx-proxy组件,支持读写分离与高可用;强化DDL变更、扩缩容等运维能力,并兼容MySQL主备复制及MCP AI生态。
开源新发布|PolarDB-X v2.4.2开源生态适配升级
|
15天前
|
SQL 关系型数据库 MySQL
开源新发布|PolarDB-X v2.4.2开源生态适配升级
PolarDB-X v2.4.2发布,新增开源Proxy组件与客户端驱动,支持读写分离、无感高可用切换及DDL在线变更,兼容MySQL生态,提升千亿级大表运维稳定性。
317 20
开源新发布|PolarDB-X v2.4.2开源生态适配升级
|
3月前
|
人工智能 关系型数据库 MySQL
开源PolarDB-X:单节点误删除binlog恢复
本文由邵亚鹏撰写,分享了在使用开源PolarDB-X过程中,因误删binlog导致数据库服务无法启动的问题及恢复过程。作者结合实践经验,详细介绍了在无备份情况下如何通过单节点恢复机制重启数据库,并提出了避免类似问题的几点建议,包括采用高可用部署、定期备份及升级至最新版本等。
|
9月前
|
存储 NoSQL 关系型数据库
PolarDB开源数据库进阶课17 集成数据湖功能
本文介绍了如何在PolarDB数据库中接入pg_duckdb、pg_mooncake插件以支持数据湖功能, 可以读写对象存储的远程数据, 支持csv, parquet等格式, 支持delta等框架, 并显著提升OLAP性能。
540 2
|
9月前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课15 集成DeepSeek等大模型
本文介绍了如何在PolarDB数据库中接入私有化大模型服务,以实现多种应用场景。实验环境依赖于Docker容器中的loop设备模拟共享存储,具体搭建方法可参考相关系列文章。文中详细描述了部署ollama服务、编译并安装http和openai插件的过程,并通过示例展示了如何使用这些插件调用大模型API进行文本分析和情感分类等任务。此外,还探讨了如何设计表结构及触发器函数自动处理客户反馈数据,以及生成满足需求的SQL查询语句。最后对比了不同模型的回答效果,展示了deepseek-r1模型的优势。
412 3
|
9月前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课14 纯享单机版
PolarDB不仅支持基于“共享存储+多计算节点”的集群版,还提供类似开源PostgreSQL的单机版。单机版部署简单,适合大多数应用场景,并可直接使用PostgreSQL生态插件。通过Docker容器、Git克隆代码、编译软件等步骤,即可完成PolarDB单机版的安装与配置。具体操作包括启动容器、进入容器、克隆代码、编译软件、初始化实例、配置参数及启动数据库。此外,还有多个相关教程和视频链接供参考,帮助用户更好地理解和使用PolarDB单机版。
424 1
|
6月前
|
供应链 关系型数据库 分布式数据库
2025开源之夏火热报名|一起来设计PolarDB Dashboard
2025开源之夏正在火热报名中,PolarDB邀请全球学子参与云原生与Web开发的前沿项目。活动由中国科学院软件研究所发起,旨在鼓励高校学生通过实际开发维护开源软件,培养优秀开发者,推动开源生态发展。PolarDB项目聚焦设计与开发PolarDB-X Dashboard,要求掌握K8S Client-go和Web开发技术。参与者将根据项目难度获得税前8000至12000元人民币报酬,并获取结项证书。每位学生仅可申请一个项目,详情见官网。
2025开源之夏火热报名|一起来设计PolarDB Dashboard
|
6月前
|
存储 Cloud Native 关系型数据库
PolarDB开源:云原生数据库的架构革命
本文围绕开源核心价值、社区运营实践和技术演进路线展开。首先解读存算分离架构的三大突破,包括基于RDMA的分布式存储、计算节点扩展及存储池扩容机制,并强调与MySQL的高兼容性。其次分享阿里巴巴开源治理模式,涵盖技术决策、版本发布和贡献者成长体系,同时展示企业应用案例。最后展望技术路线图,如3.0版本的多写多读架构、智能调优引擎等特性,以及开发者生态建设举措,推荐使用PolarDB-Operator实现高效部署。
314 3
|
6月前
|
SQL 关系型数据库 分布式数据库
PolarDB开源数据库入门教程
PolarDB是阿里云推出的云原生数据库,基于PostgreSQL、MySQL和Oracle引擎构建,具备高性能、高扩展性和高可用性。其开源版采用计算与存储分离架构,支持快速弹性扩展和100%兼容PostgreSQL/MySQL。本文介绍了PolarDB的安装方法(Docker部署或源码编译)、基本使用(连接数据库、创建表等)及高级特性(计算节点扩展、存储自动扩容、并行查询等)。同时提供了性能优化建议和监控维护方法,帮助用户在生产环境中高效使用PolarDB。
1932 21
|
6月前
|
Cloud Native 关系型数据库 分布式数据库
PolarDB开源:云原生数据库的新篇章
阿里云自研的云原生数据库PolarDB于2023年5月正式开源,采用“存储计算分离”架构,具备高性能、高可用及全面兼容性。其开源版本提供企业级数据库解决方案,支持MySQL、PostgreSQL和Oracle语法,适用于高并发OLTP、核心业务系统等场景。PolarDB通过开放治理与开发者工具构建完整生态,并展望更丰富的插件功能与AI集成,为中国云原生数据库技术发展贡献重要力量。
554 17

相关产品

  • 云原生分布式数据库 PolarDB-X
  • 云原生数据库 PolarDB