生产环境 Doris 集群:使用Docker Compose 部署
生产环境 Doris 集群 Docker Compose 配置(优化版)
docker-compose.yml
version: "3.8"
services:
# ================== Frontend 节点 (3节点高可用) ==================
fe1:
image: apache/doris:2.0.3-fe-x86_64
container_name: doris-fe1
environment:
- FE_SERVERS="fe1:10.0.0.101:9010,fe2:10.0.0.102:9010,fe3:10.0.0.103:9010"
- FE_ID=1
- JAVA_OPTS=-Xmx16g -Xms16g # 根据机器内存调整
ports:
- "8030:8030" # Web UI/API
- "9030:9030" # MySQL协议端口
volumes:
- "/data/doris/fe/meta1:/opt/apache-doris/fe/doris-meta" # 元数据持久化
- "/data/doris/fe/log1:/opt/apache-doris/fe/log" # 日志持久化
network_mode: host
restart: unless-stopped
deploy:
resources:
limits:
cpus: '4.0'
memory: 32G
reservations:
memory: 8G
fe2:
image: apache/doris:2.0.3-fe-x86_64
container_name: doris-fe2
environment:
- FE_SERVERS="fe1:10.0.0.101:9010,fe2:10.0.0.102:9010,fe3:10.0.0.103:9010"
- FE_ID=2
- JAVA_OPTS=-Xmx16g -Xms16g
ports:
- "8030:8030"
- "9030:9030"
volumes:
- "/data/doris/fe/meta2:/opt/apache-doris/fe/doris-meta"
- "/data/doris/fe/log2:/opt/apache-doris/fe/log"
network_mode: host
restart: unless-stopped
deploy:
resources:
limits:
cpus: '4.0'
memory: 32G
fe3:
image: apache/doris:2.0.3-fe-x86_64
container_name: doris-fe3
environment:
- FE_SERVERS="fe1:10.0.0.101:9010,fe2:10.0.0.102:9010,fe3:10.0.0.103:9010"
- FE_ID=3
- JAVA_OPTS=-Xmx16g -Xms16g
ports:
- "8030:8030"
- "9030:9030"
volumes:
- "/data/doris/fe/meta3:/opt/apache-doris/fe/doris-meta"
- "/data/doris/fe/log3:/opt/apache-doris/fe/log"
network_mode: host
restart: unless-stopped
deploy:
resources:
limits:
cpus: '4.0'
memory: 32G
# ================== Backend 节点 (3节点) ==================
be1:
image: apache/doris:2.0.3-be-x86_64
container_name: doris-be1
environment:
- FE_SERVERS="fe1:10.0.0.101:9010,fe2:10.0.0.102:9010,fe3:10.0.0.103:9010"
- BE_ADDR="10.0.0.201:9050"
- JAVA_OPTS=-Xmx32g -Xms32g # BE需要更多内存
volumes:
- "/data/doris/be/storage1:/opt/apache-doris/be/storage" # 数据存储
- "/data/doris/be/log1:/opt/apache-doris/be/log" # 日志
- "/etc/localtime:/etc/localtime:ro" # 保持时间同步
network_mode: host
restart: unless-stopped
deploy:
resources:
limits:
cpus: '8.0'
memory: 64G
reservations:
memory: 16G
be2:
image: apache/doris:2.0.3-be-x86_64
container_name: doris-be2
environment:
- FE_SERVERS="fe1:10.0.0.101:9010,fe2:10.0.0.102:9010,fe3:10.0.0.103:9010"
- BE_ADDR="10.0.0.202:9050"
- JAVA_OPTS=-Xmx32g -Xms32g
volumes:
- "/data/doris/be/storage2:/opt/apache-doris/be/storage"
- "/data/doris/be/log2:/opt/apache-doris/be/log"
- "/etc/localtime:/etc/localtime:ro"
network_mode: host
restart: unless-stopped
deploy:
resources:
limits:
cpus: '8.0'
memory: 64G
be3:
image: apache/doris:2.0.3-be-x86_64
container_name: doris-be3
environment:
- FE_SERVERS="fe1:10.0.0.101:9010,fe2:10.0.0.102:9010,fe3:10.0.0.103:9010"
- BE_ADDR="10.0.0.203:9050"
- JAVA_OPTS=-Xmx32g -Xms32g
volumes:
- "/data/doris/be/storage3:/opt/apache-doris/be/storage"
- "/data/doris/be/log3:/opt/apache-doris/be/log"
- "/etc/localtime:/etc/localtime:ro"
network_mode: host
restart: unless-stopped
deploy:
resources:
limits:
cpus: '8.0'
memory: 64G
生产环境部署说明
1. 节点分配
| 节点类型 | 主机 IP | 容器名称 | 数据目录 |
|---|---|---|---|
| FE1 | 10.0.0.101 | doris-fe1 | /data/doris/fe/meta1 |
| FE2 | 10.0.0.102 | doris-fe2 | /data/doris/fe/meta2 |
| FE3 | 10.0.0.103 | doris-fe3 | /data/doris/fe/meta3 |
| BE1 | 10.0.0.201 | doris-be1 | /data/doris/be/storage1 |
| BE2 | 10.0.0.202 | doris-be2 | /data/doris/be/storage2 |
| BE3 | 10.0.0.203 | doris-be3 | /data/doris/be/storage3 |
2. 关键优化项
-
资源限制:
- FE:4核CPU + 32GB内存(JVM分配16GB)
- BE:8核CPU + 64GB内存(JVM分配32GB)
- 根据实际负载调整,BE通常需要更多资源
-
持久化存储:
volumes: - "/data/doris/fe/meta1:/opt/apache-doris/fe/doris-meta" # FE元数据 - "/data/doris/be/storage1:/opt/apache-doris/be/storage" # BE数据存储- 建议使用SSD存储
- 数据目录按节点分离避免冲突
-
日志管理:
volumes: - "/data/doris/fe/log1:/opt/apache-doris/fe/log" # FE日志 - "/data/doris/be/log1:/opt/apache-doris/be/log" # BE日志- 方便日志收集和排查问题
-
时间同步:
volumes: - "/etc/localtime:/etc/localtime:ro" # 保持宿主机和容器时间一致- Doris集群对节点时间同步要求严格(误差<5s)
3. 部署流程
# 在每台主机上创建数据目录
ssh 10.0.0.101 "sudo mkdir -p /data/doris/{fe/meta1,fe/log1}"
ssh 10.0.0.102 "sudo mkdir -p /data/doris/{fe/meta2,fe/log2}"
ssh 10.0.0.103 "sudo mkdir -p /data/doris/{fe/meta3,fe/log3}"
ssh 10.0.0.201 "sudo mkdir -p /data/doris/{be/storage1,be/log1}"
ssh 10.0.0.202 "sudo mkdir -p /data/doris/{be/storage2,be/log2}"
ssh 10.0.0.203 "sudo mkdir -p /data/doris/{be/storage3,be/log3}"
# 设置目录权限(Doris默认使用doris用户运行)
ssh 10.0.0.101 "sudo chown -R 1000:1000 /data/doris"
# ...其他节点同样操作
# 按顺序启动集群(先FE后BE)
## 在FE节点启动服务
ssh 10.0.0.101 "docker-compose up -d fe1"
ssh 10.0.0.102 "docker-compose up -d fe2"
ssh 10.0.0.103 "docker-compose up -d fe3"
## 等待FE集群选举完成(约30秒)
sleep 30
## 在BE节点启动服务
ssh 10.0.0.201 "docker-compose up -d be1"
ssh 10.0.0.202 "docker-compose up -d be2"
ssh 10.0.0.203 "docker-compose up -d be3"
4. 集群验证
# 连接到任意FE节点
mysql -h 10.0.0.101 -P 9030 -uroot
# 查看FE状态
SHOW PROC '/frontends';
# 查看BE状态
SHOW PROC '/backends';
# 预期输出(示例):
+-------------------+--------+----------+...----+---------+
| Name | IP | HostName | ... | Alive |
+-------------------+--------+----------+...----+---------+
| 10.0.0.101_9010 | 10.0.0.101 | doris-fe1 | ... | true |
| 10.0.0.102_9010 | 10.0.0.102 | doris-fe2 | ... | true |
| 10.0.0.103_9010 | 10.0.0.103 | doris-fe3 | ... | true |
+-------------------+--------+----------+...----+---------+
+-------------------+--------+----------+...----+---------+
| BackendId | Host | Heartbeat... | Alive |
+-------------------+--------+----------+...----+---------+
| 10001 | 10.0.0.201 | ... | true |
| 10002 | 10.0.0.202 | ... | true |
| 10003 | 10.0.0.203 | ... | true |
+-------------------+--------+----------+...----+---------+
5. 生产环境建议
-
监控告警:
- 使用Prometheus监控关键指标:FE/BE存活状态、查询延迟、磁盘使用率
- 设置阈值告警(如磁盘>80%,节点Down)
-
备份策略:
-- 定期备份元数据 BACKUP SNAPSHOT db_name.snapshot_name TO `repo_name` ON (table_list); -
安全加固:
- 设置root密码:启动时添加
-e ROOT_PASSWORD=your_strong_password - 启用SSL加密:配置
enable_ssl=true并加载证书
- 设置root密码:启动时添加
-
性能调优:
# 在BE环境变量中添加 environment: - BE_EXTRA_ARGS="--disable_auto_compaction=false --max_compaction_threads=8"
此配置已针对生产环境优化,可直接部署使用。建议在正式上线前进行压力测试,根据实际负载调整资源参数。

浙公网安备 33010602011771号