1. 项目概述
最近在本地搭建Doris测试环境时,发现网上大多数教程都是基于Linux系统的,而Windows平台的完整部署指南相对较少。作为一个长期在Windows环境下工作的数据分析师,我决定记录下在Windows 10/11系统上使用Docker部署Apache Doris 2.1.11版本的全过程。
Doris作为一款开源的MPP分析型数据库,非常适合用于实时数据分析场景。通过Docker容器化部署,我们可以快速搭建一个隔离的测试环境,避免污染本地系统,也方便后续的版本升级和环境迁移。
2. 环境准备
2.1 系统要求
在开始之前,请确保你的Windows系统满足以下要求:
- Windows 10版本2004或更高(建议使用Windows 11)
- 已启用Hyper-V和WSL2功能
- 至少8GB内存(16GB更佳)
- 50GB可用磁盘空间
提示:可以通过在PowerShell中运行
systeminfo命令来检查系统版本和Hyper-V支持情况。
2.2 Docker安装与配置
-
下载并安装Docker Desktop for Windows:
- 官方下载地址:https://www.docker.com/products/docker-desktop/
- 安装时勾选"Use WSL 2 instead of Hyper-V"选项(如果可用)
-
安装完成后,打开Docker Desktop设置:
- 在"General"中启用"Start Docker Desktop when you log in"
- 在"Resources" → "WSL Integration"中启用你的WSL发行版
-
配置镜像加速器(国内用户建议配置):
json复制{ "registry-mirrors": [ "https://docker.1ms.run", "https://docker.jsdelivr.fyi" ] }
2.3 WSL2优化
由于Doris对内存需求较高,建议调整WSL2的内存限制:
- 在用户目录下创建或修改
.wslconfig文件:code复制[wsl2] memory=8GB swap=4GB localhostForwarding=true - 在PowerShell中执行
wsl --shutdown重启WSL2使配置生效
3. Doris容器化部署
3.1 理解Doris架构
Apache Doris采用FE(Frontend)和BE(Backend)分离的架构:
- FE:负责元数据管理、查询解析和调度
- BE:负责数据存储和查询执行
在单机部署时,我们通常部署1个FE和1个BE节点。生产环境建议至少3个FE和多个BE节点。
3.2 准备docker-compose.yaml
创建项目目录(如doris-docker),然后新建docker-compose.yaml文件:
yaml复制version: '3.8'
services:
fe:
image: apache/doris:fe-2.1.11
container_name: doris-fe
hostname: fe
networks:
doris-net:
ipv4_address: 172.30.0.10
ports:
- "8030:8030" # HTTP端口
- "9030:9030" # MySQL协议端口
- "9010:9010" # FE内部通信端口
environment:
- FE_SERVERS=fe1:172.30.0.10:9010
- FE_ID=1
volumes:
- ./doris-meta:/opt/apache-doris/fe/doris-meta
- ./fe-log:/opt/apache-doris/fe/log
restart: unless-stopped
be:
image: apache/doris:be-2.1.11
container_name: doris-be
hostname: be
networks:
doris-net:
ipv4_address: 172.30.0.11
ports:
- "8040:8040" # BE HTTP端口
- "9050:9050" # BE Thrift端口
environment:
- FE_SERVERS=fe1:172.30.0.10:9010
- BE_ADDR=172.30.0.11:9050
volumes:
- ./be-storage:/opt/apache-doris/be/storage
- ./be-log:/opt/apache-doris/be/log
depends_on:
- fe
restart: unless-stopped
networks:
doris-net:
driver: bridge
ipam:
config:
- subnet: 172.30.0.0/24
3.3 关键配置解析
-
网络配置:
- 自定义
doris-net网络并指定子网,确保FE和BE能通过固定IP通信 - 避免使用
127.0.0.1,因为在Windows上Docker容器的localhost与宿主机不共享
- 自定义
-
数据持久化:
doris-meta:存储FE元数据,删除后会导致集群信息丢失be-storage:存储BE数据,删除后表数据将丢失fe-log和be-log:容器日志目录,方便排查问题
-
端口映射:
- 8030:FE的HTTP端口,用于Web UI访问
- 9030:MySQL协议端口,用于客户端连接
- 9010:FE内部通信端口
- 8040:BE的HTTP端口
- 9050:BE的Thrift端口
4. 启动与验证
4.1 启动Doris集群
-
在项目目录下执行:
bash复制
docker compose up -d -
观察日志确认服务启动正常:
bash复制
docker logs -f doris-fe docker logs -f doris-be
4.2 验证FE启动
-
访问FE Web UI:http://localhost:8030
- 默认用户名:root
- 默认密码:空
-
通过MySQL客户端连接:
bash复制
mysql -h127.0.0.1 -P9030 -uroot
4.3 添加BE节点
在MySQL客户端中执行:
sql复制ALTER SYSTEM ADD BACKEND "172.30.0.11:9050";
然后检查BE状态:
sql复制SHOW BACKENDS;
5. 常见问题与解决方案
5.1 BE无法连接FE
现象:BE日志中出现"failed to get master fe"错误
解决方案:
- 确认
FE_SERVERS环境变量配置正确 - 检查网络连通性:
bash复制docker exec -it doris-be ping 172.30.0.10 - 确保FE已完全启动(查看FE日志)
5.2 镜像拉取失败
现象:docker compose up时卡在拉取镜像
解决方案:
- 单独拉取镜像:
bash复制
docker pull apache/doris:fe-2.1.11 docker pull apache/doris:be-2.1.11 - 更换镜像源(参考3.2节配置)
5.3 内存不足
现象:容器频繁重启或查询失败
解决方案:
- 增加Docker内存限制(建议至少8GB)
- 调整WSL2内存配置(参考2.3节)
- 限制BE内存使用(在BE环境变量中添加):
yaml复制environment: - MEM_LIMIT=4G
6. 性能优化建议
6.1 资源配置调整
对于性能敏感场景,建议调整以下参数:
-
FE JVM参数(通过环境变量):
yaml复制environment: - JAVA_OPTS=-Xmx4g -Xms4g -
BE内存限制(在MySQL客户端中设置):
sql复制SET GLOBAL mem_limit = 8G;
6.2 存储优化
- 使用SSD存储挂载BE数据目录
- 调整BE存储引擎参数:
sql复制ALTER SYSTEM SET storage_engine = "olap";
6.3 查询优化
- 合理设计表分区和分桶
- 为常用查询条件创建物化视图
- 定期执行
ANALYZE TABLE更新统计信息
7. 日常维护
7.1 备份策略
- 定期备份FE元数据目录(
doris-meta) - 重要表使用
EXPORT命令导出数据 - 考虑设置定期快照
7.2 日志管理
- 配置日志轮转(在FE/BE配置文件中设置)
- 重要日志文件:
- FE:
fe.log、fe.warn.log - BE:
be.INFO、be.WARNING
- FE:
7.3 升级注意事项
- 先备份元数据和重要数据
- 按顺序升级:FE先升级,BE后升级
- 检查版本兼容性矩阵
我在实际使用中发现,Windows上的Docker部署Doris虽然可行,但对于生产环境还是建议使用Linux服务器。这种部署方式最适合作为开发测试环境使用,可以快速验证SQL逻辑和性能特征。