作者:王军
运维难,难于上青天。
作为 PingCAP 员工,我们不仅平时自己用着 TiDB,也会自发的想让周围人也用上 TiDB。但在这个过程中,我们发现有以下问题:
为了改进和解决这些痛点,我们组队参加了 TiDB Hackathon 2019 比赛,编写了 TiExciting 项目,并最终获得大家的认可拿到了三等奖。
在参赛前,我们先评估了一下之前的体感问题是不是真实存在的问题,因此我们在本次 Hackathon Ucloud 新集群上进行了一番实测:
综上,实践表明,不论是新手还是老手,都要经过很复杂的步骤才能开始真正用起 TiDB 产品。另外,TiDB Ansible 本身还对部署环境提出了极高的要求,例如公有云环境直接无法通过入门检测,这些都会劝退大量新用户。
为了解决问题,我们先进行了需求设计:
当前安装都是安装一路绿灯,环境检查只做告警,不推荐在生产环境使用。后期我们会添加严格模式,来做生产集群管理。时刻对生成环境抱有敬畏之心。
创建完目标机器(后文介绍机器添加方式)后,就可以自由选择其中的机器进行部署。界面上可以自行勾选想要的组件,或取消勾选不想要的组件。比如不想要监控大礼包,就可以直接取消勾选「监控」。另外 TiDB 也是可以取消勾选的,适用于只想使用 TiKV 的情况。

选择完组件后,界面会自动根据节点数量、想要的组件生成部署方案。当然,作为 Hackathon 作品,这里的自动方案不一定是最合理的,以及实际场景中用户很可能想要进一步自行定制拓扑,因此用户可以在这个界面上拖拽各个组件来重新决定拓扑,或添加新组件。一般来说,如果只是不严格想体验一下分布式 TiDB 的话,包括只有一个节点等情况,用户直接采用默认的拓扑即可,非常友好。
然后演示下最后安装的效果:

启动 TiExciting 后,界面会引导用户首先增加机器,包括填写连接方式等。这里可以指定密码或密钥登录,无需 root,也无需创建特别的用户,只需填写运维人员平时连接上去的方式即可。增加机器时候的设置也可以从现有机器设置复制。

高级配置中可以指定位置标签,包括这个机器属于什么机架,及这个机器属于什么机房。如果有指定位置标签,配置完毕后就会在界面上按照机房和机架组织显示这些机器,非常直观。

完整成果演示视频可以点击这里:TiExciting Demo 视频
为了能跨各个平台展示界面,TiExciting 是以 Web 形式提供界面的,使用了比较流行的 React + MobX 方案实现。这样,不仅 TiExciting 的界面是跨平台的,而且即使 TiExciting 运行在无 UI 的服务器上,也能在用户浏览器上远程访问到界面。
TiExciting 的部署逻辑及响应用户操作的逻辑是采用 Python 编写的,来达成跨平台的目的。我们设想采用 Python 打包工具来实现用户一键下载打开运行且不需要安装的理念,但实际 Hackathon 上用下来发现它只能是个设想,坑还是挺多的。另外 Python 本身 runtime 就很大。如果再给我们一次机会,大概会改用 Golang 吧,生成一个 binary 是真的很简单。
为了尽可能地快,TiExciting 会尽可能地基于文件哈希来复用文件,例如已下载且校验通过的 TiDB 二进制大礼包就不需要重复下载,已经成功部署的同理。TiExciting 还实现了异步有向无环图的任务调度机制,当所有先决任务完成后,后续任务就可以得到执行,且之间没有依赖关系的任务可以并行执行,如下图所示:

因为 Hackathon 时间有限,其实还有很多没来得及做但想做的功能:
虽然 Hackathon 已告一段落,但我们希望将来能进一步完善 TiExciting,将它想做的都落地下来,成为一个大家喜欢用的通用的工具,帮助更多人用上 TiDB 并改善运维的复杂度。
阅读原文:
TiExciting —— 让 TiDB 部署轻松简单 | PingCAP
原文作者:;如有侵权,请联系管理员删除。