黄东旭解析 TiDB 的核心优势
535
2024-03-08
显示未启动必要组件 NgMonitoring 的问题贴。经过排查发现,是 ngmonitoring.toml 中的配置文件出现了问题。文件中的 endpoints 应该是以逗号分隔的,但是却写成了以空格分隔的情况,所以才导致了报错。
(这里借用一下原帖中的截图)
原帖地址:
使用 TiUP 部署的集群显示集群中未启动必要组件 NgMonitoring
v6.5.1 dashboard 异常
题了,先简单分析一下,这里是配置文件出现问题了,那么大概率是需要到 TiUP 的仓库中去修复 bug。所以笔者就到 github 中找到了 TiUP 仓库。
pingcap/tiup: A component manager for TiDB (github.com)
PDAddrs
PDAddrs 进行查找,看看代码中是如何给 PDAddrs赋值的。在结果中排除掉路径中带有template 关键字的文件,发现只有路径为 pkg/cluster/spec/monitoring.go 的文件最符合。
NgMonitoringConfig 数据结构正是存储 ngmonitoring.toml 文件中数据的结构,变量 pds 正是出现 bug 的地方了。
pds为 string 类型的切片,通过解析 PDServers 变量,把一个或者多个 PDServers 的信息用 append 函数加入到 pds 中,然后把 pds 赋值给 ngcfg。根据这个逻辑,笔者猜测:pds 增加元素之后,数据存储的方式就已经是用空格分隔了。之后,笔者就写了一个简单的 go 的代码,来还原 bug。
import ( "fmt" ) func main() { data := [...]string{"one", "two", "three"} fmt.Println(data) pds := []string{} for i := 0; i < 10; i++ { pds = append(pds, fmt.Sprintf("\"127.0.0.1:4000\"")) } fmt.Println(pds) }输出结果:
的问题,那之前的 tiup 版本为什么没有同样的问题出现呢?
写及代码提交:
学一个参考,为开源社区贡献自己的一份力量。
PS:第一次为 TiDB 开源项目做出自己的贡献还是非常令人激动的。在此感谢原厂大佬在我的 PR 基础上给了代码优化的建议。
作者介绍:caiyfc,来自神州数码钛合金战队,是一支致力于为企业提供分布式数据库TiDB整体解决方案的专业技术团队。团队成员拥有丰富的数据库从业背景,全部拥有TiDB高级资格证书,并活跃于TiDB开源社区,是官方认证合作伙伴。目前已为10+客户提供了专业的TiDB交付服务,涵盖金融、证券、物流、电力、政府、零售等重点行业。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。