V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
PingCAP
V2EX  ›  数据库

TiExciting —— 让 TiDB 部署轻松简单

  •  
  •   PingCAP · 2020-01-10 11:35:53 +08:00 · 1188 次点击
    这是一个创建于 1776 天前的主题,其中的信息可能已经有所发展或是发生改变。

    作者:王军

    运维难,难于上青天。

    作为 PingCAP 员工,我们不仅平时自己用着 TiDB,也会自发的想让周围人也用上 TiDB。但在这个过程中,我们发现有以下问题:

    • 上船难:官方推荐的部署方法 TiDB Ansible 限制较多,有一定的学习成本。对于运维同学比较容易上手,但是对于研发同学就比较不友好。用户手册详细但是复杂,其中也有各种各样的限制,特别是遇到错误的时候不好处理。

    • 开船难:用上 TiDB 之后,后续对 TiDB 集群进行运维(如扩容,升级),尤其在 PD 的扩容和缩容,安全性高,但是操作还是有些复杂。

    • 开发上船容易翻:经常见到开发人员不知道水有多深,跟着文档在自己机器上尝试用 TiDB Ansible 部署 TiDB,结果一不小心就把系统改得面目全非。

    为了改进和解决这些痛点,我们组队参加了 TiDB Hackathon 2019 比赛,编写了 TiExciting 项目,并最终获得大家的认可拿到了三等奖。

    当前的上船门槛有多高?

    在参赛前,我们先评估了一下之前的体感问题是不是真实存在的问题,因此我们在本次 Hackathon Ucloud 新集群上进行了一番实测:

    • 队友 A:腾讯微信研发,从未接触过 TiDB,首次尝试部署:

      • 按照 TiDB Ansible 超长的部署教程,部署 3 小时后没有成功,遂放弃。
    • 队友 B:PingCAP 华东地区高级客户支持,为各种商业客户部署过 TiDB:

      • 操作熟练,但经常由于手滑或环境关系经历各种报错,凭丰富的知识知道怎么解决,最终使用 20 分钟部署完毕。

    综上,实践表明,不论是新手还是老手,都要经过很复杂的步骤才能开始真正用起 TiDB 产品。另外,TiDB Ansible 本身还对部署环境提出了极高的要求,例如公有云环境直接无法通过入门检测,这些都会劝退大量新用户。

    怎样可以快速上船和开船?

    为了解决问题,我们先进行了需求设计:

    • 为了能快速上船,部署过程本身应该要做到「快」,能并行的操作就并行进行。

    • 直观方便清晰,最好不要文档就能用起来:提供图形化界面。

    • 所有与易用性冲突的特性都需要让步。

      • TiDB Ansible 强制环境检查 → TiExciting 不阻止部署(但给出 Warning )。

      • TiDB Ansible 要求从中控机部署 → TiExciting 甚至可以从 Windows 开始部署,且不要求配置互信。

    • 绿色环保有节操,没有全家桶。

      • TiDB Ansible 强制要求进行系统配置调优满足 TiDB 要求 → TiExciting 允许用户可选地配置系统以便更好地运行 TiDB,且用户知悉各个要进行的改动。

      • TiExciting 允许用户自行勾选想要安装的组件,遵循最小化原则。

    当前安装都是安装一路绿灯,环境检查只做告警,不推荐在生产环境使用。后期我们会添加严格模式,来做生产集群管理。时刻对生成环境抱有敬畏之心。

    Hackathon 成果

    部署

    创建完目标机器(后文介绍机器添加方式)后,就可以自由选择其中的机器进行部署。界面上可以自行勾选想要的组件,或取消勾选不想要的组件。比如不想要监控大礼包,就可以直接取消勾选「监控」。另外 TiDB 也是可以取消勾选的,适用于只想使用 TiKV 的情况。

    <center>图 1 部署方案</center>

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

    然后演示下最后安装的效果:

    <center>图 2 安装演示</center>

    管理机器

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

    <center>图 3 服务器添加演示</center>

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

    <center>图 4 高级配置</center>

    完整成果演示视频可以点击这里:TiExciting Demo 视频

    技术实现

    界面

    为了能跨各个平台展示界面,TiExciting 是以 Web 形式提供界面的,使用了比较流行的 React + MobX 方案实现。这样,不仅 TiExciting 的界面是跨平台的,而且即使 TiExciting 运行在无 UI 的服务器上,也能在用户浏览器上远程访问到界面。

    跨平台

    TiExciting 的部署逻辑及响应用户操作的逻辑是采用 Python 编写的,来达成跨平台的目的。我们设想采用 Python 打包工具来实现用户一键下载打开运行且不需要安装的理念,但实际 Hackathon 上用下来发现它只能是个设想,坑还是挺多的。另外 Python 本身 runtime 就很大。如果再给我们一次机会,大概会改用 Golang 吧,生成一个 binary 是真的很简单。

    为了尽可能地快,TiExciting 会尽可能地基于文件哈希来复用文件,例如已下载且校验通过的 TiDB 二进制大礼包就不需要重复下载,已经成功部署的同理。TiExciting 还实现了异步有向无环图的任务调度机制,当所有先决任务完成后,后续任务就可以得到执行,且之间没有依赖关系的任务可以并行执行,如下图所示:

    <center>图 5 异步有向无环图的任务调度机制</center>

    聊聊未来

    因为 Hackathon 时间有限,其实还有很多没来得及做但想做的功能:

    • 更好的部署方案规划。

    • 纯界面实现扩容、缩容。

    • 纯界面实现更新集群。

    • 纯界面管理集群(启动、停止、更新、滚动等)。

    • 将现有 TiDB Ansible 集群纳入 TiExciting 管理。

    虽然 Hackathon 已告一段落,但我们希望将来能进一步完善 TiExciting,将它想做的都落地下来,成为一个大家喜欢用的通用的工具,帮助更多人用上 TiDB 并改善运维的复杂度。

    原文阅读https://pingcap.com/blog-cn/tiexciting-makes-tidb-deployment-easy-and-simple/

    mediapig89
        1
    mediapig89  
       2020-01-10 12:06:18 +08:00
    毕竟我们是最大的海外客户,还是要顶一下 pingcap 的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1176 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:38 · PVG 02:38 · LAX 10:38 · JFK 13:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.