TiDB 如何获取集群创建时间
作者: jansu-dev 原文来源:https://tidb.net/blog/654fa1be
【是否原创】是
【首发渠道】TiDB 社区
【正文】
一、前言
很久没写文章了,今天在同事的提示的情况下,处理了一个 TiDB 获取集群创建时间的问题,觉得有必要记录一下防止遗忘,也分享给大家。
二、探索
首先,翻遍 TiDB 官方文档也没有找到能够查询 TiDB 集群初始化时间的方法。所有监控信息(Dashboard、Grafana)都只能仅查询各组件的 Startup Time,查询表的 Create Time 也不准确。
其次,之前知道在集群初始化的时候 PD 会初始化一个 ClusterID 并持久化。即然,TiDB 官方没有提供查询接口,那能够分别集群的也许只有这一个信息了。最开始,一直在尝试使用 pd-ctl 的 tiup ctl:v5.2.3 pd tso 1571036791
直接转译 TSO ,但始终没有成功。
最后在一位同事的提醒下,翻了下 PD 在初始化 Cluster_ID 时的源码, 才成功解决问题。详情见 三、解决 部分。
三、解决
看了下 PD 代码,在这个 initOrGetClusterID 函数中,Cluster ID 是取当前时间的 Unix 时间戳左移 32 位,再加一个随机数获得。因此直接转译是无法获得正确时间的。
做了一些小改动,逆着代码思路取出的时间基本符合要求,能确保年月日级别的准确性。大家也可以直接点击 代码链接 直接修改其中 Cluster ID 值获取结果。
其实,之后尝试过右移 32 位再用 pd-ctl tso 转译还是不成功的。估计是因为 TiDB 的 TSO 由 “物理时间 + 逻辑时间” 组成,而 Cluster ID 的计算由 “物理时间 + 随机数” 组成吧,本身就不是一个东西吧。
四、代码逻辑
希望对大家有帮助!
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/e9ed85f2f986dcf0f5d84c645】。文章转载请联系作者。
评论