通过OBProxy连接报错

【 使用环境 】生产环境
【 使用版本 】oceanbase-ce 4.2.3
【问题描述】通过2881端口root用户和租户用户均可正常链接集群
但是租户用户通过obproxy 2883端口连接集群提示

ERROR 2013 (HY000): Lost connection to MySQL server at ‘reading authorization packet’, system error: 11

昨天在使用数据库的zabbix server那边有这样的报错

1861466:20250302:060327.295 [Z3005] query failed: [4013] No memory or reach tenant memory limit [commit;]
1861466:20250302:060328.297 [Z3005] query failed: [2013] Lost connection to MySQL server during query [rollback;]
1861466:20250302:060328.297 cannot perform transaction rollback, connection will be reset
1861469:20250302:060925.558 [Z3005] query failed: [4013] No memory or reach tenant memory limit [select escalationid,actionid,triggerid,eventid,r_eventid,nextcheck,esc_step,status,itemid,acknowledgeid,servicealarmid,serviceid from escalations where triggerid is null and itemid is null and serviceid is not null and nextcheck<=1740866968 order by actionid,triggerid,itemid,r_eventid asc,escalationid]
1861465:20250302:060926.144 [Z3005] query failed: [4013] No memory or reach tenant memory limit [commit;]
1861469:20250302:060926.275 [Z3005] query failed: [2013] Lost connection to MySQL server during query [select escalationid,actionid,triggerid,eventid,r_eventid,nextcheck,esc_step,status,itemid,acknowledgeid,servicealarmid,serviceid from escalations where triggerid is null and itemid is null and serviceid is null and nextcheck<=1740866968 order by actionid,triggerid,itemid,r_eventid asc,escalationid]
1861465:20250302:060926.277 [Z3005] query failed: [2013] Lost connection to MySQL server during query [rollback;]
1861465:20250302:060926.277 cannot perform transaction rollback, connection will be reset
1861465:20250302:060926.412 [Z3005] query failed: [4013] No memory or reach tenant memory limit [commit;]
1861465:20250302:060926.501 [Z3005] query failed: [2013] Lost connection to MySQL server during query [rollback;]
1861465:20250302:060926.501 cannot perform transaction rollback, connection will be reset
1861479:20250302:060953.223 cannot send list of active checks to “10.124.253.194”: host [CQ-XPF-SMX-VM-KRPADB1] not found
1861460:20250302:061016.728 executing housekeeper

1861465:20250302:061127.170 [Z3005] query failed: [4013] No memory or reach tenant memory limit [insert into history_uint (itemid,clock,ns,value) values (86004,1740867084,455124860,0),(86005,1740867085,455379314,5912),(86006,1740867086,455683880,6);
1861465:20250302:061128.172 [Z3005] query failed: [2013] Lost connection to MySQL server during query [rollback;]
1861437:20250302:061926.886 [Z3005] query failed: [4013] No memory or reach tenant memory limit [select null from ha_node order by ha_nodeid for update]
1861437:20250302:061926.891 [Z3005] query failed: [4013] No memory or reach tenant memory limit [select null from ha_node order by ha_nodeid for update]
1861437:20250302:061926.893 [Z3005] query failed: [10018] proxy execute internal request failed, received error resp, error_type: START_TRANS_COMMON_ERROR [select null from ha_node order by ha_nodeid for update]
1861437:20250302:061926.894 [Z3005] query failed: [2013] Lost connection to MySQL server during query [rollback;]
1861437:20250302:061927.903 cannot set MySQL character set
1861437:20250302:061927.903 [Z3001] connection to database ‘zabbix’ failed: [2006] MySQL server has gone away

推荐使用 obdiag 工具进行日志采集,并且将采集到的日志提供给我们以便确认问题所在。

日志采集场景: 针对断链接场景的根因分析 和 内存问题
日志采集命令:

  1. obdiag gather scene run --scene=observer.disconnection
  2. obdiag gather scene run --scene=observer.memory

为了更好地帮助您解决这个问题,请您提供以下信息:

  1. 该错误是否在特定时间段频繁出现?如果是,请提供具体的时间段。
  2. 是否有其他告警或错误信息伴随出现?如果有,请提供相关信息。
  3. 您的 OceanBase 集群配置中,关于内存限制和连接数限制的具体参数设置是多少?
  4. 在出现问题时,集群的负载情况如何(例如:是否有大量并发请求、大查询等)?

请执行上述命令并上传生成的日志文件,这将有助于我们进一步分析问题。如果您有任何疑问或需要进一步的帮助,请随时告知。

附上敏捷诊断工具 obdiag 使用帮助链接

日志报错来看,是租户内存超限了,快速处理的方法可以给租户扩大内存资源

是否修改过proxyro用户的密码,导致代理连接报错 reading authorization packet


是的,我已经用edit-config扩展了内存,unit的资源规格也改大了一些,仍然无法通过obproxy 2883连接。

oceanbase-ce:
servers:

  • 127.0.0.1
    global:
    home_path: /home/zabbix/oceanbase-ce
    cluster_id: 1729146951
    enable_syslog_recycle: true
    enable_syslog_wf: false
    max_syslog_file_count: 4
    memory_limit: 16G
    production_mode: false
    __min_full_resource_pool_memory: 1073741824
    system_memory: 4G
    cpu_count: 16
    datafile_size: 50G
    datafile_maxsize: 50G
    datafile_next: 36G
    log_disk_size: 14336M
    root_password: wcdh735cahkBqltMl14o
    ocp_agent_monitor_password: t5A2aBFIAM
    proxyro_password: zkFWYKaUPF
    obproxy-ce:
    servers:
  • 127.0.0.1
    global:
    home_path: /home/zabbix/obproxy-ce
    skip_proxy_sys_private_check: true
    enable_strict_kernel_release: false
    enable_cluster_checkout: false
    proxy_mem_limited: 500M
    obproxy_sys_password: zkFWYKaUPF
    127.0.0.1:
    proxy_id: 6964
    client_session_id_version: 2
    depends:
  • oceanbase-ce
    obagent:
    servers:
  • 127.0.0.1
    global:
    home_path: /home/zabbix/obagent
    ob_monitor_status: active
    http_basic_auth_password: nUY0hU1q1
    depends:
  • oceanbase-ce

我上午看到一个帖子说是要把proxyro_password改成和obproxy_sys_password一样,就改成一样的了。但是改它原因也是这个报错,就是改之前通过2883登录也是一样的报错信息

这个时间段observer.log的日志 发一下 obproxy的日志也发一下

现在存在两个问题,一是身份验证问题,二是租户内存问题,扩展内存是解决问题二,另外图片建议撤回打码,生产环境?

根据您提供的信息和截图,您的问题可能与 OBProxy 的配置有关。以下是详细的分析和建议:

1. OBProxy 配置问题

您提到修改了 proxyro_passwordobproxy_sys_password,但仍然无法通过 OBProxy 2883 端口连接。这表明可能存在其他配置问题或环境问题。

检查 OBProxy 配置文件

请确保 OBProxy 的配置文件中以下参数正确无误:

  • obproxy_sys_password: OBProxy 系统用户的密码。
  • proxyro_password: proxyro 用户的密码。
  • root_password: root 用户的密码。

从您提供的截图来看,obproxy_sys_passwordproxyro_password 已经设置为相同值 (ZkFWYKaUPF),但请再次确认这些密码是否与实际数据库中的密码一致。

2. 租户资源限制

尽管您已经扩展了内存并调整了 unit 的资源规格,但仍然出现连接问题。这可能是因为租户的资源限制仍然不足,或者存在其他资源争用问题。

检查租户资源使用情况

您可以使用以下 SQL 查询来检查租户的资源使用情况:

SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIG;

确保租户的 CPU、内存等资源足够,并且没有达到上限。

3. OBProxy 日志分析

为了进一步诊断问题,建议查看 OBProxy 的日志文件。OBProxy 的日志通常位于 /home/admin/obproxy/log 目录下(具体路径取决于您的安装配置)。请检查日志文件中是否有任何错误或警告信息,特别是与连接相关的部分。

4. 网络和防火墙配置

确保 OBProxy 所在的服务器与 OceanBase 集群之间的网络连接正常,并且防火墙没有阻止 2883 端口的通信。

5. OBProxy 版本兼容性

确保您使用的 OBProxy 版本与 OceanBase 社区版 4.2.3 兼容。不同版本之间可能存在兼容性问题,建议使用官方推荐的 OBProxy 版本。

6. 重启 OBProxy

有时,重启 OBProxy 可以解决一些临时性的问题。您可以尝试重启 OBProxy 服务:

obd cluster restart <cluster_name>

7. 验证连接字符串

确保您使用的连接字符串正确无误。例如:

mysql -h <obproxy_ip> -P 2883 -u <tenant_user>@<tenant_name> -p

请确保 <tenant_user><tenant_name> 正确无误。

总结

根据您的描述和提供的信息,问题可能与 OBProxy 的配置、租户资源限制或网络配置有关。建议您按照上述步骤逐一排查,并提供更多的日志信息以便进一步分析。如果问题仍然存在,建议联系 OceanBase 的技术支持团队获取更多帮助。

如果您有任何疑问或需要进一步的帮助,请随时告知。

检索到的文档如下:

  1. DATE_FORMAT
  2. oceanbase.CDB_OB_BALANCE_JOB_HISTORY
  3. 通过 SQL Audit 分析查询中等待事件

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

因为 通过 OBProxy 连接 OceanBase 集群时,依赖 proxyro@sys用户进行认证,可以用连接串和图片上的密码登录这个用户看看

obproxy.log (741.1 KB)
observer.log (401.7 KB)
proxy的log太大了,我截了那个时间的一段。
server的log又没找到昨天的,只能截一段刚才的

试了下下面这个登录命令,还是一样的报错

obclient -h127.0.0.1 -P2883 -uobproxyro@sys -pzkFWYKaUPF -A

用这条命令是可以登录的

obclient -h127.0.0.1 -P2883 -uroot@proxysys -pzkFWYKaUPF -Doceanbase -A

发现上面命令的用户名写错了,用这个命令可以登陆

obclient -h127.0.0.1 -P2881 -uproxyro@sys -pzkFWYKaUPF -A

我去,我已经晕了,又发现端口写错了,上面命令改成2883的话提示这个

ERROR 1045 (42000): Access denied for user ‘proxyro@sys’@‘127.0.0.1’ (using password: YES)

改完密码执行过吗
obd cluster reload demo

1 个赞

感谢,reload然后restart了一下集群,突然又能用了,2883也可以登录了,搞的我人都晕了,莫名其妙的

1 个赞

之前应该修改过配置文件 需要重新reload的 要不然读取不到最新的配置文件


这个问题,应该是这里未执行吧。这里确实不太明显,之前遇到过类似问题。
这边后续跟obd的同学讨论下看如何修改增加个提示显眼功能

2 个赞


想问一下大佬,16c32G内存单节点部署的资源规格这样设置,还能优化一下吗。我怕它内存又出错

内存配置的话需要
memory limit > system memory +所有租户内存

1 个赞

sys_unit_config 这个unit一般占用CPU和内存大吗