StarRocks部署
下载地址:https://www.starrocks.io/download/community
tarRocks 的整体架构分为两层
FE(Frontend)是前端节点。多个FE组成第一层,提供FE的横向扩展和高可用。主要负责接收和返回客户端请求、元数据以及集群管理、查询计划生成等工作。
BE(Backend)是后端节点。多个BE组成第二层,负责数据存储与管理、查询计划执行等工作
FE 分为 follower 和 observer 两类。各个FE之间通过 bdbje (BerkeleyDB Java Edition)进行 leader 选举,数据同步等工作
follower 节点通过选举,其中一个 follower 成为 leader 节点,负责原数据的写入操作。当 leader 节点宕机后,其他 follower节点会重新选举出一个 leader,保证服务的高可用
observer 节点仅从 leader 节点进行元数据同步,不参与选举。可用横向扩展以提供元数据的读服务的扩展性
部署节点
172.31.50.21 BE FE BROKER
172.31.50.26 BE FE BROKER
部署路径
/data/hadoop/StarRocks-2.5.4
环境检查
#1.CPU检查,必需支持AVX2指令集
cat /proc/cpuinfo | grep avx2
#2.操作系统检查,Linux CentOS 7及以上,版本内核版本建议在3.10以上
cat /etc/redhat-release
uname -a
# 3,IP地址固定
# 4,chronyd时间同步,最多允许5s的时钟偏差
# 5,时区检查
timedatectl # 若不是上海时区,则设置
timedatectl set-timezone Asia/Shanghai
# 6,关闭防火墙,禁止开启自启
systemctl stop firewalld
systemctl disable firewalld
# 7,关闭SELINUX
getenforce
setenforce 0 # 临时关闭
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 永久关闭
cat /etc/selinux/config # 验证
StarRocks 每个 CPU 线程每秒可以处理 10M 至 100M 行数据。您可以据此估计集群中需要多少 CPU 线程能够满
足您的要求。而 StarRocks 在存储数据时利用列存储和压缩,可以达到 4-10 倍的压缩比,您可以使用该数据来估计集
群所需的存储量
环境参数调整
# 1,关闭交换区,消除交换内存到虚拟内存时对性能的扰动
cat /proc/sys/vm/swappiness
echo 0 | sudo tee /proc/sys/vm/swappiness # 临时
echo vm.swappiness=0 >> /etc/sysctl.conf # 永久
sysctl -p
# 2,使用 Overcommit
echo 1 | sudo tee /proc/sys/vm/overcommit_memory # 临时
echo "vm.overcommit_memory=1" > /etc/sysctl.conf # 永久
sysctl -p /etc/sysctl.conf
# 3, 修改文件打开数的限制
ulimit -n # 若返回值<65535,则需要修改
vim /etc/security/limits.conf # 所有用户所有组,软限制和硬限制,对文件打开数,设为65535
* soft nofile 65535
* hard nofile 65535
ulimit -n 65535 # 临时修改
# 4,禁用Transparent Huge Pages
cat /sys/kernel/mm/transparent_hugepage/defrag # 透明大页设置
cat /sys/kernel/mm/transparent_hugepage/enabled # 透明大页启动状态
# 临时关闭
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
# 永久关闭
echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.d/rc.local
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local
chmod a+x /etc/rc.d/rc.local
# 验证
cat /etc/rc.d/rc.local
# 5,TCP连接缓冲队列设置
# 临时
echo 1 | sudo tee /proc/sys/net/ipv4/tcp_abort_on_overflow
echo 1024 | sudo tee /proc/sys/net/core/somaxconn
# 永久
echo 'echo 1 > /proc/sys/net/ipv4/tcp_abort_on_overflow' >> /etc/rc.d/rc.local
echo 'echo 1024 > /proc/sys/net/core/somaxconn' >> /etc/rc.d/rc.local
# 验证
cat /etc/rc.d/rc.local
# 6,最大用户进程数设置
ulimit -u
ulimit -u 40960 # 临时
vim /etc/security/limits.conf # 永久,末尾加上
* soft nproc 40960
* hard nproc 40960
# 7,高并发配置
# 临时
echo 120000 > /proc/sys/kernel/threads-max
echo 60000 > /proc/sys/vm/max_map_count
echo 200000 > /proc/sys/kernel/pid_max
# 永久,添加到末尾
vim /etc/rc.d/rc.local
# 8,安装mysql-client
rpm -qa | grep mariadb # 检测是否安装了mariadb
rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64 # 若安装,则删除
# mysql-client需要使用的rpm有三个,community-common,community-libs,community-client
# 上传并安装
rpm -ivh mysql-community-common-5.7.35-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.35-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.35-1.el7.x86_64.rpm
# 9,集群免密
端口说明
StarRocks各实例默认使用的端口有:8000、8030、8040、8060、9010、9020、9030、9050、9060。若上述
端口不与服务器中其他服务的端口冲突,通常不建议修改,注意集群中FE的http端口需要一致,默认为8030
实例名称 | 端口名称 | 默认端口 | 通讯方向 | 说明 |
BE | be_port | 9060 | FE --> BE | BE上thrift server的端口,用于接收来自FE 的请求 |
BE | webserver_port | 8040 | BE <--> BE | BE上的http server的端口 |
BE | heartbeat_service_port | 9050 | FE --> BE | BE上心跳服务端口(thrift),用于接收来自FE的心跳 |
BE | brpc_port | 8060 | FE <--> BE | BE上的brpc端口,用于BE之间通讯 |
FE | http_port | 8030 | FE <--> FE | FE上的http server端口 |
FE | rpc_port | 9020 | BE --> FE | FE上的thrift server 端口 |
FE | query_port | 9030 | 用户 <--> FE | FE上的mysql server端口 |
FE | edit_log_port | 9010 | FE <--> FE | FE上的bdbje之间通信用的端口 |
Broker | broker_ipc_port | 8000 | FE --> Broker | Broker上的thrift server,用于接收请 |
部署FE
FE 是StarRocks的前端节点,使用Java语言编写,负责管理元数据,管理客户端连接,进行查询规划,查询调度等
工作,FE有两种角色:Follower和Observer,其中Follower会通过类raft的bdbje协议选主出一个Leader(实现选主需要
集群中有半数以上的Follower实例存活),只有Leader会对元数据进行写操作。Observer和Follower的差别就是
Observer不会参与选主。Observer同样不会进行任何的数据写入,只会参与读取,用来扩展集群的查询能力。每个FE节
点都有一份完整的元数据,以此来达到元数据的高可用,保证单节点宕机的情况下,元数据能够实时地在线恢复,而不影
响整个服务
FE的Follower要求为奇数个,且并不建议部署太多,通常推荐部署1个或3个Follower,若Leader节点进程挂掉或与
集群脱离通信,其他2个Follower节点会通过bdbje协议快速重新选主出一个Leader,保证集群的正常工作(FE Leader节
点异常仅影响集群写入,不会对集群对外的查询功能有影响)。这里注意,集群中需要有半数以上的Follower节点存活,
才可进行FE的重新选主
一般情况下,相对更推荐部署1 Follower+多Observer的FE架构,通过增加Observer来扩展集群的高并发读服务能
力,通常,一个FE节点可以应对10-20台BE节点,建议总的FE节点数量在10个以下,而一般3个即可满足绝大部分业务
需求
#解压
tar -xzvf StarRocks-x.x.x.tar.gz
#修改配置
1,cd StarRocks-x.x.x/fe
2,vim conf/fe.conf
3,添加元数据目录配置项
meta_dir = ${STARROCKS_HOME}/fe/meta
4,添加 Java 目录配置项
JAVA_HOME = /path/to/your/java
5,绑定IP
priority_networks = 172.31.50.21
6,创建元数据路径
mkdir -p meta
启停FE节点:
bin/start_fe.sh --daemon
bin/stop_fe.sh --daemon
启动其他FE实例时需要特别注意:先将实例添加进入集群,然后逐个启动实例,除首个启动的FE外,其他FE节点首 次启动时,必需指定一个已存在的FE节点作为helper(后面再启动时就不需要)
./start_fe.sh --helper 172.31.50.21:9010 --daemon
确认FE启动成功:
tailf -100 log/fe.log
jps查看java进程
在浏览器访问FE:ip:http_port 端口默认是8030,进入StarRocks 的 WebUI,用户名为 root,密码为空,
端口配置在conf/fe.conf 中
注意:如果因为配置启动失败,需要将meta路径下的文件清空
添加FE节点
复制目录到另一台节点,并修改priority_networks配置为响应的IP地址,然后启动
#使用mysql客户端进行连接
mysql -h 172.31.50.21 -P9030 -uroot
#添加FE节点
alter system add follower "172.31.50.26:9010";
#查看FE节点状态
SHOW PROC '/frontends' \G;
#删除节点
alter system drop follower "172.31.50.26:9010";
#添加observer(只同步源数据,只读节点)
alter system add observer '172.31.50.27:9010';
部署BE
BE 是StarRocks的后端节点,负责数据存储以及SQL执行等工作。以下例子仅部署一个 BE 节点。可以通过重复以
下步骤添加多个 BE 节点
“启动服务”和“将服务添加入集群”并没有严格的先后顺序,但若先启动服务,在实例未加入集群前,BE的日志中会
打印一些提示未加入集群的WARNING信息,例如:Fail to get master client from cache。所以我们可以在FE全部部署
完成后,使用mysql-client将集群中其他实例通过SQL添加入集群,然后再逐个部署启动
BE实例数量直接决定了集群整体查询延迟,生产环境BE数量建议至少为3个。StarRocks建表时默认为3副本
cd StarRocks-x.x.x/be
vim conf/be.conf
priority_networks = 172.31.50.21
storage_root_path = /opt/starrocks/be/storage
#集群kerberos认证需添加配置
JAVA_OPTS_FOR_JDK_9="-Djava.security.krb5.conf=/etc/krb5.conf"
JAVA_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf"
# 创建 BE 节点中的数据路径 storage
mkdir -p storage
# 注意 host 需要与 priority_networks 相匹配,port 需要与 be.conf 文件中的设置的 heartbeat_service_port 相同,默认为
9050
通过 MySQL 客户端将 BE 节点添加至 StarRocks 集群
#添加BE节点
ALTER SYSTEM ADD BACKEND "172.31.50.21:9050";
#删除BE节点(DECOMMISSION会先保证副本补齐,然后再下掉该BE节点)
ALTER SYSTEM decommission BACKEND "be_host:be_heartbeat_service_port";
ALTER SYSTEM dropp backend '192.168.85.201:9050';
#查看BE节点状态
#启动BE
bin/start_be.sh --daemon
#停止BE
bin/stop_be.sh --daemon
部署Broker
Broker是StarRocks与外部HDFS/对象存储等外部数据对接的中转服务,若不需要可以不部署。Broker本身是无状态的进
程,可以随意启停,不影响集群
Broker的配置文件通常不需要修改。与FE实例和BE实例不同,Broker当前没有也不需要priority_networks这个选项。
Broker的服务默认绑定在0.0.0.0上,参考前面部署BE
通常与BE混布,与BE数量保持相同,并建议所有的Broker使用相同的名称,这样在执行Broker任务时可以并行使用多个
Broker实例,如果我们的业务中不需要和Hadoop类的产品对接,那么也可以不部署Broker
#hadoop配置文件添加到broker配置目录下
core-site.xml
hdfs-site.xml
hive-site.xml
通过 MySQL 客户端将 Broker 节点添加至 StarRocks 集群
#添加Broker
ALTER SYSTEM ADD broker hdfs_broker '172.31.50.21:8000';
ALTER SYSTEM ADD broker hdfs_broker '172.31.50.26:8000';
#查看状态
show broker\G
#启动broker
bin/start_broker.sh --daemon
#停止broker
bin/stop_broker.sh --daemon
集群启停脚本
#!/bin/bash
# use-method: starrocks.sh start|stop|restart
app_home=/data/hadoop/StarRocks-2.5.4
nodes="172.31.50.21 172.31.50.26"
case $1 in
"start"){
for i in ${nodes}
do
echo "=================== start ${i} service ================"
echo start_fe
ssh $i "source ~/.bashrc;${app_home}/fe/bin/start_fe.sh --daemon;exit"
echo start_be
ssh $i "source ~/.bashrc;${app_home}/be/bin/start_be.sh --daemon;exit"
echo hdfs_broker
ssh $i "source ~/.bashrc;${app_home}/apache_hdfs_broker/bin/start_broker.sh --daemon;exit"
done
};;
"stop"){
for i in ${nodes}
do
echo "=================== stop $i service ================"
ssh $i "${app_home}/apache_hdfs_broker/bin/stop_broker.sh --daemon"
ssh $i "${app_home}/be/bin/stop_be.sh --daemon"
ssh $i "${app_home}/fe/bin/stop_fe.sh --daemon"
done
};;
"restart")
starrocks.sh stop
sleep 2
starrocks.sh start
;;
*)
echo "Parameter ERROR!!!"
;;
esac