StarRocks作为新一代MPP数据库,集群部署才能充分发挥其彪悍的查询性能。生产环境下我们也推荐进行集群化部署,本章内容我们就模拟生产环境下StarRocks集群部署。
在“1.1章 源码编译”中我们已经介绍了版本选择时的注意事项,这里我们以从StarRocks官网下载的1.19.3社区版为例进行部署,下载地址:
StarRocks - 新一代极速全场景MPP数据库
新一代极速全场景MPP数据库,速度提升100倍!
https://www.starrocks.com/zh-CN/download/community
1 集群部署注意事项
在部署StarRocks生产环境前,我们需要根据业务需求设计严谨的集群架构,一般来说,我们需要注意以下几项:
1.1 FE的数量及是否需要FE的高可用
FE的Follower要求为奇数个,且并不建议部署太多,通常我们推荐部署1个或3个Follower。在三个Follower时,即可实现高可用(HA)。此时,若Leader节点进程挂掉或与集群脱离通信,其他2个Follower节点会通过bdbje协议快速重新选主出一个Leader,保证集群的正常工作(FE Leader节点异常仅影响集群写入,不会对集群对外的查询功能有影响)。这里注意,集群中需要有半数以上的Follower节点存活,才可进行FE的重新选主。
一般情况下,相对更推荐部署1 Follower+多Observer的FE架构,通过增加Observer来扩展集群的高并发读服务能力。
通常,一个FE节点可以应对10-20台BE节点,我们建议总的FE节点数量在10个以下,而一般3个即可满足绝大部分业务需求。
1.2 BE实例数量
BE实例数量直接决定了集群整体查询延迟,生产环境BE数量建议至少为3个。StarRocks建表时默认为3副本,生产环境下我们也推荐使用3副本数据。由于StarRocks的副本策略,副本数不能大于BE实例数(不同Host),所以为保障数据安全,建议至少部署三个BE实例(不同Host)。
1.3 Broker实例数量
通常与BE混布,与BE数量保持相同,并建议所有的Broker使用相同的名称,这样在执行Broker任务时可以并行使用多个Broker实例。
如果我们的业务中不需要和Hadoop类的产品对接,那么也可以不部署Broker。
1.4 FE与BE是否混布
前面已经提到,单台机器下,同集群FE不能混布,BE虽然能混布但是没有价值。FE和BE是可以混部的,但生产环境下需要注意CPU、内存等资源竞争问题,并保证元数据目录和数据目录分属不同磁盘。
2 集群架构设计
根据实际业务情况粗估集群规模后,我们就可以准备部署。StarRocks的扩容非常友好,若前期我们无法较为准确的判断出对应的集群规模,建议先部署一套最小架构的集群,后面逐步扩容。
例如,我们使用以下三台已进行完“第1.2章:部署环境准备”的服务器进行部署,服务器配置:
主机名 |
配置要求 |
192.168.110.101(node01) |
16核 32GB 万兆网卡 CPU支持AVX2指令集 |
192.168.110.102(node02) |
16核 32GB 万兆网卡 CPU支持AVX2指令集 |
192.168.110.103(node03) |
16核 32GB 万兆网卡 CPU支持AVX2指令集 |
生产环境集群架构设计示例(也可以用3Follower架构):
机器节点 |
192.168.116.101 (node01) |
192.168.110.102 (node02) |
192.168.116.103 (node03) |
部署服务 |
FE(Leader) BE Broker mysql-client |
FE(Observer) BE Broker |
BE Broker |
生产环境各节点部署目录及数据目录设计如下(这里假定meta与storage分属不同的磁盘):
FE |
部署目录:/opt/module/starrocks/fe 日志目录:/opt/module/starrocks/fe/log 元数据目录:/opt/module/meta |
BE |
部署目录:/opt/module/starrocks/be 日志目录:/opt/module/starrocks/be/log 数据存储目录:/opt/module/storage |
Broker |
部署目录:/opt/module/starrocks/apache_hdfs_broker |
3 使用普通用户
实际生产中,运维管理员通常不会将root账号交给我们,或者个别场景下是使用用户名作为鉴权方式,为贴合实际业务,后续的部署操作我们分别新建starrocks用户进行(密码也暂设为starrocks):
[root@node01 ~]# useradd starrocks
[root@node01 ~]# passwd starrocks
Changing password for user starrocks.
New password: 这里输入starrocks
BAD PASSWORD: The password contains the user name in some form
Retype new password: 再次输入starrocks
passwd: all authentication tokens updated successfully.
再分别对node02及node03新建用户starrocks(操作同上,略)。
使用root用户分别在三个节点上新建/opt/module文件夹,并将文件夹所有者变更为starrocks用户:
[root@node01 ~]# mkdir /opt/module
[root@node01 ~]# chown starrocks /opt/module/
对node02及node03也分别进行该操作(操作同上,略)。
4 配置集群间SSH免密登录
为方便后续操作,我们为starrocks用户配置集群间SSH免密。SSH免密配置方法比较灵活,这里演示一种。我们切换至starrocks用户:
[root@node01 ~]# su starrocks
[starrocks@node01 root]$
生成公钥和私钥:
[starrocks@node01 root]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/starrocks/.ssh/id_rsa): 回车
Created directory '/home/starrocks/.ssh'.
Enter passphrase (empty for no passphrase): 回车
Enter same passphrase again: 回车
Your identification has been saved in /home/starrocks/.ssh/id_rsa.
Your public key has been saved in /home/starrocks/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:ZNAqiKrylI0FyuzSxhGHp6mzmaVaQHMt6dNzKmv5gHA starrocks@node01
The key's randomart image is:
+---[RSA 2048]----+
| .. |
| .o .. |
| ++=o. .o |
|=.=B+ .o |
|=oEo.+ .S |
|+*.*. + |
|=oXoo. |
|+@ o+ |
|O.o... |
+----[SHA256]-----+
将公钥拷贝至本机:
[starrocks@node01 ~]$ ssh-copy-id 192.168.110.101
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/starrocks/.ssh/id_rsa.pub"
The authenticity of host '192.168.110.101 (192.168.110.101)' can't be established.
ECDSA key fingerprint is SHA256:SbXiLQFCWyTY547XciYFRgP07UE711rygMbmUQeP+LE.
ECDSA key fingerprint is MD5:b5:24:12:6a:7a:4f:2a:bf:2d:1a:ee:b5:b8:21:3c:06.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
starrocks@192.168.110.101's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '192.168.110.101'"
and check to make sure that only the key(s) you wanted were added.
拷贝node01 starrocks用户家目录下.ssh文件夹至集群其他所有节点:
拷贝至node02节点:
[starrocks@node01 ~]$ scp -r /home/starrocks/.ssh/ 192.168.110.102:/home/starrocks/
The authenticity of host '192.168.110.102 (192.168.110.102)' can't be established.
ECDSA key fingerprint is SHA256:SbXiLQFCWyTY547XciYFRgP07UE711rygMbmUQeP+LE.
ECDSA key fingerprint is MD5:b5:24:12:6a:7a:4f:2a:bf:2d:1a:ee:b5:b8:21:3c:06.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.110.102' (ECDSA) to the list of known hosts.
starrocks@192.168.110.102's password: 输入node02 starrocks用户的密码:starrocks
id_rsa 100% 1679 1.2MB/s 00:00
id_rsa.pub 100% 398 522.6KB/s 00:00
known_hosts 100% 354 634.6KB/s 00:00
authorized_keys 100% 398 614.5KB/s 00:00
拷贝至node03节点:
[starrocks@node01 ~]$ scp -r /home/starrocks/.ssh/ 192.168.110.103:/home/starrocks/
…………
免密配置完成。这种配置方式可以快捷的实现集群间任意节点的免密访问。
5 上传产品包
上传安装包至node01的/opt/module/目录下: