OceanBase中binlog service 功能的试用

OBLogProxy简介

OBLogProxy即OceanBase的增量日志代理服务,它可与OceanBase建立连接并读取增量日志,从而为下游服务提供了变更数据捕获(CDC)的功能。

 关于OBLogProxy的详尽介绍与具体的安装指引,您可以参考这篇官方OBLogProxy文档  。

此服务主要具备两种模式,分别为CDC模式与binlog模式。

CDC 模式需结合 OBLogClient 来完成数据订阅,此客户端能够将接收到的 clog 日志数据转换成 LogMessage 对象,用户可以使用它们来定制自己的处理逻辑。鉴于该模式需用户想自行编写一些代码来解析和使用这个相对不那么通用的 LogMessage,因此本次我并未尝试使用它。

binlog 模式会生成和 MySQL 兼容的 binlog,binlog 比上面提到的 LogMessage 要通用的多,下游 MySQL 生态的组件都可以直接消费 binlog。所以我们能够通过这个模式,以很低的成本去复用 MySQL 生态工具,避免重复造轮子,我这次要试用的就是这个模式。

要把 OceanBase 的 clog 转成 binlog 往下游发送,一共分三步:

  1. 我们首先要有一个标准的 OceanBase 的集群。
  2. 然后会起一个叫 Binlog Service 的服务,它可以跟每个租户之间建立一个连接,去拉每一个租户的 clog 日志,把 clog 日志拉过来之后,会把它解析成 binlog 文件,然后存储到磁盘上。
  3. 外部的订阅服务,如果有需求的话,就可以给 Binlog Service 发一个 binlog dump 的命令,Binlog Service就会基于这个 binlog dump 命令的参数,把 binlog 数据往下游去发送。

1705632409

安装过程

升级 observer 和 proxy 的版本

根据官网上写的 binlog 模式的使用限制,先得升级一下 observer 和 proxy 到比较新的版本。

我这边的 observer 版本是符合要求的,但是 proxy 版本比较老,需要在官网上下载一个最新版本的 proxy 4.2.1,把软件版上传到 ocp,再拿鼠标点一下升级 proxy。

1705632430

然后等升级任务完成就好了,升级 proxy 大概要花两分钟左右的样子。

1705632442

安装 OBLogProxy

详见官网链接。看官网的架构图,oblogproxy 需要和 proxy 进行交互,所以我这里直接把 oblogproxy 放到了 proxy 所在的节点上,版本是 2.0.0。

[xiaofeng.lby@obrd.80c.sqlvd-a3-n0 /home/xiaofeng.lby]
$sudo rpm -i oblogproxy-2.0.0-101000012023121819.el7.x86_64.rpm

安装一共分三步:配置 proxy,配置 oblogproxy,运行 oblogproxy。

配置 proxy

这里不求甚解,在安装 oblogproxy 的节点上用 proxy 连接测试集群的 sys 租户,然后直接照着官网链接和洪波博客的步骤把相关的几个配置命令都执行了一遍。

obclient -h11.124.5.45 -P2883 -uroot@proxysys#obn.xiaofeng.lby.11.158.31.20 -Dtest# 查询 binlog server 地址,当前为空
show proxyconfig like 'binlog_service_ip';# 配置 binlog service 地址
alter proxyconfig set binlog_service_ip="11.124.5.45:2983";# 开启 binlog 服务
alter proxyconfig set enable_binlog_service='True';# 设置 init_sql,开启 show_ddl_in_compat_mode。
# 开启后,OceanBase 的 show create table 输出将完全兼容 MySQL 的语法。
alter proxyconfig set init_sql='set _show_ddl_in_compat_mode = 1;';# 验证配置是否正确
show proxyconfig like 'binlog_service_ip';

其中有一步是设置 _show_ddl_in_compat_mode 这个东西,感觉挺有意思。官网上说:“OceanBase 的 DDL 语法与 MySQL 的 DDL 语法存在一定的差异,即 OceanBase 具有自己的一些扩展语法,因此部分 DDL 语法可能无法解析。为了解决这种问题,OceanBase 进行了兼容性支持。我们建议在 OBProxy 中设置 init_sql 来开启_show_ddl_in_compat_mode。开启后,OceanBase 的 show create table 输出将完全兼容 MySQL 的语法。”

TODO:不是特别理解官网上的这个说法,一会儿准备试试在 OceanBase 里创建一个 OceanBase 支持,但是 MySQL 不支持的 global index,看看生成的 binlog 结果是啥。

create table t1(c1 int primary key, c2 int, c3 int);
create unique index idx3 on t1(c3) partition by hash(c3);show create table t1\G
*************************** 1. row ***************************Table: t1
Create Table: CREATE TABLE `t1` (`c1` int(11) DEFAULT NULL,`c2` int(11) DEFAULT NULL,`c3` int(11) DEFAULT NULL,KEY `idx3` (`c3`) BLOCK_SIZE 16384 GLOBALpartition by hash(c3)
(partition `p0`)
)

配置 oblogproxy

这一步直接参考官网步骤,没遇到啥问题,这里略去不提。

运行 oblogproxy

这一步直接参考官网步骤,也没遇到啥问题,这里也略去不提。成功启动 oblogprxoy 之后,可以看到多了一个叫 binlog_converter 的进程。

[xiaofeng.lby@obrd.80c.sqlvd-a3-n0 /usr/local/oblogproxy]
$ps -ef | grep 'logproxy'
root      70452 131066 12 15:53 pts/7    00:00:51 ./binlog_converter binlog_converter.conf /usr/local/oblogproxy/run/obn.xiaofeng.lby.11.158.31.20/mysql
xiaofen+ 103276  76610  0 16:00 pts/4    00:00:00 grep --color=auto logproxy
root     131066 131059  2 15:39 pts/7    00:00:25 ./bin/logproxy -f ./conf/conf.json

正确性验证

参考了洪波的博客,知道了生成的 MySQL binlog 应该在 /usr/local/oblogproxy/run/cluster_name/tenant_name/data 这个路径下。

[xiaofeng.lby@obrd.80c.sqlvd-a3-n0 /usr/local/oblogproxy/run/obn.xiaofeng.lby.11.158.31.20/mysql/data]
$ls
index.LOCK  mysql-bin.000001  mysql-bin.index

因为要求 mysqlbinlog 的版本是 3.4,所以我在 MySQL 官网上下载了一个 5.7.9 版本的 MySQL,准备用这个版本的 MySQL 里自带的 mysqlbinlog 3.4 看下对应的 SQL 能否在原生 MySQL 里执行。

1705632458

这里鸡蛋里面挑下骨头,回到上面那个 global index 的问题,执行创建全局索引的 DDL,看下生成的 mysql-bin.000001 里面是什么东西,以及能否在 MySQL 下面执行。

在 OceanBase 下面执行这几条 SQL

create table t1(c1 int primary key, c2 int, c3 int);# 估计这条 DDL 生成的 binlog 在原生 MySQL 里无法成功执行
create unique index idx3 on t1(c3) partition by hash(c3);insert into t1 values(1, 2, 3);update t1 set c1 = 2;delete from t1;

这里也不求甚解直接照着洪波的命令执行。

[xiaofeng.lby@obvos-dev-d3 /home/xiaofeng.lby/work/mysql-5.7.9-linux-glibc2.5-x86_64/bin]
$./mysqlbinlog --no-defaults --base64-output=decode-rows -vv /home/xiaofeng.lby/work/mysql-bin.000001

看到的是下面这个结果:dml 部分的 update 被记录成了 delete + insert,都能对的上;ddl 部分好像有些小问题,OceanBase 里的独有的全局索引 idx3 被记录成了 create unique index idx3 on t1(c3) partition by hash(c3)。

1705632472

MySQL 里面不支持索引相对于主表有自己独立的分区,create unique index idx3 on t1(c3) partition by hash(c3) 显然是不可能执行成功的。可能需要改成 create unique index idx3 on t1(c3)?不过这样改含义好像变化的有点儿大,可能需要相关的产品同学确定清楚这里的产品行为究竟应该是怎样。

1705632482

总结

OceanBase 里和 MySQL 兼容的基础功能看上去生成的 binlog 没啥问题,但是 OceanBase 相对于 MySQL 独有的一些扩展功能,例如我测试的全局索引之类的,可能还值得产品同学和研发同学再继续打磨一下。

今天由于时间关系只是做了一个基本的小验证,还没来得及用下游的 canal、flink-cdc 等其他 mysql 生态工具向 proxy 执行 binlog dump 命令去测试,to be continue。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/275791.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQ快速入门_2. rocketmq 的应用场景、与其他mq的差异

0. 引言 之前我们讲解过rabbitMQ,本期我们将进入吞吐量更加强大的rocketMQ的学习。 1. 基础概念 如果你是刚接触MQ的同学,还不清楚消息队列的基础概念的,可以参考我之前这篇文章: https://wu55555.blog.csdn.net/article/deta…

IOS降级后从高版本到低版本恢复备份

IOS降级后从高版本到低版本恢复备份 此方法只适用于小版本还原,比如17.4->17.3,未验证大版本恢复可行性手机型号:iphone 13pro 系统版本:17.4 降级版本:17.3.1 步骤 通过itunes或者MacOS系统下对当前版本进行备份…

C++中的STL-string类

文章目录 一、为什么学习string类?1.1 C语言中的字符串 二、准库中的string类2.2 string类2.3 string类的常用接口说明2.4 string类对象的容量操作2.5 string类对象的访问及遍历操作2.5 string类对象的修改操作2.7 string类非成员函数2.8 模拟实现string 一、为什么…

部署私有KMS服务器,并设置自动激活Windows和office

介绍 vlmcsd是一个KMS激活服务器的模拟器,可以在Windows Server之外的平台上部署自己的KMS服务器。它是一个开源项目,由Wind4开发,目前在Linux上运行(包括Android、FreeBSD、Solaris、Minix、Mac OS、iOS和Windows等)…

浅浅探索Memcached

一、NoSQL介绍 NoSQL是对 Not Only SQL、非传统关系型数据库的统称。 NoSQL一词诞生于1998年,2009年这个词汇被再次提出指非关系型、分布式、不提供ACID的数据库设计模式。 随着互联网时代的到来,数据爆发式增长,数据库技术发展日新月异&a…

【Node.js从基础到高级运用】二、搭建开发环境

Node.js入门:搭建开发环境 在上一篇文章中,我们介绍了Node.js的基础概念。现在,我们将进入一个更实际的阶段——搭建Node.js的开发环境。这是每个Node.js开发者旅程中的第一步。接下来,我们将详细讨论如何安装Node.js和npm&#…

Gitlab CICD 下载artifacts文件并用allure打开,或bat文件打开

allure命令行打开aritfacts报告 首先下载allure.zip,并解压 配置环境变量 使用命令行打开allure文件夹 allure open 2024-03-11-14-54-40 2024-03-11-14-54-40 包含index.html Bat文件打开artifacts There are 2 html reports in the download artifacts.zip S…

TikTok新手如何起号?环境因素与内容创新技巧

相信很多刚入行的TikTok玩家都遇到过一个难题,那就是账号权重低,播放量在个位数徘徊,其实都是因为还没起号!那么具体如何起号呢?下面小编也给大家分享一下技巧。 一、如何起号 1、明确注册 TikTok 账号的目的 无论是…

Unity的PICO项目基础环境搭建笔记(调试与构建应用篇)

文章目录 前言一、为设备开启开发者模式1、开启PICO VR一体机。前往设置>通用>关于本机>软件版本号2、一直点击 软件版本号 ,直到出现 开发者 选项3、进入 开发者模式,打开 USB调试,选择 文件传输 二、实时预览应用场景1、下载PC端的…

python自学7

第二章第一节面向对象 程序的格式都不一样,每个人填写的方式也有自己的习惯,比如收集个人信息,可能有人用字典字符串或者列表, 类的成员方法 类和对象 构造方法 挨个传输值太麻烦了,也没有方便点的,有&…

基于单片机的指纹采集识别系统设计

目 录 摘 要 I Abstract II 引 言 3 1 硬件选择与设计 5 1.1 总体设计及方案选择 5 1.1.1主控单片机选择 5 1.1.2传感器模块选择 6 1.1.3显示器模块选择 6 1.2 系统总体设计 7 2 系统硬件电路设计 8 2.1 系统主电路设计 8 2.1.1 主体电路设计 8 2.1.2 单片机最小系统设计 8 2.…

Baumer工业相机堡盟工业相机如何通过NEOAPISDK实现双快门采集两张曝光时间非常短的图像(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPISDK实现双快门采集两张曝光时间非常短的图像(C) Baumer工业相机Baumer工业相机定序器功能的技术背景Baumer工业相机通过NEOAPI SDK使用定序器功能预期的相机动作技术限制定序器的工作原理 Baumer工业相机通过NE…

【Java 并发】AbstractQueuedSynchronizer

1 AQS 简介 在同步组件的实现中, AQS 是核心部分, 同步组件的实现者通过使用 AQS 提供的模板方法实现同步组件语义。 AQS 则实现了对同步状态的管理, 以及对阻塞线程进行排队, 等待通知等一些底层的实现处理。 AQS 的核心也包括了这些方面: 同步队列, 独占式锁的获取和释放, 共…

Ps:清理

清理 Purge命令位于“编辑”菜单下,它主要用于释放 Photoshop 使用的内存资源,有助于提高系统的性能。 通过使用“清理”命令,用户可以有效管理 Photoshop 的资源使用,特别是在处理大型文件或进行长时间编辑会话时。 定期清理可以…

华为ce12800交换机m-lag(V-STP模式)配置举例

配置## 标题思路 采用如下的思路配置M-LAG双归接入IP网络: 1.在Switch上配置上行接口绑定在一个Eth-Trunk中。 2.分别在SwitchA和SwitchB上配置V-STP、DFS Group、peer-link和M-LAG接口。 3.分别在SwitchA和SwitchB上配置LACP M-LAG的系统优先级、系统ID。 4.分别在…

【wine】WINEDEBUG 分析mame模拟器不能加载roms下面的游戏 可以调整参数,快速启动其中一个游戏kof98

故障现象,MAME启动后,游戏都没有识别 添加日志输出,重新启动wine #!/bin/bashexport WINEPREFIX$(pwd)/.wine export WINESERVER$(pwd)/bin/wineserver export WINELOADER$(pwd)/bin/wine export WINEDEBUG"file,mame,warn,err"…

Unity之PUN实现多人联机射击游戏的优化

目录 🎮一、 跳跃,加速跑 🎮二、玩家自定义输入昵称 🍅2.1 给昵称赋值 🍅2.2 实现 🎮三、玩家昵称同步到房间列表 🍅3.1 获取全部玩家 🍅3.2 自定义Player中的字段 &#…

Unity DropDown 组件 详解

Unity版本 2022.3.13f1 Dropdown下拉菜单可以快速创建大量选项 一、 Dropwon属性详解 属性:功能:Interactable此组件是否接受输入?请参阅 Interactable。Transition确定控件以何种方式对用户操作进行可视化响应的属性。请参阅过渡选项。Nav…

没有硬件基础可以学单片机吗?

没有硬件基础可以学单片机吗? 在开始前我分享下我的经历,我刚入行时遇到一个好公司和师父,给了我机会,一年时间从3k薪资涨到18k的, 我师父给了一些 电气工程师学习方法和资料,让我不断提升自己&#xff0c…

AHU 人工智能实验-CCA

神经网络覆盖算法——CCA(基于Ling Zhang 和Bo Zhang论文) Abstract 在这篇文章中我将介绍基于张铃和张钹学者提出的CCA算法,并实现代码复现,给出使用的数据集,以及实验结果对比。 1. Introduction 1.1 Background 我们知道自…