【StarRocks】starrocks 3.2.12 【share-nothing】 多Be集群容器化部署
文章目录
- 一. 集群规划
- 二.docker compose以及启动脚本
- 卷映射
- 对于网络
- 环境变量
- 三. 集群测试
- 用户新建、赋权、库表初始化
- 断电重启
- 扩容 BE 集群
一. 集群规划
部署文档
https://docs.starrocks.io/zh/docs/2.5/deployment/plan_cluster/
分类 | 描述 |
---|---|
FE节点 | 1. 主要负责元数据管理、客户端连接管理、查询计划和查询调度。 2. 三个节点实现高可用以及请求的流量转发, 对于请求的高可用和流量转发使用 nginx 实现。(对于单宿主机来说:这里的fe部署一个) 3. 建议为每个 FE 节点分配 8 个 CPU 内核和 16GB RAM,在大多数场景下,每个 FE 节点只需要 100GB 的 HDD 存储。 |
BE节点 | 1. 负责数据存储和 SQL 执行。 2. 对于 StarRocks 生产集群,建议至少部署三个 BE 节点,这些节点会自动形成一个 BE 高可用集群,避免单点故障影响数据可靠性和服务可用性。 3. 建议为每个 BE 节点分配 16 个 CPU 内核和 64GB RAM。 4. StarRocks 集群所有 BE 节点所需的 – 总存储空间 = 原始数据大小 x 数据副本数/数据压缩算法压缩比 – 原始数据大小 = 单行数据大小 x 总数据行数 |
说明
1.FE 节点:负责元数据管理、客户端连接、查询调度等任务,配置要求较低。
2.BE 节点:负责数据存储和 SQL 查询执行,配置要求较高,尤其是 CPU 和内存。
3.存储空间估算公式:根据数据大小、数据副本数和压缩比来计算 BE 节点的存储需求。
二.docker compose以及启动脚本
参考:
https://github.com/StarRocks/demo/blob/master/deploy/docker-compose/docker-compose-3BE.yml
# 定义starrocks be共用配置
x-starrocks-be-common: &starrocks-be-commonimage: starrocks/be-ubuntu:3.2.12command:- /bin/bash- -c- |chmod +x /data/starrocks/be_entrypoint.sh/data/starrocks/be_entrypoint.sh starrocks-fe-0environment:- HOST_TYPE=FQDN- TZ=Asia/Shanghai- MYSQL_ROOT_PASSWORD=1111111depends_on:- starrocks-fe-0restart: alwaysnetworks: # network config, can be configured to your preferred port and ip address, if not specified, it will use default network and assign a dynamic ipstarrocks-network:services:# starrocks:1 fe 3bestarrocks-fe-0:image: starrocks/fe-ubuntu:3.2.12hostname: starrocks-fe-0container_name: starrocks-fe-0command:- /bin/bash- -c- |/opt/starrocks/fe_entrypoint.sh starrocks-fe-0environment:- HOST_TYPE=FQDN- TZ=Asia/Shanghai- MYSQL_ROOT_PASSWORD=radar_360ports:- "1030:8030" # Frontend service port (HTTP)- "2020:9020" # Backend service port (HTTP)- "3030:9030" # Frontend service port (MySQL)volumes:- './starrocks/fe-0/meta:/opt/starrocks/fe/meta:rw'- './starrocks/fe-0/log:/opt/starrocks/fe/log:rw'restart: alwaysnetworks: # network config, can be configured to your preferred port and ip address, if not specified, it will use default network and assign a dynamic ipstarrocks-network:starrocks-be-0:<<: *starrocks-be-commonhostname: starrocks-be-0container_name: starrocks-be-0volumes:- './starrocks/be-0/storage:/opt/starrocks/be/storage:rw'- './starrocks/be-0/log:/opt/starrocks/be/log:rw'- './sr/bin:/data/starrocks:rwx'starrocks-be-1:<<: *starrocks-be-commonhostname: starrocks-be-1container_name: starrocks-be-1volumes:- './starrocks/be-1/storage:/opt/starrocks/be/storage:rw'- './starrocks/be-1/log:/opt/starrocks/be/log:rw'- './sr/bin:/data/starrocks:rwx'starrocks-be-2:<<: *starrocks-be-commonhostname: starrocks-be-2container_name: starrocks-be-2volumes:- './starrocks/be-2/storage:/opt/starrocks/be/storage:rw'- './starrocks/be-2/log:/opt/starrocks/be/log:rw'- './sr/bin:/data/starrocks:rwx'
networks:starrocks-network:driver: bridge
#!/bin/bashHOST_TYPE=${HOST_TYPE:-"IP"}
FE_QUERY_PORT=${FE_QUERY_PORT:-9030}
PROBE_TIMEOUT=60
PROBE_INTERVAL=2
HEARTBEAT_PORT=9050
MY_SELF=
MY_IP=`hostname -i`
MY_HOSTNAME=`hostname -f`
STARROCKS_ROOT=${STARROCKS_ROOT:-"/opt/starrocks"}
STARROCKS_HOME=${STARROCKS_ROOT}/be
BE_CONFIG=$STARROCKS_HOME/conf/be.conf
MYSQL_ROOT_PW=${MYSQL_ROOT_PASSWORD:-121111}log_stderr()
{echo "[`date`] $@" >&2
}update_conf_from_configmap()
{if [[ "x$CONFIGMAP_MOUNT_PATH" == "x" ]] ; thenlog_stderr 'Empty $CONFIGMAP_MOUNT_PATH env var, skip it!'return 0fiif ! test -d $CONFIGMAP_MOUNT_PATH ; thenlog_stderr "$CONFIGMAP_MOUNT_PATH not exist or not a directory, ignore ..."return 0filocal tgtconfdir=$STARROCKS_HOME/conffor conffile in `ls $CONFIGMAP_MOUNT_PATH`dolog_stderr "Process conf file $conffile ..."local tgt=$tgtconfdir/$conffileif test -e $tgt ; then# make a backupmv -f $tgt ${tgt}.bakfiln -sfT $CONFIGMAP_MOUNT_PATH/$conffile $tgtdone
}show_backends() {#先尝试无密码连接output=$(timeout 15 mysql --connect-timeout 2 -h $svc -P $FE_QUERY_PORT -u root --skip-column-names --batch -e 'SHOW BACKENDS;')if [ $? -ne 0 ]; thenlog_stderr '使用密码进行尝试连接,检查be的状态'# 如果无密码连接失败,则使用密码进行连接output=$(timeout 15 mysql --connect-timeout 2 -h $svc -P $FE_QUERY_PORT -u root -p$MYSQL_ROOT_PW --skip-column-names --batch -e 'SHOW BACKENDS;')fiecho "$output"
}parse_confval_from_cn_conf()
{# a naive script to grep given confkey from cn conf file# assume conf format: ^\s*<key>\s*=\s*<value>\s*$local confkey=$1local confvalue=`grep "\<$confkey\>" $BE_CONFIG | grep -v '^\s*#' | sed 's|^\s*'$confkey'\s*=\s*\(.*\)\s*$|\1|g'`echo "$confvalue"
}collect_env_info()
{# heartbeat_port from conf filelocal heartbeat_port=`parse_confval_from_cn_conf "heartbeat_service_port"`if [[ "x$heartbeat_port" != "x" ]] ; thenHEARTBEAT_PORT=$heartbeat_portfiif [[ "x$HOST_TYPE" == "xIP" ]] ; thenMY_SELF=$MY_IPelseMY_SELF=$MY_HOSTNAMEfi}attempt_add_self() {# 第一次尝试执行命令output=$(timeout 15 mysql --connect-timeout 2 -h $svc -P $FE_QUERY_PORT -u root --skip-column-names --batch -e "ALTER SYSTEM ADD BACKEND \"$MY_SELF:$HEARTBEAT_PORT\";")if [ $? -ne 0 ]; then# 如果第一次失败,添加密码log_stderr '使用密码进行尝试连接,来添加be到fe'output=$(timeout 15 mysql --connect-timeout 2 -h $svc -P $FE_QUERY_PORT -u root -p$MYSQL_ROOT_PW --skip-column-names --batch -e "ALTER SYSTEM ADD BACKEND \"$MY_SELF:$HEARTBEAT_PORT\";")fiecho "$output"
}add_self()
{local svc=$1start=`date +%s`local timeout=$PROBE_TIMEOUTwhile truedolog_stderr "Add myself ($MY_SELF:$HEARTBEAT_PORT) into FE ..."# 这里当root添加密码时,需要通过密码进行设置。#timeout 15 mysql --connect-timeout 2 -h $svc -P $FE_QUERY_PORT -u root -pradar_360 --skip-column-names --batch -e "ALTER SYSTEM ADD BACKEND \"$MY_SELF:$HEARTBEAT_PORT\";"attempt_add_self# 查看be是否加入成功memlist=`show_backends $svc`if echo "$memlist" | grep -q -w "$MY_SELF" &>/dev/null ; thenbreak;filet "expire=start+timeout"now=`date +%s`if [[ $expire -le $now ]] ; thenlog_stderr "Time out, abort!"exit 1fisleep $PROBE_INTERVALdone
}svc_name=$1
if [[ "x$svc_name" == "x" ]] ; thenecho "Need a required parameter!"echo " Example: $0 <fe_service_name>"exit 1
fiupdate_conf_from_configmap
collect_env_info
add_self $svc_name || exit $?
log_stderr "Add myself ($MY_SELF:$HEARTBEAT_PORT) into FE success!!!"
log_stderr "run start_be.sh"addition_args=
if [[ "x$LOG_CONSOLE" == "x1" ]] ; then# env var `LOG_CONSOLE=1` can be added to enable logging to consoleaddition_args="--logconsole"
fi
$STARROCKS_HOME/bin/start_be.sh $addition_args
ret=$?
if [[ $ret -ne 0 && "x$LOG_CONSOLE" != "x1" ]] ; thennol=50log_stderr "Last $nol lines of be.INFO ..."tail -n $nol $STARROCKS_HOME/log/be.INFOlog_stderr "Last $nol lines of be.out ..."tail -n $nol $STARROCKS_HOME/log/be.out
fi
exit $ret
卷映射
对于fe:
涉及到元数据(已存在的表、以及系统操作)和日志
volumes: - './starrocks/fe-0/meta:/opt/starrocks/fe/meta:rw' - './starrocks/fe-0/log:/opt/starrocks/fe/log:rw'
对于be:
涉及到数据存储和日志
volumes: - './starrocks/be-1:/opt/starrocks/be/storage:rw' - './starrocks/be-1:/opt/starrocks/be/log:rw'
对于网络
要实现starrocks容器之间的内部通讯:主要是通过主机名+端口。
networks: starrocks-network: driver: bridge
环境变量
- MYSQL_ROOT_PASSWORD=radar_360
用于be容器启动时be添加到fe时的脚本使用。
三. 集群测试
用户新建、赋权、库表初始化
-- 1. root 创建密码
-- 只能root自己创建密码 Can not set password for root user, except root itself.
SET PASSWORD FOR 'root' = PASSWORD('123456'); show users; -- 2. 创建用户radar与密码
CREATE USER 'radar' IDENTIFIED by 'radar_360';
-- 新增密码和修改密码都可用此密码
SET PASSWORD FOR 'root' = PASSWORD('1234567'); -- 3. 授予相关权限
SHOW GRANTS;
show roles;
grant root to user radar;
-- 激活角色
-- 每一个链接会话中都需要执行
-- # Inactivated role(s): [user_admin, root].
SET ROLE root;
-- 创建库表
create database middle; -- 注意:
-- 授权所有库表的权限,对于创建库没有权限
GRANT ALL PRIVILEGES ON *.* TO 'radar';
断电重启
改造官方的docker启动脚本:主要涉及到给root设置密码之后,be添加到fe时的操作。
# 添加自己到fe
attempt_add_self() { # 第一次尝试执行命令 output=$(timeout 15 mysql --connect-timeout 2 -h $svc -P $FE_QUERY_PORT -u root --skip-column-names --batch -e "ALTER SYSTEM ADD BACKEND \"$MY_SELF:$HEARTBEAT_PORT\";") if [ $? -ne 0 ]; then # 如果第一次失败,添加密码 log_stderr '使用密码进行尝试连接,来添加be到fe' output=$(timeout 15 mysql --connect-timeout 2 -h $svc -P $FE_QUERY_PORT -u root -p$MYSQL_ROOT_PW --skip-column-names --batch -e "ALTER SYSTEM ADD BACKEND \"$MY_SELF:$HEARTBEAT_PORT\";") fi echo "$output"
}# 查看存在的be
show_backends() {#先尝试无密码连接output=$(timeout 15 mysql --connect-timeout 2 -h $svc -P $FE_QUERY_PORT -u root --skip-column-names --batch -e 'SHOW BACKENDS;')if [ $? -ne 0 ]; thenlog_stderr '使用密码进行尝试连接,检查be的状态'# 如果无密码连接失败,则使用密码进行连接output=$(timeout 15 mysql --connect-timeout 2 -h $svc -P $FE_QUERY_PORT -u root -p$MYSQL_ROOT_PW --skip-column-names --batch -e 'SHOW BACKENDS;')fiecho "$output"
}
扩容 BE 集群
be的启动脚本天然支持容器启动时就会将自己加入到Fe中,所以新增时,正常些docker compose即可,如下示例:
starrocks-be-3:<<: *starrocks-be-commonhostname: starrocks-be-3container_name: starrocks-be-3volumes:- './starrocks/be-3/storage:/opt/starrocks/be/storage:rw'- './starrocks/be-3/log:/opt/starrocks/be/log:rw'- './sr/bin:/data/starrocks:rwx'
相关文章:

【StarRocks】starrocks 3.2.12 【share-nothing】 多Be集群容器化部署
文章目录 一. 集群规划二.docker compose以及启动脚本卷映射对于网络环境变量 三. 集群测试用户新建、赋权、库表初始化断电重启扩容 BE 集群 一. 集群规划 部署文档 https://docs.starrocks.io/zh/docs/2.5/deployment/plan_cluster/ 分类描述FE节点1. 主要负责元数据管理、…...

联想ThinkServer服务器主要硬件驱动下载
联想ThinkServer服务器主要硬件驱动下载: 联想ThinkServer服务器主要硬件Windows Server驱动下载https://newsupport.lenovo.com.cn/commonProblemsDetail.html?noteid156404#D50...

Ansys Zemax Optical Studio 中的近视眼及矫正
近视,通常称为近视眼,是一种眼睛屈光不正,导致远处物体模糊,而近处物体清晰。这是一种常见的视力问题,通常发生在眼球过长或角膜(眼睛前部清晰的部分)过于弯曲时。因此,进入眼睛的光…...
三次握手后的数据传输
一旦三次握手成功完成,TCP连接便正式建立,双方可以开始传输数据。在这个阶段,TCP协议利用其独特的可靠性和流控机制,确保数据的有序、无差错传输。 序列号与确认号:在数据传输过程中,TCP会为每个报文段分配…...

企业OA管理系统:Spring Boot技术实现与案例研究
摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了企业OA管理系统的开发全过程。通过分析企业OA管理系统管理的不足,创建了一个计算机管理企业OA管理系统的方案。文章介绍了企业OA管理系统的系统分析部…...

(免费送源码)计算机毕业设计原创定制:Java+JSP+HTML+JQUERY+AJAX+MySQL springboot计算机类专业考研学习网站管理系统
摘 要 大数据时代下,数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势。在大学生在线计算机类专业考研学习网站管理的要求下,开发一…...
Go语言工程测试的基本规则和流程
Go语言工程测试的基本规则和流程 在Go语言的工程实践中,测试是确保软件质量和稳定性的关键环节。本文将深入探讨Go语言中的工程测试,包括单元测试、性能测试和集成测试等,以及它们的编写规则、组织方式和执行流程。 单元测试(Unit Testing) 单元测试是针对软件中最小可…...
阿里云cdn配置记录和nodejs手动安装
cdn 登录阿里云 域名解析权限 开启cdn,接引导流程, 源可以设置 域名或者ip等 配置好域名解析 上传https证书 图片不显示,后端开发需要配置 回源配置的回源协议 ,配置跟随客服端【如果浏览器多次重定向错误,客服或者改…...
PTC在电池中的作用
一、电池安全性的重要性 在现代电子设备中,电池作为能源储存和供应的核心组件,其性能和安全性一直是关注的重点。尤其是在锂离子电池等高能量密度电池的广泛应用中,电池发生过流、过热、短路等问题可能导致电池失效,甚至引发热失控和火灾等安全事故。因此,如何提高电池的…...
嵌入式C语言面试题 - 2024/11/18
欢迎找我进行职业规划,超值的自我投资 -> 嵌入式软件工程师一对一指导 转载请注明来源: 下边代码,x值是? int x10;x 3x%(3); 解析: 初始值:x 10 计算 x % 3: 10 % 3 的结果是 1&#…...

理解原子变量之四:可见性、memory_order_acquire与 memory_order_release
在理解原子变量之二:从volatile到内存序-进一步的认识-CSDN博客里的实例3里面,我们看到,如果在一个线程里修改原子变量done,另一个线程读取done时,就会看到这个变化。这就是原子变量的可见性。其实这个认识是不全面的。…...
requests的session
如果有cookie,能够自动关联,可以使用如下: session对象能够帮我们自动管理和传递cookie,但是后续的请求,必须使用session对象发起 session requests.session() re session.get() re session.post()或 session reque…...

MySQL面试题补
内连接和外连接的区别: ○1.功能和用法不同:内连接是连接两表都满足情况的数据;而外连接是以一边的表为主表,另一个表只显示匹配的行; ○2.用途:内连接一般是用于检索不同表需要根据共同的列值进行匹配的&a…...

Windows系统编程 - 进程遍历
文章目录 前言进程的遍历CreateToolhelp32SnapshotProcess32FirstProcess32Next进程遍历 总结 前言 各位师傅好,我是qmx_07,今天给大家讲解进程遍历的相关知识点 进程的遍历 快照:使用vmware虚拟机的时候,经常需要配置环境服务…...
从零开始创建一个 Vue3+Vite+TS+Eslint项目
一、创建一个最简单的 Vue3 项目 pnpm create vuelatest只设置项目名,其它任何功能都不加。 二、引入 Typescript 详见 Vue3 Vite 项目引入 Typescript 三、引入 Eslint Pritter 详见 Vue3 Vite TS 项目引入 Eslint Pritter 四、配置自动导入插件引入 El…...
Python操作neo4j库py2neo使用(一)
Python操作neo4j库py2neo使用(一) 安装(只用于测试) docker-compose .yml 文件 version: 3.8 services:neo4j:image: neo4j:5.6.0-enterprise #商业版镜像hostname: neo4jcontainer_name: neo4jports:- "7474:7474"-…...

Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案(二)
Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案https://blog.csdn.net/shijianduan1/article/details/133386281 某业务配置表,按配置的时间区间及组织层级取方案,形成报表展示出所有部门方案的取值; 例如࿰…...

leetcode刷题记录(四十二)——101. 对称二叉树
(一)问题描述 . - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/symmetric-tree/description/给你…...

AutoDL安装docker问题
在AutoDL上租了卡,安装docker遇到一些问题: 1.执行 sudo docker run hello-world 报错 docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 解决方法 先查看docker有没有启动,…...
C++头文件大全(要是还有请帮忙)
以下是 C 中常见的各类头文件分类列举(但实际远不止这些,随着标准库扩充及第三方库使用会有更多): 输入 / 输出流相关头文件 <iostream>:用于标准输入输出,定义了 cin、cout 等对象。<fstream>…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...