oceanbaseDB和oblogproxy分别部署的问题

【 使用环境 】测试环境

【 OB or 其他组件 】
ob、oblogproxy

【 使用版本 】
OceanBase4.0
oblogproxy 1.0.3
oblogproxy-client1.0.7
jdk1.8

【问题描述】清晰明确描述问题
通过oblogproxy 获取增量数据变动 clog
OceanBaseDB和oblogproxy 在同一台机器上部署,logproxyclient可以采集到LogMessage 消息并正常
OceanBaseDB和oblogproxy 分开部署,通过logproxyclient可以采集不到LogMessage 消息,只有心跳

【复现路径】问题出现前后相关操作

【问题现象及影响】
请问 DB和oblogproxy分开部署是否有额外的配置和准备?是否有案例可以参考?
【附件】

你可以参考这篇文章看看:高性能数据访问中间件 OBProxy(二):安装部署最佳实践

可能是我问题分类的错误,我是oblogProxy的问题,不是OBProxy的,所以您的链接未能解决我的问题

cdc是对增量数据变化的捕获,obcdc 衍生出了 oblogproxy

在您描述的场景里,我推测的可能原因是:部署到同一台机器上时,两者使用了相同版本的依赖库,而在分开部署时,oblogproxy 会自动下载最新的依赖,结果上造成了依赖版本不对,因此出现了问题。

OceanBase 社区版 4.0 推荐的搭配是 oblogproxy 1.1.0,建议您使用压缩包形式进行部署,可以避免依赖版本冲突的问题。在下边任意链接选择 1.1.0 for 4x

https://www.oceanbase.com/softwarecenter

我想知道,分开部署之后 oblogproxy的配置/conf/conf.json 和 接受消息的端配置及参数是否需要调整?
分开部署之后代码如下:

    ObReaderConfig config = new ObReaderConfig();
    // OB库
    config.setRsList("192.168.1.41:2882:2881;");
    // 设置用户名和密码(非系统租户)
config.setUsername("test@mysql_tenant");
config.setPassword("test");
    // 设置启动位点(UNIX时间戳,单位s), 0表示从当前时间启动。
    config.setStartTimestamp(0L);
    // 设置订阅表白名单,格式为:tenant.db.table, '*'表示通配.
    config.setTableWhiteList("mysql_tenant.*.*");
    //oblogproxy服务地址,创建实例.
    LogProxyClient client = new LogProxyClient("192.168.1.99", 2983, config);

另外:
1.1.0版本我们再虚拟机中启动报错:


大概看了下源码,物理机和虚拟机的返回不一样

虚拟机中"ip -o -4 route show to default "的返回:
[root@xxxx~]# ip -o -4 route show to default
default via 192.168.1.1 dev ens33 proto static metric 100
物理机返回:
[root@xxxx~]# ip -o -4 route show to default
default via 10.117.255.253 dev eth0

不需要调整

这是指标采集线程退出了,不影响主进程

客户端启动后,代理的oblogproxy/run/{client-id}/log/liboblog.log 有warn和error,
WARN [TLOG.FETCHER] change_to_next_server_ (ob_log_systable_helper.cpp:1669) [377][0][Y0-0000000000000000] [lt=9] init mysql connector fail, need retry(ret=-4036, ret=“OB_NEED_RETRY”

ERROR [TLOG.FETCHER] do_query_ (ob_log_systable_helper.cpp:1540) [377][0][Y0-0000000000000000] [lt=5] connect to server fail, need switch server(ret=-4036, ret=“OB_NEED_RETRY”, svr_idx=0, next_svr_idx=1, retry_svr_cnt=0, server_count=1)
如图:

通过root@sys链接后不再有Access denied,程序能收到心跳,但是增量数据采集不到
liboblog.log持续报错,
[2023-03-09 23:59:08.499989] ERROR [TLOG] req_start_log_id_by_tstamp (ob_log_rpc.cpp:94) [5101][0][Y131AC0A80163-0000000000800E26] [lt=4] rpc fail: req_start_log_id_by_ts_with_breakpoint(svr=“127.0.0.1:2882”, rpc_ret=-4121, result_code=0, req={rpc_ver:1, param_count:1, params:[{pkey:{tid:1099511627781, partition_id:0, part_cnt:0}, start_tstamp:1678377180881345, break_info_:{break_file_id_:4294967295, min_greater_log_id_:18446744073709551615}}]}) BACKTRACE:

稍等我找相关的同学帮你看看这个问题

错误日志补充:

这里有RPC_SEND_ERROR的报错,可以先看下oblogproxy所在虚拟机能否与OB的SQL端口和RPC端口联通

另外我想问,日志里代理服务器上为什么会访问127.0.0.1:2882 这个是ob的,代理服务器本地确实没有

oblogproxy访问的机器ip是从ob的__all_server表里获取的,可以看下为什么表里记录的是127.0.0.1


表里确实是这个

可以尝试把oblogproxy部署到OB机器上,应该能临时解决这个问题。要根本解决的话,需要定位__all_server表中记录的是127.0.0.1(可能是选择的网卡原因?)

1、部署在OB机器上可以采集的
2、__all_server表里的数据在cluster start 的时候会生成(或更新)
3、通过检查 127.0.0.1是yaml的配置中的值,现在通过修改并重新deploy后启动,__all_server的值已经更新
至此,ob和logproxy分开部署无法采集增量数据的问题解决

你好 我下载了此压缩包, 无法使用logproxy, 我将压缩包中的二进制文件链接到了/usr/lib下, 但是还是不行, 我哪里没做对吗

这个报错的原因是找不到libobcdc.so.4这个动态库,可以执行
LD_LIBRARY_PATH=/root/oblogproxy/liboblog/ ./oblogproxy -h

1 个赞