Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Metz
oceanbase
提交
2a363478
O
oceanbase
项目概览
Metz
/
oceanbase
与 Fork 源项目一致
Fork自
oceanbase / oceanbase
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
oceanbase
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
2a363478
编写于
12月 13, 2021
作者:
A
askdb
提交者:
GitHub
12月 13, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update 4.11.md v1 (#710)
上级
c979869b
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
273 addition
and
1 deletion
+273
-1
docs/docs/junior-training/ob-quick-start/chapter04/4.11.md
docs/docs/junior-training/ob-quick-start/chapter04/4.11.md
+273
-1
未找到文件。
docs/docs/junior-training/ob-quick-start/chapter04/4.11.md
浏览文件 @
2a363478
# 如何使用 LOGPROXY 将 OB 数据实时同步到 MySQL
<待补充>
\ No newline at end of file
## 什么是 CDC
CDC 全称是 Change Data Capture,即变更数据捕获。
## 为什么需要 CDC 功能
CDC 能够帮助您识别从上次提取之后发生变化的数据。您可用 CDC 提供的数据做很多事情,比如:做历史库、做近实时缓存、提供给消息队列(MQ),用户消费 MQ 做分析和审计等。
## OceanBase 里 CDC 是如何实现的
OblogProxy 是 OceanBase CE 的增量日志代理服务。基于 liboblog, 以服务的形式,提供实时增量链路接入和管理能力,方便应用接入 OceanBase 增量日志;能够解决网络隔离的情况下,订阅增量日志的需求;并提供多种链路接入方式。
Canal 是一个开源的 MySQL 数据库 Binlog 的增量订阅和消费组件,基于 MySQL 数据库的增量日志解析,可以用于数据同步。
数据链路:
```
ob_cluster -> oblogreader ->oblogmsg -> canal_server -> canal_client -> MySQL
```
组件介绍:
+
liboblog 是 OceanBase CDC 的基本组件,liboblog 衍生出 oblogproxy,liboblog 依赖 oblogmsg。
+
liboblog : C++ 动态库,将从 OceanBase 集群拉到的增量日志按事务提交顺序向外透出,透出的方式是按 logmessage 协议创建相关对象给使用方使用。
+
Oblogreader : 对 liboblog 的 C++ 封装,在 liboblog 的基础上,对创建出的 logmessage 对象适配多种序列化输出.
+
logproxy 增量日志代理,并不对增量数据进行转发,而只是对新建连接请求创建对应的oblogreader子进程,并由该oblogreader 子进程通过该连接直接向客户端发送按 logmessage 序列化后的增量日志记录。logproxy 用于对同机器上所有 ObLogreader 子进程的生命周期进行管理。
+
logclient :对字节流按 logmessage 协议反序列化后生成 logmessage 对象给使用方调用,比如和 canal 对接。
## 安装 oblogproxy
+
下载 oblogproxy rpm 包
https://github.com/oceanbase/oblogproxy/releases/tag/v1.0.0
+
安装 oblogproxy
yum install oblogproxy-1.0.0-1.el7.x86_64.rpm
+
确认 oblogproxy 依赖,重点是确认有 liboblog
```
shell
[
root@172.30.199.49 ~]
$cd
/usr/local/oblogproxy/
[
root@172.30.199.49 oblogproxy]
$ldd
./bin/logproxy
linux-vdso.so.1
=>
(
0x00007fffe68fe000
)
liboblog.so.1
=>
/lib/liboblog.so.1
(
0x00002ae0113f1000
)
libpthread.so.0
=>
/lib64/libpthread.so.0
(
0x00002ae046bf8000
)
libdl.so.2
=>
/lib64/libdl.so.2
(
0x00002ae046e14000
)
librt.so.1
=>
/lib64/librt.so.1
(
0x00002ae047018000
)
libm.so.6
=>
/lib64/libm.so.6
(
0x00002ae047220000
)
libc.so.6
=>
/lib64/libc.so.6
(
0x00002ae047522000
)
/lib64/ld-linux-x86-64.so.2
(
0x00002ae0111cd000
)
libaio.so.1
=>
/lib64/libaio.so.1
(
0x00002ae0478f0000
)
[
root@172.30.199.49 oblogproxy]
$
```
## 启动 oblogproxy
### 修改 oblogproxy 参数
+
生成加密用户和对应的密码
```
[root@172.30.199.49 bin]$pwd
/usr/local/oblogproxy/bin
[root@172.30.199.49 bin]$./logproxy -x root@sys
EA87898018FD1EDDC2AA11CE1556E917
[root@172.30.199.49 bin]$
[root@172.30.199.49 bin]$./logproxy -x Root@2021
8852DB95B3D54B1A8F866836A9D8FD52
[root@172.30.199.49 bin]$
```
+
修改对应的 conf.json 参数
```
[root@172.30.199.49 conf]$pwd
/usr/local/oblogproxy/conf
[root@172.30.199.49 conf]$ls -l
总用量 4
-rw-r--r-- 1 root root 1081 10月 25 18:00 conf.json
[root@172.30.199.49 conf]$
修改conf.json的内容
"ob_sys_username": "EA87898018FD1EDDC2AA11CE1556E917",
"ob_sys_password": "8852DB95B3D54B1A8F866836A9D8FD52",
```
+
启动 oblogproxy
```
[root@172.30.199.49 oblogproxy]$./run.sh start
work path : /usr/local/oblogproxy
is_running : (8252)/usr/local/oblogproxy logproxy is running !
logproxy started!
[root@172.30.199.49 oblogproxy]$
[root@172.30.199.49 oblogproxy]$
```
+
启停 obproxy 和查看状态
启动oblogproxy
```
[root@172.30.199.49 oblogproxy]$pwd
/usr/local/oblogproxy
[root@172.30.199.49 oblogproxy]$./run.sh start
```
+
关闭 oblogproxy
```
[root@172.30.199.49 oblogproxy]$pwd
/usr/local/oblogproxy
[root@172.30.199.49 oblogproxy]$./run.sh stop
```
+
查看 oblogproxy 状态
```
[root@172.30.199.49 oblogproxy]$pwd
/usr/local/oblogproxy
[root@172.30.199.49 oblogproxy]$./run.sh status
```
+
说明:
oblogproxy 启动成功后进程确认
```
[root@172.30.199.49 ~]$ps -ef | grep logproxy | grep -v grep
root 26379 26373 0 10:45 pts/1 00:00:00 ./bin/logproxy -f ./conf/conf.json
[root@172.30.199.49 ~]$
```
+
当有一个 client 连接成功后会 fork 一个子进程
```
[root@172.30.199.49 ~]$ps -ef | grep oblogreader | grep -v grep
root 26386 26379 2 10:45 pts/1 00:00:17 oblogreader -f ./conf/conf.json
[root@172.30.199.49 ~]$
```
## canal server
### canal server
修改 /opt/canal_ob/canal.deployer-for-ob-rc1/conf/canal.properties
```
yaml
canal.zkServers = 172.30.199.47:12181,172.30.199.48:12181,172.30.199.49:12181
canal.serverMode = tcp
canal.destinations = obtest2
canal.instance.global.spring.xml = classpath:spring/ob-default-instance.xml
```
### canal instance
```
[root@172.30.199.49 conf]$ll
总用量 28
-rwxr-xr-x 1 root root 319 10月 21 16:15 canal_local.properties
-rwxr-xr-x 1 root root 6577 10月 26 16:21 canal.properties
-rwxr-xr-x 1 root root 3592 10月 21 16:15 logback.xml
drwxrwxrwx 2 root root 4096 10月 21 16:15 metrics
drwxr-xr-x 2 root root 4096 12月 7 13:29 obtest2
drwxrwxrwx 3 root root 4096 11月 2 10:51 spring
[root@172.30.199.49 conf]$pwd
/opt/canal_ob/canal.deployer-for-ob-rc1/conf
[root@172.30.199.49 conf]$cat obtest2/instance.properties
```
```
yaml
# oceanbase集群参数
canal.instance.oceanbase.rsList=172.30.199.49:2882:2881;172.30.199.47:2882:2881
canal.instance.oceanbase.username=root@test_tenant_1#obcluster
canal.instance.oceanbase.password=Root@2021
canal.instance.oceanbase.startTimestamp=0
# oceanbase logproxy参数
canal.instance.oceanbase.logproxy.address=127.0.0.1:2983
canal.instance.oceanbase.logproxy.sslEnabled=false
canal.instance.oceanbase.logproxy.serverCert=../conf/${canal.instance.destination:}/ca.crt
canal.instance.oceanbase.logproxy.clientCert=../conf/${canal.instance.destination:}/client.crt
canal.instance.oceanbase.logproxy.clientKey=../conf/${canal.instance.destination:}/client.key
# 是否要在库名中去掉租户前缀。logproxy输出的日志中库名默认为 [tenant].[db]
canal.instance.parser.excludeTenantInDbName=true
canal.instance.oceanbase.tenant=test_tenant_1
# 日志过滤。格式为[tenant].[database].[table],支持正则
canal.instance.filter.regex=test_tenant_1.db1.*
```
+
启动 canal server
```
[root@172.30.199.49 ~]$cd /opt/canal_ob
[root@172.30.199.49 canal_ob]$cd canal.deployer-for-ob-rc1
[root@172.30.199.49 canal.deployer-for-ob-rc1]$cd bin
[root@172.30.199.49 bin]$ls -lrt
总用量 20
-rwxr-xr-x 1 root root 1244 10月 21 16:15 startup.bat
-rwxr-xr-x 1 root root 1356 10月 21 16:15 stop.sh
-rwxr-xr-x 1 root root 3167 10月 21 16:15 startup.sh
-rwxr-xr-x 1 root root 226 10月 21 16:15 restart.sh
-rw-r--r-- 1 root root 6 12月 7 10:42 canal.pid
[root@172.30.199.49 bin]$./startup.sh
```
## canal client
```
[root@172.30.199.49 conf]$pwd
/opt/canal_ob/canal_adapter_for_ob/conf
[root@172.30.199.49 conf]$ls -lrt
总用量 44
-rwxr-xr-x 1 root root 2172 10月 21 16:15 logback.xml
drwxrwxrwx 2 root root 4096 10月 21 16:15 tablestore
drwxr-xr-x 2 root root 4096 10月 21 16:15 hbase
drwxr-xr-x 2 root root 4096 10月 21 16:15 kudu
drwxrwxrwx 2 root root 4096 10月 21 16:15 META-INF
drwxr-xr-x 2 root root 4096 10月 21 16:15 es6
-rwxr-xr-x 1 root root 170 10月 21 16:15 bootstrap.yml
-rwxr-xr-x 1 root root 552 10月 21 16:15 mytest_user.yml
drwxr-xr-x 2 root root 4096 10月 21 16:15 es7
-rwxr-xr-x 1 root root 3240 10月 26 16:26 application.yml
drwxrwxrwx 2 root root 4096 12月 7 10:27 rdb
```
[root@172.30.199.49 conf]$cat application.yml
+
修改的部分如下:
```
yaml
canalAdapters
:
-
instance
:
obtest2
# canal instance Name or mq topic name
groups
:
-
groupId
:
g1
outerAdapters
:
-
name
:
logger
-
name
:
rdb
key
:
mysql1
properties
:
jdbc.driverClassName
:
com.mysql.jdbc.Driver
jdbc.url
:
jdbc:mysql://172.30.199.49:3367/mysql?useUnicode=true&useSSL=false
jdbc.username
:
root
jdbc.password
:
Root@2021
```
+
修改适配器库/表映射,这里已库映射为例:
```
[root@172.30.199.49 conf]$pwd
/opt/canal_ob/canal_adapter_for_ob/conf
[root@172.30.199.49 conf]$ls -l rdb
总用量 4
-rwxr-xr-x 1 root root 186 12月 6 21:11 mytest_user.yml
[root@172.30.199.49 conf]$
```
```
yaml
## Mirror schema synchronize config
dataSourceKey
:
defaultDS
destination
:
obtest2
groupId
:
g1
outerAdapterKey
:
mysql1
concurrent
:
true
dbMapping
:
mirrorDb
:
true
database
:
db1
```
+
启动 canal client
```
[root@172.30.199.49 bin]$pwd
/opt/canal_ob/canal_adapter_for_ob/bin
[root@172.30.199.49 bin]$ls -lrt
总用量 16
-rwxr-xr-x 1 root root 2289 10月 21 16:15 startup.sh
-rwxr-xr-x 1 root root 793 10月 21 16:15 startup.bat
-rwxr-xr-x 1 root root 205 10月 21 16:15 restart.sh
-rwxr-xr-x 1 root root 1370 10月 21 16:15 stop.sh
[root@172.30.199.49 bin]$./startup.sh
```
模拟在oceanbase源端写入数据,在mysql目标端查看是否有数据同步过来。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录