Apache Doris 部署实践分享

Viewed 26

Apache Doris 部署实践分享

Apache Doris 是一款基于 MPP 架构的高性能、实时的分析型数据库,以其高并发、低延迟和易于使用的特性,在实时数据仓库和即席查询场景中得到了广泛应用。本文将介绍两种主流的部署方式:Docker 快速部署与手动标准部署,帮助开发者和运维人员根据自身需求选择合适的方案。

部署前准备:环境与系统配置

无论选择哪种部署方式,了解 Doris 的基本环境要求都是必要的。

  • 操作系统:推荐使用 CentOS 7.x/8.x 或 Ubuntu 18.04+/20.04+ 等主流 Linux 发行版,内核版本不低于 3.10。
  • Java 环境
    • Doris 2.x 及更早版本依赖 JDK 1.8
    • Doris 3.x 及之后版本则需升级至 JDK 17
  • 系统参数调优:为确保 Doris 稳定高效运行,避免“文件句柄不足”或“虚拟内存抖动”等问题,建议对以下 Linux 内核参数进行优化。
  1. 提升文件句柄数
    Doris 运行时会打开大量文件,默认的 1024 个句柄通常不足。编辑 /etc/security/limits.conf 文件,添加如下配置:

    * soft nofile 655360
    * hard nofile 655360
    

    修改后,可通过 ulimit -n 655360 命令使配置临时生效。

  2. 调整虚拟内存策略
    为避免 Linux 系统频繁使用 Swap 分区导致性能下降,应降低系统使用虚拟内存的倾向。编辑 /etc/sysctl.conf 文件,添加或修改以下行:

    vm.swappiness=10
    

    执行 sysctl -p 命令使配置生效。

  3. 设置最大内存映射数
    Doris 的 BE 节点启动时需要较大的内存映射空间。编辑 /etc/sysctl.conf 文件,确保以下参数值不小于 2000000:

    vm.max_map_count = 2000000
    

    执行 sysctl -p 命令使配置生效。

方式一:Docker Compose 快速部署

对于希望快速体验 Doris 功能、进行开发测试或搭建演示环境的用户,使用 Docker Compose 是最便捷的选择。此方法可以一键启动一个包含 Frontend (FE) 和 Backend (BE) 组件的单机集群。

  1. 创建 docker-compose.yml 文件
    创建一个 docker-compose.yml 文件,并填入以下内容。该配置适用于 Doris 3.x 版本,通过环境变量强制设置了单副本,以适应单节点测试场景。

    注意:配置文件中的 IP 地址为 Docker 网络内部地址,请勿修改。

    version: '3'
    services:
      doris-fe:
        image: apache/doris:fe-3.1.4
        container_name: doris-fe
        hostname: doris-fe
        environment:
          - FE_SERVERS=fe1:172.25.80.2:9010
          - FE_ID=1
          # 关键配置:设置默认副本数为1,适用于单节点测试
          - CONFIG_default_replication_num=1
        ports:
          - "8030:8030"
          - "9030:9030"
        volumes:
          - ./doris/fe/doris-meta:/opt/apache-doris/fe/doris-meta
          - ./doris/fe/log:/opt/apache-doris/fe/log
        networks:
          doris-net:
            ipv4_address: 172.25.80.2
    
      doris-be:
        image: apache/doris:be-3.1.4
        container_name: doris-be
        hostname: doris-be
        depends_on:
          - doris-fe
        environment:
          - FE_SERVERS=fe1:172.25.80.2:9010
          - BE_ADDR=172.25.80.3:9050
        ports:
          - "8040:8040"
        volumes:
          - ./doris/be/storage:/opt/apache-doris/be/storage
          - ./doris/be/log:/opt/apache-doris/be/log
        networks:
          doris-net:
            ipv4_address: 172.25.80.3
    
    networks:
      doris-net:
        driver: bridge
        ipam:
          config:
            - subnet: 172.25.80.0/24
    
  2. 启动集群
    docker-compose.yml 所在目录下,执行以下命令启动服务:

    docker-compose up -d
    
  3. 验证部署

    • Web UI 访问:在浏览器中访问 http://127.0.0.1:8030,即可进入 Doris 管理界面。默认用户名为 root,无密码。
    • MySQL 客户端连接:使用 MySQL 客户端工具连接 Doris,进行 SQL 操作。
      mysql -uroot -P9030 -h127.0.0.1
      

方式二:手动标准部署

手动部署是生产环境的标准实践,提供了更高的灵活性和可控性,适用于构建高可用、可扩展的 Doris 集群。

  1. 下载安装包
    从 Apache Doris 官方网站下载最新稳定版的二进制安装包。

    # 以 2.1.6 版本为例
    wget https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-2.1.6-bin-x64.tar.gz
    
  2. 解压与配置

    1. 解压安装包
      tar -zxvf apache-doris-2.1.6-bin-x64.tar.gz
      cd apache-doris-2.1.6-bin-x64
      
    2. 配置 FE (Frontend)
      编辑 fe/conf/fe.conf 文件。如果服务器存在多个网段,必须配置 priority_networks 参数,以指定 FE 监听的 IP 网段,例如 priority_networks = 192.168.0.0/24。同时,确保 JAVA_HOME 环境变量已正确指向 JDK 安装路径。
    3. 配置 BE (Backend)
      编辑 be/conf/be.conf 文件。同样,根据服务器网络情况配置 priority_networksJAVA_HOME
  3. 启动服务并组建集群

    1. 启动 FE 服务
      ./fe/bin/start_fe.sh --daemon
      
    2. 启动 BE 服务
      ./be/bin/start_be.sh --daemon
      
    3. 注册 BE 节点
      使用 MySQL 客户端连接 FE,将 BE 节点加入集群。
      # 连接 FE,默认查询端口为 9030
      mysql -uroot -P9030 -h<fe_ip_address>
      
      # 在 MySQL 命令行中执行,将 <be_ip_address> 替换为实际的 BE 服务器 IP
      ALTER SYSTEM ADD BACKEND "<be_ip_address>:9050";
      
      # 查看 BE 节点状态,确认注册成功
      SHOW BACKENDS;
      
  4. 验证部署
    与 Docker 部署类似,通过访问 http://<fe_ip_address>:8030 或使用 MySQL 客户端连接,确认集群状态正常。

附录:核心端口说明

在部署过程中,确保防火墙已开放 Doris 所需的核心端口

组件 端口 用途
FE 9030 MySQL 客户端连接端口
FE 8030 Web UI 与 HTTP API 端口
BE 9060 BE 服务端口,接收 FE 请求
BE 8040 BE Web UI 端口
BE 9050 BE 心跳服务端口

欢迎大家指教

0 Answers