Apache Doris 入门教程03:使用Docker或Kubernetes部署Doris

这篇具有很好参考价值的文章主要介绍了Apache Doris 入门教程03:使用Docker或Kubernetes部署Doris。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

构建 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 脚本编写需要注意以下几点:

  1. 基础父镜像选用经过 Docker-Hub 认证的 OpenJDK 官方镜像,版本用 JDK 1.8 版本
  2. 应用程序默认使用官方提供的二进制包进行下载,勿使用来源不明的二进制包
  3. 需要内嵌脚本来完成 FE 的启动、多 FE 注册、状态检查和 BE 的启动、注册 BE 至 FE 、状态检查等任务流程
  4. 应用程序在 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 程序二进制包的加载方式,有两种:

  1. 通过 wget / curl 在编译时执行下载命令,随后完成 docker build 制作过程
  2. 提前下载二进制包至编译目录,然后通过 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                // 二进制程序包
  1. 创建构建环境目录

    mkdir -p ./docker-build/fe/resource
    
  2. 下载官方二进制包/编译的二进制包

    拷贝二进制包至 ./docker-build/fe/resource 目录下

  3. 编写 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 目录下

  4. 编写 FE 的执行脚本

    可参考复制 init_fe.sh 的内容

    编写后命名为 init_fe.sh 并保存至 ./docker-build/fe/resouce 目录下

  5. 执行构建

    需要注意的是,${tagName} 需替换为你想要打包命名的 tag 名称,如:apache-doris:1.1.3-fe

    构建 FE:

    cd ./docker-build/fe
    docker build . -t ${fe-tagName}
    
构建 BE​
  1. 创建构建环境目录
mkdir -p ./docker-build/be/resource
  1. 构建环境目录如下:

    └── docker-build                                                // 构建根目录 
        └── be                                                      // BE 构建目录
            ├── dockerfile                                          // dockerfile 脚本
            └── resource                                            // 资源目录
                ├── init_be.sh                                      // 启动及注册脚本
                └── apache-doris-x.x.x-bin-x86_64/arm-be.tar.gz     // 二进制程序包
    
  2. 编写 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 目录下

  3. 编写 BE 的执行脚本

    可参考复制 init_be.sh 的内容

    编写后命名为 init_be.sh 并保存至 ./docker-build/be/resouce 目录下

  4. 执行构建

    需要注意的是,${tagName} 需替换为你想要打包命名的 tag 名称,如:apache-doris:1.1.3-be

    构建 BE:

    cd ./docker-build/be
    docker build . -t ${be-tagName}
    

    构建完成后,会有 Success 字样提示,这时候通过以下命令可查看刚构建完成的 Image 镜像

    docker images
    
构建 Broker​
  1. 创建构建环境目录
mkdir -p ./docker-build/broker/resource
  1. 构建环境目录如下:

    └── docker-build                                                // 构建根目录 
        └── broker                                                  // BROKER 构建目录
            ├── dockerfile                                          // dockerfile 脚本
            └── resource                                            // 资源目录
                ├── init_broker.sh                                  // 启动及注册脚本
                └── apache-doris-x.x.x-bin-broker.tar.gz            // 二进制程序包
    
  2. 编写 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 目录下

  3. 编写 BE 的执行脚本

    可参考复制 init_broker.sh 的内容

    编写后命名为 init_broker.sh 并保存至 ./docker-build/broker/resouce 目录下

  4. 执行构建

    需要注意的是,${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 适用的网络模式有两种。

  1. 适合跨多节点部署的 HOST 模式,这种模式适合每个节点部署 1FE 1BE。
  2. 适合单节点部署多 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​

部署方式二选一即可:

  1. 执行 docker run 命令创建集群
  2. 保存 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 backendsshow 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"

    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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Apache Doris 入门教程36:文件分析和文件缓存

    通过 Table Value Function 功能,Doris 可以直接将对象存储或 HDFS 上的文件作为 Table 进行查询分析。并且支持自动的列类型推断。 更多使用方式可参阅 Table Value Function 文档: S3:支持 S3 兼容的对象存储上的文件分析。 HDFS:支持 HDFS 上的文件分析。 这里我们通过 S3 Table Value Fun

    2024年02月11日
    浏览(44)
  • 【Docker】Docker安装入门教程及基本使用

    🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《Docker实战》。🎯🎯 👉点击这里,就可以查看我的主页啦!👇👇 Java方文山的个人主页 🎁如果感觉还不错的话请给我点赞吧!🎁🎁 💖期待你的加入,一起

    2024年02月02日
    浏览(33)
  • Apache Kafka 入门教程

    Apache Kafka 是由 Apache 软件基金会开发的一个开源流处理平台,用于处理实时的大规模数据流。Kafka 的目标是为了处理活跃的流式数据,包括传感器数据,网站日志,应用程序内部的消息,等等。它可以处理成千上万的消息,并让你迅速地处理和存储这些消息。在 Kafka 中,生产

    2024年02月15日
    浏览(35)
  • ESP8266入门教程03:点亮LED灯

    ESP8266默认是高电平工作,所以想要点亮LED只需要给相应的引脚设置低电平即可。  第11行:使用pinMode(pin, mode)来设置GPIO口工作模式,pin取值范围0 ~ 16,数字引脚0-15可设置为INPUT、OUTPUT、INPUT_PULLUP模式(输入、输出、上拉输入);数字引脚16可设置为INPUT、OUTPUT、INPUT_PULLDOWN_16模式

    2024年02月14日
    浏览(34)
  • 跟着pink老师前端入门教程-day03

    6.1 表格的主要作用 主要用于 显示、展示数据 ,可以让数据显示的规整,可读性非常好,特别是后台展示数据时,能够熟练运用表格就显得很重要。 6.2 基本语法 6.3 表头单元格标签 一般表头单元格位于表格的 第一行或第一列 ,表头单元格里面的 文本内容加粗居中显示 ,突

    2024年01月18日
    浏览(33)
  • ubuntu安装、使用docker超级详细的入门教程

    查看官网(https://docs.docker.com/get-docker),根据系统版本安装。 删除老版本 设置储存库 添加官方秘钥 授权docker并更新apt 安装最新docker 试运行 卸载应用 删除目录 默认路径 登录阿里云平台(支付宝就能登录) 找到容器镜像服务 控制台-产品与服务-弹性计算-容器镜像服务 找到镜

    2024年02月05日
    浏览(40)
  • Apache Solr 教程_编程入门自学教程_菜鸟教程-免费教程分享

    Apache Solr教程 Apache Solr - 概述 Apache Solr - 搜索引擎基础知识 Apache Solr - 在Windows环境中 Apache Solr - 在Hadoop上 Apache Solr - 架构 Apache Solr - 术语 Apache Solr - 基本命令 Apache Solr - 核心 Apache Solr - 索引数据 Apache Solr - 添加文档(XML) Apache Solr - 更新数据 Apache Solr - 删除文档 Apache Solr - 检

    2024年02月08日
    浏览(55)
  • Apache Spark教程_编程入门自学教程_菜鸟教程-免费教程分享

    Apache Spark教程 Apache Spark - 简介 Apache Spark - RDD Apache Spark - 安装 Apache Spark - 核心编程 Apache Spark - 部署 高级Spark编程 Apache Spark - 有用的资源

    2024年02月09日
    浏览(27)
  • Docker入门基础使用教程汇总(全是干货,简单实用)

    Docker容器化技术几年越来越火,想要快速入门docker技术,在短时间内能够掌握并使用,这里潘老师给大家整理了Docker入门基础使用教程,可以说全是干货,简单实用,没有多余的深层次的技术干扰你,纯粹就是学以致用,我们一起来看一下! 1.1.什么是Docker 微服务虽然具备各

    2024年02月08日
    浏览(39)
  • 03.Three.js的入门教程(二)如何创建一个3D地球?

    前言:通过上节课 02.Three.js的入门课程(一),我们了解了Three.js的最小案例DEMO,熟悉了几个重要组成部分。这节课带领大家编写一个3D地球。 一、通过纹理图渲染一个地球 1.1. 创建一个纹理加载器对象TextureLoader,可以加载图片作为纹理贴图; 1.2.完整代码结构 二、小球标

    2024年02月04日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包