生产环境 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. 关键优化项

  1. 资源限制

    • FE:4核CPU + 32GB内存(JVM分配16GB)
    • BE:8核CPU + 64GB内存(JVM分配32GB)
    • 根据实际负载调整,BE通常需要更多资源
  2. 持久化存储

    volumes:
      - "/data/doris/fe/meta1:/opt/apache-doris/fe/doris-meta"  # FE元数据
      - "/data/doris/be/storage1:/opt/apache-doris/be/storage"  # BE数据存储
    
    • 建议使用SSD存储
    • 数据目录按节点分离避免冲突
  3. 日志管理

    volumes:
      - "/data/doris/fe/log1:/opt/apache-doris/fe/log"  # FE日志
      - "/data/doris/be/log1:/opt/apache-doris/be/log"  # BE日志
    
    • 方便日志收集和排查问题
  4. 时间同步

    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. 生产环境建议

  1. 监控告警

    • 使用Prometheus监控关键指标:FE/BE存活状态、查询延迟、磁盘使用率
    • 设置阈值告警(如磁盘>80%,节点Down)
  2. 备份策略

    -- 定期备份元数据
    BACKUP SNAPSHOT db_name.snapshot_name
    TO `repo_name`
    ON (table_list);
    
  3. 安全加固

    • 设置root密码:启动时添加 -e ROOT_PASSWORD=your_strong_password
    • 启用SSL加密:配置 enable_ssl=true 并加载证书
  4. 性能调优

    # 在BE环境变量中添加
    environment:
      - BE_EXTRA_ARGS="--disable_auto_compaction=false --max_compaction_threads=8"
    

此配置已针对生产环境优化,可直接部署使用。建议在正式上线前进行压力测试,根据实际负载调整资源参数。

posted @ 2025-07-25 11:01  姬高波  阅读(626)  评论(0)    收藏  举报