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/目录下:

[starrocks@node01 ~]$ cd /opt/module/

[starrocks@node01 module]$ ll

total 987308

-rw-r--r-- 1 root root 1010999795 Dec  4 14:56 StarRocks-1.19.3.tar.gz

解压:

[starrocks@node01 module]$ tar xf StarRocks-1.19.3.tar.gz

[starrocks@node01 module]$ ll

total 987308

drwxrwxr-x 6 1007 1007        100 Nov 29 21:32 StarRocks-1.19.3

-rw-r--r-- 1 root root 1010999795 Dec  4 14:56 StarRocks-1.19.3.tar.gz

6 创建部署所需文件夹

依据集群设计对集群各节点创建部署文件夹及数据文件夹:

node01:

[starrocks@node01 module]$ mkdir /opt/module/starrocks

[starrocks@node01 module]$ mkdir /opt/module/meta

[starrocks@node01 module]$ mkdir /opt/module/storage

node02:

[starrocks@node02 ~]$ mkdir /opt/module/starrocks

[starrocks@node02 ~]$ mkdir /opt/module/meta

[starrocks@node02 ~]$ mkdir /opt/module/storage

node03:

[starrocks@node03 ~]$ mkdir /opt/module/starrocks

[starrocks@node03 ~]$ mkdir /opt/module/storage

7 分发部署文件

在node01节点向集群各节点分发部署文件:

node01向node01分发文件:

[starrocks@node01 ~]$ cp -r /opt/module/StarRocks-1.19.3/fe/ /opt/module/starrocks/

[starrocks@node01 ~]$ cp -r /opt/module/StarRocks-1.19.3/be/ /opt/module/starrocks/

[starrocks@node01 ~]$ cp -r /opt/module/StarRocks-1.19.3/apache_hdfs_broker/ /opt/module/starrocks/

[starrocks@node01 ~]$ cd /opt/module/starrocks/

[starrocks@node01 starrocks]$ ll

total 0

drwxr-xr-x 5 starrocks starrocks 40 Dec  4 04:34 apache_hdfs_broker

drwxr-xr-x 6 starrocks starrocks 51 Dec  4 04:34 be

drwxr-xr-x 8 starrocks starrocks 83 Dec  4 04:34 fe

node01向node02分发文件:

[starrocks@node01 ~]$ scp -r /opt/module/StarRocks-1.19.3/fe/ 192.168.110.102:/opt/module/starrocks/

[starrocks@node01 ~]$ scp -r /opt/module/StarRocks-1.19.3/be/ 192.168.110.102:/opt/module/starrocks/

[starrocks@node01 ~]$ scp -r /opt/module/StarRocks-1.19.3/apache_hdfs_broker/ 192.168.110.102:/opt/module/starrocks/

[starrocks@node02 starrocks]$ ll

total 0

drwxr-xr-x 5 starrocks starrocks 40 Dec  4 04:37 apache_hdfs_broker

drwxr-xr-x 6 starrocks starrocks 51 Dec  4 04:37 be

drwxr-xr-x 8 starrocks starrocks 83 Dec  4 04:35 fe

node01向node03分发文件:

[starrocks@node01 ~]$ scp -r /opt/module/StarRocks-1.19.3/be/ 192.168.110.103:/opt/module/starrocks/

[starrocks@node01 ~]$ scp -r /opt/module/StarRocks-1.19.3/apache_hdfs_broker/ 192.168.110.103:/opt/module/starrocks/

[starrocks@node03 ~]$ cd /opt/module/starrocks/

[starrocks@node03 starrocks]$ ll

total 0

drwxr-xr-x 5 starrocks starrocks 40 Dec  4 04:40 apache_hdfs_broker

drwxr-xr-x 6 starrocks starrocks 51 Dec  4 04:39 be

8 部署FE实例

8.1 修改FE配置文件

8.1.1 node01节点修改

生产环境下FE配置文件通常需要关注以下四点,有经验的用户可以根据官网文档的系统配置章节,结合业务情况修改对应配置:

a、修改Java堆内存,避免GC建议16G以上;

b、设置元数据目录,默认目录为fe/meta,我们需要新建目录并修改配置文件,上文已创建;

c、注意默认端口,避免端口冲突,正常情况下不需要修改;

d、绑定IP(CIDR表示法),避免多网卡情况下FE无法自动找到正确的IP。再次注意,如果不清楚CIDR表示法,就直接填写完整ip,例如配置为priority_networks = 192.168.110.101,这样的写法等同于priority_networks = 192.168.110.101/32;

因为当前集群没有部署其他的服务,故端口可以保持默认,我们针对a、b和d修改配置文件(带#的为注释,红色字体为新增配置):

[starrocks@node01 ~]$ vi /opt/module/starrocks/fe/conf/fe.conf

DATE = "$(date +%Y%m%d-%H%M%S)"

JAVA_OPTS="-Xmx16384m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:$STARROCKS_HOME/log/fe.gc.log.$DATE"

# store metadata, create it if it is not exist.

# Default value is ${STARROCKS_HOME}/meta

# meta_dir = ${STARROCKS_HOME}/meta

meta_dir = /opt/module/meta

…………

# Choose one if there are more than one ip except loopback address.

# Note that there should at most one ip match this list.

# If no ip match this rule, will choose one randomly.

# use CIDR format, e.g. 10.10.10.0/24

# Default value is empty.

# priority_networks = 10.10.10.0/24;192.168.0.0/16

priority_networks = 192.168.110.101

修改完成后保存配置。

8.1.2 node02节点修改

[starrocks@node02 starrocks]$ vi /opt/module/starrocks/fe/conf/fe.conf

同样也需要修改堆内存、元数据目录以及绑定IP:

DATE = "$(date +%Y%m%d-%H%M%S)"

JAVA_OPTS="-Xmx16384m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:$STARROCKS_HOME/log/fe.gc.log.$DATE"

# store metadata, create it if it is not exist.

# Default value is ${STARROCKS_HOME}/meta

# meta_dir = ${STARROCKS_HOME}/meta

meta_dir = /opt/module/meta

node02的FE实例需要绑定IP为192.168.110.102:

priority_networks = 192.168.110.102

修改完成后保存退出。

8.2 启动FE

启动node01 FE(首个启动的FE自动成为Leader):

[starrocks@node01 ~]$ cd /opt/module/starrocks/fe/bin/

[starrocks@node01 bin]$ ll

total 16

-rwxrwxr-x 1 starrocks starrocks 1347 Dec  4 04:34 common.sh

-rwxrwxr-x 1 starrocks starrocks 1411 Dec  4 04:34 show_fe_version.sh

-rwxrwxr-x 1 starrocks starrocks 3122 Dec  4 04:34 start_fe.sh

-rwxrwxr-x 1 starrocks starrocks 1749 Dec  4 04:34 stop_fe.sh

[starrocks@node01 bin]$ ./start_fe.sh --daemon

8.3 查看FE状态

查看进程状态:

[starrocks@node01 bin]$ jps | grep StarRocksFe

10319 StarRocksFe

如果进程状态异常可在FE日志目录中查看日志追踪原因,FE的主要日志在fe.log中,所有查询的审计日志在fe.audit.log中。

使用mysql-client访问StarRocks(默认查询端口为9030,自带用户root,初始密码为空),能访问即证明FE Leader节点状态正常(部分情况启动后需要稍等片刻):

[starrocks@node01 bin]$ mysql -h192.168.110.101 -P9030 -uroot

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 0

Server version: 5.1.0

……………………

mysql>

8.4 添加其他FE实例进集群

“第1.3章的4.5节”中已经提到,建议“先将实例添加进入集群”,然后逐个“启动实例”。将node02的FE作为Observer先添加入集群,端口为edit_log_port,默认是9010:

mysql> alter system add observer '192.168.110.102:9010';

Query OK, 0 rows affected (0.02 sec)

若需要将其作为Follower角色加入集群,这里的sql写法为:

mysql> alter system add follower "fe_host:edit_log_port";

如果添加时IP或端口信息输入有误,或者由于其他情况我们需要将实例从集群中删除,sql写法如下:

删除Follower:

mysql> alter system drop follower "fe_host:edit_log_port";

删除Observer:

mysql> alter system drop observer "fe_host:edit_log_port";

8.5 启动其他FE

启动其他FE实例时需要特别注意:除首个启动的FE外,其他FE节点首次启动时,必需指定一个已存在的FE节点作为helper(后面再启动时就不需要)。

首次启动node02节点,指定node01的FE实例作为helper:

[starrocks@node02 ~]$ cd /opt/module/starrocks/fe/bin/

[starrocks@node02 bin]$ ./start_fe.sh --helper 192.168.110.101:9010 --daemon

[starrocks@node02 bin]$ jps | grep StarRocksFe

10078 StarRocksFe

8.6 查看集群FE状态

在node01的mysql-client中查看FE状态:

mysql> show frontends\G

*************************** 1. row ***************************

Name: 192.168.110.101_9010_1631221944374

IP: 192.168.110.101

EditLogPort: 9010

HttpPort: 8030

QueryPort: 9030

RpcPort: 9020

Role: FOLLOWER

IsMaster: true

ClusterId: 538795507

Join: true

Alive: true

ReplayedJournalId: 129

LastHeartbeat: 2021-12-04 05:19:31

IsHelper: true

ErrMsg:

*************************** 2. row ***************************

Name: 192.168.110.102_9010_1631222131854

IP: 192.168.110.102

EditLogPort: 9010

HttpPort: 8030

QueryPort: 9030

RpcPort: 9020

Role: OBSERVER

IsMaster: false

ClusterId: 538795507

Join: true

Alive: true

ReplayedJournalId: 128

LastHeartbeat: 2021-12-04 05:19:31

IsHelper: false

ErrMsg:

2 rows in set (0.05 sec)

Alive均为true,说明FE状态正常。若状态为false,可以在日志中定位问题,如果异常排查比较耗时,由于是初次启动,我们可以清空FE的元数据目录,再从头开始操作

大部分同学这里出问题都是因为首次启动没有指定helper,后面想起指定helper启动时又没有清空元数据而导致的。

暂时退出StarRocks:

mysql> exit

Bye

9 部署BE实例

9.1 修改BE配置文件

修改BE配置文件,生产环境首先注意的也是以下三点,其他配置可以在熟悉StarRocks后结合业务需求参考官方文档进行修改:

a、注意默认端口,避免端口冲突,正常情况下不需要修改;

b、绑定IP,避免多网卡情况下BE无法自动找到正确的IP;

c、设置数据存储目录,默认目录为be/storage,我们建议根据磁盘情况新建目录并修改配置文件(前面我们已创建)。

针对b和c修改配置文件(带#的为注释,红色字体为新增配置):

9.1.1 修改node01配置文件

[starrocks@node01 ~]$ vi /opt/module/starrocks/be/conf/be.conf

…………

# Choose one if there are more than one ip except loopback address.

# Note that there should at most one ip match this list.

# If no ip match this rule, will choose one randomly.

# use CIDR format, e.g. 10.10.10.0/24

# Default value is empty.

# priority_networks = 10.10.10.0/24;192.168.0.0/16

priority_networks = 192.168.110.101

…………

# you also can specify the properties by setting '<property>:<value>', seperate by ','

# property 'medium' has a higher priority than the extension of path

#

# Default value is ${STARROCKS_HOME}/storage, you should create it by hand.

# storage_root_path = ${STARROCKS_HOME}/storage

storage_root_path = /opt/module/storage

修改完成后保存配置。

9.1.2 修改node02配置文件

[starrocks@node02 ~]$ vi /opt/module/starrocks/be/conf/be.conf

将IP绑定为node02中集群需要使用的IP,并修改数据存储目录:

priority_networks = 192.168.110.102

storage_root_path = /opt/module/storage

保存退出。

9.1.3 修改node03配置文件

[starrocks@node03 ~]$ vi /opt/module/starrocks/be/conf/be.conf

同样,将IP绑定为node03中集群需要使用的IP,同时修改数据存储目录:

priority_networks = 192.168.110.103

storage_root_path = /opt/module/storage

保存退出。

9.2 添加BE实例进入集群

在node01中使用mysql-client先将这3个BE实例添加进入集群,这里需要使用的端口是portheartbeat_service_port,默认为9050:

[starrocks@node01 ~]$ mysql -h192.168.110.101 -P9030 -uroot

Welcome to the MySQL monitor.  Commands end with ; or \g.

………………

mysql> alter system add backend '192.168.110.101:9050';

Query OK, 0 rows affected (0.00 sec)

mysql> alter system add backend '192.168.110.102:9050';

Query OK, 0 rows affected (0.00 sec)

mysql> alter system add backend '192.168.110.103:9050';

Query OK, 0 rows affected (0.01 sec)

同样的,如果BE实例添加时IP或端口信息输入有误,或者由于其他异常情况我们需要在集群中删除BE实例,sql写法:

mysql> alter system dropp backend "be_host:be_heartbeat_service_port";

前面章节已提到,删除BE实例为危险操作,故删除命令设计为“DROPP”。执行DROPP指令后,集群会立刻删除该BE节点,丢失的副本由FE调度补齐,但若为单副本数据,这部分数据将彻底丢失。由于当前是刚开始部署,BE中并没有存储业务数据,故我们此时可以直接采用DROPP的写法。

当StarRocks集群投入生产后,每个BE节点都存储了大量的业务数据,此时若使用DROPP指令从集群中删除某个BE实例,则存储在该实例上的数据副本会直接丢失。这时我们需要使用另一种安全删除的写法:DECOMMISSION。DECOMMISSION会先保证副本补齐,然后再下掉该BE节点。DECOMMISSION方式在生产中更为友好,在后续业务正常缩容是会建议采用这种方式进行缩容,示例:

mysql> alter system decommission backend "be_host:be_heartbeat_service_port";

暂时退出mysql-client:

mysql> exit

Bye

9.3 启动BE实例

9.3.1 启动node01 BE实例

[starrocks@node01 ~]$ cd /opt/module/starrocks/be/bin/

[starrocks@node01 bin]$ ll

total 16

-rwxrwxr-x 1 starrocks starrocks 1347 Dec  4 04:34 common.sh

-rwxrwxr-x 1 starrocks starrocks  644 Dec  4 04:34 show_be_version.sh

-rwxrwxr-x 1 starrocks starrocks 3377 Dec  4 04:34 start_be.sh

-rwxrwxr-x 1 starrocks starrocks 1601 Dec  4 04:34 stop_be.sh

[starrocks@node01 bin]$ ./start_be.sh --daemon

检查进程状态:

[starrocks@node01 bin]$ ps -ef | grep starrocks_be

starroc+  10858      1  0 05:31 pts/0    00:00:00 /opt/module/starrocks/be/lib/starrocks_be

如果进程状态异常可在BE日志目录中查看日志追踪原因,BE的主要日志在be.INFO中,其他的日志在be.out中。

9.3.2 启动node02 BE实例

[starrocks@node02 ~]$ cd /opt/module/starrocks/be/bin/

[starrocks@node02 bin]$ ./start_be.sh --daemon

检查进程状态:

[starrocks@node02 bin]$ ps -ef | grep starrocks_be

starroc+  10533      1  2 05:33 pts/0    00:00:00 /opt/module/starrocks/be/lib/starrocks_be

9.3.3 启动node03 BE实例

[starrocks@node03 ~]$ cd /opt/module/starrocks/be/bin/

[starrocks@node03 bin]$ ./start_be.sh --daemon

检查进程状态:

[starrocks@node03 bin]$ ps -ef | grep starrocks_be

starroc+  10098      1  1 05:35 pts/0    00:00:00 /opt/module/starrocks/be/lib/starrocks_be

9.4 查看启动BE状态

回到node01,使用mysql-client访问StarRocks集群:

[starrocks@node01 ~]$ mysql -h192.168.110.101 -P9030 -uroot

查看BE实例状态是否正常:

mysql> show backends\G

*************************** 1. row ***************************

BackendId: 10003

Cluster: default_cluster

IP: 192.168.110.101

HeartbeatPort: 9050

BePort: 9060

HttpPort: 8040

BrpcPort: 8060

LastStartTime: 2021-12-04 05:31:53

LastHeartbeat: 2021-12-04 05:36:28

Alive: true

SystemDecommissioned: false

ClusterDecommissioned: false

TabletNum: 4

DataUsedCapacity: .000

AvailCapacity: 30.790 GB

TotalCapacity: 37.017 GB

UsedPct: 16.82 %

MaxDiskUsedPct: 16.82 %

ErrMsg:

Version: 1.19.3-e65759c

Status: {"lastSuccessReportTabletsTime":"2021-12-04 05:35:53"}

*************************** 2. row ***************************

BackendId: 10007

Cluster: default_cluster

IP: 192.168.110.102

HeartbeatPort: 9050

BePort: 9060

HttpPort: 8040

BrpcPort: 8060

LastStartTime: 2021-12-04 05:33:43

LastHeartbeat: 2021-12-04 05:36:28

Alive: true

SystemDecommissioned: false

ClusterDecommissioned: false

TabletNum: 3

DataUsedCapacity: .000

AvailCapacity: 33.628 GB

TotalCapacity: 37.017 GB

UsedPct: 9.15 %

MaxDiskUsedPct: 9.15 %

ErrMsg:

Version: 1.19.3-e65759c

Status: {"lastSuccessReportTabletsTime":"2021-12-04 05:35:43"}

*************************** 3. row ***************************

BackendId: 10008

Cluster: default_cluster

IP: 192.168.110.103

HeartbeatPort: 9050

BePort: 9060

HttpPort: 8040

BrpcPort: 8060

LastStartTime: 2021-12-04 05:35:03

LastHeartbeat: 2021-12-04 05:36:28

Alive: true

SystemDecommissioned: false

ClusterDecommissioned: false

TabletNum: 3

DataUsedCapacity: .000

AvailCapacity: 33.849 GB

TotalCapacity: 37.017 GB

UsedPct: 8.56 %

MaxDiskUsedPct: 8.56 %

ErrMsg:

Version: 1.19.3-e65759c

Status: {"lastSuccessReportTabletsTime":"2021-12-04 05:36:03"}

3 rows in set (0.00 sec)

Alive均为true,状态正常,若为false,可根据日志排查问题。同样的,因为当前BE为初次启动,如果出现无法快速定位的问题,可以清空storage数据目录和日志目录,重新启动服务

10 部署Broker实例

10.1 添加Broker实例进入集群

在node01的mysql-client中,我们先将3个Broker实例添加进入集群,这里端口使用broker_ipc_port,默认端口为8000:

mysql> alter system add broker hdfs_broker '192.168.110.101:8000';

Query OK, 0 rows affected (0.01 sec)

mysql> alter system add broker hdfs_broker '192.168.110.102:8000';

Query OK, 0 rows affected (0.01 sec)

mysql> alter system add broker hdfs_broker '192.168.110.103:8000';

Query OK, 0 rows affected (0.00 sec)

若需要在集群中删除Broker,sql写法为:

mysql> ALTER SYSTEM DROP BROKER broker_name "broker_host:broker_ipc_port";

退出mysql-client:

mysql> exit

Bye

10.2 修改Broker配置文件

“第1.3章”中我们已说明过Broker实例不需要绑定IP。生产环境下,我们通常也不需要修改Broker配置文件中的其他配置。

10.3 启动Broker服务

10.3.1 启动node01 Broker服务

[starrocks@node01 ~]$ cd /opt/module/starrocks/apache_hdfs_broker/bin/

[starrocks@node01 bin]$ ./start_broker.sh --daemon

检查Broker进程状态:

[starrocks@node01 bin]$ jps | grep BrokerBootstrap

11386 BrokerBootstrap

如果进程状态异常可查看日志追踪原因。

10.3.2 启动node02 Broker服务

[starrocks@node02 ~]$ cd /opt/module/starrocks/apache_hdfs_broker/bin/

[starrocks@node02 bin]$ ./start_broker.sh --daemon

检查Broker进程状态:

[starrocks@node02 bin]$ jps | grep BrokerBootstrap

11039 BrokerBootstrap

10.3.3 启动node03 Broker服务

[starrocks@node03 ~]$ cd /opt/module/starrocks/apache_hdfs_broker/bin/

[starrocks@node03 bin]$ ./start_broker.sh --daemon

检查Broker进程状态:

[starrocks@node03 bin]$ jps | grep BrokerBootstrap

10608 BrokerBootstrap

10.4 查看集群中Broker状态

再次从node01上登录StarRocks:

[starrocks@node01 bin]$ mysql -h192.168.110.101 -P9030 -uroot

查看Broker状态:

mysql> show broker\G

*************************** 1. row ***************************

Name: hdfs_broker

IP: 192.168.110.103

Port: 8000

Alive: true

LastStartTime: 2021-12-04 05:46:20

LastUpdateTime: 2021-12-04 05:47:45

ErrMsg:

*************************** 2. row ***************************

Name: hdfs_broker

IP: 192.168.110.102

Port: 8000

Alive: true

LastStartTime: 2021-12-04 05:45:40

LastUpdateTime: 2021-12-04 05:47:45

ErrMsg:

*************************** 3. row ***************************

Name: hdfs_broker

IP: 192.168.110.101

Port: 8000

Alive: true

LastStartTime: 2021-12-04 05:44:50

LastUpdateTime: 2021-12-04 05:47:45

ErrMsg:

3 rows in set (0.00 sec)

Alive均为true,状态正常。Broker日志在apache_hdfs_broker.log中,若状态为false,可依据日志定位问题。

至此,集群所有实例已根据集群设计部署完成。

11 集群实例的启停

集群部署完成后,若机器重启或有服务down掉,我们需要手动或编写脚本启停服务,群起脚本示例见附件一:集群群起脚本

FE启动:

[starrocks@node0* ~]# cd /opt/module/starrocks/fe/bin/

[starrocks@node0* bin]# ./start_fe.sh --daemon

FE停止:

[starrocks@node0* bin]# ./stop_fe.sh

BE启动:

[starrocks@node0* ~]# cd /opt/module/starrocks/be/bin

[starrocks@node0* bin]# ./start_be.sh --daemon

BE停止:

[starrocks@node0* bin]# ./stop_be.sh

Broker启动:

[starrocks@node0* ~]# cd /opt/module/starrocks/apache_hdfs_broker/bin/

[starrocks@node0* bin]# ./start_broker.sh --daemon

Broker停止:

[starrocks@node0* bin]# ./stop_broker.sh

12 简单使用示例

集群部署完成后,我们可以测试建表和导入数据执行查询。

12.1 修改管理员账户密码

当前版本,StarRocks部署完成后自带一个高权限用户:root,其默认密码为空。在node01上使用mysql-client访问StarRocks集群:

[starrocks@node01 bin]$ mysql -h192.168.110.101 -P9030 -uroot

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 0

Server version: 5.1.0

……………………

mysql>

以root用户为例,将其密码也修改为root(生产环境建议设置复杂密码):

mysql> set password=password('root');

Query OK, 0 rows affected (0.01 sec)

12.2 创建数据库

创建数据库star:

mysql> create database star;

Query OK, 0 rows affected (0.02 sec)

12.3 创建集群普通用户

创建普通用户rocks,指定密码为123456:

mysql> CREATE USER rocks IDENTIFIED BY '123456';

Query OK, 0 rows affected (0.02 sec)

12.4 为用户授权

使用root用户,将数据库star的所有权限授予用户rocks:

mysql> GRANT ALL ON star.* TO rocks;

Query OK, 0 rows affected (0.01 sec)

12.5 更换用户访问集群

退出root用户访问,使用rocks用户登录:

mysql> exit

Bye

[starrocks@node01 ~]# mysql -h192.168.110.101 -P9030 -urocks -p123456

12.6 创建数据表

创建表,以SSB测试集中的customer表为例:

mysql> use star;

Database changed

mysql> CREATE TABLE IF NOT EXISTS `customer` (

`c_custkey` int(11) NOT NULL COMMENT "",

`c_name` varchar(26) NOT NULL COMMENT "",

`c_address` varchar(41) NOT NULL COMMENT "",

`c_city` varchar(11) NOT NULL COMMENT "",

`c_nation` varchar(16) NOT NULL COMMENT "",

`c_region` varchar(13) NOT NULL COMMENT "",

`c_phone` varchar(16) NOT NULL COMMENT "",

`c_mktsegment` varchar(11) NOT NULL COMMENT ""

) ENGINE=OLAP

DUPLICATE KEY(`c_custkey`)

COMMENT "OLAP"

DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 12

PROPERTIES (

"replication_num" = "1",

"in_memory" = "false",

"storage_format" = "DEFAULT"

);

12.7 导入数据

在node02中,使用Stream Load导入本地文件数据,假设数据文件路径为/home/starrocks/customer.tbl(可使用StarRocks官网的SSB工具自行生成,地址:StarRocks - 新一代极速全场景MPP数据库https://www.starrocks.com/zh-CN/blog/1.8):

假设文件中的数据共有3w行,前三行数据格式示例:

1|Customer#000000001|j5JsirBM9P|MOROCCO  0|MOROCCO|AFRICA|25-989-741-2988|BUILDING

2|Customer#000000002|487LW1dovn6Q4dMVym|JORDAN   1|JORDAN|MIDDLE EAST|23-768-687-3665|AUTOMOBILE

3|Customer#000000003|fkRGN8n|ARGENTINA7|ARGENTINA|AMERICA|11-719-748-3364|AUTOMOBILE

…………

Stream Load导入语句:

[starrocks@node02 ~]$ curl --location-trusted -u rocks:123456 -H "label:star_customer_2021120401" -H "column_separator:|" -T /home/starrocks/customer.tbl http://192.168.110.101:8030/api/star/customer/_stream_load

{

"TxnId": 1002,

"Label": "star_customer_2021120401",

"Status": "Success",

"Message": "OK",

"NumberTotalRows": 30000,

"NumberLoadedRows": 30000,

"NumberFilteredRows": 0,

"NumberUnselectedRows": 0,

"LoadBytes": 2807046,

"LoadTimeMs": 197,

"BeginTxnTimeMs": 12,

"StreamLoadPutTimeMs": 35,

"ReadDataTimeMs": 9,

"WriteDataTimeMs": 105,

"CommitAndPublishTimeMs": 44

}

数据导入成功,在node01的mysql-client中进行查询:

mysql> select count(1) from customer;

+------------------+

|  count(1)        |

+------------------+

|    30000         |

+------------------+

1 row in set (0.12 sec)

附录一:集群群起脚本

在node01节点,使用starrocks用户在/home/starrocks目录下创建starrocks.sh文件:

[starrocks@node01 ~]$ cd /home/starrocks/

[starrocks@node01 ~]$ vi starrocks.sh

在该文件中编写如下代码:

#!/bin/bash

# use-method: starrocks.sh start|stop|restart

case $1 in

"start"){

for i in node01 node02 node03

do

echo "=================== start $i's service ================"

ssh $i "source /etc/profile.d/my_env.sh ;cd /opt/module/starrocks;./fe/bin/start_fe.sh --daemon"

ssh $i "/opt/module/starrocks/be/bin/start_be.sh --daemon"

ssh $i "source /etc/profile.d/my_env.sh ;cd /opt/module/starrocks;./apache_hdfs_broker/bin/start_broker.sh --daemon"

done

};;

"stop"){

for i in node01 node02 node03

do

echo "=================== stop $i's service ================"

ssh $i "/opt/module/starrocks/apache_hdfs_broker/bin/stop_broker.sh"

ssh $i "/opt/module/starrocks/be/bin/stop_be.sh"

ssh $i "/opt/module/starrocks/fe/bin/stop_fe.sh"

done

};;

"restart")

starrocks.sh stop

sleep 2

starrocks.sh start

;;

*)

echo "Parameter ERROR!!!"

;;

esac

赋予脚本starrocks.sh可执行权限:

[starrocks@node01 ~]$ chmod a+x starrocks.sh

切换至root用户,将脚本移动至/bin目录下以便全局调用:

[starrocks@node01 ~]$ su root

Password: 输入root用户的密码

[root@node01 starrocks]# mv starrocks.sh /bin/

切换至starrocks用户,测试使用脚本启动集群(先确定集群各实例都处于未启动状态):

[starrocks@node01 starrocks]# starrocks.sh start

=================== start node01's service ================

=================== start node02's service ================

=================== start node03's service ================

bash: ./fe/bin/start_fe.sh: No such file or directory[这里是因为node03上未部署FE]

检查集群各实例状态,确认状态正常后,还可以测试停止集群服务:

[starrocks@node01 starrocks]# starrocks.sh stop

或测试重启集群服务:

[starrocks@node01 starrocks]# starrocks.sh restart

脚本测试正常后,可以将脚本scp分发至node02和node03节点的/bin目录下,方便在集群任意节点快速启停集群服务。

第1.5章:StarRocks部署--集群部署相关推荐

  1. centos7 rabbitmq 单机部署 集群部署 HAProxy 负载均衡搭建

    准备工作 搭建 RabbitMQ Server 单机版 搭建 RabbitMQ Server 高可用集群 搭建 HAProxy 负载均衡 一.准备工作 节点 系统 版本 ip node1 centos ...

  2. 服务部署--集群部署

    这里写目录标题 搭建服务 搭建该服务的所需环境 实现思路 搭建步骤 一.搭建LNMP-All in One 二.分离部署LNMP 三.分离LNMP部署完成后,将两组LNMP的MySQL设置为主主关系 ...

  3. ActiveMQ 集群部署

    ActiveMQ 集群部署 本章演示 ActiveMQ 集群部署,默认您已经安装了 zookeeper 集群,并在各服务器上成功安装了 ActiveMQ 单节点实例如果您的环境还不满足条件请参考前面的 ...

  4. Kafka系列(七)、Kafka套件 Confluent Platform 单机/集群部署

    目录 简介 单机部署 集群部署 尾巴 Kafka系列: kafka 2.4.1单机版部署及使用 kafka监控系统kafka eagle安装使用 滴滴开源的kafka-manager编译及部署使用 k ...

  5. Nacos 集群部署模式最佳实践

    作者 | kiritomoe 来源 | https://mp.weixin.qq.com/s/sSTY5BivxrH4wR2-dNMkzw 1 前言 Nacos 支持两种部署模式:单机模式和集群模式. ...

  6. (三)RocketMQ集群部署实践

    2019独角兽企业重金招聘Python工程师标准>>> 全篇参照–<MyRocketMQ集群部署实战-双master-双slave-同步双写-异步刷盘(7台机器) - tant ...

  7. ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(三

    在上文ASP.NET Core应用程序容器化.持续集成与Kubernetes集群部署(二)中,我介绍了如何使用Azure DevOps为ASP.NET Core应用程序案例:tasklist搭建持续集 ...

  8. 二进制安装kubernetes v1.11.2 (第十章 kube-scheduler集群部署)

    继续前一章的部署. 十.kube-scheduler集群部署 该集群包含2个节点,启动后通过竞争选举机制产生一个leader节点,其他节点为阻塞状态.当leader节点不可用后,剩余的节点将再次进行选 ...

  9. 《实施Cisco统一通信管理器(CIPT1)》一2.5 跨越IP WAN的集群部署模型

    本节书摘来异步社区<实施Cisco统一通信管理器(CIPT1)>一书中的第2章,第2.5节,作者: [美]Dennis Hartmann 译者: 刘丹宁 , 陈国辉 , 卢铭 责编: 傅道 ...

最新文章

  1. puppet安装与配置
  2. opencv mat与avframe互转
  3. Java面试题阶段汇总
  4. 11旋转编码器原理_旋转编码器的原理是什么?增量式编码器和绝对式编码器有什么区别?...
  5. 第三方登录接入-qq,weibo-java
  6. python qt 按钮_PyQt(Python+Qt)学习随笔:toolButton的popupMode属性
  7. 起步 - 安装 Git
  8. axios 取消请求_封装 axios 取消重复请求
  9. 37. 错误与异常处理(1)
  10. vue 时间插件_Vue插件丨vxe-table初体验
  11. java代码转python代码_如何实现Java代码转换成python代码
  12. CASS使用-20220617更新
  13. 前端基础知识(三)HTTP和HTTPS、GET和POST
  14. 论文笔记:Delving into Data: Effectively Substitute Training for Black-box Attack
  15. Directsound 与 Waveout 有何不同
  16. 图文详情展示html,图文展示新闻网站模板
  17. 八字易经算法之用JAVA实现日子吉凶星
  18. 服务器重启报kernel panic - not syncing :Attempted to kill init 错误
  19. 跨站脚本攻击实例解析
  20. CentOS 各版本的下载

热门文章

  1. dami 商城项目—用户注册、登录
  2. 插件76:Yahoo!搜索
  3. sass揭秘之@if,@for,@each
  4. 网站防护系统功能特点
  5. 中小电商如何与全球400余家快递物流公司做接口对接
  6. i.MX Yocto项目用户指南 -- 下
  7. python:ai第五课:决策树的python实现调试,tree存储恢复,tree图绘制
  8. Linux 文档编辑 : fold 命令详解
  9. 面试官:指针都不会,我们不需要你这样的人!
  10. [又值奥运季] 2016年里约奥运会--8月20日赛事