通过obproxy连接oceanbase集群管理连接

一、连接映射关系
当客户端通过 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 号。
关系如下图所示:


三、kill 会话

点击查看代码
show processlist; 
# 这个命令输出结果字段介绍:
id:就是 cs id
trans_count:传输的事务数量
svr_session_count:obproxy到observer的会话数量

show proxysession; 
# 这个命令输出结果字段介绍:
proxy_sessid:就是上面介绍的proxy_sessid
id:也是 cs id
trans_count:传输的事务数量
svr_session_count:obproxy到observer的会话数量

show full processlist; 
# 这个命令输出结果字段介绍:
id:就是connection id
host:obproxy所在节点的ip
ip:observer所在节点的ip

上面三个命令是有区别的:

show processlist 和 show proxysession 看到的是当前客户端到当前obproxy的连接,
show full processlist 看到的是所有客户端到OB集群的连接,
要想kill 会话,则执行以下命令:

点击查看代码
show full processlist;# 找到id
kill id;  # kill会话和sql
kill query id; # 只kill  sql,不kill会话

注意,kill 会话可能会遇到下面的报错:

root@sys(st1-ob01) [oceanbase]> kill 3221986204;
ERROR 1094 (HY000): Unknown thread id: 3221986204

这个报错是因为 要kill 的 会话不在当前的obproxy 中,是在别的obproxy中(一般OB集群都会有多个obproxy,多个obproxy上面还有haproxy),所以要到 指定的obproxy 中 kill 该会话,查看会话在哪个obproxy中见下方sql:

点击查看代码
# 查询该 会话在哪个obproxy中:
show full processlist;   # 有 id 

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 即可
posted @ 2024-03-14 16:03  有形无形  阅读(78)  评论(0)    收藏  举报