体验OceanBase 的binlog service

OceanBase对MySQL具备很好的兼容性。目前,已经发布了开源版的binlog service工具,该工具能够将OceanBase特有的clog模式转换成binlog模式,以便下游工具如canal、flink cdc等使用。今天,我们就来简单体验一下这个binlog service的功能,并利用mysql binlog工具进行解析,看看转换是否准确无误。

binlog service 依赖oblogproxy,是 oblogproxy 提供的一种服务模式,当 binlog_mode = true 时,则提供兼容原生 mysql binlog 的服务,包含相关sql、binlog文件生成及binlog dump服务,因此想要使用binlog service功能,需要下载oblogproxy,可在OceanBase官网进行下载:下载中心,找到 OceanBase日志代理服务 (OBLogProxy)

关于binlog service相关文档可以先在github上查看:binlog service文档

相关介绍

  • obproxy: ob 代理服务,sql 和 binlog 都将通过 obproxy 作为统一入口来访问 ob,其中的 binlog 包含了 binlog 相关的命令(如:show binlog events;)、binlog replication(即binlog复制协议)
  • oblogproxy: ob 日志代理服务,提供了 mysql binlog 的兼容能力(包含了 binlog 相关命令和 binlog replication)
  • bc: oblogproxy 中 binlog converter 子进程,通过 libobcdc 拉取和解析 clog,转换为 binlog 文件
  • bd: oblogproxy 中 binlog dumper 子进程,对下游(canal or flinkcdc or ...) binlog dump 请求提供 binlog events 订阅服务
  • bcm: oblogproxy 中 bc 进程的管理模块
  • bdm: oblogproxy 中 bd 进程的管理模块

整个架构图如下:oblogproxy通过连接集群的obproxy,获取集群日志信息,通过oblogproxy将其转换为binlog模式。下游的canal、flink cdc等,也是通过连接obproxy组件来消费binlog。

1702608197

相关限制

  • 目前binlog service功能,要求observer版本至少 >= 4.2.1,obproxy >= 4.2.1;
  • OB针对enum、set所实现的拓展语义不支持,比如set定义数支持超过64个、支持重复、enum支持插入未定义数据(比如'')等
  • varchar(65536)定义不支持
  • 不支持gis类型
  • 另外对于MySQL的一些DDL,存在一定的差异,可能导致解析出的binlog在MySQL不兼容,不过为解决这种问题observer做了兼容性支持,建议obproxy设置 init_sql 开启 _show_ddl_in_compat_mode ,开启后observer show create table输出会完全兼容mysql的语法,建议设置为租户级别

环境介绍

这里总共4台机器,分别安装一套3节点OceanBase集群,1个oblogproxy服务

IP角色
172.24.255.54oblogproxy
172.24.255.56OBServer、OBProxy
172.24.255.57OBServer
172.24.255.58OBServer

安装及配置

OBProxy配置

从上面的基本架构图可以看出,不论是oblogproxy还是canal、flink cdc,都是与obproxy进行交互,canal、flink cdc等不感知 oblogproxy(即真正提供的 binlog service 服务的组件),下游的请求是由 obproxy 转发给 observer 或 oblogproxy,

因此在 obproxy 上需要配置 oblogproxy 的服务地址。

# 连接到obproxy上,通过obproxy连接集群或者直连obproxy
[root@OB1 ~]# obclient -h172.24.255.56 -P2883 -uroot@sys#myoceanbase -pxxx -Doceanbase -A

# 查询binlog server 地址,当前为空
obclient [oceanbase]> show proxyconfig like 'binlog_service_ip';
+-------------------+-------+-----------------------------------------+-------------+---------------+
| name              | value | info                                    | need_reboot | visible_level |
+-------------------+-------+-----------------------------------------+-------------+---------------+
| binlog_service_ip |       | binlog service ip, format ip1:sql_port1 | false       | SYS           |
+-------------------+-------+-----------------------------------------+-------------+---------------+
1 row in set (0.001 sec)

# 配置binlog server 地址,地址形式为ip:port
obclient [oceanbase]> alter proxyconfig set binlog_service_ip="172.24.255.54:2983";
Query OK, 0 rows affected (0.004 sec)

# 开启binlog服务的转发
obclient [oceanbase]> alter proxyconfig set enable_binlog_service='True';

# 设置init_sql,可以设置通过该obproxy的session链接都在session级别设置一些系统变量
obclient [oceanbase]> alter proxyconfig set init_sql='set _show_ddl_in_compat_mode = 1;';
binlog service安装及启动

下载安装包,上传到服务器上,执行安装

[root@OB2 ~]# rpm -ivh oblogproxy-2.0.0-100000012023111521.el7.x86_64.rpm

默认安装家目录会在 /usr/local/oblogproxy

修改配置文件,配置文件为家目录下conf/conf.json

[root@OB2 ~]# cd /usr/local/oblogproxy
[root@OB2 oblogproxy]# vim conf/conf.json
# 主要修改下面几项内容,打开binlog,然后修改几个路径为绝对路径
"binlog_mode": true
"oblogreader_path": "/usr/local/oblogproxy/run"
"bin_path": "/usr/local/oblogproxy/bin"
"oblogreader_obcdc_ce_path_template": "/usr/local/oblogproxy/obcdc/obcdc-ce-%d.x-access/libobcdc.so"
"binlog_log_bin_basename": "/usr/local/oblogproxy/run"
"binlog_obcdc_ce_path_template": "/usr/local/oblogproxy/obcdc/obcdc-ce-%d.x-access/libobcdc.so"

其他相关配置内容,可参考binlog service文档

配置账户,这里因为账户和密码都需要加密,在配置文件中不能直接明文填写,所以需要调用config_sys函数,来对用户名和密码加密并替换conf.json文件中的ob_sys_username,ob_sys_password

[root@OB2 oblogproxy]# ./run.sh config_sys ${sys_usr} ${sys_pwd}
# 这里会提示要更新conf.json文件中的ob_sys_username,ob_sys_password,填y即可
DEPLOY_PATH : /usr/local/oblogproxy

!!DANGER!! About to update logproxy conf/conf.json, Please confirm? [Y/n] y

注意,这里填写的用户名、密码,必须是sys租户的,例如root@sys#cluster_name,填写时需要用双引号将用户名密码括起来。

启动binlog service

# start 启动 oblogproxy 服务进程
[root@OB2 oblogproxy]# ./run.sh start

查看日志,看下是否有报错,日志在log目录下

[root@OB2 oblogproxy]# cat log/logproxy.log
[2023-12-06 15:51:34] [info] environmental.cpp(27): Max file descriptors: 655350
[2023-12-06 15:51:34] [info] environmental.cpp(34): Max processes/threads: 655360
[2023-12-06 15:51:34] [info] environmental.cpp(41): Core dump size: 18446744073709551615
[2023-12-06 15:51:34] [info] environmental.cpp(48): Maximum number of pending signals: 252872
[2023-12-06 15:51:34] [info] binlog_server.cpp(66): Start pull up all BC processes
[2023-12-06 15:51:34] [info] binlog_server.cpp(76): The current binlog converter [myoceanbase,obtest]is alive and the pull action is terminated
[2023-12-06 15:51:34] [info] binlog_server.cpp(76): The current binlog converter [myoceanbase,obtest]is alive and the pull action is terminated
[2023-12-06 15:51:34] [info] binlog_server.cpp(89): Finish to pull up 1 BC processes
[2023-12-06 15:51:34] [info] event_wrapper.cpp(43): Succeed to listen socket with port: 2983
[2023-12-06 15:51:34] [info] binlog_server.cpp(47): Start OceanBase binlog server on port 2983

配置binlog service

目前binlog service已经启动成功,但是需要指定获取哪个租户的binlog,需要登录到oblogproxy上,创建binlog订阅子进程,官网给出的具体语法如下:

CREATE BINLOG [IF NOT EXISTS] FOR TENANT `cluster`.`tenant` [TO USER `user` PASSWORD `pwd`] [FROM <timestamp>] WITH CLUSTER URL `<cluster url>`[, INITIAL_TRX_XID `ob_txn_id`, INITIAL_TRX_GTID_SEQ `gtid_seq`];

-- 支持对binlog服务指定账户名与密码(用于订阅OB日志,4.x可以指定为业务租户)
[TO USER `user` PASSWORD `pwd`]

-- 支持指定oceanbase的事务id与binlog的gitd做映射
-- INITIAL_TRX_XID: ob的事务id
-- INITIAL_TRX_GTID_SEQ: 映射的gitd seq
[, INITIAL_TRX_XID `ob_txn_id`, INITIAL_TRX_GTID_SEQ `gtid_seq`]

-- 示例:
CREATE BINLOG FOR TENANT `cluster`.`tenant` TO USER `user` PASSWORD `pwd` FROM 1668339370000000 WITH CLUSTER URL 'cluster_url', SERVER UUID '2340778c-7464-11ed-a721-7cd30abc99b4', INITIAL_TRX_XID '97984179', INITIAL_TRX_GTID_SEQ '31';

上面几个参数的获取方式,连接到目标observer集群,执行:

timestamp:select time_to_usec(NOW());

clustet_url:show parameters like '%url%'

SERVER UUID: show global variables like '%uuid';

INITIAL_TRX_XID: select * from GV$OB_TRANSACTION_PARTICIPANTS;

INITIAL_TRX_GTID_SEQ: 1 # 第一次启动的话,这里可以随意指定一个数字

在第一次启动的时候,也可以不用指定时间戳、INITIAL_TRX_XID和INITIAL_TRX_GTID_SEQ,系统会自动进行配置,这里我执行启动的命令,并查看状态:

[root@OB2 oblogproxy]# mysql -A -c -h 127.0.0.1 -P 2983
MySQL [(none)]> CREATE BINLOG FOR TENANT `myoceanbase`.`obtest` TO USER `root` PASSWORD `xxxx` WITH CLUSTER URL 'http://172.24.255.53:8080/services?Action=ObRootServiceInfo&User_ID=alibaba&UID=ocpmaster&ObRegion=myoceanbase', SERVER UUID 'xxxx-xxx-xx-xx-xxxxxx';
MySQL [(none)]> SHOW BINLOG STATUS\G;
*************************** 1. row ***************************
cluster: myoceanbase
 tenant: obtest
 status: {
	"binlog_files" :
	[
		{
			"binlog_name" : "mysql-bin.000001",
			"binlog_size" : 178
		}
	],
	"client_id" : "/usr/local/oblogproxy/run/myoceanbase/obtest",
	"cpu_status" :
	{
		"cpu_count" : 16,
		"cpu_used_ratio" : 0.12666244804859161
	},
	"disk_status" :
	{
		"disk_total_size_mb" : 503837,
		"disk_usage_size_process_mb" : 0,
		"disk_used_ratio" : 0.45975583791732788,
		"disk_used_size_mb" : 231642
	},
	"memory_status" :
	{
		"mem_total_size_mb" : 63238,
		"mem_used_ratio" : 0.0,
		"mem_used_size_mb" : 735
	},
	"network_status" :
	{
		"network_rx_bytes" : 0,
		"network_wx_bytes" : 0
	},
	"pid" : 7605
}
1 row in set (0.00 sec)

启动之后,可以看到订阅的子进程binlog_converter已经开启

1702608225

此时,在家目录下的run/myoceanbase/obtest/data/下面,就会自动生成mysql-bin文件

1702608245

至此,整个配置启动过程就已经完毕,源OceanBase集群的增删改查都可以抓取到,并写入到mysql-bin文件中

解析binlog

最后一步,我们尝试在源集群中写入数据,使用mysqlbinlog工具进行解析,看下是否解析正常

这里要求mysqlbinlog版本为Ver 3.4版本,对应的mysql版本大概为5.7.9

1702608266

这里在源端执行一个建表和插入数据,看下是否能解析出来

1702608280

解析结果

1702608301

以上是对OceanBase 的 binlog service做的一个简单测试,大家有兴趣的话,可以下载下来,实际测试和使用,有问题的话,也可以直接给官方提issue,其他相关命令,在github上也可以查到,后续在官网也会推出binlog service的文档。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ARM IHI0069F GIC architecture specification (5)

Ch2 中断分配与路由 2.1 The Distributor and Redistributors Distributor 为 SPI 提供路由配置&#xff0c;并保存所有关联的路由和优先级信息。 Redistributor 提供 PPI 和 SGI 的配置设置。 Redistributor总是在有限的时间内向 CPU 接口呈现具有最高优先级的待处理中断。 …

【QT】setContextMenuPolicy()函数用法

在Qt中&#xff0c;setContextMenuPolicy() 是一个相当通用的方法&#xff0c;几乎所有的继承自 QWidget 或其派生类的图形用户界面控件都可以使用该方法来设置它们的上下文菜单策略。这意味着&#xff0c;包括但不限于以下常见的Qt GUI控件都能使用 setContextMenuPolicy() 来…

软考高级架构师:进程和线程概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

picGo图床搭建gitee和smms(建议使用)

picGoGitee 这个需要下载gitee插件, 因为官方频繁的检索文件类型, 有时候也会失效 如果没有特殊要求平时存个学习的要看图中文字的重要的图片建议就是smms, 免费也够用! 图片存本地不方便, 各种APP中来回传还会失帧损失画质, 所以你值得往下看 picGosmms 建议使用这个, sm…

idea2023+jdk1.8+Maven3.6.3+Testng6.10+junit4.13搭建测试

idea2023jdk1.8Maven3.6.3Testng6.10junit4.13搭建测试 首先创建maven工程 导入依赖 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/…

HTTP和HTTPS谁传输数据更安全?

1.HTTP HTTP在传输数据时&#xff0c;通常都是明文传输&#xff0c;也就是传输的数据没有进行加密。在这种情况下&#xff0c;如果传输的是一些敏感数据&#xff0c;比如某银行卡密码&#xff0c;就很容易被别人截获到&#xff0c;这就对我们的个人利益产生了威胁。 HTTP传输数…

Linux中JMeter的使用

Linux中JMeter的使用 Linux版本JMeter安装 # 1、下载、安装JMeter 如果有安装包直接上传即可 wget -c https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.4.1.tgz # 解压 tar -zxvf apache-jmeter-5.4.1.tgz -C /usr/local/sjdwz_test cd /usr/local/sjdwz_t…

【教学类-09-05】20240402细线迷宫图03+箭头图片(A4横版一页-4份横版)

作品展示 背景需求&#xff1a; 在word模板上添加“形状-箭头”&#xff0c;结果生成的图片上&#xff0c;箭头位置挪移。 思考&#xff0c;如何直接在迷宫图上添加箭头&#xff0c;以图片形式将迷宫图箭头插入docx word模板 重点说明 代码展示 批量制作细线条的迷宫图(A4横板…

上位机图像处理和嵌入式模块部署(qmacvisual获取边界点)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在图像处理中&#xff0c;解决了分割的问题之后&#xff0c;下面就是属性信息的提取。在这其中&#xff0c;有一种属性是非常重要的 &#xff0c;那…

Redis(一) redis配置 | 如何连接redis服务器 | 基本数据类型 | 基本全局命令 | 数据结构和内部编码方式

文章目录 前言Redis 配置文件连接 redis 服务器Redis 常见数据类型Redis 基本全局命令set 和 get 命令KEYS 命令EXISTS 命令DEL 命令EXPIRE 和 TTL 命令Redis 过期策略定时器和时间轮的方式实现过期key的及时删除 TYPE 命令 数据结构和编码方式 前言 本篇文章将介绍我们在 Lin…

Flume进阶学习!

本文图片来自于8.flume实时监控文件hdfs sink使用演示_哔哩哔哩_bilibili Apache Flume 的启动过程及其配置文件和脚本 在官网下载的Flume的压缩包中&#xff0c;.lib文件有大量的jar包&#xff0c;按道理说只有.lib文件就可以运行Flume程序了。只不过需要java -jar命令还要加…

android APP monkey 测试

monkey 测试 一、电脑ADB安装及使用详解1、什么是 Monkey 测试2、什么是ADB3、ADB的作用4、安装前提条件5、ADB下载6、ADB安装与配置 二、连接安卓手机检查是否连接上安卓手机windows端安装ADB驱动 三、 monkey测试操作指令演示指令APP包名查看方式测试效果 一、电脑ADB安装及使…

Golang 内存管理和垃圾回收底层原理(二)

一、这篇文章我们来聊聊Golang内存管理和垃圾回收&#xff0c;主要注重基本底层原理讲解&#xff0c;进一步实战待后续文章 垃圾回收&#xff0c;无论是Java 还是 Golang&#xff0c;基本的逻辑都是基于 标记-清理 的&#xff0c; 标记是指标记可能需要回收的对象&#xff0c…

日记本(源码+文档)

日记本&#xff08;小程序、ios、安卓都可部署&#xff09; 文件包含内容程序简要说明功能项目截图客户端首页日记列表 书写日记个人中心设置密码锁拨打客服热线修改信息退出登录登录页输入密码锁注册页 后端管理登录页首页管理员列表管理用户管理日记列表管理日记数据 文件包含…

Spring Boot项目启动速度优化

1、配置自动配置排除列表&#xff0c;减少启动自动配置扫描&#xff0c;配置项spring.autoconfigure.exclude 2、启动类添加索引注解Indexed&#xff0c;去除启动过程中 Components 的扫描步骤&#xff0c;直接从索引文件读取。 import org.springframework.stereotype.lndexe…

基于springboot的房屋租赁系统平台

功能描述 流程&#xff1a;房主登陆系统录入房屋信息》发布租赁信息&#xff08;选择房屋&#xff09;》租客登陆系统浏览租赁信息》和房主联系、看房&#xff08;根据租赁信息单的电话线下沟通&#xff09;》房主发起签约&#xff08;生成邀请码&#xff09;》租客登陆系统根…

Qt加载.css/.qss文件设置控件的QSS样式(支持程序运行时修改且立即生效类似换肤效果)

初学Qt时要想通过QSS修改控件QWidget&#xff0c;QPushButton等原生基础控件的样式&#xff0c;一般都是直接在.ui文件中直接添加qss&#xff0c;或者在代码中通过setStyleSheet(QString qss)来设置。当程序很大时&#xff0c;很多地方需要复用样式时会非常麻烦&#xff0c;qss…

QA测试开发工程师面试题满分问答3: python的深拷贝和浅拷贝问题

在 Python 中&#xff0c;深拷贝&#xff08;deep copy&#xff09;和浅拷贝&#xff08;shallow copy&#xff09;是用于创建对象副本的两种不同方式。 浅拷贝是创建一个新的对象&#xff0c;该对象与原始对象的内容相同&#xff08;包括内部嵌套对象的引用&#xff09;&…

SBCFormer:能够在单板计算机上以每秒1帧的速度进行全尺寸ImageNet分类的轻量级网络

摘要 https://arxiv.org/ftp/arxiv/papers/2311/2311.03747.pdf 计算机视觉在解决包括智能农业、渔业和畜牧业管理等不同领域的实际问题中变得越来越普遍。这些应用可能不需要每秒处理许多图像帧&#xff0c;因此从业者倾向于使用单板计算机&#xff08;SBCs&#xff09;。尽管…

Pytorch数据结构:Tensor

文章目录 Tensor基础1.1、Tensor的维度&#xff08;Dimensions&#xff09;1.1.1、举例说明1.1.2、高维Tensor 1.2、.dim()和.size()方法1.2.1、.dim()方法1.2.2、.size()方法1.2.3、.shape属性1.2.3、示例代码1.2.3.1、一维Tensor1.2.3.2、二维Tensor1.2.3.3、三维Tensor 1.3、…