关于 keyviz 工具原理

对keyviz的实现比较感兴趣。 keyviz 工具是怎么利用 tidb-server 向 pd 注册的信息,来把 region 和 tidb-server 关联起来的?这块有相关文档或者源码位置可以参考吗?感谢。

Hi,

TiDB 在启动的时候,会将自己的 advertise address 注册到 etcd 中 https://github.com/pingcap/tidb/pull/14809
因此,遍历 etcd 前缀 /topology/tidb 即可知悉集群中所有 TiDB 地址。

该前缀下还可能包含已下线的 TiDB,因此 TiDB Dashboard 内置一个 TiDB Load Balance 用于在某个 TiDB 下线后尝试切换到其他 TiDB https://github.com/pingcap-incubator/tidb-dashboard/pull/304

KeyViz 通过该 Load Balance 访问 TiDB 10080 端口上的表结构接口拉取所有表的信息,10080 端口上提供的服务见 https://github.com/pingcap/tidb/blob/master/docs/tidb_http_api.md KeyViz 对应代码参见 https://github.com/pingcap-incubator/tidb-dashboard/blob/master/pkg/keyvisual/decorator/tidb_requests.go