Doris版本:1.1.5

1. 构建FE镜像

创建环境目录如下:

如何给windows上的docker装清华源_apache

1.下载官方二进制包至docker-build/fe/resource目录下

2.在docker-build/fe/resource目录下创建init_fe.sh脚本,可复制init_fe.sh

3.在docker-build/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-1.1.5-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-1.1.5-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"]

4.执行构建

# cd ./docker-build/fe
docker build . -t apache-doris:1.1.5-fe

2. 构建BE镜像

创建环境目录如下:

如何给windows上的docker装清华源_容器_02

  1. 下载官方二进制包至docker-build/be/resource目录下
  2. 在docker-build/be/resource目录下创建init_be.sh脚本,可复制init_be.sh注意:要将开头的 “#!/bin/env bash” 改为 “#!/bin/bash”
  3. 在docker-build/be目录下创建Dockerfile文件:
# 选择基础镜像
FROM openjdk:8u342-jdk
 
# 设置环境变量
ENV JAVA_HOME="/usr/local/openjdk-8/" \
    PATH="/opt/apache-doris/be/bin:$PATH"
 
USER root
 
# 下载软件至镜像内,可根据需要替换
ADD ./resource/apache-doris-be-1.1.5-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-1.1.5-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"]

4.执行构建

# cd ./docker-build/be
docker build . -t apache-doris:1.1.5-be

以上,fe和be的镜像构建完毕,可以通过docker images命令查看:

如何给windows上的docker装清华源_运维_03

3. 部署doris集群

使用一个fe节点和三个be节点

3.1 部署fe节点

IP地址记得改成自己的

docker run -itd --name=fe --env FE_SERVERS="fe1:172.10.70.2:9010" --env FE_ID=1 -p 8030:8030 -p 9030:9030 -v D:\Doris\docker-build\data\fe\doris-meta:/opt/apache-doris/fe/doris-meta -v D:\Doris\docker-build\data\fe\conf:/opt/apache-doris/fe/conf -v D:\Doris\docker-build\data\fe\log:/opt/apache-doris/fe/log --network=doris-network --ip=172.10.70.2 apache-doris:1.1.5-fe

注意将其中-v后的挂载目录换成你自己的在浏览器中验证

如何给windows上的docker装清华源_数据库_04

3.2 部署be节点

IP地址记得改成自己的,be1,be2,be3的地址为IP+1 +2 +3

docker run --privileged -itd --name=be1 --env FE_SERVERS="fe1:172.10.70.2:9010" --env BE_ADDR="172.10.70.3:9050" -p 8040:8040 -v D:\Doris\docker-build\data\be1\storage:/opt/apache-doris/be/storage -v D:\Doris\docker-build\data\be1\conf:/opt/apache-doris/be/conf -v D:\Doris\docker-build\data\be1\log:/opt/apache-doris/be/log --network=doris-network --ip=172.10.70.3 apache-doris:1.1.5-be
 
docker run --privileged -itd --name=be2 --env FE_SERVERS="fe1:172.10.70.2:9010" --env BE_ADDR="172.10.70.4:9050" -p 8041:8040 -v D:\Doris\docker-build\data\be2\storage:/opt/apache-doris/be/storage -v D:\Doris\docker-build\data\be2\conf:/opt/apache-doris/be/conf -v D:\Doris\docker-build\data\be2\log:/opt/apache-doris/be/log --network=doris-network --ip=172.10.70.4 apache-doris:1.1.5-be
 
docker run --privileged -itd --name=be3 --env FE_SERVERS="fe1:172.10.70.2:9010" --env BE_ADDR="172.10.70.5:9050" -p 8042:8040 -v D:\Doris\docker-build\data\be3\storage:/opt/apache-doris/be/storage -v D:\Doris\docker-build\data\be3\conf:/opt/apache-doris/be/conf -v D:\Doris\docker-build\data\be3\log:/opt/apache-doris/be/log --network=doris-network --ip=172.10.70.5 apache-doris:1.1.5-be

同样需要将挂载目录换成你自己的。

接下来分别进入每个be容器并启动

cd /opt/apache-doris/be/bin
start_be.sh --daemon

3.3 在fe中添加be节点

进入fe容器

登录mysql

mysql -h 127.0.0.1 -P9030 -uroot
-- 默认root无密码,通过以下命令修改root密码。
SET PASSWORD FOR 'root' = PASSWORD('root');

添加be节点

ALTER SYSTEM ADD BACKEND "172.10.70.3:9050";
ALTER SYSTEM ADD BACKEND "172.10.70.4:9050";
ALTER SYSTEM ADD BACKEND "172.10.70.5:9050";

在浏览器的ui中验证

如何给windows上的docker装清华源_运维_05

可以看到三个be节点均已被添加,且Alive为true。

也可以通过命令行查看节点状态(mysql客户端)

-- 查看be
SHOW PROC '/backends' \G;
-- 查看fe
SHOW PROC '/frontends' \G;

如何给windows上的docker装清华源_docker_06


参考资料

Windows系统下通过docker部署doris集群构建 Docker Image - Apache Doris

常见报错

1.启动fe容器时报错:exec /opt/apache-doris/fe/bin/init_fe.sh: no such file or directory 文本编码或者文件格式错误(一般都是自己创建文件的原因),直接从官网复制一份覆盖就好

在 Windows 中,每行结尾都是由两个字符组成的:回车符(CR)和换行符(LF),简写为 CRLF。
而在 Linux 中,每行结尾只有一个字符,即换行符(LF)。

如何给windows上的docker装清华源_docker_07

2.启动be容器时报错:exec /opt/apache-doris/be/bin/init_be.sh: no such file or directory 直接从官网复制来的init_be.sh的第一行“#!/bin/env bash”需要改成“#!/bin/bash”

3.修改上面那个问题后又报错:sysctl: permission denied on key “vm.max_map_count” 因为在init_be.sh中有一行 sysctl -w vm.max_map_count=2000000, 需要管理员权限,而docker创建容器时默认是没有管理员权限的,因此在docker run时要加上 --privileged

3.1在容器中执行以下命令以查看当前的 vm.max_map_count 值:

sysctl vm.max_map_count 如果返回的值小于 2000000,请执行以下命令以设置新的值: sysctl -w vm.max_map_count=2000000 这将临时设置 vm.max_map_count 的值为 2000000。

然后,你可以继续执行 /opt/apache-doris/be/bin/start_be.sh --daemon 命令来启动后端进程。

3.2如果不想进入容器里修改这个值,也可以通过windows里的cmd修改

wsl --list wsl -d docker-desktop # 设置vm.max_map_count为200万 sysctl -w vm.max_map_count=2000000 # 查看vm.max_map_count sysctl vm.max_map_count

如何给windows上的docker装清华源_数据库_08

以上修改只在当前会话有效,重启 Windows 和 WSL 都要重新设置

永久设置可以参考这条链接的方案三:

4.Windows Docker 镜像启动异常Error response from daemon: Ports are not available: listen tcp 0.0.0.0:9030 出现类似报错参考:

5.Windows Docker 镜像启动报错docker: Error response from daemon: network 172.10.70.2 not found. 根据错误提示,Docker 容器无法找到名称为 172.10.70.2 的网络。可能是因为该网络不存在或者你没有加入该网络。 请先使用以下命令创建名为 “doris-network” 的 Docker 网络:

docker network create --subnet=172.10.70.0/24 doris-network

6.重启容器后,be节点连通fe需要一段时间,需要等待五分钟左右,五分钟后可以查看一下be进程

# 进入be容器查看be进程
ps aux | grep be
-- 进入fe容器通过mysql客户端查看be
SHOW PROC '/backends' \G;

doris最低配置部署:1FE 1BE

创建表出现Failed to find 3 backends for policy解决方案

ERROR 1105 (HY000): errCode = 2, detailMessage = Failed to find 3 backends for policy: cluster|query|load|schedule|tags|medium: default_cluster|false|false|true|[{“location” : “default”}]|HDD

BE节点少于3个的且未指定副本数时 会报以上错误。

方案一:增加BE节点数

方案二:创建表里设置副本数参数

参见官方文档:

properties

设置表属性。目前支持以下属性:

  • replication_num副本数。默认副本数为3。如果 BE 节点数量小于3,则需指定副本数小于等于 BE 节点数量。在 0.15 版本后,该属性将自动转换成 replication_allocation 属性,如:"replication_num" = "3" 会自动转换成 "replication_allocation" = "tag.location.default:3"

示例如下:

CREATE TABLE example_db.table_hash  
 (  
     k1 TINYINT,  
     k2 DECIMAL(10, 2) DEFAULT "10.5",  
     k3 CHAR(10) COMMENT "string column",  
     k4 INT NOT NULL DEFAULT "1" COMMENT "int column"  
 )  
 COMMENT "my first table"  
 DISTRIBUTED BY HASH(k1) BUCKETS 2  
 -- 设置副本数为1  
 PROPERTIES (  
     "replication_num" = "1"  
 );