tnblog
首页
视频
资源
登录

Windows Docker Doris 容器部署

990人阅读 2025/2/28 23:22 总访问:3657384 评论:0 收藏:0 手机
分类: 大数据

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。
然后下载好我们需要的镜像。

  1. docker pull docker.1ms.run/selectdb/doris.fe-ubuntu:2.1.7
  2. 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:指定网络名称,便于后续引用

  1. 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 地址

  1. 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 地址

  1. 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。

  1. docker exec -it fe-01 /bin/bash
  2. mysql -h 127.0.0.1 -P9030 -uroot


添加be节点

  1. ALTER SYSTEM ADD BACKEND "172.20.80.6:9050";


然后我们可以查看be节点。

  1. SHOW BACKENDS;


除此之外我们还可以删除节点但是这里我们就不执行了。

  1. 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执行下面的操作:

  1. wsl --list
  2. wsl -d docker-desktop
  3. # 设置vm.max_map_count为200万
  4. sysctl -w vm.max_map_count=2000000
  5. # 查看vm.max_map_count
  6. sysctl vm.max_map_count


也可以在C:\Users\bob.he下面创建.wslconfig配置文件添加相关的配置

  1. [wsl2]
  2. kernelCommandLine = "sysctl.vm.max_map_count=2000000"


然后复制be里面的配置

  1. docker cp be-02:/etc/sysctl.conf "C:/sysctl.conf"


在空白处添加上vm.max_map_count=2000000的配置,在空白处添加,然后复制进去。

  1. docker cp "C:/sysctl.conf" be-02:/etc/sysctl.conf


然后重新启动容器be-02,如果还不行就执行下面的命令动作要快。

  1. docker exec -u root -it be-02 /bin/bash
  2. sysctl -w vm.max_map_count=2000000
  3. sysctl vm.max_map_count
  4. exit


应该就生效了。

Please disable swap memory before installation问题


然后又报错,这是由于swap导致的,只要我们关闭swap就可以了。

  1. docker exec -u root -it be-02 /bin/bash
  2. swapoff -a


然后就可以了。
永久关闭方法如下:

  1. sed -ri 's/.*swap.*/#&/' /etc/fstab

脚本


每次启动be-02好像都需要wsl设置max_map_count2000000,不管怎么配置好像都不行所以我写了个start.ps1启动脚本.

  1. wsl -d docker-desktop -e /bin/sh -c "sysctl -w vm.max_map_count=2000000"
  2. docker start fe-01
  3. docker start be-02
  4. # 等待 1 秒
  5. Start-Sleep -Seconds 1
  6. # 进入指定的 Docker 容器
  7. docker exec -u root -it be-02 /bin/bash -c "sysctl -w vm.max_map_count=2000000 && sysctl vm.max_map_count && swapoff -a"
  8. exit


在运行脚本之前,临时调整 PowerShell 的执行策略:
首先以管理员身份打开 PowerShell 。
运行以下命令:

  1. Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
  2. # 选A

然后运行你的脚本:

  1. powershell.exe D:\Doris\start.ps1

Docker Compose安装Doris3.0


创建docker-compose.yaml然后添加如下内容:

  1. version: "3"
  2. services:
  3. fe:
  4. image: apache/doris:fe-3.0.4
  5. container_name: fe
  6. environment:
  7. - FE_SERVERS=fe1:172.20.80.2:9010
  8. - FE_ID=1
  9. - TZ=Asia/Shanghai
  10. ports:
  11. - "8030:8030"
  12. - "9030:9030"
  13. volumes:
  14. - /mnt/d/dockerdata/Doris/fe/doris-meta:/opt/apache-doris/fe/doris-meta
  15. - /mnt/d/dockerdata/Doris/fe/log:/opt/apache-doris/fe/log
  16. networks:
  17. doris-network:
  18. ipv4_address: 172.20.80.2
  19. privileged: true
  20. be:
  21. image: apache/doris:be-3.0.4
  22. container_name: be
  23. environment:
  24. - FE_SERVERS=fe1:172.20.80.2:9010
  25. - BE_ADDR=172.20.80.6:9050
  26. - TZ=Asia/Shanghai
  27. ports:
  28. - "8040:8040"
  29. volumes:
  30. - /mnt/d/dockerdata/Doris/be/storage:/opt/apache-doris/be/storage
  31. - /mnt/d/dockerdata/Doris/be/log:/opt/apache-doris/be/log
  32. networks:
  33. doris-network:
  34. ipv4_address: 172.20.80.6
  35. privileged: true
  36. networks:
  37. doris-network:
  38. driver: bridge
  39. ipam:
  40. config:
  41. - subnet: 172.20.80.0/24


然后运行命令即可启动:

  1. docker-compose -f ./docker-compose.yaml up -d


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价
这一世以无限游戏为使命!
排名
6
文章
6
粉丝
16
评论
8
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术