StarRocks部署高可用 FE 集群

一、准备工作

1.1 部署规划

这里我打算部署存算一体模式,三节点。即三个FE节点,三个BE节点。假设三台IP分别为:10.10.10.50、10.10.10.51、10.10.10.52
我将采用三台centos7.9进行部署,单台配置为128C 256G 3T。

1.2 服务器检查项

关闭防火墙(或者只需能确保集群间机器相关端口的正常访问即可)
安装有JDK

进行机器设置和配置检查:
运行以下脚本,进行环境检查

#!/bin/bash

##说明:
##1、该脚本为StarRocks部署环境检测脚本,用来检测StarRocks运行的必要条件及重要系统参数。
##2、本脚本适用于红帽系系统,Ubuntu系及Debian系请根据检测项自行验证部署环境。
##3、当前不再检测系统中的Java环境,StarGo或Manager会使用自带的OpenJDK8为StarRocks配置程序级的运行环境。
##4、检测通过的项会显示为绿色的success,未通过的项会用红色字体给出提示及临时调整命令(服务器重启会失效)。
##5、在部署前请务必根据提示调整环境,以避免后续安装或使用过程中出现不必要的问题。

function cpu_check(){
    echo ""
    echo "############################ CPU检查 #############################"
    cat /proc/cpuinfo | grep avx2 2>&1 >/dev/null
    if [ $? -ne 0 ];then
        echo -e "\033[31mStarRocks BE需要CPU支持AVX2指令集才可启动,请更换至符合要求的x86架构服务器\033[0m"
    else
        echo -e "\033[32msuccess\033[0m"
    fi
}

function linuxversion_check(){
    echo ""
    echo "########################## Linux版本检查 ##########################"
    num_tmp=$(cat /etc/redhat-release | tr -cd "[0-9]")
    linux_version=${num_tmp:0:1}
    if [ $linux_version -ne 7 ];then
        echo -e "\033[31m若无特殊原因,建议您更换使用CentOS7部署StarRocks,该系统当前测试最为充分\033[0m"
    else
        echo -e "\033[32msuccess\033[0m"
    fi
}

function glibc_check(){
    echo ""
    echo "########################## Glibc版本检查 ##########################"
    glibc_version=$(ldd --version | head -n 1 | tail -c 3)
    if [ $glibc_version -lt 17 ];then
        echo -e "\033[31mStarRocks BE要求glibc版本最低为2.17才可启动,请升级glibc或使用更高内核版本的系统\033[0m"
    elif [ $glibc_version -ge 37 ];then
        echo -e "\033[31m检测到较高的glibc版本,StarRocks BE或将无法启动,请更换或降级系统为CentOS7\033[0m"
    else
        echo -e "\033[32msuccess\033[0m"
    fi
}

function swap_check(){
    echo ""
    echo "############################ Swap检查 ############################"
    swap_number=$(cat /proc/sys/vm/swappiness)
    if [ $swap_number -ne 0 ];then
        echo -e "\033[31m检查项1:使用swap分区可能影响查询性能,建议配置为不优先使用,临时配置命令:echo 0 | sudo tee /proc/sys/vm/swappiness\033[0m"
    else
        echo -e "\033[32msuccess\033[0m"
    fi
    swap_file=$(free -m | grep -i swap | awk '{print $2}')
    if [ $swap_file -ne 0 ];then
        echo -e "\033[31m检查项2:检查到swap分区未禁用,推荐禁用,临时禁用命令:swapoff -a\033[0m"
    else
        echo -e "\033[32msuccess\033[0m"
    fi
}

function kernel_check(){
    echo ""
    echo "########################### 内核参数检查 ##########################"
    om_number=$(cat /proc/sys/vm/overcommit_memory)
    if [ $om_number -ne 1 ];then
        echo -e "\033[31m检查项1:推荐调整overcommit_memory=1,以允许内核分配所有的物理内存来保障程序稳定性,临时调整命令:echo 1 | sudo tee /proc/sys/vm/overcommit_memory\033[0m"
    else
        echo -e "\033[32msuccess\033[0m"
    fi
    mmap_number=$(cat /proc/sys/vm/max_map_count)
    if [ "$mmap_number" -lt 200000 ]; then
        echo -e "\033[31m检查项2:推荐调整max_map_count=262144,来调大进程可拥有的内存映射区域的最大数量以保障程序稳定性,临时调整命令:echo 262144 | sudo tee /proc/sys/vm/max_map_count\033[0m"
    else
        echo -e "\033[32msuccess\033[0m"
    fi
}

function ulimit_files_check(){
    echo ""
    echo "####################### 进程最大打开文件数检查 ######################"
    ulimit_fs=$(ulimit -n)
    if [ $ulimit_fs -lt 65535 ];then
        echo -e "\033[31m句柄数限制过小可能导致服务异常退出,完整调整命令:ulimit -n 655350 && echo -e '* soft nofile 655350\\\n* hard nofile 655350' >> /etc/security/limits.conf\033[0m"
    else
        echo -e "\033[32msuccess\033[0m"
    fi
}

function ulimit_process_check(){
    echo ""
    echo "####################### 用户最大可用进程数检查 ######################"
    ulimit_ps=$(ulimit -u)
    if [ $ulimit_ps -lt 65535 ];then
        echo -e "\033[31m进程数限制过小可能导致服务异常退出,完整调整命令:ulimit -u 655350 && echo -e '* soft nproc 655350\\\n* hard nproc 655350' >> /etc/security/limits.conf && sed -i 's/4096/655350/' /etc/security/limits.d/20-nproc.conf\033[0m"
    else
        echo -e "\033[32msuccess\033[0m"
    fi
}

function fe_port_check(){
    echo ""
    echo "########################### FE端口检查 ###########################"
    # default port 8030,9010,9020,9030
    ports=$(ss -antpl | grep -E '8030|9010|9020|9030' | wc -l)
    if [ $ports -gt 0 ];then
        echo -e "\033[31mFE需用的默认端口被占用,请检查或在部署时调整端口,检查命令:ss -antpl | grep -E '8030|9010|9020|9030'\033[0m"
    else
        echo -e "\033[32msuccess\033[0m"
    fi
}

function be_port_check(){
    echo ""
    echo "########################### BE端口检查 ###########################"
    # default port 9060,9050,8040,8060
    ports=$(ss -antpl | grep -E '9060|9050|8040|8060|9070' | wc -l)
    if [ $ports -gt 0 ];then
        echo -e "\033[31mBE需用的默认端口被占用,请检查或在部署时调整端口,检查命令:ss -antpl | grep -E '9060|9050|8040|8060|9070'\033[0m"
    else
        echo -e "\033[32msuccess\033[0m"
    fi
}

function broker_port_check(){
    echo ""
    echo "######################### Broker端口检查 #########################"
    # default port 8000
    ports=$(ss -antpl | grep '8000' | wc -l)
    if [ $ports -gt 0 ];then
        echo -e "\033[31mBroker需用的默认端口被占用,请检查或在部署时调整端口,检查命令:ss -antpl | grep '8000'\033[0m"
    else
        echo -e "\033[32msuccess\033[0m"
    fi
}

function firewalld_check(){
    echo ""
    echo "########################### 防火墙检查 ###########################"
    systemctl status firewalld | grep "running"  2>&1 >/dev/null
    if [ $? -ne 0 ];then
        echo -e "\033[32msuccess\033[0m"
    else
        echo -e "\033[31m系统防火墙为启用状态,为保证集群内部通信,建议关闭内网防火墙或开放端口,临时关闭命令:systemctl stop firewalld && systemctl disable firewalld\033[0m"
    fi
}

function tcp_abort_on_overflow_check(){
    echo ""
    echo "########################## TCP参数检查 ###########################"
    tcp_aoo=$(cat /proc/sys/net/ipv4/tcp_abort_on_overflow)
    if [ $tcp_aoo -eq 1 ];then
        echo -e "\033[32msuccess\033[0m"
    else
        echo -e "\033[31m推荐调整tcp_abort_on_overflow参数值为1,临时调整命令:echo 1 | sudo tee /proc/sys/net/ipv4/tcp_abort_on_overflow\033[0m"
    fi
}

function somaxconn_check(){
    echo ""
    echo "######################### Somaxconn检查 #########################"
    somaxconn_value=$(cat /proc/sys/net/core/somaxconn)
    if [ $somaxconn_value -ge 1024 ];then
        echo -e "\033[32msuccess\033[0m"
    else
        echo -e "\033[31m推荐调整somaxconn参数值为1024,临时调整命令:echo 1024 | sudo tee /proc/sys/net/core/somaxconn\033[0m"
    fi
}

function selinux_check(){
    echo ""
    echo "########################## SELinux检查 ###########################"
    selinux_value=$(getenforce)
    if [ $selinux_value != "Enforcing" ];then
        echo -e "\033[32msuccess\033[0m"    
    else
        echo -e "\033[31m建议关闭SELinux,临时关闭命令:setenforce 0\033[0m"
    fi
}

function hugepage_check(){
    echo ""
    echo "########################## Hugepage检查 ##########################"    
    enabled_value=$(cat /sys/kernel/mm/transparent_hugepage/enabled | cut -d '[' -f2 | cut -d ']' -f1)
    if [ $enabled_value == "never" ];then
        echo -e "\033[32msuccess\033[0m"
    else
        echo -e "\033[31m检查项1:推荐禁用透明大页,临时禁用命令:echo never > /sys/kernel/mm/transparent_hugepage/enabled\033[0m" 
    fi
    defrag_value=$(cat /sys/kernel/mm/transparent_hugepage/defrag | cut -d '[' -f2 | cut -d ']' -f1)
    if [ $defrag_value == "never" ];then
        echo -e "\033[32msuccess\033[0m"
    else
        echo -e "\033[31m检查项2:推荐禁用碎片整理,临时禁用命令:echo never > /sys/kernel/mm/transparent_hugepage/defrag\033[0m" 
    fi
}

function ntp_check(){
    echo ""
    echo "########################## 时钟同步检查 ##########################"
    rpm -qa | grep ntp 2>&1 >/dev/null
    if [ $? -ne 0 ];then
        echo -e "\033[31m未检测到ntp命令,StarRocks各FE节点间的时钟差大于5秒将无法启动,建议在部署前使用ntp对各节点进行时钟同步\033[0m"
    else
        echo -e "\033[32msuccess\033[0m"
    fi
}

function zone_check(){
    echo ""
    echo "############################ 时区检查 ############################"
    timedatectl | grep Asia/Shanghai 2>&1 >/dev/null
    if [ $? -ne 0 ];then
        echo -e "\033[31m检测到操作系统未使用Asia/Shanghai时区,不恰当的时区设置可能影响集群数据导入导出,调整命令:timedatectl set-timezone Asia/Shanghai && clock -w\033[0m"
    else
        echo -e "\033[32msuccess\033[0m"
    fi
}

function disk_check(){
    echo ""
    echo "########################## 磁盘容量检查 ##########################"
    # disk space > 80%
    n=0
    for var in `df -h | grep '^/dev/*' | awk '{print $5}' | sed 's/\([0-9]*\).*/\1/'`
    do
        if [ $var -gt 80 ];then
            echo -e "\033[31m检测到存在磁盘剩余容量不足20%的情况,请确认磁盘空间充足后再进行集群部署,检查命令:df -h\033[0m"
            n+=1
            break
        fi
    done
    if [ $n -eq 0 ];then
        echo -e "\033[32msuccess\033[0m"
    fi
}

function mem_check(){
    echo ""
    echo "########################## 内存大小检查 ##########################"
    mem_total=$(awk '($1 == "MemTotal:"){print $2/1048576}' /proc/meminfo)
    mem_int=$(printf "%.f" $mem_total)
    if [ $mem_int -le 16 ];then
        echo -e "\033[31m服务器内存较小,为保证集群性能和稳定性,生产环境的建议内存为32G+\033[0m"
    else
        echo -e "\033[32msuccess\033[0m"
    fi
}

function tool_check(){
    echo ""
    echo "######################### Netstat命令检查 ########################"
    rpm -qa | grep net-tools 2>&1 >/dev/null
    if [ $? -ne 0 ];then
        echo -e "\033[31m未检测到netstat命令,StarGo当前需依赖netstat检测通信,否则无法正常使用。安装命令:yum -y install net-tools\033[0m"
    else
        echo -e "\033[32msuccess\033[0m"
    fi
}

function check(){
    cpu_check
    linuxversion_check
    glibc_check
    swap_check
    kernel_check
    ulimit_files_check
    ulimit_process_check
    fe_port_check
    be_port_check
    broker_port_check
    firewalld_check
    tcp_abort_on_overflow_check
    somaxconn_check
    selinux_check
    hugepage_check
    ntp_check
    zone_check
    disk_check
    mem_check
    tool_check
}

check

二、安装Starrocks

软件包下载:
https://www.starrocks.io/download/community
我这里下载的是最新稳定版本:
在这里插入图片描述
然后参考该官方文档进行部署即可:
https://docs.starrocks.io/zh/docs/3.2/deployment/deploy_manually/

这里需要重点补充的信息如下:
1、fe配置
每个服务器中,都要增加该项:

# store metadata, create it if it is not exist.
# Default value is ${STARROCKS_HOME}/meta
meta_dir = /opt/StarRocks-3.1.13/fe/meta  # 自己创建的元数据目录
priority_networks = 10.10.10.50 # 本机IP

2、be配置

# Default value is ${STARROCKS_HOME}/storage, you should create it by hand.
storage_root_path = /opt/StarRocks-3.1.13/be/bestorage # 自己创建的数据存储目录
priority_networks = 10.10.10.50 # 本机IP

3、第一次启动FE的follower节点的时候,要增加–helper

./fe/bin/start_fe.sh --helper 10.10.10.50:9010 --daemon	# foller后面的ip是fe leader的ip

用到的详细命令汇总:

# 1 在三台创建所需目录
mkdir -p /opt/StarRocks-3.1.13/fe/meta
mkdir -p /opt/StarRocks-3.1.13/be/bestorage

# 2 修改三台的配置文件
# 修改 fe/conf/fe.conf
meta_dir = /opt/StarRocks-3.1.13/fe/meta  # 自己创建的元数据目录
priority_networks = 10.10.10.50 # 本机IP
# 修改 be/conf/be.conf
storage_root_path = /opt/StarRocks-3.1.13/be/bestorage # 自己创建的数据存储目录
priority_networks = 10.10.10.50 # 本机IP

# 3 启动fe节点
./fe/bin/start_fe.sh --daemon # leader节点执行
./fe/bin/start_fe.sh --helper 10.10.10.50:9010 --daemon	# follower1节点执行
./fe/bin/start_fe.sh --helper 10.10.10.50:9010 --daemon # follower2节点执行
# 验证fe启动成功
cat fe/log/fe.log | grep thrift

# 4 启动be节点
./be/bin/start_be.sh --daemon # 3节点执行
# 验证be启动成功
cat be/log/be.INFO | grep heartbeat


# 5 登录第四台服务器,具有mysql,且可以访问leader
mysql -h 10.10.10.50 -P9030 -uroot # 用于
# 在mysql中执行以下语句:
# 增加fe follower节点
ALTER SYSTEM ADD FOLLOWER "10.10.10.51:9010";
ALTER SYSTEM ADD FOLLOWER "10.10.10.52:9010";
# 查看增加的结果:
SHOW PROC '/frontends'\G
# 增加be节点
ALTER SYSTEM ADD BACKEND "10.10.10.50:9050", "10.10.10.51:9050", "10.10.10.52:9050";
# 查看增加的结果:
SHOW PROC '/backends'\G


参考文档:
https://docs.starrocks.io/zh/docs/deployment/deploy_manually/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GESP CCF C++ 二级认证真题 2024年6月

第 1 题 小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级,那他可以选择的认证语言有几种?( ) A. 1 B. 2 C. 3 D. 4 第 2 题 下面流程图在yr输入2024时,可以判定yr代表闰年,并输出 2月…

【LeetCode】2187. 完成旅途的最少时间

1. 题意 2. 分析 二分法有一个关键特征:如果答案answer满足题意,那么对于任何整数i,如果有i>answer,那么i也会是一个存在的解,只不过不是最优解。 本题想要找出一个达到 totalTrips 趟需要的最少时间成本t&#x…

分布式系统中雪花ID的使用及前后台精度解决

本文介绍了雪花ID的应用场景,以及针对雪花id生成精度过大导致数据缺失的解决方案。 一、概念 雪花 ID是一种分布式 ID 生成策略,保证全局唯一,位数组成中含有时间戳,相比UUID,故也能保证自增。 二、应用场景 分库、分表、分片、…

Python 爬虫:使用打码平台来识别各种验证码:

本课程使用的是 超级鹰 打码平台, 没有账户的请自行注册! 超级鹰验证码识别-专业的验证码云端识别服务,让验证码识别更快速、更准确、更强大 使用打码平台来攻破验证码难题, 是很简单容易的, 但是要钱! 案例代码及测…

Ubuntu安装MATLAB

一、准备工作 下载MATLAB安装文件: 访问MathWorks官方网站(MathWorks官网),下载适用于Linux的MATLAB安装文件。这通常是一个.iso镜像文件或.zip压缩文件。请注意选择与Ubuntu版本相匹配的MATLAB版本。创建安装目录: 打…

【学习css1】flex布局-页面footer部分保持在网页底部

中间内容高度不够屏幕高度撑不开的页面时候&#xff0c;页面footer部分都能保持在网页页脚&#xff08;最底部&#xff09;的方法 1、首先上图看显示效果 2、奉上源码 2.1、html部分 <body><header>头部</header><main>主区域</main><foot…

英特尔CPU研发团队繁忙的一天

早晨&#xff1a;准备与启动 7:00 AM - 起床与准备 研发团队的工程师们早早起床&#xff0c;快速洗漱并享用健康的早餐。部分工程师会进行晨间锻炼&#xff0c;保持头脑清醒和身体活力。 8:00 AM - 到达办公室 工程师们来到位于硅谷的英特尔总部&#xff0c;进入研发中心。…

Ubuntu 安装搜狗输入法

搜狗输入法已支持Ubuntu1604、1804、1910、2004、2010 各系统安装步骤可能略有不同 1、添加中文语言支持 打开 系统设置——区域和语言——管理已安装的语言——在“语言”tab下——点击“添加或删除语言” 弹出“已安装语言”窗口&#xff0c;勾选中文&#xff08;简体&…

Qt之元对象系统

Qt的元对象系统提供了信号和槽机制&#xff08;用于对象间的通信&#xff09;、运行时类型信息和动态属性系统。 元对象系统基于三个要素&#xff1a; 1、QObject类为那些可以利用元对象系统的对象提供了一个基类。 2、在类声明中使用Q_OBJECT宏用于启用元对象特性&#xff0c…

5 个搜索 deb 软件包的好地方

基于 Debian 的 Linux 发行版上有一个共同特点&#xff1a;为用户提供了很多可选的软件。当涉及到为 Linux 制作软件时&#xff0c;所有的大公司都首先瞄准这种类型的 Linux 发行版。甚至一些开发人员根本不打算为其他类型的 Linux 发行版打包&#xff0c;只做 DEB 包。 然而&…

easyExcel 不规则模板导入数据

文章目录 前言一、需求和效果二、难点和思路三、全部代码踩坑 前言 之前分享的 EasyExcel 批量导入并校验数据&#xff0c;仅支持规则excel&#xff0c;即首行表头&#xff0c;下面对应数据&#xff0c;无合并单元格情况。 本篇主要解决问题&#xff1a; 模板excel 表头不在首…

Macos 远程登录 Ubuntu22.04 桌面

这里使用的桌面程序为 xfce, 而 gnome 桌面则测试失败。 1,安装 在ubuntu上&#xff0c;安装 vnc server与桌面程序xfce sudo apt install xfce4 xfce4-goodies tightvncserver 2&#xff0c;第一次启动和配置 $ tightvncserver :1 设置密码。 然后修改配置&#xff1a…

[Spring] Spring Web MVC基础理论

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

PyTorch复现PointNet++——模型训练+模型测试

本博文主要实现对PointNet源码进行调试&#xff0c;训练可视化测试。 一、下载源码和数据集 论文&#xff1a;PointNet: Deep Hierarchical Feature Learning on Point Sets in a Metric Space GitHub源码&#xff1a;Pointnet2_pytorch 数据集包括三种&#xff1a;分类、零部…

对进阶指针的追忆

目录 思维导图 指针前言 一&#xff1a;字符指针 二&#xff1a;指针数组 三&#xff1a;数组指针 四&#xff1a;数组参数 && 指针参数 五&#xff1a;函数指针 六&#xff1a;函数指针数组 七&#xff1a;函数指针数组的指针 八&#xff1a;回调函数 思维导…

json-server服务使用教程

目录标题 安装 json-server启动 json-server 本地服务 安装 json-server npm install -g json-server0.17.4json-server -v报错请参考&#xff1a;执行json-server -v报错 因为在此系统上禁止运行脚本。 启动 json-server 本地服务 查看本机IP&#xff1a;ipconfig Shift右…

MySQL-日志-优化

目录 介绍一下mysql 的日志 redo log 和binlog 的区别及应用场景 redo log 和 binlog 在恢复数据库有什么区别? redo log 是怎么实现持久化的? redo log除了崩溃恢复还有什么其他作用? &#xff08;顺序写&#xff09; redo log 怎么刷入磁盘的知道吗&#xff1f; 两阶…

JVM学习(day1)

JVM 运行时数据区 线程共享&#xff1a;方法区、堆 线程独享&#xff08;与个体“同生共死”&#xff09;&#xff1a;虚拟机栈、本地方法栈、程序计数器 程序计数器 作用&#xff1a;记录下次要执行的代码行的行号 特点&#xff1a;为一个没有OOM&#xff08;内存溢出&a…

深度学习DeepLearning二元分类 学习笔记

文章目录 类别区分变量与概念逻辑回归Sigmoid函数公式决策边逻辑损失函数和代价函数逻辑回归的梯度下降泛化过拟合的解决方案正则化 类别区分 变量与概念 决策边置信度阈值threshold过拟合欠拟合正则化高偏差lambda&#xff08;λ&#xff09; 线性回归受个别极端值影响&…

TemuAPI接口:获取商品详情功能

temu作为拼多多海外的跨境电商平台&#xff0c;已经在海外电商领域崭露头角&#xff0c;越来越多的外贸人选择temu作为发展平台。今天的接口可以用于获取temu平台的商品详情&#xff0c;包括价格、商品图片、规格、评论等内容&#xff0c;如有需要&#xff0c;请点击文末链接或…