
Windows Docker Doris 容器部署
引言
Doris 是一款高性能、分布式、可扩展的分析型数据库,适用于海量数据的存储和分析。
在本文中,我们将详细介绍如何在 Windows 系统上使用 Docker 部署 Doris 容器。
Doris中BE和FE介绍
BE(Backend)
存储与计算执行者:BE是Doris中负责存储数据和执行计算任务的核心组件,每个BE节点都拥有自己的存储设备,会将数据存储在本地磁盘中。
数据存储:BE以列式存储的方式存储数据,能够高效地对列进行压缩和编码,从而节省存储空间并加速数据查询。
任务执行:当FE将查询计划发送给BE后,BE会根据计划解析数据块,执行相应的计算操作(如过滤、排序、聚合等),并将结果返回给FE。
数据副本管理:为了保证数据的可靠性和可用性,Doris会在不同的BE节点上存储数据的多个副本,BE负责维护副本的分布和一致性,确保即使部分节点故障,数据仍然可用。
负载均衡:BE节点之间会进行负载均衡,新插入的数据会根据一定的规则均匀地分布到各个BE节点上,避免某些节点负载过高。
FE(Frontend)
集群管理与协调者:FE是Doris的管理入口,负责集群的元数据管理、查询计划的生成和任务调度等工作。
元数据管理:FE存储了整个Doris集群的元数据信息,包括数据库、表、列的结构定义、数据分布、副本位置等。它通过心跳机制与BE节点保持通信,实时监控BE的状态和数据分布情况,确保元数据的准确性和一致性。
查询处理:FE接收用户提交的查询请求,对其进行解析和优化,生成高效的查询计划,并将计划发送给相应的BE节点执行。在查询过程中,FE会协调多个BE节点之间的数据传输和计算任务,最终将合并后的结果返回给用户。
用户交互接口:FE为用户提供了一套统一的接口,用户可以通过MySQL客户端、JDBC等工具连接到FE,进行数据库操作和数据查询。
系统管理任务:FE还承担了系统管理的职责,如创建和删除表、设置集群参数、监控集群状态等,它是用户和Doris集群之间的桥梁。
准备工作
需要前提安装好Docker。
然后下载好我们需要的镜像。
docker pull docker.1ms.run/selectdb/doris.fe-ubuntu:2.1.7
docker pull docker.1ms.run/selectdb/doris.be-ubuntu:2.1.7
安装Doris
创建一个自定义桥接网络,供 Doris 的 FE 和 BE 容器使用--driver bridge
:指定网络驱动为桥接模式,这是 Docker 中最常用的网络驱动--subnet
:172.20.80.0/24:指定网络的子网范围doris-network
:指定网络名称,便于后续引用
docker network create --driver bridge --subnet=172.20.80.0/24 doris-network
启动 FE(Frontend)容器-itd
:以交互模式、启动后在后台运行容器--privileged
:以特权模式运行容器,允许容器访问宿主机的某些关键资源和功能--name=fe-01
:指定容器名称为 fe-01--env FE_SERVERS="fe1:172.20.80.2:9010"
:设置环境变量 FE_SERVERS,指定 FE 的地址--env FE_ID=1
:设置环境变量 FE_ID,指定 FE 的唯一标识-p 8030:8030 -p 9030:9030
:将容器的 8030 和 9030 端口映射到宿主机的相同端口--network=doris-network
:将容器连接到之前创建的 doris-network 网络--ip=172.20.80.2
:指定容器在 doris-network 中的 IP 地址
docker run -itd --privileged --name=fe-01 --env FE_SERVERS="fe1:172.20.80.2:9010" --env FE_ID=1 -p 8030:8030 -p 9030:9030 --network=doris-network --ip=172.20.80.2 docker.1ms.run/selectdb/doris.fe-ubuntu:2.1.7
启动 BE(Backend)容器-itd
:以交互模式、启动后在后台运行容器--privileged
:以特权模式运行容器,允许容器访问宿主机的某些关键资源和功能--name=be-02
:指定容器名称为 be-02--env FE_SERVERS="fe1:172.20.80.2:9010"
:设置环境变量 FE_SERVERS,指定 FE 的地址--env BE_ADDR="172.20.80.6:9050"
:设置环境变量 BE_ADDR,指定 BE 的地址-p 8040:8040
:将容器的 8040 端口映射到宿主机的相同端口--network=doris-network
:将容器连接到之前创建的 doris-network 网络--ip=172.20.80.6
:指定容器在 doris-network 中的 IP 地址
docker run -itd --privileged --name=be-02 --env FE_SERVERS="fe1:172.20.80.2:9010" --env BE_ADDR="172.20.80.6:9050" -p 8040:8040 --network=doris-network --ip=172.20.80.6 docker.1ms.run/selectdb/doris.be-ubuntu:2.1.7
然后我们进入fe容器,登录mysql。
docker exec -it fe-01 /bin/bash
mysql -h 127.0.0.1 -P9030 -uroot
添加be节点
ALTER SYSTEM ADD BACKEND "172.20.80.6:9050";
然后我们可以查看be节点。
SHOW BACKENDS;
除此之外我们还可以删除节点但是这里我们就不执行了。
ALTER SYSTEM DROPP BACKEND "172.20.80.5:9050";
然后我们登录到Doris验证一下的Dashboard ,账号是root
没有密码直接登录。
登录后点击Session
一栏。
其他
vm.max_map_count问题
第二天启动的时候报错be:sysctl -w vm.max_map_count=2000000
原因是vm.max_map_count
参数的默认值通常较小,可能无法满足Doris容器的需求。当Doris容器启动时,如果内核参数vm.max_map_count
的值过小,会导致容器启动失败或运行异常。
首先打开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
也可以在C:\Users\bob.he
下面创建.wslconfig
配置文件添加相关的配置
[wsl2]
kernelCommandLine = "sysctl.vm.max_map_count=2000000"
然后复制be里面的配置
docker cp be-02:/etc/sysctl.conf "C:/sysctl.conf"
在空白处添加上vm.max_map_count=2000000
的配置,在空白处添加,然后复制进去。
docker cp "C:/sysctl.conf" be-02:/etc/sysctl.conf
然后重新启动容器be-02
,如果还不行就执行下面的命令动作要快。
docker exec -u root -it be-02 /bin/bash
sysctl -w vm.max_map_count=2000000
sysctl vm.max_map_count
exit
应该就生效了。
Please disable swap memory before installation问题
然后又报错,这是由于swap导致的,只要我们关闭swap就可以了。
docker exec -u root -it be-02 /bin/bash
swapoff -a
然后就可以了。
永久关闭方法如下:
sed -ri 's/.*swap.*/#&/' /etc/fstab
脚本
每次启动be-02
好像都需要wsl设置max_map_count
为2000000
,不管怎么配置好像都不行所以我写了个start.ps1
启动脚本.
wsl -d docker-desktop -e /bin/sh -c "sysctl -w vm.max_map_count=2000000"
docker start fe-01
docker start be-02
# 等待 1 秒
Start-Sleep -Seconds 1
# 进入指定的 Docker 容器
docker exec -u root -it be-02 /bin/bash -c "sysctl -w vm.max_map_count=2000000 && sysctl vm.max_map_count && swapoff -a"
exit
在运行脚本之前,临时调整 PowerShell 的执行策略:
首先以管理员身份打开 PowerShell 。
运行以下命令:
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
# 选A
然后运行你的脚本:
powershell.exe D:\Doris\start.ps1
Docker Compose安装Doris3.0
创建docker-compose.yaml
然后添加如下内容:
version: "3"
services:
fe:
image: apache/doris:fe-3.0.4
container_name: fe
environment:
- FE_SERVERS=fe1:172.20.80.2:9010
- FE_ID=1
- TZ=Asia/Shanghai
ports:
- "8030:8030"
- "9030:9030"
volumes:
- /mnt/d/dockerdata/Doris/fe/doris-meta:/opt/apache-doris/fe/doris-meta
- /mnt/d/dockerdata/Doris/fe/log:/opt/apache-doris/fe/log
networks:
doris-network:
ipv4_address: 172.20.80.2
privileged: true
be:
image: apache/doris:be-3.0.4
container_name: be
environment:
- FE_SERVERS=fe1:172.20.80.2:9010
- BE_ADDR=172.20.80.6:9050
- TZ=Asia/Shanghai
ports:
- "8040:8040"
volumes:
- /mnt/d/dockerdata/Doris/be/storage:/opt/apache-doris/be/storage
- /mnt/d/dockerdata/Doris/be/log:/opt/apache-doris/be/log
networks:
doris-network:
ipv4_address: 172.20.80.6
privileged: true
networks:
doris-network:
driver: bridge
ipam:
config:
- subnet: 172.20.80.0/24
然后运行命令即可启动:
docker-compose -f ./docker-compose.yaml up -d
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

