使用oblogclient连接oblogproxy时报错

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】oblogproxy,obclient
【 使用版本 】最新版
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【问题现象及影响】
/root/oblogproxy/log/out.log 也是 log/logproxy.ERROR 的内容

E20230731 17:37:45.104329 2824747 clog_meta_routine.cpp:45] Failed to check the existence of svr_min_log_timestamp column in __all_virtual_server_clog_stat, disable clog check
E20230731 17:37:47.112815 2758168 mysql_protocol.cpp:239] Failed to query observer:Table 'oceanbase.__all_virtual_server_clog_stat' doesn't exist, unexpected column count: 0
E20230731 17:37:47.112854 2758168 clog_meta_routine.cpp:45] Failed to check the existence of svr_min_log_timestamp column in __all_virtual_server_clog_stat, disable clog check
E20230731 17:37:47.121995 2824837 mysql_protocol.cpp:239] Failed to query observer:Table 'oceanbase.__all_virtual_server_clog_stat' doesn't exist, unexpected column count: 0
E20230731 17:37:47.122208 2824837 clog_meta_routine.cpp:45] Failed to check the existence of svr_min_log_timestamp column in __all_virtual_server_clog_stat, disable clog check
E20230731 17:37:49.133438 2758168 mysql_protocol.cpp:239] Failed to query observer:Table 'oceanbase.__all_virtual_server_clog_stat' doesn't exist, unexpected column count: 0
E20230731 17:37:49.133474 2758168 clog_meta_routine.cpp:45] Failed to check the existence of svr_min_log_timestamp column in __all_virtual_server_clog_stat, disable clog check
E20230731 17:37:49.141680 2824936 mysql_protocol.cpp:239] Failed to query observer:Table 'oceanbase.__all_virtual_server_clog_stat' doesn't exist, unexpected column count: 0
E20230731 17:37:49.141881 2824936 clog_meta_routine.cpp:45] Failed to check the existence of svr_min_log_timestamp column in __all_virtual_server_clog_stat, disable clog check

参考https://www.oceanbase.com/docs/common-oceanbase-database-10000000001702387和https://ask.oceanbase.com/t/topic/35602487使用,
oblogproxy配置为sys的root用户,obclient使用了sys的root和普通用户 报错相同
【附件】

另外,我另一个单机版的示例 obd demo安装的,报错是一样的

all in one里没有包含oblogproxy吧。
我理解下你的问题是安装ob成功后,使用oblogproxy时遇到了错误?

是的,我单独安装了oblogproxy,然后使用obclient消费时出错


来自我电脑的连接全都在time wait

logproxy的版本是最新的吗?如果是最新的主贴中的错误是可以忽略的

time wait要看下游。这个问题可能不是logproxy的问题。
其实你这个问题我一直没大明白具体的错误是什么。使用上遇到错误表现是什么呢?比如下游无法获得数据?

另外可以的话麻烦提供下logproxy的全部日志。

是最新版:oblogproxy-ce-for-4x-1.1.0-20221201191325.tar.gz

主要是参考了使用安装包安装部署 oblogproxy提供的oblogclient代码无法消费,现象为启动程序后无任何输出就自动退出了。我希望可以消费到增量的数据

我运行的代码如下:

package org.example;

import com.oceanbase.clogproxy.client.LogProxyClient;
import com.oceanbase.clogproxy.client.config.ObReaderConfig;
import com.oceanbase.clogproxy.client.exception.LogProxyClientException;
import com.oceanbase.clogproxy.client.listener.RecordListener;
import com.oceanbase.oms.logmessage.LogMessage;

public class Main {
    public static void main(String[] args) {

        ObReaderConfig config = new ObReaderConfig();
// 设置OceanBase root server 地址列表,格式为(可以支持多个,用';'分隔):ip1:rpc_port1:sql_port1;ip2:rpc_port2:sql_port2
        config.setRsList("172.16.0.157:2882:2881;172.16.0.158:2882:2881;172.16.0.159:2882:2881");
//        config.setRsList("127.0.0.1:2882:2881");
// 设置用户名和密码(非系统租户)
        config.setUsername("root@sys");
        config.setPassword("DTStest1234");
// 设置启动位点(UNIX时间戳,单位s), 0表示从当前时间启动。
        config.setStartTimestamp(0L);
// 设置订阅表白名单,格式为:tenant.db.table, '*'表示通配.
        config.setTableWhiteList("*.*.*");

// 指定oblogproxy服务地址,创建实例.
//        LogProxyClient client = new LogProxyClient("121.40.195.96", 2983, config);
        LogProxyClient client = new LogProxyClient("47.97.172.96", 2983, config);
// 添加 RecordListener
        client.addListener(new RecordListener() {
            @Override
            public void notify(LogMessage message) {
                // 处理消息
                System.out.println(message.toString());
            }

            @Override
            public void onException(LogProxyClientException e) {
                // 处理错误
                if (e.needStop()) {
                    // 不可恢复异常,需要停止Client
                    client.stop();
                }
            }
        });

// 启动
        client.start();
        client.join();

    }
}

oblogproxy.log.zip (920.0 KB)
这是全量日志,期间我尝试了各种用户名,是不是正常情况java端会收到心跳的数据呢?如果我源端没有写入的话

4.x 的 ob 只能订阅非 sys 租户的增量数据。另外,你用的 ob 版本是多少?如果是 V4.1.0.0 之后的版本,需要用 oblogproxy 1.1.2 Release v1.1.2 · oceanbase/oblogproxy · GitHub

我使用的是4.1.0.0(最新版)的ob,我看官网帮助手册写的是oblogproxy1.1.0,我这边尝试一下最新版本的oblogproxy,另外帮助手册可以更新一下。

感谢反馈

我更新版本后可以订阅到心跳信息,但是订阅不到增量数据。


手册中写的意思是oblogproxy需要配置sys的租户是吧,意思是sh run.sh config_sys root password是吧,或者./logproxy -x root@sys

另外对于oblogclient如果需要订阅另一个租户,

设置用户名和密码(非系统租户)
        config.setUsername("root@test");

会在oblogproxy的log中看到E20230801 17:04:18.338573 3755387 ob_access.cpp:200] Failed to auth, all tenant mode or sys tenant must be connected as sys tenant, current: test
如果更改为

设置用户名和密码(非系统租户)
        config.setUsername("test");

会在oblogproxy的log中看到E20230801 17:11:47.716344 3771750 mysql_protocol.cpp:126] Auth user failed of server: 172.16.0.158:2881, user: test

这里该具体怎么使用呢?

oblogproxy 是需要配置 sys 租户的用户名和密码的,这个主要是用来做鉴权,这里的 sys 租户的用户名不能带租户和集群名的后缀,一般就是一个 root。在执行完 config_sys 后,加密过的 sys 租户的用户名和密码应该会填到 conf/conf.json 里对应的位置,否则就是出错了。

社区版 logproxy 1.1.0 以后,用于鉴权的 sys 租户的用户名和密码可以通过客户端来进行传递了,对应的函数是 ObReaderConfig.setSysUsernameObReaderConfig.setSysPassword

oblogclient 这边,setUsername 需要填非 sys 租户的用户名,这里的用户名是需要带租户后缀的。因为从 4.0 开始 libobcdc 只能订阅到租户级别的数据,所以表格白名单在效果上一般都是 tenant.*.*

感谢,在升级版本后可以成功使用了。
ObReaderConfig.setSysUsernameObReaderConfig.setSysPassword我在oblogclient maven 1.1.0中并没有找到该方法~
希望可以在产品手册上更新一下,谢谢 ::

客户端设置 sys 用户名对应的代码在这里 https://github.com/oceanbase/oblogclient/blob/oblogclient-1.1.0/oblogclient-logproxy/src/main/java/com/oceanbase/clogproxy/client/config/ObReaderConfig.java#L251

文档我会通知相关同学在近期更新一下,感谢您的反馈。