StarRocks部署高可用 FE 集群

时间:2024-07-13 16:03:58
#!/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