StarRocks 部署:依赖环境

StarRocks 介绍:极速全场景 MPP数据库starrocks介绍-CSDN博客

StarRocks 官方建议部署在x86服务器上,但是根据我们的部署经验,国产的ARM服务器上也可以部署,比如华为 鲲鹏920处理器 ,国产系统也可以部署,比如阿里龙溪,只不过部署过程比较复杂。以下是常规部署。


目录

部署前提条件

硬件​

CPU​

内存​

存储​

网络​

操作系统​

软件​

检查环境配置

端口​

[FE 端口​](#FE 端口)

[BE 端口​](#BE 端口)

[CN 端口​](#CN 端口)

主机名​

[JDK 设置​](#JDK 设置)

[CPU Scaling Governor​](#CPU Scaling Governor)

内存设置​

[Memory Overcommit​](#Memory Overcommit)

[Transparent Huge Pages​](#Transparent Huge Pages)

[Swap Space​](#Swap Space)

Swappiness​

存储设置​

SATA​

[SSD 和 NVMe​](#SSD 和 NVMe)

SELinux​

防火墙​

[LANG 变量​](#LANG 变量)

时区​

[ulimit 设置​](#ulimit 设置)

文件系统配置​

网络配置​

tcp_abort_on_overflow​

somaxconn​

[NTP 设置​](#NTP 设置)

高并发配置​

max_map_count​

其他​


部署前提条件

硬件

CPU

StarRocks 依靠 AVX2 指令集充分发挥其矢量化能力。因此,在生产环境中,建议将 StarRocks 部署于 x86 架构 CPU 的服务器上。

可以在终端中运行以下命令来检查 CPU 是否支持 AVX2 指令集:

复制代码
cat /proc/cpuinfo | grep avx2

内存

通常,FE 服务不会消耗大量的 CPU 和内存资源。建议您为每个 FE 节点分配 8 个 CPU 内核和 16 GB RAM。

与 FE 服务不同,如果应用程序需要在大型数据集上处理高度并发或复杂的查询,BE 服务可能会使用大量 CPU 和内存资源。因此,建议为每个 BE 节点分配 16 个 CPU 内核和 64 GB RAM。

存储

StarRocks 支持 HDD 和 SSD 作为存储介质。

在实时数据分析场景、以及涉及大量数据扫描或随机磁盘访问的场景下,强烈建议选择 SSD 作为存储介质。

在涉及主键表持久化索引的场景中,必须使用 SSD 作为存储介质。

网络

建议使用万兆网络连接(10 Gigabit Ethernet,简称 10 GE)确保 StarRocks 集群内数据能够跨节点高效传输。

操作系统

StarRocks 支持在 Red Hat Enterprise Linux 7.9、CentOS Linux 7.9 或 Ubuntu Linux 22.04 上部署。

软件

您必须在服务器上安装 JDK 8 以运行 StarRocks。v2.5 及以上版本建议安装 JDK 11。

注意

  • StarRocks 不支持 JRE。
  • 如果您需要在 Ubuntu 22.04 上部署 StarRocks,则必须安装 JDK 11。

按照以下步骤安装 JDK 8:

  1. 进入需要安装 JDK 的路径。

  2. 运行以下命令下载 JDK:

    wget --no-check-certificate --no-cookies
    --header "Cookie: oraclelicense=accept-securebackup-cookie"
    http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz

检查环境配置

本文列出了在部署 StarRocks 之前需要检查并配置的所有环境和系统配置项。正确设置这些配置项可以确保集群的高可用并提升性能。

端口

StarRocks 为不同的服务使用特定的端口。如果您在这些实例上部署了其他服务,请检查这些端口是否被占用。

FE 端口

在用于 FE 部署的实例上,您需要检查以下端口:

  • 8030:FE HTTP Server 端口(http_port
  • 9020:FE Thrift Server 端口(rpc_port
  • 9030:FE MySQL Server 端口(query_port
  • 9010:FE 内部通讯端口(edit_log_port
  • 6090:FE 云原生元数据服务 RPC 监听端口(cloud_native_meta_port

在 FE 实例上执行如下命令查看这些端口是否被占用:

复制代码
netstat -tunlp | grep 8030
netstat -tunlp | grep 9020
netstat -tunlp | grep 9030
netstat -tunlp | grep 9010
netstat -tunlp | grep 6090

BE 端口

在用于 BE 部署的实例上,您需要检查以下端口:

  • 9060:BE Thrift Server 端口(be_port
  • 8040:BE HTTP Server 端口(be_http_port
  • 9050:BE 心跳服务端口(heartbeat_service_port
  • 8060:BE bRPC 端口(brpc_port
  • 9070:BE 和 CN 的额外 Agent 服务端口。(starlet_port

在 BE 实例上执行如下命令查看这些端口是否被占用:

复制代码
netstat -tunlp | grep 9060
netstat -tunlp | grep 8040
netstat -tunlp | grep 9050
netstat -tunlp | grep 8060
netstat -tunlp | grep 9070

CN 端口

在用于 CN 部署的实例上,您需要检查以下端口:

  • 9060:CN Thrift Server 端口(be_port
  • 8040:CN HTTP Server 端口(be_http_port
  • 9050:CN 心跳服务端口(heartbeat_service_port
  • 8060:CN bRPC 端口(brpc_port
  • 9070:BE 和 CN 的额外 Agent 服务端口。(starlet_port

在 CN 实例上执行如下命令查看这些端口是否被占用:

复制代码
netstat -tunlp | grep 9060
netstat -tunlp | grep 8040
netstat -tunlp | grep 9050
netstat -tunlp | grep 8060
netstat -tunlp | grep 9070

主机名

如需为您的 StarRocks 集群启用 FQDN 访问,您必须为每个实例设置一个主机名。

在每个实例的 /etc/hosts 文件中,您必须指定集群中其他实例的 IP 地址和相应的主机名。

注意

/etc/hosts 文件中的所有 IP 地址都必须是唯一。

JDK 设置

StarRocks 依靠环境变量 JAVA_HOME 定位实例上的 Java 依赖项。

运行以下命令查看环境变量 JAVA_HOME

复制代码
echo $JAVA_HOME

按照以下步骤设置 JAVA_HOME

  1. /etc/profile 文件中设置 JAVA_HOME

    复制代码
    sudo  vi /etc/profile
    # 将 <path_to_JDK> 替换为 JDK 的安装路径。
    export JAVA_HOME=<path_to_JDK>
    export PATH=$PATH:$JAVA_HOME/bin
  2. 使变更生效:

    复制代码
    source /etc/profile

运行以下命令验证变更是否成功:

复制代码
java -version

CPU Scaling Governor

该配置项为可选配置项。如果您的 CPU 不支持 Scaling Governor,则可以跳过该项。

CPU Scaling Governor 用于控制 CPU 能耗模式。如果您的 CPU 支持该配置项,建议您将其设置为 performance 以获得更好的 CPU 性能:

复制代码
echo 'performance' | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

内存设置

Memory Overcommit

Memory Overcommit 允许操作系统将额外的内存资源分配给进程。建议您启用 Memory Overcommit。

复制代码
# 修改配置文件。
cat >> /etc/sysctl.conf << EOF
vm.overcommit_memory=1
EOF
# 使修改生效。
sysctl -p

Transparent Huge Pages

Transparent Huge Pages 默认启用。因其会干扰内存分配,进而导致性能下降,建议您禁用此功能。

复制代码
# 临时变更。
echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
# 永久变更。
cat >> /etc/rc.d/rc.local << EOF
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
   echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo madvise > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
chmod +x /etc/rc.d/rc.local

Swap Space

建议您禁用 Swap Space。

检查并禁用 Swap Space 操作步骤如下:

  1. 关闭 Swap Space。

    复制代码
    swapoff /<path_to_swap_space>
    swapoff -a
  2. /etc/fstab 文件中删除 Swap Space 信息。

    复制代码
    /<path_to_swap_space> swap swap defaults 0 0
  3. 确认 Swap Space 已关闭。

    复制代码
    free -m

Swappiness

Swappiness 会对性能造成影响,因此建议您禁用 Swappiness。

复制代码
# 修改配置文件。
cat >> /etc/sysctl.conf << EOF
vm.swappiness=0
EOF
# 使修改生效。
sysctl -p

存储设置

建议您根据所选用的存储介质来确定合适的调度算法。

您可以使用以下命令检查您当前使用的调度算法:

复制代码
cat /sys/block/${disk}/queue/scheduler
# 例如,运行 cat /sys/block/vdb/queue/scheduler

推荐您为 SATA 磁盘使用 mq-deadline 调度算法,为 NVMe 或 SSD 磁盘使用 kyber 调度算法。

SATA

mq-deadline 调度算法适合 SATA 磁盘。

复制代码
# 临时变更。
echo mq-deadline | sudo tee /sys/block/${disk}/queue/scheduler
# 永久变更。
cat >> /etc/rc.d/rc.local << EOF
echo mq-deadline | sudo tee /sys/block/${disk}/queue/scheduler
EOF
chmod +x /etc/rc.d/rc.local

SSD 和 NVMe

  • 如果您的 NVMe 或 SSD 磁盘支持 kyber 调度算法。

    复制代码
    # 临时变更。
    echo kyber | sudo tee /sys/block/${disk}/queue/scheduler
    # 永久变更。
    cat >> /etc/rc.d/rc.local << EOF
    echo kyber | sudo tee /sys/block/${disk}/queue/scheduler
    EOF
    chmod +x /etc/rc.d/rc.local
  • 如果您的系统不支持 SSD 和 NVMe 的 kyber 调度算法,建议您使用 none(或 noop)调度算法。

    复制代码
    # 临时变更。
    echo none | sudo tee /sys/block/vdb/queue/scheduler
    # 永久变更。
    cat >> /etc/rc.d/rc.local << EOF
    echo none | sudo tee /sys/block/${disk}/queue/scheduler
    EOF
    chmod +x /etc/rc.d/rc.local

SELinux

建议您禁用 SELinux。

复制代码
# 临时变更。
setenforce 0
# 永久变更。
sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
sed -i 's/SELINUXTYPE/#SELINUXTYPE/' /etc/selinux/config

防火墙

如果您启用了防火墙,请为 FE、BE 和 Broker 开启内部端口。

复制代码
systemctl stop firewalld.service
systemctl disable firewalld.service

LANG 变量

您需要使用以下命令手动检查和配置 LANG 变量:

复制代码
# 修改配置文件。
echo "export LANG=en_US.UTF8" >> /etc/profile
# 使修改生效。
source /etc/profile

时区

请根据您所在的实际时区设置此项。

以下示例将时区设置为 /Asia/Shanghai

复制代码
cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock

ulimit 设置

如果最大文件描述符最大用户进程的值设置得过小,StarRocks 运行可能会出现问题。建议您将系统资源上限调大。

复制代码
cat >> /etc/security/limits.conf << EOF
* soft nproc 65535
* hard nproc 65535
* soft nofile 655350
* hard nofile 655350
* soft stack unlimited
* hard stack unlimited
* hard memlock unlimited
* soft memlock unlimited
EOF

cat >> /etc/security/limits.d/20-nproc.conf << EOF 
*          soft    nproc     65535
root       soft    nproc     65535
EOF

文件系统配置

建议您使用 ext4 或 xfs 日志文件系统。您可以运行以下命令来检查挂载类型:

复制代码
df -Th

网络配置

tcp_abort_on_overflow

如果系统当前因后台进程无法处理的新连接而溢出,则允许系统重置新连接:

复制代码
# 修改配置文件。
cat >> /etc/sysctl.conf << EOF
net.ipv4.tcp_abort_on_overflow=1
EOF
# 使修改生效。
sysctl -p

somaxconn

设置监听 Socket 队列的最大连接请求数为 1024

复制代码
# 修改配置文件。
cat >> /etc/sysctl.conf << EOF
net.core.somaxconn=1024
EOF
# 使修改生效。
sysctl -p

NTP 设置

需要在 StarRocks 集群各节点之间配置时间同步,从而保证事务的线性一致性。您可以使用 pool.ntp.org 提供的互联网时间服务,也可以使用离线环境内置的 NTP 服务。例如,您可以使用云服务提供商提供的 NTP 服务。

  1. 查看 NTP 时间服务器或 Chrony 服务是否存在。

    复制代码
    rpm -qa | grep ntp
    systemctl status chronyd
  2. 如不存在,运行以下命令安装 NTP 时间服务器。

    复制代码
    sudo yum install ntp ntpdate && \
    sudo systemctl start ntpd.service && \
    sudo systemctl enable ntpd.service
  3. 检查 NTP 服务。

    复制代码
    systemctl list-unit-files | grep ntp
  4. 检查 NTP 服务连接和监控状态。

    复制代码
    netstat -tunlp | grep ntp
  5. 检查服务是否与 NTP 服务器同步。

    复制代码
    ntpstat
  6. 检查网络中的 NTP 服务器。

    复制代码
    ntpq -p

高并发配置

如果您的 StarRocks 集群负载并发较高,建议您进行如下配置.

max_map_count

进程可以拥有的 VMA(虚拟内存区域)的数量。将该值调整为 262144

复制代码
# 修改配置文件。
cat >> /etc/sysctl.conf << EOF
vm.max_map_count = 262144
EOF
# 使修改生效。
sysctl -p

其他

复制代码
echo 120000 > /proc/sys/kernel/threads-max
echo 200000 > /proc/sys/kernel/pid_max
相关推荐
喝醉酒的小白1 小时前
MySQL响应慢是否由堵塞或死锁引起?
数据库
Pasregret1 小时前
04-深入解析 Spring 事务管理原理及源码
java·数据库·后端·spring·oracle
jnrjian1 小时前
归档重做日志archived log (明显) 比redo log重做日志文件小
数据库·oracle
学习至死qaq1 小时前
windows字体在linux访问异常
linux·运维·服务器
TDengine (老段)1 小时前
TDengine 中的命名与边界
大数据·数据库·物联网·oracle·时序数据库·tdengine·iotdb
谁家有个大人2 小时前
MYSQL中对行与列的操作
数据库·mysql
haoranyyy2 小时前
mac环境中Nginx安装使用 反向代理
linux·服务器·nginx
JCBP_2 小时前
数据结构3
服务器·c语言·数据结构·vscode
0000ysl2 小时前
数据库基础-函数&约束
数据库
JavaPub-rodert3 小时前
Etcd用的是Raft算法
数据库·github·etcd·raft