找回密码
 立即注册
首页 业界区 安全 Apache Doris Docker部署

Apache Doris Docker部署

懵径 2025-6-11 18:40:43
Apache Doris是一款基于 MPP 架构的高性能、实时分析型数据库。它以高效、简单和统一的特性著称,能够在亚秒级的时间内返回海量数据的查询结果。Doris 既能支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。
基于这些优势,Apache Doris 非常适合用于报表分析、即席查询、统一数仓构建、数据湖联邦查询加速等场景。用户可以基于 Doris 构建大屏看板、用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。
部署准备

软硬件环境检查

部署 Doris 时,需要对软硬件环境进行以下检查:

  • 硬件环境检查
  • 服务器建议配置
  • 硬盘空间计算
  • Java 环境检查(Doris 的所有进程都依赖 Java)

    • 在 2.1(含)版本之前,请使用 Java 8,推荐版本:jdk-8u352 之后版本。
    • 从 3.0(含)版本之后,请使用 Java 17,推荐版本:jdk-17.0.10 之后版本。

硬件环境检查

在硬件环境检查中,要对以下硬件条件进行检查:
检查项建议配置CPU支持 AVX2 指令集。内存建议至少 CPU 4 倍。存储推荐 SSD 硬盘。文件系统ext4 或 xfs 文件系统。网卡10GbE 网卡。CPU 检查

当安装 Doris 时,建议选择支持 AVX2 指令集的机器,以利用 AVX2 的向量化能力实现查询向量化加速。
运行以下命令,有输出结果,及表示机器支持 AVX2 指令集。
  1. cat /proc/cpuinfo | grep avx2
复制代码
如果机器不支持 AVX2 指令集,可以使用 no AVX2 的 Doris 安装包进行部署。
内存检查

Doris 没有强制的内存限制。一般在生产环境中,可以根据以下建议选择内存大小:
组件推荐内存配置FE建议至少 16GB 以上。BE建议内存至少是 CPU 核数的 4 倍(例如,16 核机器至少配置 64G 内存)。在内存是 CPU 核数 8 倍时,会得到更好的性能。存储检查

Doris 支持将数据存储在 SSD、HDD 或对象存储中。
在以下几种场景中建议使用 SSD 作为数据存储:

  • 大规模数据量下的高并发点查场景
  • 大规模数据量下的高频数据更新场景
文件系统检查

Doris 推荐使用 EXT4 或 XFS 文件系统:

  • EXT4 文件系统:具有良好的稳定性、性能和较低的碎片化问题。
  • XFS 文件系统:在处理大规模数据和高并发写操作时表现优越,适合高吞吐量应用。
网卡检查

Doris 的计算过程涉及数据分片和并行处理,可能产生网络资源开销。为了最大程度优化 Doris 性能并降低网络资源开销,强烈建议在部署时选用万兆网卡(10 Gigabit Ethernet,即 10GbE)或者更快网络。如果有多块网卡,建议使用链路聚合方式将多块网卡绑定成一块网卡,提高网络带宽、冗余性和复杂均衡的能力。
部署资源

机器ip:192.168.123.10
配置:

  • CPU: Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHz( 24核)
  • RAM:128G
  • ROM:3.6T
Docker镜像构建

编译 Docker Image 的 Dockerfile 脚本中,关于 Apache Doris 程序二进制包的加载方式,有两种:

  • 通过 wget / curl 在编译时执行下载命令,随后完成 Docker Build 制作过程
  • 提前下载二进制包至编译目录,然后通过 ADD 或者 COPY 命令加载至 Docker Build 过程中
使用前者会让 Docker Image Size 更小,但是如果构建失败的话可能下载操作会重复进行,导致构建时间过长,而后者更适用于网络环境不是很好的构建环境。这里以第二种方式进行示例。
构建 FE 镜像


  • 构建 FE 镜像的环境目录
    构建环境目录如下
    amd64和arm64只需要选择一个即可,根据部署机器的cpu架构进行选择
  1. └── docker-build                                        // 构建根目录
  2.     └── fe                                              // Doris 构建目录
  3.         ├── Dockerfile                                  // Dockerfile 脚本
  4.         └── resource                                    // 资源目录
  5.             ├── init_fe.sh                              // FE 启动及注册脚本
  6.             ├── fe_*.sh                                 // FE 的脚本
  7.             └── amd64                                   // amd64架构目录
  8.                     ├── apache-doris-${DORIS_VERSION}-bin-* // doris版本目录
  9.                             ├── fe                              // fe二进制文件目录
  10.             └── arm64                                   // arm64架构目录
  11.                     ├── apache-doris-${DORIS_VERSION}-bin-* // doris版本目录
  12.                             ├── fe                              // fe二进制文件目录
复制代码

  • 下载二进制包
下载官方二进制包/编译的二进制包,然后解压后将其中的fe目录拷贝到./docker-build/fe/resource/${arch}/${apache-doris-${DORIS_VERSION}-bin-*}/fe中。

  • 编写 Dockerfile
  1. # https://github.com/apache/doris/blob/master/docker/runtime/fe/Dockerfile
  2. FROM apache/doris:base-2.0
  3. ARG TARGETARCH
  4. ARG DORIS_VERSION="3.0.5"
  5. RUN if echo $DORIS_VERSION | grep -E '^([3-9]|([1-9]([0-9])))|^branch\-([3-9]|([1-9]([0-9])))|master.*' >>/dev/null ; then \
  6.         ln -s /usr/lib/jvm/jdk-17 /usr/lib/jvm/java && \
  7.         rm -rf /usr/lib/jvm/jdk-8; \
  8.     else \
  9.         ln -s /usr/lib/jvm/jdk-8 /usr/lib/jvm/java && \
  10.         rm -rf /usr/lib/jvm/jdk-17; \
  11.     fi;
  12. # set environment variables
  13. ENV JAVA_HOME=/usr/lib/jvm/java
  14. ENV PATH=$PATH:$JAVA_HOME/bin:/opt/apache-doris/fe/bin
  15. COPY resource/${TARGETARCH:-amd64}/apache-doris-${DORIS_VERSION}-bin-*/fe /opt/apache-doris/fe
  16. ADD resource/init_fe.sh /usr/local/bin/
  17. COPY resource/fe_*.sh /opt/apache-doris/
  18. # 如果需要使用北京时区时加入这个配置,否则可以去除这一行
  19. RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  20. WORKDIR /opt/apache-doris
  21. ENTRYPOINT ["bash","init_fe.sh"]
复制代码

  • 编写后命名为 Dockerfile 并保存至 ./docker-build/fe 目录下
  • FE 的执行脚本 init_fe.sh 和其他所需脚本的内容可以从 Doris 源码库中下载:https://github.com/apache/doris/tree/master/docker/runtime/fe/resource

  • 执行构建
需要注意的是,${tagName} 需替换为你想要打包命名的 tag 名称,如:apache-doris:3.0.5-fe
  1. cd ./docker-build/fe
  2. docker build . -t ${fe-tagName} -f Dockerfile --build-arg DORIS_VERSION=3.0.5
复制代码
构建BE镜像


  • 构建 BE 镜像的环境目录
    构建环境目录如下
    amd64和arm64只需要选择一个即可,根据部署机器的cpu架构进行选择
  1. └── docker-build                                                                // 构建根目录
  2.     └── be                                                                          // Doris 构建目录
  3.         ├── Dockerfile                                                           // Dockerfile 脚本
  4.         └── resource                                                             // 资源目录
  5.             ├── init_be.sh                                                        // BE 启动及注册脚本
  6.             ├── be_*.sh                                                           // BE 的脚本
  7.             └── amd64                                                           // amd64架构目录
  8.                     ├── apache-doris-${DORIS_VERSION}-bin-*       // doris版本目录
  9.                             ├── be                                                        // be二进制文件目录
  10.             └── arm64                                                           // arm64架构目录
  11.                     ├── apache-doris-${DORIS_VERSION}-bin-*       // doris版本目录
  12.                             ├── be                                                        // be二进制文件目录
复制代码

  • 下载二进制包
下载官方二进制包/编译的二进制包,然后解压后将其中的be目录拷贝到./docker-build/be/resource/${arch}/${apache-doris-${DORIS_VERSION}-bin-*}/be中。

  • 编写 Dockerfile
  1. # https://github.com/apache/doris/blob/master/docker/runtime/be/Dockerfile
  2. FROM apache/doris:base-2.0
  3. ARG TARGETARCH
  4. ARG DORIS_VERSION="3.0.5"
  5. RUN if echo $DORIS_VERSION | grep -E '^([3-9]|([1-9]([0-9])))|^branch\-([3-9]|([1-9]([0-9])))|master.*' >>/dev/null ; then \
  6.         ln -s /usr/lib/jvm/jdk-17 /usr/lib/jvm/java && \
  7.         rm -rf /usr/lib/jvm/jdk-8; \
  8.     else \
  9.         ln -s /usr/lib/jvm/jdk-8 /usr/lib/jvm/java && \
  10.         rm -rf /usr/lib/jvm/jdk-17; \
  11.     fi;
  12. # set environment variables
  13. ENV JAVA_HOME=/usr/lib/jvm/java
  14. ENV PATH=$PATH:$JAVA_HOME/bin:/opt/apache-doris/be/bin
  15. COPY resource/${TARGETARCH:-amd64}/apache-doris-${DORIS_VERSION}-bin-*/be /opt/apache-doris/be
  16. COPY resource/be_*.sh /opt/apache-doris/
  17. COPY resource/entry_point.sh /usr/local/bin/
  18. COPY resource/init_be.sh /usr/local/bin/
  19. # 如果需要使用北京时区时加入这个配置,否则可以去除这一行
  20. RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  21. WORKDIR /opt/apache-doris
  22. ENTRYPOINT ["bash","entry_point.sh"]
复制代码

  • 编写后命名为 Dockerfile 并保存至 ./docker-build/be 目录下
  • FE 的执行脚本 init_fe.sh 和其他所需脚本的内容可以从 Doris 源码库中下载:https://github.com/apache/doris/tree/master/docker/runtime/fe/resource

  • 执行构建
需要注意的是,${tagName} 需替换为你想要打包命名的 tag 名称,如:apache-doris:3.0.5-be
  1. cd ./docker-build/be
  2. docker build . -t ${fe-tagName} -f Dockerfile --build-arg DORIS_VERSION=3.0.5
复制代码
部署Docker集群

1.  Docker Run 命令
1 FE & 1 BE 命令模板
注意需要修改 ${当前机器的内网IP} 替换为当前机器的内网 IP,apache/doris:3.0.5-be-x86_64和apache/doris:3.0.5-fe-x86_64需要修改为之前构建镜像时填写的镜像名称
  1. docker run -itd \
  2. --name=fe \
  3. --env FE_SERVERS="fe1:${当前机器的内网IP}:9010" \
  4. --env FE_ID=1 \
  5. -p 8030:8030 \
  6. -p 9030:9030 \
  7. -v /data/apache-doris/fe/doris-meta:/opt/apache-doris/fe/doris-meta \
  8. -v /data/apache-doris/fe/log:/opt/apache-doris/fe/log \
  9. --net=host \
  10. apache/doris:3.0.5-fe-x86_64
  11. docker run -itd \
  12. --name=be \
  13. --env FE_SERVERS="fe1:${当前机器的内网IP}:9010" \
  14. --env BE_ADDR="${当前机器的内网IP}:9050" \
  15. -p 8040:8040 \
  16. -v /data/apache-doris/be/storage:/opt/apache-doris/be/storage \
  17. -v /data/apache-doris/be/log:/opt/apache-doris/be/log \
  18. --net=host \
  19. apache/doris:3.0.5-be-x86_64
复制代码
3 FE & 3 BE Run 命令模板如有需要点击此处访问下载。
2.  Docker Compose 脚本
1 FE & 1 BE 模板
注意需要修改 ${当前机器的内网IP} 替换为当前机器的内网 IP
  1. version: "3"
  2. services:
  3.   fe:
  4.     image: apache/doris:3.0.5-fe-x86_64
  5.     hostname: fe
  6.     environment:
  7.      - FE_SERVERS=fe1:${当前机器的内网IP}:9010
  8.      - FE_ID=1
  9.     volumes:
  10.      - /data/apache-doris/fe/doris-meta/:/opt/apache-doris/fe/doris-meta/
  11.      - /data/apache-doris/fe/log/:/opt/apache-doris/fe/log/
  12.     network_mode: host
  13.   be:
  14.     image: apache/doris:3.0.5-be-x86_64
  15.     hostname: be
  16.     environment:
  17.      - FE_SERVERS=fe1:${当前机器的内网IP}:9010
  18.      - BE_ADDR=${当前机器的内网IP}:9050
  19.     volumes:
  20.      - /data/apache-doris/be/storage/:/opt/apache-doris/be/storage/
  21.      - /data/apache-doris/be/script/:/docker-entrypoint-initdb.d/
  22.     depends_on:
  23.       - fe
  24.     network_mode: host
复制代码
备注
3 FE & 3 BE Docker Compose 脚本模板如有需要点击此处访问下载。
部署 Doris Docker

部署方式二选一即可:

  • 执行 docker run 命令创建集群
  • 保存 docker-compose.yaml 脚本,同目录下执行 docker-compose up -d 命令创建集群
验证集群正确性


  • 登录数据库
    使用 MySQL 客户端登录 Doris 集群,初始化用户为 root,默认密码为空。
    从 MySQL 官方网站下载 MySQL Client,或者下载我们提供的 Linux 上免安装的 MySQL 客户端。当前 Doris 主要兼容 MySQL 5.7 及其以上的客户端。
    解压下载的 MySQL 客户端,在 bin/ 目录下可以找到 mysql 命令行工具。然后执行下面的命令连接 Doris。
  1. # FE_IP 为 FE 的监听地址, FE_QUERY_PORT 为 FE 的 MYSQL 协议服务的端口,在 fe.conf 中对应 query_port, 默认为 9030.
  2. mysql -h FE_IP -P FE_QUERY_PORT -u USER_NAME
  3. # 修改密码
  4. set password = password('Bjct123!@#');
复制代码

  • 检查 FE 启动状态
    链接到 Doris 集群后,可以通过 show frontends \G 命令查看 FE 的状态,通常要确认以下几项

    • Alive 为 true 表示节点存活;
    • Join 为 true 表示节点加入到集群中,但不代表当前还在集群内(可能已失联);
    • IsMaster 为 true 表示当前节点为 Master 节点。

  • 检查 BE 启动状态
    链接到 Doris 集群后,可以通过 show backends \G 命令查看 BE 的状态,通常情况下需要注意以下几项状态:

    • Alive 为 true 表示节点存活
    • TabletNum 表示该节点上的分片数量,新加入的节点会进行数据均衡,TabletNum 逐渐趋于平均。

  • 创建测试表并插入数据
    为了验证集群的正确性,可以在新创建的集群中创建一个测试表,并插入测试数据。
  1. -- create a test database
  2. create database testdb;
  3. -- create a test table
  4. CREATE TABLE testdb.table_hash
  5. (
  6.     k1 TINYINT,
  7.     k2 DECIMAL(10, 2) DEFAULT "10.5",
  8.     k3 VARCHAR(10) COMMENT "string column",
  9.     k4 INT NOT NULL DEFAULT "1" COMMENT "int column"
  10. )
  11. COMMENT "my first table"
  12. DISTRIBUTED BY HASH(k1) BUCKETS 32;
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册