构建 Docker Image
该文档主要介绍了如何通过 Dockerfile 来制作 Apache Doris 的运行镜像,以便于在容器化编排工具或者快速测试过程中可迅速拉取一个 Apache Doris Image 来完成集群的创建。
软硬件要求
概述
Docker 镜像在制作前要提前准备好制作机器,该机器的平台架构决定了制作以后的 Docker Image 适用的平台架构,如 X86_64 机器,需要下载 X86_64 的 Doris 二进制程序,制作以后的 Image 仅可在 X86_64 平台上运行。ARM 平台(M1 视同为 ARM)同理。
硬件要求
最低配置:2C 4G
推荐配置:4C 16G
软件要求
Docker Version:20.10 及以后版本
Docker Image 构建
Dockerfile 脚本编写需要注意以下几点:
- 基础父镜像选用经过 Docker-Hub 认证的 OpenJDK 官方镜像,版本用 JDK 1.8 版本
- 应用程序默认使用官方提供的二进制包进行下载,勿使用来源不明的二进制包
- 需要内嵌脚本来完成 FE 的启动、多 FE 注册、状态检查和 BE 的启动、注册 BE 至 FE 、状态检查等任务流程
- 应用程序在 Docker 内启动时不应使用
--daemon
的方式启动,否则在 K8S 等编排工具部署过程中会有异常
由于 Apache Doris 1.2 版本开始,开始支持 JavaUDF 能力,故而 BE 也需要有 JDK 环境,推荐的镜像如下:
Doris 程序 | 推荐基础父镜像 |
---|---|
Frontend | openjdk:8u342-jdk |
Backend | openjdk:8u342-jdk |
Broker | openjdk:8u342-jdk |
脚本前期准备
编译 Docker Image 的 Dockerfile 脚本中,关于 Apache Doris 程序二进制包的加载方式,有两种:
- 通过 wget / curl 在编译时执行下载命令,随后完成 docker build 制作过程
- 提前下载二进制包至编译目录,然后通过 ADD 或者 COPY 命令加载至 docker build 过程中
使用前者会让 Docker Image Size 更小,但是如果构建失败的话可能下载操作会重复进行,导致构建时间过长,而后者更适用于网络环境不是很好的构建环境。
综上,本文档的示例以第二种方式为准,若有第一种诉求,可根据自己需求定制修改即可。
准备二进制包
需要注意的是,如有定制化开发需求,则需要自己修改源码后进行编译打包,然后放置至构建目录即可。
若无特殊需求,直接下载官网提供的二进制包即可。
构建步骤
构建 FE
构建环境目录如下:
└── docker-build // 构建根目录
└── fe // FE 构建目录
├── dockerfile // dockerfile 脚本
└── resource // 资源目录
├── init_fe.sh // 启动及注册脚本
└── apache-doris-x.x.x-bin-fe.tar.gz // 二进制程序包
-
创建构建环境目录
mkdir -p ./docker-build/fe/resource
-
下载官方二进制包/编译的二进制包
拷贝二进制包至
./docker-build/fe/resource
目录下 -
编写 FE 的 Dockerfile 脚本
# 选择基础镜像 FROM openjdk:8u342-jdk # 设置环境变量 ENV JAVA_HOME="/usr/local/openjdk-8/" \ PATH="/opt/apache-doris/fe/bin:$PATH" # 下载软件至镜像内,可根据需要替换 ADD ./resource/apache-doris-fe-${x.x.x}-bin.tar.gz /opt/ RUN apt-get update && \ apt-get install -y default-mysql-client && \ apt-get clean && \ mkdir /opt/apache-doris && \ cd /opt && \ mv apache-doris-fe-${x.x.x}-bin /opt/apache-doris/fe ADD ./resource/init_fe.sh /opt/apache-doris/fe/bin RUN chmod 755 /opt/apache-doris/fe/bin/init_fe.sh ENTRYPOINT ["/opt/apache-doris/fe/bin/init_fe.sh"]
编写后命名为
Dockerfile
并保存至./docker-build/fe
目录下 -
编写 FE 的执行脚本
可参考复制 init_fe.sh 的内容
编写后命名为
init_fe.sh
并保存至./docker-build/fe/resouce
目录下 -
执行构建
需要注意的是,
${tagName}
需替换为你想要打包命名的 tag 名称,如:apache-doris:1.1.3-fe
构建 FE:
cd ./docker-build/fe docker build . -t ${fe-tagName}
构建 BE
- 创建构建环境目录
mkdir -p ./docker-build/be/resource
-
构建环境目录如下:
└── docker-build // 构建根目录 └── be // BE 构建目录 ├── dockerfile // dockerfile 脚本 └── resource // 资源目录 ├── init_be.sh // 启动及注册脚本 └── apache-doris-x.x.x-bin-x86_64/arm-be.tar.gz // 二进制程序包
-
编写 BE 的 Dockerfile 脚本
# 选择基础镜像 FROM openjdk:8u342-jdk # 设置环境变量 ENV JAVA_HOME="/usr/local/openjdk-8/" \ PATH="/opt/apache-doris/be/bin:$PATH" # 下载软件至镜像内,可根据需要替换 ADD ./resource/apache-doris-be-${x.x.x}-bin-x86_64.tar.gz /opt/ RUN apt-get update && \ apt-get install -y default-mysql-client && \ apt-get clean && \ mkdir /opt/apache-doris && \ cd /opt && \ mv apache-doris-be-${x.x.x}-bin-x86_64 /opt/apache-doris/be ADD ./resource/init_be.sh /opt/apache-doris/be/bin RUN chmod 755 /opt/apache-doris/be/bin/init_be.sh ENTRYPOINT ["/opt/apache-doris/be/bin/init_be.sh"]
编写后命名为
Dockerfile
并保存至./docker-build/be
目录下 -
编写 BE 的执行脚本
可参考复制 init_be.sh 的内容
编写后命名为
init_be.sh
并保存至./docker-build/be/resouce
目录下 -
执行构建
需要注意的是,
${tagName}
需替换为你想要打包命名的 tag 名称,如:apache-doris:1.1.3-be
构建 BE:
cd ./docker-build/be docker build . -t ${be-tagName}
构建完成后,会有
Success
字样提示,这时候通过以下命令可查看刚构建完成的 Image 镜像docker images
构建 Broker
- 创建构建环境目录
mkdir -p ./docker-build/broker/resource
-
构建环境目录如下:
└── docker-build // 构建根目录 └── broker // BROKER 构建目录 ├── dockerfile // dockerfile 脚本 └── resource // 资源目录 ├── init_broker.sh // 启动及注册脚本 └── apache-doris-x.x.x-bin-broker.tar.gz // 二进制程序包
-
编写 Broker 的 Dockerfile 脚本
# 选择基础镜像 FROM openjdk:8u342-jdk # 设置环境变量 ENV JAVA_HOME="/usr/local/openjdk-8/" \ PATH="/opt/apache-doris/broker/bin:$PATH" # 下载软件至镜像内,此处 broker 目录被同步压缩至 FE 的二进制包,需要自行解压重新打包,可根据需要替换 ADD ./resource/apache_hdfs_broker.tar.gz /opt/ RUN apt-get update && \ apt-get install -y default-mysql-client && \ apt-get clean && \ mkdir /opt/apache-doris && \ cd /opt && \ mv apache_hdfs_broker /opt/apache-doris/broker ADD ./resource/init_broker.sh /opt/apache-doris/broker/bin RUN chmod 755 /opt/apache-doris/broker/bin/init_broker.sh ENTRYPOINT ["/opt/apache-doris/broker/bin/init_broker.sh"]
编写后命名为
Dockerfile
并保存至./docker-build/broker
目录下 -
编写 BE 的执行脚本
可参考复制 init_broker.sh 的内容
编写后命名为
init_broker.sh
并保存至./docker-build/broker/resouce
目录下 -
执行构建
需要注意的是,
${tagName}
需替换为你想要打包命名的 tag 名称,如:apache-doris:1.1.3-broker
构建 Broker:
cd ./docker-build/broker docker build . -t ${broker-tagName}
构建完成后,会有
Success
字样提示,这时候通过以下命令可查看刚构建完成的 Image 镜像docker images
推送镜像至 DockerHub 或私有仓库
登录 DockerHub 账号
docker login
登录成功会提示 Success
相关提示,随后推送至仓库即可
docker push ${tagName}
部署 Docker 集群
背景说明
本篇将简述如何通过 docker run
或 docker-compose up
命令快速构建一套完整的 Doris 测试集群。
适用场景
建议在 SIT 或者 DEV 环境中使用 Doris Docker 来简化部署的流程。
如在新版本中想测试某一个功能点,可以使用 Doris Docker 部署一个 Playground 环境。或者在调试的过程中要复现某个问题时,也可以使用 docker 环境来模拟。
在生产环境上,当前暂时尽量避免使用容器化的方案进行 Doris 部署。
软件环境
软件 | 版本 |
---|---|
Docker | 20.0 及以上 |
docker-compose | 2.10 及以上 |
硬件环境
配置类型 | 硬件信息 | 最大运行集群规模 |
---|---|---|
最低配置 | 2C 4G | 1FE 1BE |
推荐配置 | 4C 16G | 3FE 3BE |
前期环境准备
需在宿主机执行如下命令
sysctl -w vm.max_map_count=2000000
Docker Compose
不同平台需要使用不同 Image 镜像,本篇以 X86_64
平台为例。
网络模式说明
Doris Docker 适用的网络模式有两种。
- 适合跨多节点部署的 HOST 模式,这种模式适合每个节点部署 1FE 1BE。
- 适合单节点部署多 Doris 进程的子网网桥模式,这种模式适合单节点部署(推荐),若要多节点混部需要做更多组件部署(不推荐)。
为便于展示,本章节仅演示子网网桥模式编写的脚本。
接口说明
从 Apache Doris 1.2.1 Docker Image
版本起,各个进程镜像接口列表如下:
进程名 | 接口名 | 接口定义 | 接口示例 |
---|---|---|---|
FE | BE | BROKER | FE_SERVERS |
FE | FE_ID | FE 节点 ID | 1 |
BE | BE_ADDR | BE 节点主要信息 | 172.20.80.5:9050 |
BE | NODE_ROLE | BE 节点类型 | computation |
BROKER | BROKER_ADDR | BROKER 节点主要信息 | 172.20.80.6:8000 |
注意,以上接口必须填写信息,否则进程无法启动。
FE_SERVERS 接口规则为:
FE_NAME:FE_HOST:FE_EDIT_LOG_PORT[,FE_NAME:FE_HOST:FE_EDIT_LOG_PORT]
FE_ID 接口规则为:
1-9
的整数,其中1
号 FE 为 Master 节点。BE_ADDR 接口规则为:
BE_HOST:BE_HEARTBEAT_SERVICE_PORT
NODE_ROLE 接口规则为:
computation
或为空,其中为空或为其他值时表示节点类型为mix
类型BROKER_ADDR 接口规则为:
BROKER_HOST:BROKER_IPC_PORT
脚本模板
Docker Run 命令
1FE & 1BE 命令模板
注意需要修改 ${当前机器的内网IP}
替换为当前机器的内网IP
docker run -itd \
--name=fe \
--env FE_SERVERS="fe1:${当前机器的内网IP}:9010" \
--env FE_ID=1 \
-p 8030:8030 \
-p 9030:9030 \
-v /data/fe/doris-meta:/opt/apache-doris/fe/doris-meta \
-v /data/fe/log:/opt/apache-doris/fe/log \
--net=host \
apache/doris:2.0.0_alpha-fe-x86_64
docker run -itd \
--name=be \
--env FE_SERVERS="fe1:${当前机器的内网IP}:9010" \
--env BE_ADDR="${当前机器的内网IP}:9050" \
-p 8040:8040 \
-v /data/be/storage:/opt/apache-doris/be/storage \
-v /data/be/log:/opt/apache-doris/be/log \
--net=host \
apache/doris:2.0.0_alpha-be-x86_64
3FE & 3BE Run 命令模板如有需要点击此处访问下载。
Docker Compose 脚本
1FE & 1BE 模板
注意需要修改 ${当前机器的内网IP}
替换为当前机器的内网IP
version: "3"
services:
fe:
image: apache/doris:2.0.0_alpha-fe-x86_64
hostname: fe
environment:
- FE_SERVERS=fe1:${当前机器的内网IP}:9010
- FE_ID=1
volumes:
- /data/fe/doris-meta/:/opt/apache-doris/fe/doris-meta/
- /data/fe/log/:/opt/apache-doris/fe/log/
network_mode: host
be:
image: apache/doris:2.0.0_alpha-be-x86_64
hostname: be
environment:
- FE_SERVERS=fe1:${当前机器的内网IP}:9010
- BE_ADDR=${当前机器的内网IP}:9050
volumes:
- /data/be/storage/:/opt/apache-doris/be/storage/
- /data/be/script/:/docker-entrypoint-initdb.d/
depends_on:
- fe
network_mode: host
3FE & 3BE Docker Compose 脚本模板如有需要点击此处访问下载。
部署 Doris Docker
部署方式二选一即可:
- 执行
docker run
命令创建集群 - 保存
docker-compose.yaml
脚本,同目录下执行docker-compose up -d
命令创建集群
特例说明
MacOS 由于内部实现容器的方式不同,在部署时宿主机直接修改 max_map_count
值可能无法成功,需要先创建以下容器:
docker run -it --privileged --pid=host --name=change_count debian nsenter -t 1 -m -u -n -i sh
容器创建成功执行以下命令:
sysctl -w vm.max_map_count=2000000
然后 exit
退出,创建 Doris Docker 集群。
Kubernetes 部署
环境准备
- 安装 k8s
- 构建或下载doris镜像
- 构建镜像 构建 Docker Image
- 下载镜像 https://hub.docker.com/r/apache/doris/tags
- 创建或下载doris on k8s的yml文件
- doris/docker/runtime/k8s/doris_follower.yml at master · apache/doris · GitHub
- doris/docker/runtime/k8s/doris_be.yml at master · apache/doris · GitHub
- doris/docker/runtime/k8s/doris_cn.yml at master · apache/doris · GitHub
启动集群
启动 FE(角色类型为 Follower):kubectl create -f doris_follower.yml
启动 BE :kubectl create -f doris_be.yml
启动 BE(角色类型为 Compute Node):kubectl create -f doris_cn.yml
扩缩容
- FE
- 目前不支持扩缩容,建议按需初始化1个或者3个节点
- BE
- 命令:
kubectl scale statefulset doris-be-cluster1 --replicas=4
- 命令:
- BE(角色类型为 Compute Node)
- 命令:
kubectl scale statefulset doris-cn-cluster1 --replicas=4
- 命令:
验证
使用 mysql-client 连接到 FE,执行 show backends
,show frontends
等操作查看各节点状态
k8s简易操作命令
- 首次执行yml文件
kubectl create -f xxx.yml
- 修改yml文件后执行
kubectl apply -f xxx.yml
- 删除yml定义的所有资源
kubectl delete -f xxx.yml
- 查看pod列表
kubectl get pods
- 进入容器
kubectl exec -it xxx(podName) -- /bin/sh
- 查看日志
kubectl logs xxx(podName)
- 查看ip和端口信息
kubectl get ep
- 更多k8s知识
常见问题
-
数据怎么持久化?
用户需要自行挂载pvc,持久化元数据信息,数据信息或者日志信息等
-
怎么安全缩容BE节点?
BE:当前缩容之前需要用户手动执行ALTER-SYSTEM-DECOMMISSION-BACKEND
BE(角色类型为 Compute Node): 不存储数据文件,可以直接进行缩容,关于计算节点
-
FE启动报错"failed to init statefulSetName"文章来源:https://www.toymoban.com/news/detail-729812.html
doris_follower.yml的环境变量 statefulSetName和serviceName必须成对出现,比如配置了CN_SERVICE,就必须配置CN_STATEFULSET文章来源地址https://www.toymoban.com/news/detail-729812.html
到了这里,关于Apache Doris 入门教程03:使用Docker或Kubernetes部署Doris的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!