【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'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/60505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

厦门凯酷全科技有限公司解锁抖音电商新纪元

在这个短视频风起云涌的时代&#xff0c;抖音电商以其独特的魅力迅速崛起&#xff0c;成为众多品牌争相布局的蓝海市场。在这片充满机遇与挑战的海洋中&#xff0c;厦门凯酷全科技有限公司犹如一艘装备精良的航船&#xff0c;引领着众多企业驶向成功的彼岸。今天&#xff0c;就…

递归------深度优先搜索

深度优先搜索&#xff08;Depth-First Search&#xff0c;简称DFS&#xff09;是一种用于遍历或搜索树或图的算法。它从一个顶点开始&#xff0c;尽可能深地搜索树的分支。深度优先搜索沿着一条路径深入&#xff0c;直到无法继续为止&#xff0c;然后回溯并尝试其他路径。这种搜…

华为HCCDA云技术认证--分布式云架构

大家好呀&#xff01;我是reload。今天继续带大家学习华为HCCDA云技术认证&#xff0c;涵盖华为云最为核心的计算、存储、网络、数据库、安全、部署等服务。今天学习分布式云架构与资源弹性伸缩相关内容。 一、弹性实现原理 1、问题引入 假设在双十一或其他大促期间的流量波…

企业信息化-走进身份管理之搭建篇

​一、身份管理是什么 我们先要弄懂统一身份管理到底是什么&#xff1f; 统一身份管理&#xff08;Unified Identity Manager&#xff0c;UIM&#xff09;&#xff0c;身份管理&#xff08;Identity Management&#xff0c;简称IDM&#xff09;&#xff0c;也被称为IAM&#…

解决Windows批处理文件执行后中文乱码问题

前言 在使用Windows批处理文件时&#xff0c;中文乱码是一个常见的问题。这通常是因为文件的编码格式与命令行&#xff08;cmd&#xff09;默认使用的编码格式不一致导致的。下面我们将简单讲讲如何解决这一问题&#xff0c;确保批处理文件中的中文字符能够正确显示。 问题原…

实践篇:青果IP助理跨境电商的高效采集

写在前面&#xff1a; 近年来&#xff0c;跨境电商行业迅速崛起&#xff0c;成为全球贸易的重要组成部分。据市场调研机构Statista数据显示&#xff0c;2024年全球跨境电商市场规模预计将突破5万亿美元&#xff0c;覆盖数十亿消费者。跨境电商的竞争日益激烈&#xff0c;商家不…

Prometheus结合K8s(二)使用

上一篇介绍了如何搭建 Prometheus结合K8s&#xff08;一&#xff09;搭建-CSDN博客&#xff0c;这章介绍使用 页面访问 kubectl get svc -n prom 看promeheus和granfana的端口访问页面 Prometheus 点击status—target&#xff0c;可以看到metrics的数据来源&#xff0c;即各…

组会 | 大语言模型 + LoRA

目录 1 大语言模型概述1.1 模型的架构1.2 模型的细节&#xff1a;标记化和嵌入化1.3 模型的核心 2 多头注意力机制3 LoRA 概述3.1 冻结部分模型参数3.2 低秩适配&#xff08;LoRA&#xff09;3.2.1 核心工作原理&#xff1a;冻结模型参数3.2.2 核心工作原理&#xff…

Qt——天气预报项目

一.ui界面的设计流程 1.窗口1&#xff1a;使用水平布局&#xff0c;内包含俩个QLabel类和一个QLineEdit类 这里可以设置LineEdit中的提示文字 2.窗口2&#xff1a;使用栅格布局&#xff0c;这个天气图标组件的大小需限制一下 3.窗口3&#xff1a;里面包含一个子窗口&#xff…

【高阶数据结构】LRU Cache

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解什么是LRU Cache&#xff0c;并能简单的模拟实现。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! &…

jupyter notebook的 markdown相关技巧

目录 1 先选择为markdown类型 2 开关技巧 2.1 运行markdown 2.2 退出markdown显示效果 2.3 注意点&#xff1a;一定要 先选择为markdown类型 3 一些设置技巧 3.1 数学公式 3.2 制表 3.3 目录和列表 3.4 设置各种字体效果&#xff1a;加粗&#xff0c;斜体&#x…

stm32 指定变量存储地址

uint8_t array[10] attribute((at(0x20000000))) 当你使用 attribute((at(地址))) 强制将变量放置在特定地址时&#xff0c;编译器和链接器通常不会自动调整其他变量的地址以避免冲突。这意味着&#xff0c;如果指定的地址已经被其他变量占用&#xff0c;就会发生冲突。 如果…

安宝特分享 | 如何利用AR技术革新医疗实践:从远程急救到多学科协作

AR技术在国内外医院的应用 在现代医疗环境中&#xff0c;患者面临的挑战依然严峻&#xff1a;看病难、看病远、看病急。这些问题不仅影响了患者的治疗效果&#xff0c;也让医务工作者倍感压力。幸运的是&#xff0c;随着增强现实&#xff08;AR&#xff09;技术的发展&#xf…

从零开始:如何使用第三方视频美颜SDK开发实时直播美颜平台

开发一个具有实时美颜功能的直播平台&#xff0c;能够显著提高用户体验和内容质量。而利用第三方视频美颜SDK可以大大简化开发过程&#xff0c;加快产品上市速度。本篇文章&#xff0c;小编将从零开始&#xff0c;详细讲解如何使用第三方视频美颜SDK开发一个实时直播美颜平台。…

记录第一次安装laravel项目

window系统 Laravel中文文档&#xff1a;https://laravel-docs.catchadmin.com/docs/11/getting-started/installation 1.使用composer安装全局laravel composer global require laravel/installer2.安装完成后在命令行输入laravel&#xff0c;如果报错&#xff1a;laravel不是…

《Django 5 By Example》阅读笔记:p651-p678

《Django 5 By Example》学习第9天&#xff0c;p651-p678总结&#xff0c;总计28页。 一、技术总结 1.aggregate() (1)aggregate&#xff1a;ad-(“to”) gregare(“to collection into a flock(群)&#xff0c; to gather”) 因为ad 后面跟的是gregate&#xff0c;为了发…

安卓手机5G网络频繁掉4G 问题解决 手机5G网络优化方案

问题环境 在某个长期停留的位置&#xff08;例如&#xff1a;躺平&#xff09;使用手机时网络突然从5G跳到4G&#xff0c;偶尔跳来跳去导致网络体验很差&#xff0c;经过调整5G网络情况下网速及其他体验都要更好&#xff0c;基于这样的情况使用一种简单的操作&#xff0c;锁定5…

利用c语言详细介绍下希尔排序

希尔排序是针对插入排序的优化算法。它是缩少增量的算法&#xff0c;一开始增量从元素个数len/2的增量开始&#xff0c;然后缩小增量gapgap/2&#xff0c;直到gap为1&#xff0c;最终完成序列排序。 一、图文介绍 我们还是使用数组【10&#xff0c;5&#xff0c;3&#xff0c;2…

基于MATLAB的超宽带(UWB)信号的仿真和测试系统

基于MATLAB的超宽带(UWB)信号的仿真和测试系统 引言 随着无线通信技术的发展&#xff0c;超宽带&#xff08;Ultra-Wideband, UWB&#xff09;技术因其高数据传输速率、低功耗、抗多径衰落等优点而受到广泛关注。UWB技术适用于短距离高速数据传输&#xff0c;如个人区域网络、…

深度学习:GPT-1的MindSpore实践

GPT-1简介 GPT-1&#xff08;Generative Pre-trained Transformer&#xff09;是2018年由Open AI提出的一个结合预训练和微调的用于解决文本理解和文本生成任务的模型。它的基础是Transformer架构&#xff0c;具有如下创新点&#xff1a; NLP领域的迁移学习&#xff1a;通过最…