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
准备数台安装有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
说明:以下准备工作仅针对于当前sr-ctl v1.0.1版本,后续工具优化后,准备工作可能也会随之减少或者变化,大家以git上的介绍为准。下面的准备部分会略显冗长,但确实都是部署任何产品都避不开的常规操作。
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的环境变量。
基于权限考虑,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章节,规范的参数设置可以有效的后续避免集群使用过程中出现不必要的问题。
因为涉及到部署文件的分发,我们也是需要提前打通集群间多个节点的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来验证确实已经实现了免密。
根据磁盘空间情况,在集群的三个节点上分别创建服务部署目录和数据存放目录,例如node01上:
[root@node01 ~]# mkdir /opt/starrocks
[root@node01 ~]# mkdir -p /data/starrocks
StarRocks默认使用的端口有9个(具体可以参考1.2章的端口列表),在部署前我们是需要确认这些端口未被其他服务占用且已在防火墙中开放。
对集群进行校时,确认三台服务器之间的时差不超过5秒,否则FE无法启动。具体操作仍可以参考1.2章。
在任意路径下,使用wget命令下载:
[root@node01 ~]# wget https://github.com/wangtianyi2004/starrocks-controller/releases/download/sr-ctl/sr-ctl
授予可执行权限:
[root@node01 ~]# chmod a+x sr-ctl
根据我们的集群信息和准备的目录路径,参考模板:
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工具启动后,会检测当前集群的通信、端口及部署目录是否存在,若有异常,进程终止,同时给出提示。
第二阶段:部署文件下载及分发
环境检查阶段完成后,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还可以用来管理业务中的多套集群。
语法为:
sr-ctl cluster list
[root@node01 ~]# ./sr-ctl cluster list
备注:当前仅部署了一套,所以只显示出了一个集群。
语法为:
sr-ctl cluster display
例如:
[root@node01 ~]# ./sr-ctl cluster display sr-c1
语法为:
sr-ctl cluster stop
例如:
[root@node01 ~]# ./sr-ctl cluster stop sr-c1
语法为:
sr-ctl cluster start
例如:
[root@node01 ~]# ./sr-ctl cluster start sr-c1
StarRocks的主进程分为FE和BE,通过SR-CTL,我们也可以一键批量启停FE或者BE。
语法为:
sr-ctl cluster stop --role BE
例如:
[root@node01 ~]# ./sr-ctl cluster stop sr-c1 --role BE
语法为:
sr-ctl cluster start --role BE
例如:
[root@node01 ~]# ./sr-ctl cluster start sr-c1 --role BE
语法为:
sr-ctl cluster stop --role FE
例如:
[root@node01 ~]# ./sr-ctl cluster stop sr-c1 --role FE
语法为:
sr-ctl cluster start --role FE
例如:
[root@node01 ~]# ./sr-ctl cluster start sr-c1 --role FE
因为需要精确的启停某个节点的FE或者BE,所以我们首先需要通过sr-ctl cluster display命令来获取需启停服务的node_id。还以当前的sr-c1集群为例,查看集群信息:
[root@node01 ~]# ./sr-ctl cluster display sr-c1
语法为:
sr-ctl cluster stop --node
例如停止103节点的BE进程:
[root@node01 ~]# ./sr-ctl cluster stop sr-c1 --node 192.168.110.103:9060
语法为:
sr-ctl cluster start --node
例如再启动103节点的BE进程:
[root@node01 ~]# ./sr-ctl cluster start sr-c1 --node 192.168.110.103:9060
语法为:
sr-ctl cluster stop --node
例如停止102节点的FE进程:
[root@node01 ~]# ./sr-ctl cluster stop sr-c1 --node 192.168.110.102:9010
当前暂不支持,需要手动启动。
总体使用下来,starrocks-controller在功能上已经颇为强大,大家不妨也试用看看。如果有什么好的思路或者发现有什么问题,也可以在git上提提issue,大家一起为StarRocks打造一款卓越的管理工具。