合 StarRocks企业级安装部署
前提条件
在部署 StarRocks 之前,请确保如下环境要求已满足。
分类 | 描述 | 说明 |
---|---|---|
硬件要求 | 集群至少拥有两台物理或虚拟节点。 -BE 节点 CPU 需支持 AVX2 指令集。 各节点间需要通过万兆网卡及万兆交换机连接。 | FE 节点建议配置 8 核 或以上 CPU,16GB 或以上内存。 BE 节点建议配置 16 核 或以上 CPU,64GB 或以上内存。 通过运行 cat /proc/cpuinfo |grep avx2 命令查看节点 CPU 支持的指令集,若有结果返回则表明 CPU 支持 AVX2 指令集。 |
操作系统 | Linux kernel 3.10 以上。 | |
软件要求 | 所有节点需安装 Java Development Kit(1.8 或以上,推荐使用1.8)。 客户端节点需安装 MySQL 客户端(5.5 或以上)。 | |
系统环境 | 集群时钟需保持同步。 用户需要有设置 ulimit -n 权限。 |
说明
- 依据不同的工作负载复杂性,StarRocks 每个 CPU 线程每秒可以处理 10M 至 100M 行数据。您可以据此估计集群中需要多少 CPU 线程能够满足您的要求。而 StarRocks 在存储数据时利用列存储和压缩,可以达到 4-10 倍的压缩比,您可以使用该数据来估计集群所需的存储量。
- StarRocks 仅支持 JDK 作为依赖,不支持使用 JRE。
环境配置
为了实现集群高可用,建议集群最低3个节点,FE和BE分开部署也可以混合部署。
集群部署注意事项
假设node01、node02、node03均为符合要求的服务器,生产环境最小部署架构示例:
其中,node01部署一个FE作为Leader,node02部署一个FE Observer提供元数据备份。集群三个节点各部署一个BE,可保证生产环境数据使用StarRocks默认的三副本存储(测试环境可以使用单副本)。
FE的数量及是否需要FE的高可用
FE的Follower要求为奇数个,且并不建议部署太多,通常我们推荐部署1个或3个Follower。在三个Follower时,即可实现高可用(HA)。此时,若Leader节点进程挂掉或与集群脱离通信,其他2个Follower节点会通过bdbje协议快速重新选主出一个Leader,保证集群的正常工作(FE Leader节点异常仅影响集群写入,不会对集群对外的查询功能有影响)。这里注意,集群中需要有半数以上的Follower节点存活,才可进行FE的重新选主。
一般情况下,相对更推荐部署1 Follower+多Observer的FE架构,通过增加Observer来扩展集群的高并发读服务能力。
通常,一个FE节点可以应对10-20台BE节点,我们建议总的FE节点数量在10个以下,而一般3个即可满足绝大部分业务需求。
BE实例数量
BE实例数量直接决定了集群整体查询延迟,生产环境BE数量建议至少为3个。StarRocks建表时默认为3副本,生产环境下我们也推荐使用3副本数据。由于StarRocks的副本策略,副本数不能大于BE实例数(不同Host),所以为保障数据安全,建议至少部署三个BE实例(不同Host)。
Broker实例数量
通常与BE混布,与BE数量保持相同,并建议所有的Broker使用相同的名称,这样在执行Broker任务时可以并行使用多个Broker实例。
如果我们的业务中不需要和Hadoop类的产品对接,那么也可以不部署Broker。
FE与BE是否混布
前面已经提到,单台机器下,同集群FE不能混布,BE虽然能混布但是没有价值。FE和BE是可以混布的,但生产环境下需要注意CPU、内存等资源竞争问题,并保证元数据目录和数据目录分属不同磁盘。
环境申请
IP | 主机名 | 角色 |
---|---|---|
172.72.2.50 | starrocks50 | FE Leader |
172.72.2.51 | starrocks51 | BE + Broker + FE Observer |
172.72.2.52 | starrocks52 | BE + Broker |
172.72.2.53 | starrocks53 | BE + Broker |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | -- 网卡 docker network create --subnet=172.72.0.0/16 lhrnw docker rm -f starrocks50 docker run -itd --name starrocks50 -h starrocks50 \ --net=lhrnw --ip 172.72.2.50 \ -p 8031:8030 -p 9031:9030 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true \ --add-host='starrocks50:172.72.2.50' \ --add-host='starrocks51:172.72.2.51' \ --add-host='starrocks52:172.72.2.52' \ --add-host='starrocks53:172.72.2.53' \ lhrbest/lhrcentos76:9.0 \ /usr/sbin/init docker rm -f starrocks51 docker run -itd --name starrocks51 -h starrocks51 \ --net=lhrnw --ip 172.72.2.51 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true \ --add-host='starrocks50:172.72.2.50' \ --add-host='starrocks51:172.72.2.51' \ --add-host='starrocks52:172.72.2.52' \ --add-host='starrocks53:172.72.2.53' \ lhrbest/lhrcentos76:9.0 \ /usr/sbin/init docker rm -f starrocks52 docker run -itd --name starrocks52 -h starrocks52 \ --net=lhrnw --ip 172.72.2.52 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true \ --add-host='starrocks50:172.72.2.50' \ --add-host='starrocks51:172.72.2.51' \ --add-host='starrocks52:172.72.2.52' \ --add-host='starrocks53:172.72.2.53' \ lhrbest/lhrcentos76:9.0 \ /usr/sbin/init docker rm -f starrocks53 docker run -itd --name starrocks53 -h starrocks53 \ --net=lhrnw --ip 172.72.2.53 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true \ --add-host='starrocks50:172.72.2.50' \ --add-host='starrocks51:172.72.2.51' \ --add-host='starrocks52:172.72.2.52' \ --add-host='starrocks53:172.72.2.53' \ lhrbest/lhrcentos76:9.0 \ /usr/sbin/init docker cp -q /soft/StarRocks-2.5.3.tar.gz starrocks50:/soft/ docker cp -q /soft/StarRocks-2.5.3.tar.gz starrocks51:/soft/ docker cp -q /soft/StarRocks-2.5.3.tar.gz starrocks52:/soft/ docker cp -q /soft/StarRocks-2.5.3.tar.gz starrocks53:/soft/ |
安装包部署
安装包下载: https://www.mirrorship.cn/zh-CN/download/community
需要放在每个节点上。
1 2 3 4 5 6 7 8 9 10 11 | wget https://releases.mirrorship.cn/starrocks/StarRocks-3.0.0.tar.gz tar -zxf /soft/StarRocks-2.5.3.tar.gz -C /usr/local/ ln -s /usr/local/StarRocks-2.5.3 /usr/local/starrocks mkdir -p /usr/local/starrocks/fe/meta mkdir -p /usr/local/starrocks/be/storage chown root.root -R /usr/local/starrocks/ chown root.root -R /usr/local/StarRocks-2.5.3/ |
操作系统配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | echo 0 | sudo tee /proc/sys/vm/swappiness echo 1 | sudo tee /proc/sys/vm/overcommit_memory sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config setenforce 0 systemctl stop firewalld systemctl disable firewalld getenforce cat >> /etc/security/limits.conf <<"EOF" * soft nofile 65535 * hard nofile 65535 EOF ulimit -HSn 65535 cat >> /etc/sysctl.conf <<"EOF" vm.overcommit_memory=1 vm.swappiness=0 EOF sysctl -p |
安装jdk
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | -- 至少需要Java jdk 1.8 yum -y install java-1.8.0-openjdk-devel.x86_64 java -version ln -s /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.372.b07-1.el7_9.x86_64 /usr/local/java-1.8.0 cat >> /root/.bashrc <<"EOF" export STARROCKS_HOME=/usr/local/starrocks export JAVA_HOME=/usr/local/java-1.8.0 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin:$STARROCKS_HOME/fe/bin:$STARROCKS_HOME/be/bin EOF source /root/.bashrc |
部署FE节点
FE 是StarRocks的前端节点,负责管理元数据,管理客户端连接,进行查询规划,查询调度等工作。就是管理节点。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | -- 50和51都执行 echo "priority_networks = 172.72.2.0/24" >> ${STARROCKS_HOME}/fe/conf/fe.conf -- 先在50启动 /usr/local/starrocks/fe/bin/start_fe.sh --daemon -- 检查 tail -f ${STARROCKS_HOME}/fe/log/fe.log ps -ef|grep java jps netstat -tulnp | grep java yum -y install mysql # 用户名为 root,密码为空 mysql -h 172.72.2.50 -P9030 -uroot SHOW frontends -- 添加OBSERVER ALTER SYSTEM ADD OBSERVER "172.72.2.51:9010"; -- 在51启动,首次启动需要添加--helper选项,后续启动不再需要--helper /usr/local/starrocks/fe/bin/start_fe.sh --helper 172.72.2.50:9010 --daemon mysql> show frontends; +--------------------------------+-------------+-------------+----------+-----------+---------+----------+-----------+------+-------+-------------------+---------------------+----------+--------+---------------------+---------------+ | Name | IP | EditLogPort | HttpPort | QueryPort | RpcPort | Role | ClusterId | Join | Alive | ReplayedJournalId | LastHeartbeat | IsHelper | ErrMsg | StartTime | Version | +--------------------------------+-------------+-------------+----------+-----------+---------+----------+-----------+------+-------+-------------------+---------------------+----------+--------+---------------------+---------------+ | 172.72.2.51_9010_1680156017280 | 172.72.2.51 | 9010 | 8030 | 9030 | 9020 | OBSERVER | 291439712 | true | true | 141 | 2023-03-30 14:04:45 | false | | 2023-03-30 14:03:58 | 2.5.3-46bf084 | | 172.72.2.50_9010_1680155832528 | 172.72.2.50 | 9010 | 8030 | 9030 | 9020 | LEADER | 291439712 | true | true | 142 | 2023-03-30 14:04:45 | true | | 2023-03-30 13:57:22 | 2.5.3-46bf084 | +--------------------------------+-------------+-------------+----------+-----------+---------+----------+-----------+------+-------+-------------------+---------------------+----------+--------+---------------------+---------------+ 2 rows in set (0.08 sec) |
部署 FE 高可用集群
参考:https://docs.starrocks.io/zh-cn/latest/administration/Deployment
FE 的高可用集群采用主从复制架构,可避免 FE 单点故障。FE 采用了类 Paxos 的 Berkeley DB Java Edition(BDBJE)协议完成选主,日志复制和故障切换。在 FE 集群中,多实例分为两种角色:Follower 和 Observer。前者为复制协议的可投票成员,参与选主和提交日志,一般数量为奇数(2n+1),使用多数派(n+1)确认,可容忍少数派(n)故障;后者属于非投票成员,用于异步订阅复制日志,Observer 的状态落后于 Follower,类似其他复制协议中的 Learner 角色。
FE 集群从 Follower 中自动选出 Leader 节点,所有更改状态操作都由 Leader 节点执行。最新状态可以从 Leader FE 节点读取。更改操作可以由非 Leader 节点发起,继而转发给 Leader 节点执行,非 Leader 节点在复制日志中的 LSN 记录最近一次更改操作。读操作可以直接在非 Leader 节点上执行,但需要等待非 Leader 节点的状态已经同步到最近一次更改操作的 LSN,因此非 Leader 节点的读写操作满足顺序一致性。Observer 节点能够增加 FE 集群的读负载能力,对时效性要求放宽的非紧要用户可以选择读 Observer 节点。
注意
- FE 节点之间的时钟相差不能超过 5s。如果节点之间存在较大时钟差,请使用 NTP 协议校准时间。
- 一台机器上只可以部署单个FE节点。所有FE节点的http_port需要相同。
- 所有 FE 节点的
http_port
需保持相同,因此一台机器无法错开端口部署某个集群的多个 FE 节点。
使用 MySQL 客户端连接已有 FE 节点,添加新 FE 节点的信息,包括角色、IP 地址、以及 Port。
1 2 | ALTER SYSTEM ADD FOLLOWER "172.72.2.137:9010"; ALTER SYSTEM ADD FOLLOWER "172.72.2.138:9010"; |
- 添加 Follower FE 节点。
1 | ALTER SYSTEM ADD FOLLOWER "host:port"; |
- 添加 Observer FE 节点。
1 | ALTER SYSTEM ADD OBSERVER "host:port"; |
参数:
host
:机器的 IP 地址。如果机器存在多个 IP 地址,则该项为priority_networks
设置项下设定的唯一通信 IP 地址。port
:edit_log_port
设置项下设定的端口,默认为9010
。
出于安全考虑,StarRocks 的 FE 节点和 BE 节点只会监听一个 IP 地址进行通信。如果一台机器有多块网卡,StarRocks 有可能无法自动找到正确的 IP 地址。例如,通过 ifconfig
命令查看到 eth0
IP 地址为 192.168.1.1
,docker0
IP 地址为 172.72.2.1
,您可以设置 192.168.1.0/24
子网以指定使用 eth0
作为通信 IP。此处采用 CIDR 的表示方法来指定 IP 所在子网范围,以便在所有的 BE 及 FE 节点上使用相同的配置。
如出现错误,您可以通过命令删除相应 FE 节点。
- 删除 Follower FE 节点。
1 | ALTER SYSTEM DROP FOLLOWER "host:port"; |
- 删除 Observer FE 节点。
1 | ALTER SYSTEM drop OBSERVER "host:port"; |