故障分析 | OceanBase Proxy 无法连接 OBserver 集群

news2024/9/21 2:39:36

作者:贲绍华

爱可生研发中心工程师,负责项目的需求与维护工作。其他身份:柯基铲屎官。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


一、问题现象:

使用RPM的方式部署proxy实例,部署之后使用OBclient进行连接,报错提示:

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

二、介绍:

2.1 OceanBase介绍:

OceanBase是企业级开源分布式 HTAP(Hybrid Transaction/Analytical Processing)数据库,具有原生分布式架构,支持金融级高可用、透明水平扩展、分布式事务、多租户和语法兼容等企业级特性。

OceanBase 数据库采用 Shared-Nothing 架构,各个节点之间完全对等,每个节点都有自己的 SQL 引擎、存储引擎,运行在普通PC服务器组成的集群之上,具备可扩展、高可用、高性能、低成本、云原生等核心特性。

2.2 OBproxy介绍:

OceanBase Database Proxy(简称 ODP)是 OceanBase 数据库专用的代理服务器。OceanBase 数据库的用户数据以多副本的形式存放在各个 OBServer 上,ODP 接收用户发出的 SQL 请求,并将 SQL 请求转发至最佳目标 OBServer,最后将执行结果返回给用户。

三、相关说明:

3.1 版本与架构:

OceanBase:3.1.4

OceanBase proxy:3.2.3.5

OceanBase实例数:1 台(10.186.60.96)

OceanBase proxy实例数:1台 (172.20.134.5)

3.2 OBproxy的两种启动模式:

OBproxy配置代理的数据库集群是通过启动参数来设置的,目前支持如下两种形式进行指定数据库集群:

  • ConfigURL(代理多个数据库集群):

    多集群启动方式,即该 OBProxy 集群可访问多个 OceanBase 集群。OCP管理平台自身已集成该服务,

    如果是开源版的可以参考该仓库进行ConfigURL服务的部署:https://github.com/oceanbase/oceanbase/tree/master/tools/ob-configserver

  • RSList(仅代理单个数据库集群):

    单集群启动方式,即该 OBProxy 集群仅可访问创建 OBProxy 集群时指定的那个 OceanBase 集群,OBProxy 实例启动成功后不可动态追加可连接的 OceabBase 数据库集群。配置形式为,OceanBase数据库集群的root service列表:192.168.0.1:2881,192.168.0.2:2881

四、操作流程:

以下操作均使用开源版本RPM手动部署部署的方式进行,未使用OBD与OCP。

1.登录OceanBase数据库内,新建proxyro用户并设置密码为123456,添加授权:

$ obclient -h10.186.60.96 -uroot@sys -P2881 -p -c -A
Enter password: 

obclient> CREATE USER proxyro IDENTIFIED BY '123456';
Query OK, 0 rows affected

obclient> GRANT SELECT ON *.* TO proxyro;
Query OK, 0 rows affected

obclient> SHOW GRANTS FOR proxyro;
+----------------------------------+
| Grants for proxyro@%             |
+----------------------------------+
| GRANT SELECT ON *.* TO 'proxyro' |
+----------------------------------+
1 row in set

2.使用RPM安装proxy:

SUDO rpm -ivh --force /tmp/obproxy-ce-3.2.3.5-2.el7.x86_64.rpm

3.启动proxy实例:

cd /home/admin/obproxy-3.2.3.5 && ./bin/obproxy -p 2883 -l 2884 -n test-proxy -o observer_sys_password=7c4a8d09ca3762af61e59520943dc26494f8941b -c ‘ob_xxxxxxxx’ -r “10.186.60.96:2882”

4.启动OBproxy进程,并为其增加守护进程:

# 返回当前proxy实例的进程数,如果为1则代表已启动
[root@localhost]# pgrep -c obproxy | xargs --no-run-if-empty
# 启动proxy守护进程shell,使用RPM的形式进行安装时。会在bin目录提供管理用的shell文件
[root@localhost]# bin/obproxyd.sh -c checkalive -r -n test-proxy -p 2883 -t 10.186.60.96:2882 -s ob_xxxxxxxx &
# 再次检测proxy实例进程数,如果为2则代表符合预期:实例进程 + checkealive守护进程
[root@localhost]# pgrep -c obproxy | xargs --no-run-if-empty

5.登入OBproxy查看配置是否正确,尝试通过proxy实例连接数据库集群,连接失败:

五、诊断过程:

5.1 检查实例进程:

进程运行正常,符合预期。且运行用户为admin(根据官方手册说明,如果在非部署目录或使用非admin用户运行会导致一些奇怪的问题出现)

5.2 root service list参数检查:

proxy要代理那台数据库实例是通过RSlist参数决定的,登入proxy实例,查看proxy内的root service list参数,存在10.186.90.63

5.3 日志检查

观察obproxy.log发现两条警告信息,意思为无法通过RSlist找到集群名为XXXX的数据库集群

5.4 确认数据库集群名称

登入OceanBase数据库集群,查看集群名称,确认与启动参数中指定的名称一致

SELECT * FROM `v$ob_cluster`

5.5 检查proxy连接账号:

检查OceanBase数据库集群内是否存在proxyro的连接账号(用户名必须为这个),且密码是否符合预期;

六、结论:

最后经过官方大佬——序风远程支持,定位到问题原因:

启动参数中root service list的IP:Port中的端口,应为OceanBase数据库的SQL port端口2881,而不是2882(RPC端口)

这次的问题引起的原因其实很好理解,但是排查起来比较费劲儿(进程能正常启动运行、日志只有找不到数据库集群名的错误、各项数据源确认也都符合预期),回头来看排查过程中遗漏了一个确认点,就是没有在数据库集群上验证RSlist参数的正确性。

七、其他:

使用过程中发现了两处缺陷,分别是:

a. obproxyd.sh脚本的启动参数说明有误

b. obproxyd.sh脚本结束符存在错误导致无法运行

已向官方提交了PR,感兴趣的可以关注一下:https://github.com/oceanbase/obproxy/pull/28

另外提一点建议:

在RSlist模式下,当启动参数出现错误时可以尝试在启动实例进程时尝试与数据库实例建立连接并校验参数正确性。如不符合预期可以退出进程将错误输出至STD上。或者在detail日志内增加一些描述,如:为什么找不到集群的cluster_name。这样会更方便定位问题。

最后祝OceanBase开源社区越办越红火,给你们的响应速度点赞!(社区工单有专人轮值,一般三小时内都有回复)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端一面经典vue面试题(持续更新中)

vuex是什么?怎么使用?哪种功能场景使用它? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。vuex 就是一个仓库,仓库里放了很多对象。其中 state 就是数据源存放地,对应于一般 vue 对象里面的 data 里面存放的数据…

CAS:2590863-00-4;DPPD的理化性质

中文名 4,4-(2,2-二苯基乙烯-1,1-二基)双([1,1-联苯]-4-羧酸) 英文名 4,4-(2,2-Diphenylethene-1,1-diyl)bis([1,1-biphenyl]-4-carboxylic acid) 物理化学性质 分子式 C40H28O4 分子量 572.65 AIE聚集诱导发光材料的特点: 1.在固态下有强发光特性(粉末…

Wordhero AI智能写作工具:购买、攻略、资源 -揭秘如何根据关键词和标题生成段落

Wordhero AI是我经过仔细对比,实际应用之后获得相应效果之后,坚持使用的AI写作工具。为了持续获得这方面的提升和反馈,我建立了两个渠道去让自己不断获得国内外同样工具使用者的反馈和建议: AI Content Hacker - AI Writing Guid…

[附源码]Python计算机毕业设计Django医学图像管理平台

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

持续跟踪九大行业营销应用,神策《2022 营销自动化应用基准报告》正式发布...

以人为本的时代为营销人员带来了新的机会:与客户建立更紧密的连接,更多地基于品牌与客户的双向参与,以创造更好的产品和体验,而不仅仅是基于大众传播渠道的推广策略传递品牌信息。后疫情时代,市场充满不确定性&#xf…

公益校园网页制作 大学生网页设计作业 HTML CSS公益网页模板 大学生校园介绍网站毕业设计

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

【C++】STL——string的使用

大家好我是沐曦希💕 文章目录一、STL简介1.STL版本2.STL的组成3.如何学习STL二、编码三、string类四、常见构造五、operator[]六、iterator迭代器1.正向迭代器2.反向迭代器3.const迭代器七、Capacity容量操作1.接口2.扩容八、Modifiers修改操作九、非成员函数重载一…

前端Nodejs框架koa/egg和es6入门

故事从一个小需求开始,有一天我们美丽可爱的运营MM拿出来了一份Excel表格,希望在一些特定场景能让小蜜按照她定制的样子来交互,并且每一条问题或答案都带一些值来影响处理过程最终能对用户看到的结果起到一定作用。Excel里包含两个sheet页&am…

【C++类型转换】4种类型转换:static_cast、reinterpret_cast、const_cast、dynamic_cast

目录 1. C语言中的类型转换 2.1.类型转换:static_cast 2.2.类型转换:reinterpret_cast 2.3.类型转换:const_cast 2.4.类型转换:dynamic_cast 1. C语言中的类型转换 隐式类型转换:编译器在编译阶段自动进行&#x…

第9章 无监督学习

系列文章目录 第1章 绪论 第2章 机器学习概述 第3章 线性模型 第4章 前馈神经网络 第5章 卷积神经网络 第6章 循环神经网络 第7章 网络优化与正则化 第8章 注意力机制与外部记忆 第9章 无监督学习 第10章 模型独立的学习方式 第11章 概率图模型 第12章 深度信念网络 第13章 深…

两种形式的import

两种形式 import … 后面只能是模块或包 from … import … from 后面只能是模块或包,import 后面可以是任何变量 总结 可以简单的记成:第一个空只能填模块或包,第二个空填啥都行。 看一个实例 通过from import可以正常都模块 import方式不…

安装head

版本 github地址:https://gitcode.net/mirrors/mobz/elasticsearch-head?utm_sourcecsdn_github_accelerator 下载zip 解压zip得到文件夹elasticsearch-head-master 打开head命令行,依次按命令下载 下载淘宝镜像: npm install -g cnpm -…

程序员需知的9个编程学习官网,建议收藏

毫无疑问,一项技术,最权威的文档一定是它的官方文档,所有的教程、书籍都是直接或者间接在官方相关文档的基础上完成。所以,编程学习,后面最好还是要看官网的。当然,官网大部分都是英文——其实配合一些翻译…

Ubuntu下Petalinux安装流程与常见问题解决

一. 简介 由于近期需要对ZYNQ ARM端做Linux开发测试,需要用到Petalinux工具进行定制,所以本文对Petalinux安装过程进行简要总结,并对安装过程中遇到的一些问题进行解释并解决。 Petalinux是Xilinx公司开发的嵌入式Linux定制软件,…

「C#」异步编程玩法笔记-async、await

C#5.0的时候引入了async和await两个修饰符,成为异步编程的核心关键字。 async 是修饰符,表明方法含有异步操作,但并不是说整个方法是异步的。async修饰的方法会先同步执行到第一处await的地方而后开始异步。 await可以理解为一异步特有的“re…

使用Python制作内马尔的胜利之舞代码版

不知道大家最近有没有被球星内马尔所吸引,反正我是对他的胜利之舞上瘾了。今天,我以程序猿的视角将他的胜利之舞做成代码版的视频。话不多说,先看看最终效果图: 哈哈哈哈,是不是看着还不错的样子。 之前我做过类似的教…

小程序游戏 vs h5游戏,技术优势分别有哪些

从“跳一跳”到“羊了个羊”微信小游戏上线4年时间,除了涌现出不少火爆全网的小游戏之外,也有类似于“动物餐厅”、“口袋奇兵”等游戏得以在此孵化繁荣,凭借着微信强大的社交属性小游戏成为游戏厂商在桌面端、App 端、H5 端之外争夺的另一个…

微软宣布 S2C2F 已被 OpenSSF 采用

开源供应链安全对大多数 IT 领导者来说是个日益严峻的挑战,围绕确保开发人员在构建软件时如何使用和管理开源软件 (OSS) 依赖项的稳健策略至关重要。Microsoft 发布安全供应链消费框架 (S2C2F) 是一个以消费为中心的框架,它使用基于威胁的风险降低方法来…

linux下安装部署es-head插件

es通过程序代码调用es 各种api接口。 es-head查看与显示es状态信息,数据量,具体数据。 1、elasticsearch-head介绍 官方地址: https://github.com/mobz/elasticsearch-head elasticsearch-head 是一款用来管理Elasticsearch集群的第三方插件工具。 e…

用二元泊松模型预测2022年世界杯淘汰赛结果

用二元泊松模型预测2022年世界杯淘汰赛结果 网上有很多文章用双泊松(Double Poisson)模型来预测世界杯比赛结果。但是双泊松模型有一个严重的缺陷,那就是它假设比赛中两队的比分是条件独立的。而我们都知道,在对抗性比赛中&…