【StarRocks】starrocks 3.2.12 【share-nothing】 多Be集群容器化部署

news2024/11/25 0:43:46

文章目录

  • 一. 集群规划
  • 二.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-common
  image: starrocks/be-ubuntu:3.2.12
  command:
    - /bin/bash
    - -c
    - |
      chmod +x /data/starrocks/be_entrypoint.sh
      /data/starrocks/be_entrypoint.sh starrocks-fe-0
  environment:
    - HOST_TYPE=FQDN
    - TZ=Asia/Shanghai
    - MYSQL_ROOT_PASSWORD=1111111
  depends_on:
    - starrocks-fe-0
  restart: always
  networks: # network config, can be configured to your preferred port and ip address, if not specified, it will use default network and assign a dynamic ip
    starrocks-network:

services:
  # starrocks:1 fe 3be
  starrocks-fe-0:
    image: starrocks/fe-ubuntu:3.2.12
    hostname: starrocks-fe-0
    container_name: starrocks-fe-0
    command:
      - /bin/bash
      - -c
      - |
        /opt/starrocks/fe_entrypoint.sh starrocks-fe-0
    environment:
      - HOST_TYPE=FQDN
      - TZ=Asia/Shanghai
      - MYSQL_ROOT_PASSWORD=radar_360
    ports:
      - "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: always
    networks: # network config, can be configured to your preferred port and ip address, if not specified, it will use default network and assign a dynamic ip
      starrocks-network:
  starrocks-be-0:
    <<: *starrocks-be-common
    hostname: starrocks-be-0
    container_name: starrocks-be-0
    volumes:
      - './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-common
    hostname: starrocks-be-1
    container_name: starrocks-be-1
    volumes:
      - './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-common
    hostname: starrocks-be-2
    container_name: starrocks-be-2
    volumes:
      - './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/bash

HOST_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" ]] ; then
        log_stderr 'Empty $CONFIGMAP_MOUNT_PATH env var, skip it!'
        return 0
    fi
    if ! test -d $CONFIGMAP_MOUNT_PATH ; then
        log_stderr "$CONFIGMAP_MOUNT_PATH not exist or not a directory, ignore ..."
        return 0
    fi
    local tgtconfdir=$STARROCKS_HOME/conf
    for conffile in `ls $CONFIGMAP_MOUNT_PATH`
    do
        log_stderr "Process conf file $conffile ..."
        local tgt=$tgtconfdir/$conffile
        if test -e $tgt ; then
            # make a backup
            mv -f $tgt ${tgt}.bak
        fi
        ln -sfT $CONFIGMAP_MOUNT_PATH/$conffile $tgt
    done
}

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 ]; then
        log_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;')
    fi
    echo "$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=$1
    local 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 file
    local heartbeat_port=`parse_confval_from_cn_conf "heartbeat_service_port"`
    if [[ "x$heartbeat_port" != "x" ]] ; then
        HEARTBEAT_PORT=$heartbeat_port
    fi

    if [[ "x$HOST_TYPE" == "xIP" ]] ; then
        MY_SELF=$MY_IP
    else
        MY_SELF=$MY_HOSTNAME
    fi

}

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"
}

add_self()
{
    local svc=$1
    start=`date +%s`
    local timeout=$PROBE_TIMEOUT

    while true
    do
        log_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 ; then
            break;
        fi

        let "expire=start+timeout"
        now=`date +%s`
        if [[ $expire -le $now ]] ; then
            log_stderr "Time out, abort!"
            exit 1
        fi

        sleep $PROBE_INTERVAL

    done
}

svc_name=$1
if [[ "x$svc_name" == "x" ]] ; then
    echo "Need a required parameter!"
    echo "  Example: $0 <fe_service_name>"
    exit 1
fi

update_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 console
    addition_args="--logconsole"
fi
$STARROCKS_HOME/bin/start_be.sh $addition_args
ret=$?
if [[ $ret -ne 0 && "x$LOG_CONSOLE" != "x1" ]] ; then
    nol=50
    log_stderr "Last $nol lines of be.INFO ..."
    tail -n $nol $STARROCKS_HOME/log/be.INFO
    log_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 ]; then
        log_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;')
    fi
    echo "$output"
}

 

扩容 BE 集群

be的启动脚本天然支持容器启动时就会将自己加入到Fe中,所以新增时,正常些docker compose即可,如下示例:

  starrocks-be-3:
    <<: *starrocks-be-common
    hostname: starrocks-be-3
    container_name: starrocks-be-3
    volumes:
      - './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.coloradmin.cn/o/2246979.html

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

相关文章

LLaMA-Factory 上手即用教程

LLaMA-Factory 是一个高效的大型语言模型微调工具&#xff0c;支持多种模型和训练方法&#xff0c;包括预训练、监督微调、强化学习等&#xff0c;同时提供量化技术和实验监控&#xff0c;旨在提高训练速度和模型性能。 官方开源地址&#xff1a;https://github.com/hiyouga/L…

Java基础面试题01-请描述Java中JDK和JRE的区别?

什么是 JDK&#xff1f; JDK 全称 Java Development Kit&#xff0c;中文叫“Java 开发工具包”。 它是给 Java 开发者用的工具箱&#xff0c;里面有一切写代码、编译代码、调试代码所需要的工具。 JDK 包括什么&#xff1f; Java 编译器&#xff08;javac&#xff09;&…

Ubuntu20.04下安装向日葵

向日葵远程控制app官方下载 - 贝锐向日葵官网 下载Ununtu版的图形版本的安装deb包SunloginClient_15.2.0.63064_amd64.deb 直接执行 sudo dpkg -i SunloginClient_15.2.0.63064_amd64.deb 的话会报错: 如果在Ubuntu20.04里直接执行sudo apt install libgconf-2-4安装libgco…

Typora+PicGo+云服务器搭建博客图床

文章目录 前言一. 为什么要搭建博客图床&#xff1f;1.1 什么是图床&#xff1f;1.2 为什么要搭建博客图床? 二. 安装软件三. 配置阿里云OSS3.1 注册,开通对象储存3.2 创建bucket3.3 找到你的地域节点3.4 accessKeyId和accessKeySecret3.5 给你的阿里云账户充值 四. 配置4.1 配…

Python的3D可视化库 - vedo (2)visual子模块 基本可视化行为

文章目录 1. visual模块的继承关系2. 基类CommonVisual的方法2.1 获取对象信息2.1.1 对象本身信息2.1.2 对象的查找表2.1.3 对象标量范围2.1.4 对象缩略图 2.2 呈现对象2.2.1 在窗口显示1.2.2 对象可见性 2.2.3 对象颜色2.2.4 对象透明度 2.3 添加标度条2.3.1 2D标度条2.3.2 3D…

常用Rust日志处理工具教程

在本文中&#xff0c;我想讨论Rust中的日志。通过一些背景信息&#xff0c;我将带您了解两个日志库&#xff1a;env_logger和log4rs。最后&#xff0c;我将分享我的建议和github的片段。 Rust log介绍 log包是Rust中日志API的事实标准&#xff0c;共有五个日志级别&#xff1…

废品买卖回收管理系统|Java|SSM|Vue| 前后端分离

【重要①】前后端源码万字文档部署文档 【重要②】正版源码有问题包售后 【包含内容】 【一】项目提供非常完整的源码注释 【二】相关技术栈文档 【三】源码讲解视频 【其它服务】 【一】可以提供远程部署安装&#xff0c;包扩环境 【…

案例研究|阿特斯的JumpServer分布式部署和多组织管理实践

苏州阿特斯阳光电力科技有限公司&#xff08;以下简称为阿特斯&#xff09;是一家集太阳能光伏组件制造和为全球客户提供太阳能应用产品研发、设计、制造、销售的专业公司。 阿特斯集团总部位于加拿大&#xff0c;中国区总部位于江苏省苏州市。通过全球战略和多元化的市场布局…

tongweb安全整改

一 禁止以root账号运行tongweb服务 1 如果是首次安装须创建普通用户安装tongweb 2 如果已经使用root账号安装了tongweb 2.1 创建普通用户 2.2 使用root账号授予tongweb安装目录宿主权限为普通用户 2.3赋权成功后&#xff0c;后续启动tongweb服务必须为普通用户 二 tongRDS隐…

快速识别模型:simple_ocr,部署教程

快速识别图片中的英文、标点符号、数学符号、Emoji, 模型会输出图片中文字行的坐标位置、最低得分、识别结果。当前服务用到的模型&#xff1a;检测模型、数字识别、英文符号识别。 一、部署流程 1.更新基础环境 apt update2.安装miniconda wget https://repo.anaconda.com/…

tcpdump抓包 wireShark

TCPdump抓包工具介绍 TCPdump&#xff0c;全称dump the traffic on anetwork&#xff0c;是一个运行在linux平台可以根据使用者需求对网络上传输的数据包进行捕获的抓包工具。 tcpdump可以支持的功能: 1、在Linux平台将网络中传输的数据包全部捕获过来进行分析 2、支持网络层…

HarmonyOS4+NEXT星河版入门与项目实战(11)------Button组件

文章目录 1、控件图解2、案例实现1、代码实现2、代码解释3、运行效果4、总结1、控件图解 这里我们用一张完整的图来汇整 Button 的用法格式、属性和事件,如下所示: 按钮默认类型就是胶囊类型。 2、案例实现 这里我们实现一个根据放大和缩小按钮来改变图片大小的功能。 功…

YOLOV5 /onnx模型转换成rknn

上两篇文章讲述了pytorch模型下best.pt转换成onnx模型&#xff0c;以及将onnx进行简化成为best-sim.onnx, 接下来这篇文章讲述如何将onnx模型转换成rknn模型&#xff0c;转换成该模型是为了在rk3568上运行 1.创建share文件夹 文件夹包含以下文件best-sim.onnx,rknn-tookit2-…

【51单片机】LCD1602液晶显示屏

学习使用的开发板&#xff1a;STC89C52RC/LE52RC 编程软件&#xff1a;Keil5 烧录软件&#xff1a;stc-isp 开发板实图&#xff1a; 文章目录 LCD1602存储结构时序结构 编码 —— 显示字符、数字 LCD1602 LCD1602&#xff08;Liquid Crystal Display&#xff09;液晶显示屏是…

如何使用AWS Lambda构建一个云端工具(超详细)

首发地址&#xff08;欢迎大家访问&#xff09;&#xff1a;如何使用AWS Lambda构建一个云端工具&#xff08;超详细&#xff09; 1 前言 1.1 无服务器架构 无服务器架构&#xff08;Serverless Computing&#xff09;是一种云计算服务模型&#xff0c;它允许开发者构建和运行…

【Isaac Sim】相关问题汇总

目录 一、安装点击Install时报错二、启动时报 Failed to create any GPU devices三、加载Isaac Sim自带模型或示例时报 Isaac Sim is not responding 一、安装点击Install时报错 报错&#xff1a; request to https://asset.launcher.omniverse.nvidia.com/… failed, reason:…

Spring-02-springmvc

2. 什么是SpringMVC 2.1. 概述 Spring MVC是Spring Framework的一部分&#xff0c;是基于Java实现MVC的轻量级Web框架。 为什么要学习SpringMVC呢? Spring MVC的特点&#xff1a; 轻量级&#xff0c;简单易学高效 , 基于请求响应的MVC框架与Spring兼容性好&#xff0c;无缝…

深度学习之目标检测的技巧汇总

1 Data Augmentation 介绍一篇发表在Big Data上的数据增强相关的文献综述。 Introduction 数据增强与过拟合 验证是否过拟合的方法&#xff1a;画出loss曲线&#xff0c;如果训练集loss持续减小但是验证集loss增大&#xff0c;就说明是过拟合了。 数据增强目的 通过数据增强…

qt添加模块

以QtNetwork模块为例 方式一 扩展-qt vs tools-qt project settings 方式二 右键选中项目-属性-qt project settings 方法三 在此界面选择select modules,即可进行相应模块添加

【信息系统项目管理师】第2章:信息技术发展 考点梳理

文章目录 2.1 信息技术及其发展2.1.1 计算机软硬件2.1.2 计算机网络2.1.3 存储和数据库2.1.4 信息安全2.1.5 信息技术的发展 2.2 新一代信息技术及应用2.2.1 物联网2.2.2 云计算2.2.3 大数据2.2.4 区块链2.2.5 人工智能2.2.6 虚拟现实 2.1 信息技术及其发展 2.1.1 计算机软硬件…