通过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 即可

浙公网安备 33010602011771号