StarRocks极客营回顾 | SR-CTL:一个管理多个 StarRocks 集群的命令行工具

46 天全实战开发,17 位 Mentor 1V1 指导,18 个成功被 merge 的 PR,23 个微信交流群,数不清的沟通……专为数据库开发者打造的“StarRocks 极客营”第一季已落下帷幕。

在第一季中,社区选取了 Execution Engine、Storage Engine、Data Lake Analysis、Ecosystem、Loading、Observability、Planner、Usability 等 8 个方向,开放了 34 个开发任务。

曲终人不散,StarRocks 社区会对 8 个任务方向推出 5 篇专访,揭秘极客们大胆挑战、和技术大牛一起推开数据库梦想之门的过程,也希望能给数据库领域的开发者和用户带来一些启示。

今天登场分享的是拥有十年 DBA 经验、选择了 Usability 方向的开源发烧友——王天宜(GitHub ID: wangtianyi2004)。

王天宜拥有十年 DBA 经验,做过 Oracle、MySQL 和 PostgreSQL,也做过大数据运维。之前一直在做基础平台架构的建设,围绕着 Kubernetes、分布式存储、数据库以及消息队列和采集工具构建金融业务基础平台。

作为 PostgreSQL 的发烧友,他在 Patroni 上做过二次开发,开发了 PostgreSQL Operator 与 Patroni Operator 来推进数据库上 Kubernetes。后期在选型中了解到开源分布式数据库,在测试与使用后转身投入开源数据库建设的阵营。


为什么选择 Usability 方向?

我一直是做基础平台架构的,从 TP 数据库做到 AP 数据库。由于是平台运维,实际编码的工作量并不多,一般都是围绕着周边生态进行开发,写过一些简单的中间件,对 PostgreSQL 的边缘功能做过一些二次开发,改写过监控平台。

开始接触 StarRocks 后,需要在我自己的虚拟机上做大量的功能性验证。中午吃个饭或者开个会回来机器会自动休眠,相当于所有的 Server 都会掉点,我需要一个节点一个节点把服务拉起来。最开始只是写了一个简单的原型,通过 SSH 直接启动集群的所有节点。后来自己的需求也越来越多,就想写一个 StarRocks Console 版的管理平台。

Usability 是一个非常有意义的主题。很多 Usability 的功能点都是一个自底向上的共建过程,数据库的厂商对 Usability 大多后知后觉,非常需要使用者的推进和反馈。在开发过程中我也一直把这个工具当成是一款独立的产品,希望更多和我一样的 SRE 或者运维同学,能够把 StarRocks 用得更飘逸,像个技术侠客一样。


你选择的是哪一个 Issue?

在介绍项目之前,首先要致敬 TiUP 这款工具。RESPECT。功能上大部分都是参考 TiUP 的。

这个项目是 Develop a tool for managing multiple StarRocks clusters【Easy】 · Issue #4034 · StarRocks/starrocks ,主要就是一个多集群统一管理工具。

最开始的想法是通过 ssh 命令做一个 hardcode 的启停工具,方便我在宿主机休眠时把所有节点运用起来。后来因为需要操作的集群越来越多,把 Scripts 改成了可以通过配置文件启停指定的集群。后来索性就把部署、升级降级、扩容缩容都加进来了。

感兴趣的朋友可以看一下我写的 User Guide ,也可以看一下我在 GitHub 上的具体实现 Release sr-ctl v1.0.1 · wangtianyi2004/starrocks-controller

多集群统一管理工具:https://github.com/StarRocks/starrocks/issues/4034

User Guide:https://in9aoxx754.feishu.cn/docs/doccnAUw7sF3wdul5Sx7fwinDbc

具体实现:https://github.com/wangtianyi2004/starrocks-controller/releases/tag/sr-ctl


具体描述一下你实现了这个 Issue 哪些功能

主要是以下 5 个:

  • DEPLOY:根据 yaml 文件部署 StarRocks 集群
  • DISPLAY / LIST:显示某一集群或所有集群的信息
  • START / STOP:启动或停止集群,根据参数选择启动/停止某一节点、全部 FE 或 BE 或者是集群所有节点
  • UPGRADE / DOWNGRADE:升级或降级版本
  • SCALE-IN / SCALE-OUT:扩容或缩容节点

这个工具的核心点是多集群管理,通过一个中控机完成所有集群的管理和配置。在配置了中控机的 SSH 互信后,可以通过中控机以命令行的方式完成不同集群的管理。


在具体实现上,你做过怎样的权衡?

对于数据库管理基本有如下几种思路,这个项目也经历了这几个阶段:

  1. 使用 Script 进行集群的管理

  2. 使用 Ansible 或者 Puppet 等工具进行管理

  3. 开发独立的平台进行管理

脚本化的管理方式

在最初的阶段,我也确实是有使用脚本进行集群控制。对于脚本来说,最大的问题在于大部分参数都是 hardcode 的。当功能多的时候,难以对脚本进行组织与规划,维护起来相对复杂。脚本的管理方式一般只适用于实现单一的小功能,比如说在最初的版本中使用脚本来控制集群启动。

自动化部署工具

类似于 Ansible 或者 Puppet 这一类的自动化部署工具,也非常适合集群的管理。也会有很多公司使用 Ansible 作为平台级的自动化管理工具,针对于不同的操作编写 Playbook。我也曾考虑过使用 Ansible 的 Playbook 进行部署操作,但是考虑到通用型,如果做成一个产品,Ansible 部署和依赖可能无法满足极简化的操作需求。

独立管理平台

独立的管理平台在开发难度上相较上面两种方式难度大了很多,但操作体验会有质的飞跃。比如说独立的管理平台可以不需要安装部署,不依赖于其他的组件,可以进行定制化开发。这也是我选择独立管理平台的原因。

作为一个集群的管理工具,你如何看待用可视化或者命令行进行集群管理?

我个人是非常喜欢命令行的这种感觉。

在写这个工具时,前期考虑过是要做一个可视化的工具还是一个命令行的工具。按照我个人的习惯,喜欢命令行的操作多一些。考虑到可视化管理平台的安装部署本身就是一个复杂的操作,也可能依赖于其他的组件,实现难度也更大一些,最终选择了命令行的方式。在选定以命令行的管理方式后,更多精力放在了如何简化命令行操作上。


对于这个项目来说,你还有什么规划吗?

这个工具刚完成第一个版本,重心基本放在了 StarRocks 的部署与维护上。

由于时间原因,第一个版本在日志输出上存在一些问题,接下来会逐步对输出日志进行优化。

在下一个版本中,可能会更多注重生态开发:

  • 完成 Prometheus 与 Grafana 的部署与管理

  • 考虑对接 ELK 日志收集平台

  • 通过配置文件完成数据导入工作

另外,对于我来说,这是一个完全开源的项目,也希望会有更多的人参与其中。如果大家对这个工具感兴趣,可以到我的 GitHub 下面提需求。希望更多的社区用户可以充当产品经理的角色,一起来决定这个工具未来的功能点与发展。这也是开源的魅力所在。

参与这个活动,你有哪些收获或者感受?

这是我第一次独立参与一个开源的项目。

最初的开发理念只是做一个简单的 quick start 的工具,估算用时也没有多少,觉得春节假期就能搞定。不过后面越做越大,不停进行需求迭代,一直到最近才完成第一个版本。

经常回到家就已经很晚,自己写一会儿基本就两三点了。非常敬佩开源圈子里的前辈,很多互联网技术大佬在工作之余依然投身于开源项目的建设。非常有幸这次我也能成为其中的一员。

你如何看待开发者对社区的贡献?

之前参与过 TiDB 等社区的活动,很遗憾没有给 TiDB 做什么源码贡献,这也是我参与社区活动最大的遗憾。在这次的项目开发中,我借鉴了很多 TiUP 的功能,在没有思路的时候,会去翻一翻 TiUP 的实现。

开源社区更像是技术江湖,每一个参与者都是一个侠客,当我们行走于江湖的时候,可以用之前习得的武艺,帮助到其他人。我从一个开源社区学习到的东西,可以对其他产品有所帮助,其实能够促进所有的社区和产品一同进步。

有没有要特别感谢的人?

我要特别感谢两个人,一个是 PingCAP 的 Jack Ma,每次都被我拉过来讨论需求,极其有耐心。还有一位是 StarRocks 的晨阳小姐姐,帮我做了很多的测试,也和我争论过很多设置是不是合理。希望未来能够有更多人参与到项目的共建中。

Mentor 说

易用性是最需要通过社区来获取灵感和产品改进方向的。StarRocks 在性能表现上已经领先于其他同类产品,但是在易用性上还有很大的提升空间,无论在部署运维、建表的分区分桶、导入查询的参数等都需要做系统的提升改造。

StarRocks 的核心特性之一就是利用分布式的 MPP 架构来充分利用机器资源,但是集群部署比较复杂,我们一直希望能够有一款一键部署的工具来帮助刚刚了解到 StarRocks 的新用户,让大家快速体验、轻松运维。

同时,数据库的可观测性(Observability)和可控制性(Controllability)是会持续提升的,但是数据库内核的 API 非常需要一个和用户能够交互的接口。通过这个接口,我们可以持续把数据库的核心功能,以更加友好的方式展现给 StarRocks 的用户。因此对这个题目我是非常期待的,天宜的初版完成度和合作精神值得赞美。

——赵恒(GitHub ID: Dshadowzh)