StarRocks集群管理工具starrocks-controller[尝鲜分享]

starrocks-controller是StarRocks工程师[ID:wangtianyi2004]为StarRocks社区版打造的便携式集群管理工具。通过9M不到的starrocks-controller,我们几乎可以像使用企业版一样,非常方便的对多套集群进行一键服务部署和集群服务启停。controller工具使用go语言编写,在数月前已经低调的在github上开源:

https://github.com/wangtianyi2004/starrocks-controller

当前controller还没有发布Release版本,下面咱们使用tag里的Pre-release版sr-ctl v1.0.1尝鲜学习,更详细的资料可以参考tianyi分享的飞书文档:

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

一、使用准备

1.1服务器准备

准备数台安装有CentOS 7+的服务器,服务器的台数和配置视实际需求而定,例如这里我们使用三台普通机器来进行测试:

Host IP 用户 期望部署服务
node01 192.168.110.101 root 1FE+1BE
node02 192.168.110.102 root 1FE+1BE
node03 192.168.110.103 root 1FE+1BE

注意:建议提前在/etc/hosts中为服务器配置别名,例如:

[root@node01 ~]# vim /etc/hosts
1

1.2环境准备

说明:以下准备工作仅针对于当前sr-ctl v1.0.1版本,后续工具优化后,准备工作可能也会随之减少或者变化,大家以git上的介绍为准。下面的准备部分会略显冗长,但确实都是部署任何产品都避不开的常规操作。

1.2.1 mysql-client

starrocks-controller工具(后面简称SR-CTL)自身其实不需要依赖第三方环境(例如jre或者python这些),但因为它需要对StarRocks集群进行操作和展示,所以 需要在运行 SR-CTL 的节点 上安装mysql-client ,client安装可以使用yum install -y mysql,也可以下载rpm安装(推荐)。

例如我们计划在node01上使用SR-CTL,那么就需要提前在该节点安装好mysql-client,检查当前节点是否已安装的命令可以使用:which mysql

此外,StarRocks运行所需要的jdk我们并不需要提前准备,SR-CTL会进行jdk的部署和配置仅针对StarRocks的环境变量。

1.2.2 系统参数

基于权限考虑,SR-CTL没有或者说应该也不能对系统参数进行设置,生产环境下我们还是建议对服务器的系统参数进行调优,特别需要注意的参数例如:

1)文件句柄数参数:

ulimit -n 65535

2)内存参数使用Overcommit:

echo 1 | sudo tee /proc/sys/vm/overcommit_memory

3)TCP连接缓冲队列参数:

echo 1024 | sudo tee /proc/sys/net/core/somaxconn

具体可以参考官网文档“管理手册->配置参数->系统参数”章节,规范的参数设置可以有效的后续避免集群使用过程中出现不必要的问题。

1.2.3 集群免密

因为涉及到部署文件的分发,我们也是需要提前打通集群间多个节点的SSH免密的。免密登录的详细操作不再赘述,仅列出需要使用的命令:

#生成密钥对

[root@node01 ~]# ssh-keygen -t rsa

#分发公钥

[root@node01 ~]# ssh-copy-id 192.168.110.101

[root@node01 ~]# ssh-copy-id 192.168.110.102

[root@node01 ~]# ssh-copy-id 192.168.110.103

注意:

1、不要忘记当前节点向当前节点分发公钥;

2、分发公钥时,若已经在hosts文件中配置了别名,也可以直接写别名;

3、分发完成后,可以使用ssh node01或者ssh 192.168.110.101来验证确实已经实现了免密。

1.2.4 创建目录

根据磁盘空间情况,在集群的三个节点上分别创建服务部署目录和数据存放目录,例如node01上:

[root@node01 ~]# mkdir /opt/starrocks

[root@node01 ~]# mkdir -p /data/starrocks

1.2.5 端口检查

StarRocks默认使用的端口有9个(8000、8030、8040、8060、9010、9020、9030、9050、9060),在部署前我们是需要确认这些端口未被其他服务占用且已在防火墙中开放。

1.2.6 集群校时

对集群进行校时,确认三台服务器之间的时差不超过5秒,否则FE无法启动。

1.3 SR-CTL准备

1.3.1 工具下载

在任意路径下,使用wget命令下载:

[root@node01 ~]# wget https://github.com/wangtianyi2004/starrocks-controller/releases/download/sr-ctl/sr-ctl

授予可执行权限:

[root@node01 ~]# chmod a+x sr-ctl

1.3.2 编写拓扑文件

根据我们的集群信息和准备的目录路径,参考模板:

https://github.com/wangtianyi2004/starrocks-controller/blob/main/sr-c1.yaml

注意:当前版本 不支持storage_dir 配置多路径,例如:storage_dir: /data1/storage;/data2/storage,也 不支持 配置存储介质和可用空间,例如:storage_dir: ​​​​​​​/data1/storage,medium:HDD,capacity:50

编写得到如下sr.yaml文件:

[root@node01 ~]# vim sr.yaml

global:

user: "root"

ssh_port: 22

fe_servers:

- host: 192.168.110.101

ssh_port: 22

http_port: 8030

rpc_port: 9020

query_port: 9030

edit_log_port: 9010

deploy_dir: /opt/starrocks/fe

meta_dir: /data/starrocks/fe/meta

log_dir: /data/starrocks/fe/log

priority_networks: 192.168.110.0/24

config:

sys_log_level: "INFO"

sys_log_delete_age: "1d"

- host: 192.168.110.102

ssh_port: 22

http_port: 8030

rpc_port: 9020

query_port: 9030

edit_log_port: 9010

deploy_dir: /opt/starrocks/fe

meta_dir: /data/starrocks/fe/meta

log_dir: /data/starrocks/fe/log

priority_networks: 192.168.110.0/24

config:

sys_log_delete_age: "2d"

- host: 192.168.110.103

ssh_port: 22

http_port: 8030

rpc_port: 9020

query_port: 9030

edit_log_port: 9010

deploy_dir: /opt/starrocks/fe

meta_dir: /data/starrocks/fe/meta

log_dir: /data/starrocks/fe/log

priority_networks: 192.168.110.0/24

config:

sys_log_delete_age: "3d"

be_servers:

- host: 192.168.110.101

ssh_port: 22

be_port: 9060

webserver_port: 8040

heartbeat_service_port: 9050

brpc_port: 8060

deploy_dir : /opt/starrocks/be

storage_dir: /data/starrocks/be/storage

 log_dir: /data/starrocks/be/log

config:

create_tablet_worker_count: 3

- host: 192.168.110.102

ssh_port: 22

be_port: 9060

webserver_port: 8040

heartbeat_service_port: 9050

brpc_port: 8060

deploy_dir : /opt/starrocks/be

storage_dir: /data/starrocks/be/storage

log_dir: /data/starrocks/be/log

config:

create_tablet_worker_count: 3

- host: 192.168.110.103

ssh_port: 22

be_port: 9060

webserver_port: 8040

heartbeat_service_port: 9050

brpc_port: 8060

deploy_dir : /opt/starrocks/be

storage_dir: /data/starrocks/be/storage

log_dir: /data/starrocks/be/log

config:

create_tablet_worker_count: 3

二、一键部署

准备好yaml文件后,执行部署命令sr-ctl cluster deploy,完整的部署命令写法为:

sr-ctl cluster deploy <cluster_name> <version> <topology_file>

参数说明:

cluster_name:集群名称,可以随意命名一个,例如就叫cluster;

version:要部署的版本。 这里注意,当前只可以使用 2.0.1 版本 ,代码里是固定写好了,相当于这个参数当前实际是没有用的。后续正式版本这个限制肯定会放开,当前咱们为了尝鲜,就写v2.0.1吧。

topology_file:包含集群信息的拓扑文件,即前面咱们编写好的sr.yaml。

综上,执行部署命令:

[root@node01 ~]# ./sr-ctl cluster deploy sr-c1 v2.0.1 sr.yaml

工具启动后,命令窗口会持续打印进度信息,为了方便大家理解,咱们也简单切分说明一下:

第一阶段:环境预检测

SR-CTL工具启动后,会检测当前集群的通信、端口及部署目录是否存在,若有异常,进程终止,同时给出提示。


第二阶段:部署文件下载及分发

环境检查阶段完成后,SR-CTL会从OSS中下载部署包starrocks-2.0.1-quickstart.tar.gz,该部署包实际为“StarRocks-2.0.1.tar.gz + jdk-8u301-linux-x64.tar.gz”。部署包保存路径为:/root/.starrocks-controller/download。下载完成后,会解压分发文件到各个节点我们配置的路径中,并在启动脚本中配置JAVA环境变量,最后再按照拓扑文件信息修改配置文件。


第三阶段:启动服务

各节点文件都分发修改完成后,SR-CTL会继续自动启动服务会通过mysql-client将各实例添加进入集群:


如上图,当看到FE和BE状态都正常展示时,集群就部署完成了。整个部署过程用时10分钟左右,完成后SR-CTL也会自动退出。

部署完成后,我们可以使用node01节点的mysql-client访问StarRocks(初始密码为空,访问语法为:mysql -h192.168.110.101 -P9030 -uroot),也可以使用图形化工具例如DBeaver、Navicat或者SQLyog等将StarRocks视为MySQL进行访问。

注意:当前SR-CTL仅会部署FE和BE,不会部署Broker

三、集群管理

除了便捷部署操作,SR-CTL更是管理集群的“利器”。

3.1查看集群信息

3.1.1 查看所有使用SR-CTL部署的集群信息

语法为:sr-ctl cluster list

[root@node01 ~]# ./sr-ctl cluster list


备注:当前仅部署了一套,所以只显示出了一个集群。

3.1.2 查看指定集群的集群信息

语法为:sr-ctl cluster display <cluster_name>

例如:

[root@node01 ~]# ./sr-ctl cluster display sr-c1

3.2启停集群服务

3.2.1 停止集群服务

语法为:sr-ctl cluster stop <cluster_name>

例如:

[root@node01 ~]# ./sr-ctl cluster stop sr-c1

3.2.2 启动集群服务

语法为:sr-ctl cluster start <cluster_name>

例如:

[root@node01 ~]# ./sr-ctl cluster start sr-c1

3.3启停某类进程

StarRocks的主进程分为FE和BE,通过SR-CTL,我们也可以一键批量启停FE或者BE。

3.3.1 停止BE进程

语法为:sr-ctl cluster stop <cluster_name> --role BE

例如:

[root@node01 ~]# ./sr-ctl cluster stop sr-c1 --role BE

3.3.2 启动BE进程

语法为:sr-ctl cluster start <cluster_name> --role BE

例如:

[root@node01 ~]# ./sr-ctl cluster start sr-c1 --role BE

3.3.3 停止FE进程

语法为:sr-ctl cluster stop <cluster_name> --role FE

例如:

[root@node01 ~]# ./sr-ctl cluster stop sr-c1 --role FE

3.3.4 启动FE进程

语法为:sr-ctl cluster start <cluster_name> --role FE

例如:

[root@node01 ~]# ./sr-ctl cluster start sr-c1 --role FE

3.4启停某实例服务

因为需要精确的启停某个节点的FE或者BE,所以我们首先需要通过sr-ctl cluster display命令来获取需启停服务的node_id。还以当前的sr-c1集群为例,查看集群信息:

[root@node01 ~]# ./sr-ctl cluster display sr-c1

3.4.1 停止某个BE实例

语法为:sr-ctl cluster stop <cluster_name> --node <node_id>

例如停止103节点的BE进程:

[root@node01 ~]# ./sr-ctl cluster stop sr-c1 --node 192.168.110.103:9060
14

3.4.2 启动某个BE实例

语法为:sr-ctl cluster start <cluster_name> --node <node_id>

例如再启动103节点的BE进程:

[root@node01 ~]# ./sr-ctl cluster start sr-c1 --node 192.168.110.103:9060

3.4.3 停止某个FE实例

语法为:sr-ctl cluster stop <cluster_name> --node <node_id>

例如停止102节点的FE进程:

[root@node01 ~]# ./sr-ctl cluster stop sr-c1 --node 192.168.110.102:9010
16

3.4.4 启动某个FE实例

当前暂不支持,需要手动启动。

总体使用下来,starrocks-controller在功能上已经颇为强大,大家不妨也上手测试看看,如果有什么好的思路或者发现有什么问题,也可以在git上提提issue,咱们一起为StarRocks打造出一款卓越的集群管理工具。

4赞

我以为是WEB的 :sweat_smile:

豆浆会有的,油条也会有的 :grinning: