Mac M1(ARM) Docker 部署 StarRocks Cluster

1,638 阅读3分钟

Mac M1 为 ARM 架构,不能直接使用 StarRocks 官方的镜像,但可以从官方提供的编译产物进行构建

StarRocks 官方从 2.5.4+, 3.0.0+ 开始提供 ARM 编译产物,可以从 starrocks/artifacts-centos7 镜像中获取,本文以 2.5-latest 为例

一、拉取 artifacts-centos7 镜像

docker starrocks/artifacts-centos7:2.5-latest

二、准备部署文件

假设将部署文件解压到 ~/my-db/starrocks

cd ~/my-db
docker run --rm starrocks/artifacts-centos7:2.5-latest \  
    tar -cf - -C /release . | tar -xvf -

查看部署文件

tree -d -L 3
.
├── be_artifacts
│   └── be
│       ├── bin
│       ├── conf
│       ├── lib
│       └── www
├── broker_artifacts
│   └── apache_hdfs_broker
│       ├── bin
│       ├── conf
│       └── lib
└── fe_artifacts
    └── fe
        ├── bin
        ├── conf
        ├── lib
        ├── spark-dpp
        └── webroot

三、编写 Dockerfile

FE Dockerfile

~/my-db/starrocks/docker 创建 fe/Dockerfile

FROM centos:centos7

ARG STARROCKS_ROOT=/opt/starrocks

RUN yum update -y && \
    yum install -y java-11-openjdk java-11-openjdk-devel mysql-client \
        curl vim tree net-tools less linux-tools-common linux-tools-generic && \
    rm -rf /var/lib/apt/lists/*

# Run as root by default.
USER root

RUN JAVA_INSTALL_DIR="/usr/lib/jvm/$(rpm -aq | grep java-11-openjdk-11)" && \
    echo "export JAVA_HOME=$JAVA_INSTALL_DIR" >> ~/.bashrc && \
    source ~/.bashrc

# Switch to work directory.
WORKDIR $STARROCKS_ROOT

COPY fe_artifacts/fe/ fe/

RUN mkdir fe/meta

CMD ["bash", "-c", "fe/bin/start_fe.sh", "--daemon"]

BE Dockerfile

~/my-db/starrocks/docker 创建 be/run_scripts.sh,用于配置及启动 BE

启用 IP 地址访问时,必须在配置文件中添加配置项 priority_networks,为 BE 节点分配一个专有的 IP 地址

#!/bin/bash
set -euo pipefail

echo "priority_networks = $PRIORITY_NETWORKS" >> /opt/starrocks/be/conf/be.conf
bash -c /opt/starrocks/be/bin/start_be.sh --daemon

~/my-db/starrocks/docker 创建 be/Dockerfile

FROM centos:centos7

ARG STARROCKS_ROOT=/opt/starrocks

RUN yum update -y && \
    yum install -y java-11-openjdk java-11-openjdk-devel mysql-client \
        curl vim tree net-tools less linux-tools-common linux-tools-generic && \
    rm -rf /var/lib/apt/lists/*


# Run as root by default.
USER root

RUN JAVA_INSTALL_DIR="/usr/lib/jvm/$(rpm -aq | grep java-11-openjdk-11)" && \
    echo "export JAVA_HOME=$JAVA_INSTALL_DIR" >> ~/.bashrc && \
    source ~/.bashrc

# Switch to work directory.
WORKDIR $STARROCKS_ROOT

COPY be_artifacts/be/ be/
COPY docker/be/run_scripts.sh be/bin/run_scripts.sh

RUN mkdir be/storage

四、编译及部署

编译镜像

编译 FE 镜像

docker build . -f docker/fe/Dockerfile -t starrocks-fe-m1:2.5-latest

编译 BE 镜像

docker build . -f docker/be/Dockerfile -t starrocks-be-m1:2.5-latest

部署

编写 Docker Compose 文件

~/my-db/starrocks/docker 创建 docker-compose.yaml

version: "3"

networks:
  starrocks-net:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/24

services:
  starrocks-fe:
    image: starrocks-fe-m1:2.5-latest
    tty: true
    privileged: true
    container_name: starrocks-fe
    hostname: starrocks-fe
    ports:
      - "8030:8030"
      - "9010:9010"
      - "9030:9030"
    deploy:
      resources:
        reservations:
          cpus: '1'
          memory: 2G
    networks:
      starrocks-net:
        ipv4_address: 172.20.0.2
  starrocks-be:
    image: starrocks-be-m1:2.5-latest
    tty: true
    privileged: true
    container_name: starrocks-be
    hostname: starrocks-be
    ports:
      - "8040:8040"
      - "8060:8060"
      - "9050:9050"
      - "9060:9060"
    environment:
      - PRIORITY_NETWORKS=172.20.0.0/24
    volumes:
      - ~/working/my-db/starrocks-2.5:/opt/starrocks/be/storage
    deploy:
      resources:
        reservations:
          cpus: '4'
          memory: 8G
    networks:
      starrocks-net:
        ipv4_address: 172.20.0.3
    command: bash /opt/starrocks/be/bin/run_scripts.sh

其中,subnet, volumnes 需要根据实际情况修改

至此,完整目录文件如下

tree -L 3
docker
├── be
│   ├── Dockerfile
│   └── run_scripts.sh
├── docker-compose.yaml
└── fe
    └── Dockerfile

部署集群

cd docker
docker compuse up -d

执行启动命令后,可以使用 MySQL Client 检查 FE 节点是否启动成功

mysql -h 127.0.0.1 -P9030 -uroot

mysql> show frontends \G;

z3pRi319Dh.jpg

查看 BE 启动状态

docker exec -it starrocks-be cat /opt/starrocks/be/log/be.INFO | grep heartbeat

# 如果日志打印以下内容,则说明该 BE 节点启动成功
heartbeat has started listening port on 9050

在 FE 中加入 BE

mysql> alter system add backend '172.20.0.3:9050';
mysql> show backends \G;

Te1QUtGm2H.jpg

五、可用性测试

TPCH 表为例

create database if not exists tpch;
use tpch;

create physical table if not exists tpch_region (
    r_regionkey integer not null,
    r_name char(25) not null,
    r_comment varchar(152)
) Engine=MergeTree
    CLUSTERING by (r_regionkey) DISTRIBUTED BY HASH (r_regionkey) BUCKETS 1;
    
insert into tpch_region values(1, "name1", "comment1"), (2, "name2", "comment2");

select * from tpch_region;

结果如下

+-------------+--------+-----------+
| r_regionkey | r_name | r_comment |
+-------------+--------+-----------+
|           1 | name1  | comment1  |
|           2 | name2  | comment2  |
+-------------+--------+-----------+

六、参考文档

Prepare Deploy Files

Deploy StarRocks Manually