DolphinScheduler是一个开源的分布式任务调度零碎,领有分布式架构、多任务类型、可视化操作、散布式调度和高可用等个性,实用于大规模分布式任务调度的场景。目前DolphinScheduler反对的元数据库有Mysql、PostgreSQL、H2,如果在业务中须要更好的性能和扩展性,能够在DolphinScheduler中应用OceanBase数据库作为元数据库进行替换。节点数量和规模能够自在调整,实现无缝扩大和缩减。
一. OceanBase数据库
OceanBase数据库是阿里巴巴自主研发的分布式关系型数据库,具备以下特点:
- 分布式架构:OceanBase采纳分布式架构,可程度扩大,反对PB级别的数据存储和解决。
- 高可用性:OceanBase采纳分布式正本机制,实现数据的冗余备份,保障在节点故障时仍能提供可用的服务。
- 高性能:OceanBase采纳多维度优化技术,包含数据存储、查问优化、分布式事务等方面,可大幅晋升数据库的性能。
- 强一致性:OceanBase采纳基于Paxos协定的多正本一致性算法,实现强一致性的分布式事务处理。
- 兼容SQL:OceanBase反对规范的SQL语言,包含DDL、DML和DQL等命令。
- 可扩展性:OceanBase反对在线扩容和缩容,可依据业务需要自在调整节点数量和规模。
- 安全性:OceanBase采纳多层安全策略,包含明码加密、数据加密、访问控制等,保障数据库的安全性。
总之,OceanBase数据库具备高可用、高性能、强一致性等个性,实用于大规模、高并发的业务场景。
二. DolphinScheduler反对OceanBase数据源
在DolphinScheduler中应用OceanBase做数据源在调度业务上的劣势:
- 高性能:OceanBase能够解决大规模数据,而且在数据存储和解决方面都采纳了多维度优化技术,所以绝对于其余数据库,其有更高的性能体现,能够疾速地解决数据。
- 高可靠性:OceanBase是一个分布式数据库,通过多节点的数据冗余备份,当某个节点产生故障时可能主动切换,保障服务的高可靠性。
- 事务处理:如果业务须要原子性的操作,OceanBase能够提供强一致性的分布式事务处理,从而保证数据不会呈现不统一的状况。
- 散布式调度:DolphinScheduler本身是分布式任务调度零碎,和OceanBase分布式架构互相匹配,能够充分利用Oceanbase的分布式个性,提供更高效率的调度服务。
- 可扩展性:DolphinScheduler和OceanBase都反对在线扩容和缩容,能够依据业务需要自在调整节点数量和规模,实现无缝扩大和缩减。
应用OceanBase作为数据源能够带来高性能、高可靠性、高安全性和弱小的扩展性,和DolphinScheduler联合应用,将会为调度业务的稳定性、可靠性、可扩展性带来更优良的体现。
三. OceanBase具体兼容Mysql的哪些个性
- 数据类型:OceanBase反对MySQL的常见数据类型,如整数、浮点数、日期和工夫、字符串等。
- SQL语法:OceanBase反对MySQL的常见SQL语句,如SELECT、INSERT、UPDATE、DELETE等命令。
- 存储引擎:OceanBase反对InnoDB存储引擎,从而能够兼容MySQL的事务和锁定个性。
- 存储过程:OceanBase反对MySQL的存储过程个性,包含存储过程、存储函数和存储触发器等。
- 工具和驱动:OceanBase反对MySQL的常见工具和驱动,如MySQL Workbench、Navicat和JDBC等。
四. DolphinScheduler更换为OceanBase元数据库的步骤
- 创立OceanBase数据源,包含主机地址、端口号、用户名、明码等信息;
阿里私有云:在阿里云官网申请私有云的OceanBase实例,申请胜利后可在控制台-云数据库OceanBase版-实例列表页面看到状态为运行中的实例:
进入实例能够看到数据库实例和下方的代理私网、公网地址;右上角能够新建数据库和新建账号,非超级账号须要在账号治理页面批改权限才可拜访数据库,此账号和明码会作为服务内连贯OceanBase数据库的数据库账号密码:
创立胜利后在面板登陆数据库或应用其余数据源连贯工具或应用命令行登陆数据库并执行SQL验证是否可用:
- 进入OceanBase后创立DolphinScheduler数据库,执行表初始化SQL文件:
dolphinscheduler/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_mysql.sql;
- 批改DolphinScheduler的配置文件,将原有的MySQL数据源替换成新的OceanBase数据源;
本地启动Api服务:批改dolphinscheduler-api
模块配置文件中的数据库地址
本地启动Standalone服务:批改dolphinscheduler-standalone-server
模块配置文件中的数据库地址
同上
服务器部署:批改 /apache-dolphinscheduler-3.1.2-bin/bin/env/dolphinscheduler_env.sh
中的数据库地址
- 启动DolphinScheduler,失常拜访登陆并其余模块都可失常操作即可验证OceanBase元数据库连贯胜利且失常应用:
五. 切换过程中须要留神哪些事项
1.外键束缚
在应用DolphinSchedulerSQL文件dolphinscheduler_mysql.sql
初始化数据库时,SQL的开始会设置 SET FOREIGN_KEY_CHECKS=0
不查看外键束缚,须要留神的是OceanBase社区版4.0之前是不反对DDL语句的外键束缚的。例官网版本V3.1.1,
所以在这里咱们要留神下OceanBase的版本兼容性。
2. 数据迁徙后插入报错
报错信息如下:
报错信息
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0 at com.mysql.cj.protocol.a.NativePacketPayload.readInteger(NativePacketPayload.java:398) at com.mysql.cj.protocol.a.NativePacketPayload.readString(NativePacketPayload.java:605) at com.mysql.cj.protocol.a.NativeServerSessionStateController$NativeServerSessionStateChanges.init(NativeServerSessionStateController.java:112) at com.mysql.cj.protocol.a.result.OkPacket.parse(OkPacket.java:66) at com.mysql.cj.protocol.a.NativeProtocol.readServerStatusForResultSets(NativeProtocol.java:1691) at com.mysql.cj.protocol.a.TextResultsetReader.read(TextResultsetReader.java:116) at com.mysql.cj.protocol.a.TextResultsetReader.read(TextResultsetReader.java:48) at com.mysql.cj.protocol.a.NativeProtocol.read(NativeProtocol.java:1600) at com.mysql.cj.protocol.a.NativeProtocol.readAllResults(NativeProtocol.java:1654) at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1000) at com.mysql.cj.NativeSession.execSQL(NativeSession.java:666) at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:930) ... 157 common frames omitted
这种状况在切换为OceanBase数据库之后在数据插入时可能会产生。初始化数据时局部数据会带着ID将数据插入表中,之后再次插入数据此时默认主键自增从0开始,这时会呈现默认自增步长从10001开始的状况如下:
六. 总结
DolphinScheduler自身是一个十分弱小的散布式调度零碎,它能够帮忙您轻松治理和调度大规模的数据工作。而当它与OceanBase联合应用时,它能够为您提供更具弹性、更平安、更牢靠的数据存储形式。这种组合能够帮忙您更好地解决大规模数据工作治理和调度的问题,同时进步您的工作效率和工作利用的可靠性。因而,如果您正在应用DolphinScheduler来治理和调度数据工作,强烈建议您尝试应用OceanBase作为其元数据库,让您的工作利用变得更加高效和牢靠。
本文由 白鲸开源科技 提供公布反对!