【关键特性介绍】
- 高性能转发:OBProxy 是数据访问流程中重要部分,采用多线程异步框架和透明流式转发的设计,对关键路径代码做深入优化,同时确保了自身对机器资源的最小消耗
- 协议支持:支持多种格式协议,如MySQL协议、Oracle兼容协议和自研协议。目前在增强自研协议实现更多强大功能
- 连接管理:保持客户端连接稳定是非常重要的事情,直观感受是业务不报连接错误,OBProxy 会去屏蔽后端的问题,保持和客户端连接的稳定
- 数据路由:数据路由影响性能和高可用,和部署架构、数据分布等关系密切,对 SQL 执行有很大影响,路由正确也是大家非常关心的点
- Sharding 能力:是现有金融云解决方案的重要组成部分,c 语言版本也有更好的性能
【连接映射关系】
当客户端通过 OBProxy 与 OBServer 建立连接时,你的客户端与 OBProxy 之间存在一个物理连接,OBProxy 与 OBServer 可能存在1-N(N是observer数量)物理连接。 其中 Client 与 OBProxy 的连接称为客户端连接或前端连接,OBProxy 与 OBServer 之间的连接称之为服务端连接或后端连接。
【几个id总结】
cs id:obproxy 内部标记每个 client 端会话( client Session)的 id 号
ss id:obproxy 内部标记每个 Server 端会话( Server Session)的 id 号
connection_id:整个 OceanBase 集群内部标记的每个 Client 的 id 号
proxy_sessid:整个 OceanBase 集群内部标记的每个 obproxy 的 ID 号
【相关命令】
show processlist; #看到的是当前客户端到当前obproxy的连接信息
show proxysession; #看到的也是当前客户端到当前obproxy的连接信息
show full processlist; #看到的是所有客户端到OB集群的连接信息
要想kill 会话,则执行以下命令:
show full processlist; # 找到id
kill id; # kill会话和SQL
kill query id; # 只kill SQL,不kill会话
注意,kill 会话可能会遇到下面的报错:
MySQL [oceanbase]>kill 3221986204;
ERROR 1094 (HY000): Unknown thread id: 3221986204
这个报错是因为 要kill 的 会话不在当前的obproxy 中,是在别的obproxy中(一般OB集群都会有多个obproxy,多个obproxy上面还有haproxy),所以要到指定的obproxy 中 kill 该会话,查看会话在哪个obproxy中见下方sql:
select ID,PROXY_SESSID,USER,TENANT,SVR_IP,HOST,USER_CLIENT_IP from oceanbase.gv$ob_processlist where id= 3222514519;
#host 字段的值是obproxy的ip,到该obproxy上面执行kill 3221986204;