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/nullif [ $? -ne 0 ];thenecho -e "\033[31mStarRocks BE需要CPU支持AVX2指令集才可启动,请更换至符合要求的x86架构服务器\033[0m"elseecho -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 ];thenecho -e "\033[31m若无特殊原因,建议您更换使用CentOS7部署StarRocks,该系统当前测试最为充分\033[0m"elseecho -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 ];thenecho -e "\033[31mStarRocks BE要求glibc版本最低为2.17才可启动,请升级glibc或使用更高内核版本的系统\033[0m"elif [ $glibc_version -ge 37 ];thenecho -e "\033[31m检测到较高的glibc版本,StarRocks BE或将无法启动,请更换或降级系统为CentOS7\033[0m"elseecho -e "\033[32msuccess\033[0m"fi
}function swap_check(){echo ""echo "############################ Swap检查 ############################"swap_number=$(cat /proc/sys/vm/swappiness)if [ $swap_number -ne 0 ];thenecho -e "\033[31m检查项1:使用swap分区可能影响查询性能,建议配置为不优先使用,临时配置命令:echo 0 | sudo tee /proc/sys/vm/swappiness\033[0m"elseecho -e "\033[32msuccess\033[0m"fiswap_file=$(free -m | grep -i swap | awk '{print $2}')if [ $swap_file -ne 0 ];thenecho -e "\033[31m检查项2:检查到swap分区未禁用,推荐禁用,临时禁用命令:swapoff -a\033[0m"elseecho -e "\033[32msuccess\033[0m"fi
}function kernel_check(){echo ""echo "########################### 内核参数检查 ##########################"om_number=$(cat /proc/sys/vm/overcommit_memory)if [ $om_number -ne 1 ];thenecho -e "\033[31m检查项1:推荐调整overcommit_memory=1,以允许内核分配所有的物理内存来保障程序稳定性,临时调整命令:echo 1 | sudo tee /proc/sys/vm/overcommit_memory\033[0m"elseecho -e "\033[32msuccess\033[0m"fimmap_number=$(cat /proc/sys/vm/max_map_count)if [ "$mmap_number" -lt 200000 ]; thenecho -e "\033[31m检查项2:推荐调整max_map_count=262144,来调大进程可拥有的内存映射区域的最大数量以保障程序稳定性,临时调整命令:echo 262144 | sudo tee /proc/sys/vm/max_map_count\033[0m"elseecho -e "\033[32msuccess\033[0m"fi
}function ulimit_files_check(){echo ""echo "####################### 进程最大打开文件数检查 ######################"ulimit_fs=$(ulimit -n)if [ $ulimit_fs -lt 65535 ];thenecho -e "\033[31m句柄数限制过小可能导致服务异常退出,完整调整命令:ulimit -n 655350 && echo -e '* soft nofile 655350\\\n* hard nofile 655350' >> /etc/security/limits.conf\033[0m"elseecho -e "\033[32msuccess\033[0m"fi
}function ulimit_process_check(){echo ""echo "####################### 用户最大可用进程数检查 ######################"ulimit_ps=$(ulimit -u)if [ $ulimit_ps -lt 65535 ];thenecho -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"elseecho -e "\033[32msuccess\033[0m"fi
}function fe_port_check(){echo ""echo "########################### FE端口检查 ###########################"# default port 8030,9010,9020,9030ports=$(ss -antpl | grep -E '8030|9010|9020|9030' | wc -l)if [ $ports -gt 0 ];thenecho -e "\033[31mFE需用的默认端口被占用,请检查或在部署时调整端口,检查命令:ss -antpl | grep -E '8030|9010|9020|9030'\033[0m"elseecho -e "\033[32msuccess\033[0m"fi
}function be_port_check(){echo ""echo "########################### BE端口检查 ###########################"# default port 9060,9050,8040,8060ports=$(ss -antpl | grep -E '9060|9050|8040|8060|9070' | wc -l)if [ $ports -gt 0 ];thenecho -e "\033[31mBE需用的默认端口被占用,请检查或在部署时调整端口,检查命令:ss -antpl | grep -E '9060|9050|8040|8060|9070'\033[0m"elseecho -e "\033[32msuccess\033[0m"fi
}function broker_port_check(){echo ""echo "######################### Broker端口检查 #########################"# default port 8000ports=$(ss -antpl | grep '8000' | wc -l)if [ $ports -gt 0 ];thenecho -e "\033[31mBroker需用的默认端口被占用,请检查或在部署时调整端口,检查命令:ss -antpl | grep '8000'\033[0m"elseecho -e "\033[32msuccess\033[0m"fi
}function firewalld_check(){echo ""echo "########################### 防火墙检查 ###########################"systemctl status firewalld | grep "running"  2>&1 >/dev/nullif [ $? -ne 0 ];thenecho -e "\033[32msuccess\033[0m"elseecho -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 ];thenecho -e "\033[32msuccess\033[0m"elseecho -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 ];thenecho -e "\033[32msuccess\033[0m"elseecho -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" ];thenecho -e "\033[32msuccess\033[0m"    elseecho -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" ];thenecho -e "\033[32msuccess\033[0m"elseecho -e "\033[31m检查项1:推荐禁用透明大页,临时禁用命令:echo never > /sys/kernel/mm/transparent_hugepage/enabled\033[0m" fidefrag_value=$(cat /sys/kernel/mm/transparent_hugepage/defrag | cut -d '[' -f2 | cut -d ']' -f1)if [ $defrag_value == "never" ];thenecho -e "\033[32msuccess\033[0m"elseecho -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/nullif [ $? -ne 0 ];thenecho -e "\033[31m未检测到ntp命令,StarRocks各FE节点间的时钟差大于5秒将无法启动,建议在部署前使用ntp对各节点进行时钟同步\033[0m"elseecho -e "\033[32msuccess\033[0m"fi
}function zone_check(){echo ""echo "############################ 时区检查 ############################"timedatectl | grep Asia/Shanghai 2>&1 >/dev/nullif [ $? -ne 0 ];thenecho -e "\033[31m检测到操作系统未使用Asia/Shanghai时区,不恰当的时区设置可能影响集群数据导入导出,调整命令:timedatectl set-timezone Asia/Shanghai && clock -w\033[0m"elseecho -e "\033[32msuccess\033[0m"fi
}function disk_check(){echo ""echo "########################## 磁盘容量检查 ##########################"# disk space > 80%n=0for var in `df -h | grep '^/dev/*' | awk '{print $5}' | sed 's/\([0-9]*\).*/\1/'`doif [ $var -gt 80 ];thenecho -e "\033[31m检测到存在磁盘剩余容量不足20%的情况,请确认磁盘空间充足后再进行集群部署,检查命令:df -h\033[0m"n+=1breakfidoneif [ $n -eq 0 ];thenecho -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 ];thenecho -e "\033[31m服务器内存较小,为保证集群性能和稳定性,生产环境的建议内存为32G+\033[0m"elseecho -e "\033[32msuccess\033[0m"fi
}function tool_check(){echo ""echo "######################### Netstat命令检查 ########################"rpm -qa | grep net-tools 2>&1 >/dev/nullif [ $? -ne 0 ];thenecho -e "\033[31m未检测到netstat命令,StarGo当前需依赖netstat检测通信,否则无法正常使用。安装命令:yum -y install net-tools\033[0m"elseecho -e "\033[32msuccess\033[0m"fi
}function check(){cpu_checklinuxversion_checkglibc_checkswap_checkkernel_checkulimit_files_checkulimit_process_checkfe_port_checkbe_port_checkbroker_port_checkfirewalld_checktcp_abort_on_overflow_checksomaxconn_checkselinux_checkhugepage_checkntp_checkzone_checkdisk_checkmem_checktool_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/

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

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

相关文章

拓展神经网络八股(入门级)

自制数据集 minst等数据集是别人打包好的,如果是本领域的数据集。自制数据集。 替换 把图片路径和标签文件输入到函数里,并返回输入特征和标签 要生成.npy格式的数据集,在进行读入训练集。 只需要把图片灰度值数据拼接到特征列表&#xff0…

进程间通信(下)

system V共享内存 共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据 共享内存示意图 通过上面的图,我们不难想到…

linux的学习(三):用户权限,查找,压缩命令

简介 关于用户权限,查找和压缩解压缩命令的简单使用 用户管理命令 useradd useradd:添加新用户,要root权限才能使用 useradd -g 组名 用户名:可以添加到组 创建成功会在 /home下有用户的主目录 passwd passwd 用户名&#x…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第60集-agent训练资讯APP重点推荐AI资讯内容(含视频)

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第60集-agent训练资讯APP重点推荐AI资讯内容(含视频) 使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。d…

php反序列化--2--PHP反序列化漏洞基础知识

一、什么是反序列化? 反序列化是将序列化的字符串还原为PHP的值的过程。 二、如何反序列化 使用unserialize()函数来执行反序列化操作 代码1: $serializedStr O:8:"stdClass":1:{s:4:"data";s:6:"sample";}; $origina…

Android Service的解析

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 Android服务,即Service,是Android四大组件之一,是一种程序后台运行的方案&am…

新增支持GIS地图、数据模型引擎升级、增强数据分析处理能力

为了帮助企业提升数据分析处理能力,Smartbi重点围绕产品易用性、用户体验、操作便捷性进行了更新迭代,同时重磅更新了体验中心。用更加匹配项目及业务需求的Smartbi,帮助企业真正发挥数据的价值,赋能决策经营与管理。 Smartbi用户…

js中使用原型链增加方法后,遍历对象的key-value时会遍历出方法

原因:js使用原型链实现方法时,这个方法默认是可迭代的,所以在遍历时就会被遍历出来, 例: Array.prototype.remove function(n){return this.slice(0,n).concat(this.slice(n1,this.length));}var cc ["cccaaaa…

wifi信号处理的CRC8、CRC32

🧑🏻个人简介:具有3年工作经验,擅长通信算法的MATLAB仿真和FPGA实现。代码事宜,私信博主,程序定制、设计指导。 🚀wifi信号处理的CRC8、CRC32 目录 🚀1.CRC概述 🚀1.C…

定时器的计数模式 定时器中断时钟配置

目录 一,定时器的计数模式 二,定时器中断时钟的配置 三,输入和输出原理 四,PWM波的小简介 一,定时器的计数模式 1.1 定时器的计数模式分别有三种 1.2 定时器溢出的时间(中断,事件产生的时间…

QT多线程下,信号槽分别在什么线程中执行,如何控制?

可以通过connect的第五个参数进行控制信号槽执行时所在的线程 connect有几种连接方式,直接连接、队列连接和 自动连接 直接连接(Qt::DirectConnection):信号槽在信号发出者所在的线程中执行 队列连接(Qt::QueuedConn…

python初学者知识点笔记更新

文章目录 1.main函数入口2.__init__.py 文件作用3.from .applications import server解释4.变量没有修饰,直接创建使用1. 内置数据类型和函数2. 类和对象3.总结 5.mod app.__module__6.集合对比区分集合类型:混合集合类型 7.安装包失败 1.main函数入口 …

vitest 单元测试应用与配置

vitest 应用与配置 一、简介 Vitest 旨在将自己定位为 Vite 项目的首选测试框架,即使对于不使用 Vite 的项目也是一个可靠的替代方案。它本身也兼容一些Jest的API用法。 二、安装vitest // npm npm install -D vitest // yarn yarn add -D vitest // pnpm pnpm …

Linux 06-01:简易shell编写

考虑一下这个与shell典型的互动:ls、ps 用下图的时间轴来表示事件的发生次序。其中时间从左向右。shell由标识为sh的方块代表,它随着时间的流逝从左向右移动。shell从用户读入字符串"ls"。shell建立一个新的进程,然后在那个进程中运…

vs code 启动react项目,执行npm start报错原因分析

1.执行 npm start错误信息:npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 1 npm start ~~~ CategoryInfo …

2024年5000元投影仪推荐:五千元最值得买的三款家用激光投影推荐

五千元是很多家庭购买投影仪会选择的价位,这个价位的投影一般属于中高端产品,如果懂配置,知道怎么选的朋友可以选到一款性价比颇高的投影,但是如果不会选不懂配置可能会花冤枉钱。所以五千元价位的投影该如何选择?市面…

企业知识库用不起来?试一下用HelpLook同步钉钉组织架构

提升企业管理和协同效率已成为增强竞争力的关键。企业通过知识管理,搭建内部知识库,将分散的经验和知识转化为系统化流程,减少重复解释,促进业务高效运作。这为企业提供了坚实的基础。 企业知识库面临的挑战 尽管传统知识库内容丰…

Jeecgboot vue3的选择部门组件JSelectDept如何实现只查询本级以及子级的部门

jeecgboot vue3的文档:地址 JSelectDept组件实现了弹窗然后选择部门返回的功能,但部门是所有数据,不符合需求,所以在原有代码上稍微改动了一下 组件属性值如下: 当serverTreeDatafalse的时候,从后端查询…

2024年7月9日~2024年7月15日周报

目录 一、前言 二、完成情况 2.1 特征图保存方法 2.1.1 定义网络模型 2.1.2 定义保存特征图的钩子函数 2.1.3 为模型层注册钩子 2.1.4 运行模型并检查特征图 2.2 实验情况 三、下周计划 一、前言 本周的7月11日~7月14日参加了机器培训的学习讨论会,对很多概…

通过MATLAB控制TI毫米波雷达的工作状态之TLV数据解析及绘制

前言 前一章博主介绍了如何基于设计视图中的这些组件结合MATLAB代码来实现TI毫米波雷达数据的实时采集。这一章将在此基础上实现TI毫米波雷达的TLV数据解析。过程中部分算法会涉及到一些简单的毫米波雷达相关算法,需要各位有一定的毫米波雷达基础。 TLV数据之协议解析 紧着…