Apache Doris Docker部署
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 指令集。
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架构进行选择
└── docker-build // 构建根目录
└── fe // Doris 构建目录
├── Dockerfile // Dockerfile 脚本
└── resource // 资源目录
├── init_fe.sh // FE 启动及注册脚本
├── fe_*.sh // FE 的脚本
└── amd64 // amd64架构目录
├── apache-doris-${DORIS_VERSION}-bin-* // doris版本目录
├── fe // fe二进制文件目录
└── arm64 // arm64架构目录
├── apache-doris-${DORIS_VERSION}-bin-* // doris版本目录
├── fe // fe二进制文件目录
[*]下载二进制包
下载官方二进制包/编译的二进制包,然后解压后将其中的fe目录拷贝到./docker-build/fe/resource/${arch}/${apache-doris-${DORIS_VERSION}-bin-*}/fe中。
[*]编写 Dockerfile
# https://github.com/apache/doris/blob/master/docker/runtime/fe/Dockerfile
FROM apache/doris:base-2.0
ARG TARGETARCH
ARG DORIS_VERSION="3.0.5"
RUN if echo $DORIS_VERSION | grep -E '^(|(()))|^branch\-(|(()))|master.*' >>/dev/null ; then \
ln -s /usr/lib/jvm/jdk-17 /usr/lib/jvm/java && \
rm -rf /usr/lib/jvm/jdk-8; \
else \
ln -s /usr/lib/jvm/jdk-8 /usr/lib/jvm/java && \
rm -rf /usr/lib/jvm/jdk-17; \
fi;
# set environment variables
ENV JAVA_HOME=/usr/lib/jvm/java
ENV PATH=$PATH:$JAVA_HOME/bin:/opt/apache-doris/fe/bin
COPY resource/${TARGETARCH:-amd64}/apache-doris-${DORIS_VERSION}-bin-*/fe /opt/apache-doris/fe
ADD resource/init_fe.sh /usr/local/bin/
COPY resource/fe_*.sh /opt/apache-doris/
# 如果需要使用北京时区时加入这个配置,否则可以去除这一行
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
WORKDIR /opt/apache-doris
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
cd ./docker-build/fe
docker build . -t ${fe-tagName} -f Dockerfile --build-arg DORIS_VERSION=3.0.5构建BE镜像
[*]构建 BE 镜像的环境目录
构建环境目录如下
amd64和arm64只需要选择一个即可,根据部署机器的cpu架构进行选择
└── docker-build // 构建根目录
└── be // Doris 构建目录
├── Dockerfile // Dockerfile 脚本
└── resource // 资源目录
├── init_be.sh // BE 启动及注册脚本
├── be_*.sh // BE 的脚本
└── amd64 // amd64架构目录
├── apache-doris-${DORIS_VERSION}-bin-* // doris版本目录
├── be // be二进制文件目录
└── arm64 // arm64架构目录
├── apache-doris-${DORIS_VERSION}-bin-* // doris版本目录
├── be // be二进制文件目录
[*]下载二进制包
下载官方二进制包/编译的二进制包,然后解压后将其中的be目录拷贝到./docker-build/be/resource/${arch}/${apache-doris-${DORIS_VERSION}-bin-*}/be中。
[*]编写 Dockerfile
# https://github.com/apache/doris/blob/master/docker/runtime/be/Dockerfile
FROM apache/doris:base-2.0
ARG TARGETARCH
ARG DORIS_VERSION="3.0.5"
RUN if echo $DORIS_VERSION | grep -E '^(|(()))|^branch\-(|(()))|master.*' >>/dev/null ; then \
ln -s /usr/lib/jvm/jdk-17 /usr/lib/jvm/java && \
rm -rf /usr/lib/jvm/jdk-8; \
else \
ln -s /usr/lib/jvm/jdk-8 /usr/lib/jvm/java && \
rm -rf /usr/lib/jvm/jdk-17; \
fi;
# set environment variables
ENV JAVA_HOME=/usr/lib/jvm/java
ENV PATH=$PATH:$JAVA_HOME/bin:/opt/apache-doris/be/bin
COPY resource/${TARGETARCH:-amd64}/apache-doris-${DORIS_VERSION}-bin-*/be /opt/apache-doris/be
COPY resource/be_*.sh /opt/apache-doris/
COPY resource/entry_point.sh /usr/local/bin/
COPY resource/init_be.sh /usr/local/bin/
# 如果需要使用北京时区时加入这个配置,否则可以去除这一行
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
WORKDIR /opt/apache-doris
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
cd ./docker-build/be
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需要修改为之前构建镜像时填写的镜像名称
docker run -itd \
--name=fe \
--env FE_SERVERS="fe1:${当前机器的内网IP}:9010" \
--env FE_ID=1 \
-p 8030:8030 \
-p 9030:9030 \
-v /data/apache-doris/fe/doris-meta:/opt/apache-doris/fe/doris-meta \
-v /data/apache-doris/fe/log:/opt/apache-doris/fe/log \
--net=host \
apache/doris:3.0.5-fe-x86_64
docker run -itd \
--name=be \
--env FE_SERVERS="fe1:${当前机器的内网IP}:9010" \
--env BE_ADDR="${当前机器的内网IP}:9050" \
-p 8040:8040 \
-v /data/apache-doris/be/storage:/opt/apache-doris/be/storage \
-v /data/apache-doris/be/log:/opt/apache-doris/be/log \
--net=host \
apache/doris:3.0.5-be-x86_643 FE & 3 BE Run 命令模板如有需要点击此处访问下载。
2.Docker Compose 脚本
1 FE & 1 BE 模板
注意需要修改 ${当前机器的内网IP} 替换为当前机器的内网 IP
version: "3"
services:
fe:
image: apache/doris:3.0.5-fe-x86_64
hostname: fe
environment:
- FE_SERVERS=fe1:${当前机器的内网IP}:9010
- FE_ID=1
volumes:
- /data/apache-doris/fe/doris-meta/:/opt/apache-doris/fe/doris-meta/
- /data/apache-doris/fe/log/:/opt/apache-doris/fe/log/
network_mode: host
be:
image: apache/doris:3.0.5-be-x86_64
hostname: be
environment:
- FE_SERVERS=fe1:${当前机器的内网IP}:9010
- BE_ADDR=${当前机器的内网IP}:9050
volumes:
- /data/apache-doris/be/storage/:/opt/apache-doris/be/storage/
- /data/apache-doris/be/script/:/docker-entrypoint-initdb.d/
depends_on:
- fe
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。
# FE_IP 为 FE 的监听地址, FE_QUERY_PORT 为 FE 的 MYSQL 协议服务的端口,在 fe.conf 中对应 query_port, 默认为 9030.
mysql -h FE_IP -P FE_QUERY_PORT -u USER_NAME
# 修改密码
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 逐渐趋于平均。
[*]创建测试表并插入数据
为了验证集群的正确性,可以在新创建的集群中创建一个测试表,并插入测试数据。
-- create a test database
create database testdb;
-- create a test table
CREATE TABLE testdb.table_hash
(
k1 TINYINT,
k2 DECIMAL(10, 2) DEFAULT "10.5",
k3 VARCHAR(10) COMMENT "string column",
k4 INT NOT NULL DEFAULT "1" COMMENT "int column"
)
COMMENT "my first table"
DISTRIBUTED BY HASH(k1) BUCKETS 32;
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]