第6.2章:StarRocks集群管理工具starrocks-controller(分享篇)

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

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

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

https://in9aoxx754.feishu.cn/docs/doccnAUw7sF3wdul5Sx7fwinDbchttps://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

第6.2章:StarRocks集群管理工具starrocks-controller(分享篇)_第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,安装方式可以使用yum install -y mysql,也可以使用前面1.2章节咱们介绍的rpm的方式,个人更推荐后者。

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

[root@node01 ~]# which mysql
/usr/bin/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章节,规范的参数设置可以有效的后续避免集群使用过程中出现不必要的问题。

1.2.3 集群免密

因为涉及到部署文件的分发,我们也是需要提前打通集群间多个节点的SSH免密的。免密登录的详细操作我们在1.5章节介绍过,这里只罗列需要使用的命令:

#生成密钥对
[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个(具体可以参考1.2章的端口列表),在部署前我们是需要确认这些端口未被其他服务占用且已在防火墙中开放。

1.2.6 集群校时

对集群进行校时,确认三台服务器之间的时差不超过5秒,否则FE无法启动。具体操作仍可以参考1.2章。

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:集群名称,可以随意命名一个,例如就叫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工具启动后,会检测当前集群的通信、端口及部署目录是否存在,若有异常,进程终止,同时给出提示。

第6.2章:StarRocks集群管理工具starrocks-controller(分享篇)_第2张图片

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

环境检查阶段完成后,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环境变量,最后再按照拓扑文件信息修改配置文件。

第6.2章:StarRocks集群管理工具starrocks-controller(分享篇)_第3张图片

第三阶段:启动服务

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

第6.2章:StarRocks集群管理工具starrocks-controller(分享篇)_第4张图片

如上图,当看到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 

例如:

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

3.2启停集群服务

3.2.1 停止集群服务

语法为:

sr-ctl cluster stop 

例如:

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

第6.2章:StarRocks集群管理工具starrocks-controller(分享篇)_第5张图片

3.2.2 启动集群服务

语法为:

sr-ctl cluster start 

例如:

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

第6.2章:StarRocks集群管理工具starrocks-controller(分享篇)_第6张图片

3.3启停某类进程

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

3.3.1 停止BE进程

语法为:

sr-ctl cluster stop  --role BE

例如:

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

第6.2章:StarRocks集群管理工具starrocks-controller(分享篇)_第7张图片

3.3.2 启动BE进程

语法为:

sr-ctl cluster start  --role BE

例如:

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

3.3.3 停止FE进程

语法为:

sr-ctl cluster stop  --role FE

例如:

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

第6.2章:StarRocks集群管理工具starrocks-controller(分享篇)_第8张图片

3.3.4 启动FE进程

语法为:

sr-ctl cluster start  --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  --node 

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

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

3.4.2 启动某个BE实例

语法为:

sr-ctl cluster start  --node 

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

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

3.4.3 停止某个FE实例

语法为:

sr-ctl cluster stop  --node 

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

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

3.4.4 启动某个FE实例

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

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

你可能感兴趣的:(StarRocks,运维,数据仓库,分布式,golang)