网易首页 > 网易号 > 正文 申请入驻

如何进行Apache Doris集群Docker快速部署

0
分享至

Docker 容器化部署是当前最常见且使用性较高的部署方式之一,具有创建简单、快速部署、移植性强等特点,可极大节省应用开发、测试和部署时间,一次构建,随处运行。

本教程将指导有快速部署测试和 Docker 学习需求的同学,快速进行部署单节点 Apache Doris 集群或伪分布式 Apache Doris 集群。同时介绍如何自主的构建 Apache Doris 的 Docker 生态内容,如 Dockerfile 书写、Docker Images 构建、Docker-Compose 编排等内容。

本教程所有模块的构建背景是以快速部署和体验学习为目的,使用 1FE 1BE 规格来撰写的,如有 NFE MBE 需求的同学可自行在此基础上进行编排改写。

(本教程不再赘述 Docker 安装、 Dockerfile 、Docker-Compose 等编写时脚本内部使用的相应命令作用,如有需要可参考 Docker 官方文档。)

# Dockerfile

编写思路

镜像的制作应当注意以下几点:

  • 基础父镜像最好选用经过 Docker-Hub 认证的官方镜像,如有DOCKER OFFICIAL IMAGE标签的镜像提供者,一般是官方认证过没有问题的镜像源。

  • 基础父镜像选用时尽可能以能最小可用环境的原则进行选择,即选择时以满足基础必备环境的同时,镜像尽可能以最小的原则进行挑选,不要直接使用诸如完整的 CentOS 镜像、Ubuntu 镜像等提供完备功能的镜像,如果使用后者,则我们构建出的包会很大,不利于使用和传播,也会造成磁盘空间浪费。

  • 最好不要高度封装,若只是想提供一个软件的原生镜像,最好的构建方式是最小可用环境 + 软件本身 ,期间不夹杂其他的逻辑和功能处理,这样可以更原子化的进行镜像编排以及后续的维护和更新操作。

  • 单独用一个脚本制成的镜像完成后续对其他镜像的各种业务操作和运维操作。构建 Image 和使用 Docker-Compose 时,需要用官方完整的 Docker 程序,使用官方提供的脚本进行安装最佳。

根据 Apache Doris 的简洁架构(FE + BE),以及不依赖其他组件和环境的特性,制作时应将 FE 和 BE 分离制作为两个镜像,再制作 Register 镜像来操控 FE 和 BE 镜像,这样可以原子化的制作可用镜像,也便于后期的维护和更新。

Docker 服务部署( CentOS 系统和 Ubuntu 系统)

Docker 是一个开源的应用容器引擎,该教程的环境基础为 Docker。

本小节只以 CentOS 系统和 Ubuntu 系统为例,Windows 系统较繁琐不再赘述,MacOS 系统官方下载安装即可,简易程度极高,不再赘述。

1. 卸载老旧的版本(未安装过可略)


# CentOS
yum remove docker docker-engine docker.io
# Ubuntu
sudo apt-get remove docker docker-engine docker.io

2. 安装最新的 Docker


curl -sSL https://get.docker.com/ | sh

3. 启动并添加开机启动


sudo systemctl start docker #启动docker
sudo systemctl enable docker #加入开机自启动

4. 检查安装


docker version

5. 若出现 Client 和 Server 两部分内容,说明安装成功。

FE Dockerfile

FE 是 Java 程序,所以我们选用Openjdk提供的 JDK8 最新的8u342-jdk镜像作为基础父镜像,提供两个版本:

以下脚本需命名为 Dockerfile !

  • 使用本地二进制


# 选择基础镜像
FROM openjdk:8u342-jdk

# 根据自己需求进行替换,路径使用相对路径
ARG package_url=本地二进制包路径,与 package_name 拼接得到完整目录
# 例如 ARG package_url=./

ARG package_name=二进制包文件名
# 例如 ARG package_name=apache-doris-1.1.1-bin-x86.tar.gz

ARG package_path=解压后文件目录名
# 例如 ARG package_path=apache-doris-1.1.1-bin-x86

# 设置环境变量
ENV JAVA_HOME="/usr/local/openjdk-8/" \
PATH="/usr/local/apache-doris/fe/bin:$PATH"

# 下载软件至镜像内,可根据需要替换
COPY $package_url/$package_name /usr/local/

# 部署软件
RUN tar -zxvf /usr/local/$package_name -C /usr/local/ && \
mv /usr/local/$package_path /usr/local/apache-doris && \
rm -rf /usr/local/$package_name /usr/local/apache-doris/be /usr/local/apache-doris/udf /usr/local/apache-doris/apache_hdfs_broker

CMD ["bash"]

  • 使用 URL 下载构建


# 选择基础镜像
FROM openjdk:8u342-jdk

# 根据自己需求进行替换
ARG package_url=远端URL下载地址
# 例如 ARG package_url=https://mirrors.tuna.tsinghua.edu.cn/apache/doris/1.1/1.1.1-rc03/apache-doris-1.1.1-bin-x86.tar.gz

ARG package_name=二进制包文件名
# 例如 ARG package_name=apache-doris-1.1.1-bin-x86.tar.gz

ARG package_path=解压后文件目录名
# 例如 ARG package_path=apache-doris-1.1.1-bin-x86

# 设置环境变量
ENV JAVA_HOME="/usr/local/openjdk-8/" \
PATH="/usr/local/apache-doris/fe/bin:$PATH"

# 部署软件
RUN curl -o /usr/local/apache-doris.tar.gz $package_url && \
tar -zxvf /usr/local/apache-doris.tar.gz -C /usr/local/ && \
mv /usr/local/$package_path /usr/local/apache-doris && \
rm -rf /usr/local/$package_name /usr/local/apache-doris/be /usr/local/apache-doris/udf /usr/local/apache-doris/apache_hdfs_broker

CMD ["bash"]

构建 Apache-Doris-FE-Docker-Image:


# 镜像名为用户自定义的名称
docker build . -t 镜像名

BE Dockerfile

BE Docker Image 构建,与 FE 大同小异,只需要更改基础父镜像和删除内容即可,修改如下:

  1. 基础父镜像修改为 bitnami/minideb:latest

  2. ENV PATH 中 fe 修改为 be,删除 Java 环境变量,添加 broker 环境变量

  3. 最后清理目录中,将 be 修改为 fe

使用本地二进制包构建


# 选择基础镜像
FROM bitnami/minideb:latest

# 根据自己需求进行替换
ARG package_url=本地二进制包路径,与 package_name 拼接得到完整目录
# 例如 ARG package_url=./

ARG package_name=二进制包文件名
# 例如 ARG package_name=apache-doris-1.1.1-bin-x86.tar.gz

ARG package_path=解压后文件目录名
# 例如 ARG package_path=apache-doris-1.1.1-bin-x86

# 设置环境变量
ENV PATH="/usr/local/apache-doris/be/bin:/usr/local/apache-doris/apache_hdfs_broker/bin:$PATH"

# 下载软件至镜像内,可根据需要替换
COPY $package_url/$package_name /usr/local/

# 部署软件
RUN tar -zxvf /usr/local/$package_name -C /usr/local/ && \
mv /usr/local/$package_path /usr/local/apache-doris && \
rm -rf /usr/local/$package_name /usr/local/apache-doris/fe /usr/local/apache-doris/udf

CMD ["bash"]

使用 URL 下载构建


# 选择基础镜像
FROM bitnami/minideb:latest

# 根据自己需求进行替换
ARG package_url=远端URL下载地址
# 例如 ARG package_url=https://mirrors.tuna.tsinghua.edu.cn/apache/doris/1.1/1.1.1-rc03/apache-doris-1.1.1-bin-x86.tar.gz

ARG package_name=二进制包文件名
# 例如 ARG package_name=apache-doris-1.1.1-bin-x86.tar.gz

ARG package_path=解压后文件目录名
# 例如 ARG package_path=apache-doris-1.1.1-bin-x86

# 设置环境变量
ENV PATH="/usr/local/apache-doris/be/bin:/usr/local/apache-doris/apache_hdfs_broker/bin:$PATH"

# 部署软件
RUN apt-get update && \
apt-get install -y curl && \
apt-get clean && \
curl -o /usr/local/apache-doris.tar.gz $package_url && \
tar -zxvf /usr/local/apache-doris.tar.gz -C /usr/local/ && \
mv /usr/local/$package_path /usr/local/apache-doris && \
rm -rf /usr/local/$package_name /usr/local/apache-doris/fe /usr/local/apache-doris/udf

CMD ["bash"]

构建 Apache-Doris-BE-Docker-Image:


docker build . -t 镜像名

Register Dockerfile

构建 Register Docker Image 时,主是是通过 Docker-Compose 来调度管控 Doris 的 FE 和 BE 启停及注册的脚本。

以下演示皆为最基础的脚本版本,脚本健壮性并不是很高,可根据自己需要进行定制化开发,比如增加流程判断,确定成功失败等。

  • 初始化 FE 脚本

  • init_fe.sh


#!/bin/bash
echo "Start initializing Apache-Doris FE!"
cd /usr/local/apache-doris/
perl -pi -e "s|# priority_networks = 10.10.10.0/24;192.168.0.0/16|priority_networks = 172.20.80.0/16|g" /usr/local/apache-doris/fe/conf/fe.conf
start_fe.sh --daemon
echo "Apache-Doris FE initialized successfully!"

  • 初始化 BE 脚本

  • init_fe.sh


#!/bin/bash
echo "Start initializing Apache-Doris BE!"
cd /usr/local/apache-doris/
perl -pi -e "s|# priority_networks = 10.10.10.0/24;192.168.0.0/16|priority_networks = 172.20.80.0/16|g" /usr/local/apache-doris/be/conf/be.conf
start_be.sh --daemon
echo "Apache-Doris BE initialized successfully!"

  • 注册 BE 至 FE 脚本

  • register.sh


#!/bin/sh
echo "Welcome to Apache-Doris Docker-Compose to quickly build test images!"
echo "Start modifying the configuration files of FE and BE and run FE and BE!"
docker cp /root/init_fe.sh doris-fe:/root/init_fe.sh
docker exec doris-fe bash -c "/root/init_fe.sh"
docker cp /root/init_be.sh doris-be:/root/init_be.sh
docker exec doris-be bash -c "/root/init_be.sh"
sleep 30
echo "Get started with the Apache Doris registration steps!"
mysql -h 172.20.80.2 -P 9030 -uroot -e "ALTER SYSTEM ADD BACKEND \"172.20.80.3:9050\";"
echo "The initialization task of Apache-Doris has been completed, please start to experience it!"

Register Dockerfile 内容如下:


# Base Images 基础镜像
FROM bash:latest

# 添加脚本文件
ADD *.sh /root/

# 设置工作目录
WORKDIR /root/

# 设置镜像源及基础环境
RUN /bin/sh -c echo 'http://mirrors.sjtug.sjtu.edu.cn/alpine/v3.15/main' > /etc/apk/repositories && \
echo 'http://mirrors.sjtug.sjtu.edu.cn/alpine/v3.15/community' >> /etc/apk/repositories && \
apk update && \
apk add --no-cache mysql-client docker && \
rm -rf /usr/bin/docker-proxy /usr/bin/docker-init /usr/bin/dockerd && \
chmod 755 *.sh

# Docker-Compose

Compose 是⽤于定义和运⾏多容器 Docker 应⽤程序的⼯具,我们使用它来完成对 Doris 服务的编排及初始化工作。

Docker-compose 的脚本文件命名应为 docker-compose.yml

这里有几个参数需要着重讲一下:

  1. Apache Doris 是 IP 敏感和存储敏感的有状态服务,所以在设计 Compose 时要将此作为准则之一。

  2. 解决上述问题的方案是通过设置 networks 自定义一个独有的网卡,指定每个 Docker 容器节点的容器 IP 地址。

  3. 由于该教程为 1FE 1BE 的快速部署服务制作教程,持久化挂载能力将在脚本内演示,如有需要可自行添加映射卷。

  4. Compose 的服务模块执行是可以配置依赖顺序的,这样可以有效的防止有些脚本关系因为依赖错误而执行失败。

这里演示两个脚本,一个 1FE 1BE(添加数据持久化映射关系),一个 1FE 3BE(未添加数据持久化映射关系),如有需要可依照该基础进行自行修改适配。

1FE 1BE


version: '3'
services:
docker-fe:
image: "FE-Docker-Image" # 如 "apache/doris:1.1.2-rc06-fe"
container_name: "doris-fe"
tty: true
hostname: "fe"
restart: always
ports:
- 8030:8030
- 9030:9030
networks:
doris_net:
ipv4_address: 172.20.80.2
docker-be:
image: "BE-Docker-Image" # 如 "apache/doris:1.1.2-rc06-be"
container_name: "doris-be"
tty: true
hostname: "be"
restart: always
ports:
- 8041:8040
- 9001:9000
- 9051:9050
networks:
doris_net:
ipv4_address: 172.20.80.3
register:
image: "Register-Image" # 如 "apache/doris:register"
container_name: "doris-register"
hostname: "register"
privileged: true
command: ["sh","-c","/root/register.sh"]
depends_on:
- docker-fe
- docker-be-01
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock
networks:
doris_net:
ipv4_address: 172.20.80.4
networks:
doris_net:
ipam:
config:
- subnet: 172.20.80.0/16

1FE 3BE


version: '3'
services:
docker-fe:
image: "FE-Docker-Image" # 如 "apache/doris:1.1.2-rc06-fe"
container_name: "doris-fe"
tty: true
hostname: "fe"
restart: always
ports:
- 8030:8030
- 9030:9030
networks:
doris_net:
ipv4_address: 172.20.80.2
docker-be-01:
image: "BE-Docker-Image" # 如 "apache/doris:1.1.2-rc06-be"
container_name: "doris-be-01"
tty: true
hostname: "be-01"
restart: always
ports:
- 8041:8040
- 9001:9000
- 9051:9050
networks:
doris_net:
ipv4_address: 172.20.80.3
docker-be-02:
image: "BE-Docker-Image" # 如 "apache/doris:1.1.2-rc06-be"
container_name: "doris-be-02"
tty: true
hostname: "be-02"
restart: always
ports:
- 8042:8040
- 9002:9000
- 9052:9050
networks:
doris_net:
ipv4_address: 172.20.80.4
docker-be-03:
image: "BE-Docker-Image" # 如 "apache/doris:1.1.2-rc06-be"
container_name: "doris-be-03"
tty: true
hostname: "be-03"
restart: always
ports:
- 8043:8040
- 9003:9000
- 9053:9050
networks:
doris_net:
ipv4_address: 172.20.80.5
# 请看注意事项!
register:
image: "Register-Image" # 如 "apache/doris:register"
container_name: "doris-register"
hostname: "register"
privileged: true
command: ["sh","-c","/root/register.sh"]
depends_on:
- docker-fe
- docker-be-01
- docker-be-02
- docker-be-03
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock
networks:
doris_net:
ipv4_address: 172.20.80.6
networks:
doris_net:
ipam:
config:
- subnet: 172.20.80.0/16

注意:由于我们 Register 镜像里的注册及初始化脚本都只写了 1FE 1BE 的情况,所以不适用 NFE MBE 的 Compose,如有需要需自行制作 Register 镜像。

# 快速使用

制作好镜像以后,就可以快速使用了,步骤如下:

1. Docker-Compose 服务部署

Compose 是用于定义和运行多容器 Docker 应用程序的工具。

1) 下载最新版的 docker-compose文件

  • GitHub拉取


sudo curl -L https://github.com/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  • 国内 DaoCloud 拉取


sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

2)添加执行权限


sudo chmod +x /usr/local/bin/docker-compose

3)检查安装结果


docker-compose --version
> docker-compose version 1.25.1

2. 拉取或者制作 Compose 脚本

以下为 1 FE 1 BE 单节点部署 Apache Doris 1.1.2 版本的脚本,如果有需要,可根据自身调整。

如需切换版本号,将 docker-fe 和 docker-be 的镜像进行切换即可,当前支持的镜像全部在 https://hub.docker.com/repository/docker/apache/doris/ 可查看,会随着版本发布不断更新。

注意!一定需要将该文件保存至目标目录,命名为 docker-compose.yml 。

3. 启动测试

1)切换路径到docker-compose.yml目录下


cd docker-compose.yml_path

2)启动项目


docker-compose up

3)输出尾部信息应为如下


Creating doris-fe ... done
Creating doris-register ... done
Creating doris-fe ...
Creating doris-register ...
Attaching to doris-be, doris-fe, doris-register
doris-register | Welcome to Apache-Doris Docker-Compose to quickly build test images!
doris-register | Start modifying the configuration files of FE and BE and run FE and BE!
doris-register | Start initializing Apache-Doris FE!
doris-register | Apache-Doris FE initialized successfully!
doris-register | Start initializing Apache-Doris BE!
doris-register | Apache-Doris BE initialized successfully!
doris-register | Get started with the Apache Doris registration steps!
doris-register | The initialization task of Apache-Doris has been completed, please start to experience it!
doris-register exited with code 0

4)注意! 若没有报错,看到doris-register exited with code 0后请关闭当前窗口! 重新打开 Shell 链接进行操作,一定不能 Ctrl + C 切断退出

5)检查运行

6)如果是虚拟机,需要关闭防火墙,宿主机能 Ping 通虚拟机,如果是云服务器,需要开放 8030,9030 端口

  • 命令行检查


# FE 健康检查
curl http://fe_host:fe_http_port/api/bootstrap
> {"status":"OK","msg":"Success"}
# BE 健康检查
curl http://be_host:be_http_port/api/health
> {"status": "OK","msg": "To Be Added"}

  • 访问 FE-WEB-UI 界面


http://虚拟机IP或者云服务器公网IP:8030

  • 登录账号为root或者admin

  • 密码为空

#结语

使用 Docker 镜像及 Compose 工具,可以快速的部署一套测试或者学习使用的集群,但有特殊需求的情况,比如更简单的命令完成指定规模的 NFE MBE 环境搭建,甚至多 FE 高可用及 Observer 混部的各种情况,将在后续《Apache Doris Docker 高阶制作教程》里讲解,以及提供相应的社区生态工具。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
中超最新积分榜:申花榜首海港第三 蓉城升至第2 国安冷负跌出前3

中超最新积分榜:申花榜首海港第三 蓉城升至第2 国安冷负跌出前3

狍子歪解体坛
2024-05-17 22:04:29
掘金被拖入抢七,引发4连锁反应:穆雷顶薪没了,抢七也是大胜?

掘金被拖入抢七,引发4连锁反应:穆雷顶薪没了,抢七也是大胜?

篮坛扒客
2024-05-17 14:54:53
抢疯了!4450亿国债在短短三分钟瞬间售罄,是贫穷限制我的想象!

抢疯了!4450亿国债在短短三分钟瞬间售罄,是贫穷限制我的想象!

开心体育站
2024-05-18 01:02:44
张嘉倪前夫为美女剥虾!女方身材火辣,戴220万名表是大网红!

张嘉倪前夫为美女剥虾!女方身材火辣,戴220万名表是大网红!

古希腊掌管月桂的神
2024-05-17 21:47:52
凯特舅舅发声了!事关凯特,听到这个消息,大家为之捏一把汗

凯特舅舅发声了!事关凯特,听到这个消息,大家为之捏一把汗

亦纯杂谈
2024-05-17 17:37:58
炸裂!汽车女主播擦边直播,多次展露隐私部位,直播间录屏被曝光

炸裂!汽车女主播擦边直播,多次展露隐私部位,直播间录屏被曝光

阿芒娱乐说
2024-05-15 19:38:35
74岁王薇薇带俩混血女儿走红毯!都穿粉裙太嫩了,王薇薇美如少女

74岁王薇薇带俩混血女儿走红毯!都穿粉裙太嫩了,王薇薇美如少女

时尚丽人风行
2024-05-16 21:37:43
越南政坛第5号人物张氏梅落马

越南政坛第5号人物张氏梅落马

缅甸中文网
2024-05-17 19:23:55
63岁时汤和主动交兵权,朱元璋问他要什么赏赐,汤和:100个美女

63岁时汤和主动交兵权,朱元璋问他要什么赏赐,汤和:100个美女

否知的否
2024-05-16 15:02:51
刘汉承包绵阳机场,地头蛇王永成从中作梗,第二天就被灭门

刘汉承包绵阳机场,地头蛇王永成从中作梗,第二天就被灭门

纸鸢奇谭
2024-05-15 12:21:33
现在是5月17日夜晚,刚刚突发一个重大消息!又要来大动作吗?

现在是5月17日夜晚,刚刚突发一个重大消息!又要来大动作吗?

股市皆大事
2024-05-17 17:37:04
中俄元首联合声明里,别光盯着图们江出海口,里面还有重量级

中俄元首联合声明里,别光盯着图们江出海口,里面还有重量级

刘庆彬
2024-05-17 14:40:52
【重磅】中纪委重磅发文:聚焦“关键少数” !15位书记、院长被查!

【重磅】中纪委重磅发文:聚焦“关键少数” !15位书记、院长被查!

魏子柠说
2024-05-18 00:33:41
具俊晔连曝3瓜!大S接受心理治疗,两个孩子患焦虑,S妈身体堪忧

具俊晔连曝3瓜!大S接受心理治疗,两个孩子患焦虑,S妈身体堪忧

娱乐圈酸柠檬
2024-05-16 20:04:58
4分惜败,12分完败!西部霸主现原形,一生之敌更该英雄相惜

4分惜败,12分完败!西部霸主现原形,一生之敌更该英雄相惜

世界体育圈
2024-05-17 16:14:50
1900年,八国联军把“黄莲圣母”当成玩物,凌辱后运往欧洲展览?

1900年,八国联军把“黄莲圣母”当成玩物,凌辱后运往欧洲展览?

茅舍品史
2024-05-11 23:40:02
美再邀请中方坐下来谈,然而王毅去了俄罗斯,轮到中国对美制裁了

美再邀请中方坐下来谈,然而王毅去了俄罗斯,轮到中国对美制裁了

希蔓音乐
2024-05-17 13:55:27
枢密院十号:印度也要建第3艘航母了?

枢密院十号:印度也要建第3艘航母了?

环球网资讯
2024-05-17 00:07:26
枢密院十号:签了!特朗普女婿租了塞尔维亚前军队总部

枢密院十号:签了!特朗普女婿租了塞尔维亚前军队总部

环球网资讯
2024-05-17 22:50:46
莫耶斯:我们对阵曼城不是为了让他们或枪手夺冠,要为自己而战

莫耶斯:我们对阵曼城不是为了让他们或枪手夺冠,要为自己而战

直播吧
2024-05-17 20:44:28
2024-05-18 04:06:44
开源中国
开源中国
每天为开发者推送最新技术资讯
6278文章数 34216关注度
往期回顾 全部

科技要闻

京东拼增长,大力出奇迹

头条要闻

媒体:菲律宾在南海闹事时 美国航母紧急"撤"到新加坡

头条要闻

媒体:菲律宾在南海闹事时 美国航母紧急"撤"到新加坡

体育要闻

中超疯狂星期五!5场28球,单场5球起步

娱乐要闻

《庆余年2》首播口碑出炉!有好有坏

财经要闻

重磅!楼市王炸来了 多部门出手救楼市

汽车要闻

内饰与配置全新升级 全新途观L PRO将于5月30日上市

态度原创

本地
教育
房产
手机
军事航空

本地新闻

2024年"519中国旅游日"活动线上启动仪式

教育要闻

英国毕业生工签审查结果出炉:建议继续保留!附PSW签证申请指南

房产要闻

19.1亿,三亚挂出超级教育+宅地!要建国际学校,这个板块价值又要涨!

手机要闻

vivo X100s首销战报出炉,蓝厂真赌对了

军事要闻

印防长称印度将开始建第三艘母

无障碍浏览 进入关怀版