Doris集群部署

说明

  • 使用三台机器,分别部署三个FE、三个BE
  • 部署整体过程为
    • 部署 FE Master 节点:部署第一个 FE 节点作为 Master 节点
    • 部署 FE 集群:部署 FE 集群,添加 Follower 或 Observer FE 节点
    • 部署 BE 节点:向 FE 集群中注册 BE 节点
    • 验证集群正确性:部署完成后连接并验证集群正确性

服务器规划

主机名 IP 部署服务 操作系统 用户 部署目录
c1 192.168.212.81 FE+BE CentOS7 doris /app/doris
c2 192.168.212.82 FE+BE CentOS7 doris /app/doris
c2 192.168.212.83 FE+BE CentOS7 doris /app/doris

使用端口

实例名称 端口名称 默认端口 通信方向 说明
BE be_port 9060 FE -> BE BE 上 Thrift Server 的端口,用于接收来自 FE 的请求
BE webserver_port 8040 BE <-> BE BE 上的 HTTP Server 端口
BE heartbeat_service_port 9050 FE -> BE BE 上的心跳服务端口(Thrift),用于接收来自 FE 的心跳
BE brpc_port 8060 FE <-> BE,BE <-> BE BE 上的 BRPC 端口,用于 BE 之间的通信
FE http_port 8030 FE <-> FE,Client <-> FE FE 上的 HTTP Server 端口
FE rpc_port 9020 BE -> FE,FE <-> FE FE 上的 Thrift Server 端口,每个 FE 的配置需保持一致
FE query_port 9030 Client <-> FE FE 上的 MySQL Server 端口
FE edit_log_port 9010 FE <-> FE FE 上的 bdbje 通信端口

调整操作系统配置

  • 使用root用户操作
  • 所有节点均执行
1
2
3
$ vi /etc/security/limits.conf 
* soft nofile 65536
* hard nofile 65536
1
2
3
$ vi /etc/sysctl.conf
vm.max_map_count=2000000
$ sudo sysctl -p

配置 JAVA 环境

  • 使用 doris 用户
  • 所有节点均执行
  • 配置过程:略
  • 查看 java 环境
1
2
3
4
$ java -version
java version "1.8.0_441"
Java(TM) SE Runtime Environment (build 1.8.0_441-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.441-b07, mixed mode)

部署 FE

下载解压安装包

  • 三个FE节点均执行
1
2
3
wget https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-2.1.9-bin-x64.tar.gz
tar -zxvf apache-doris-2.1.9-bin-x64.tar.gz
ln -sfn apache-doris-2.1.9-bin-x64 apache-doris

调整配置

  • 三个FE节点均执行

  • 创建元数据目录

1
mkdir -p /app/doris/apache-doris/doris-meta
  • 创建数据目录
1
mkdir /app/doris/apache-doris/log
  • 更改配置
1
cd apache-doris/fe
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
vi conf/fe.conf
# 按需更改 JAVA_OPTS,如果虚拟机内存不够大,注意调整 -Xmx 配置
JAVA_OPTS=……
# 指定日志文件路径
LOG_DIR = /app/doris/apache-doris/log
# 开启表名大小写不敏感
lower_case_table_names = 1
# 更改元数据存储目录
meta_dir = /app/doris/apache-doris/doris-meta
# 更改网段,为集群节点所在的网段
priority_networks = 192.168.212.0/24

构建 FE 集群

Master 节点

  • c1 节点启动 FE 进程,作为 Master 节点
1
2
cd /app/doris/apache-doris/fe
bin/start_fe.sh --daemon
  • 查看启动日志
1
tail -f /app/doris/apache-doris/log/fe.log
  • 检查 be 节点启动状态

    • 安装 MySQL 客户端
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    # 创建存储 MySQL 的目录
    mkdir /app/doris/mysql
    cd /app/doris/mysql
    
    # 根据操作系统下载 MySQL 二进制包
    wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
    
    # 解压
    tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
    
    # 配置环境变量,PATH 增加 mysql bin 目录
    $ vi ~/.bashrc
    ## 新增配置
    export PATH=$PATH:/app/doris/mysql/mysql-5.7.44-linux-glibc2.12-x86_64/bin
    # 加载配置
    source ~/.bashrc
    
    # 测试 mysql 命令
    $ mysql --version
    mysql  Ver 14.14 Distrib 5.7.44, for linux-glibc2.12 (x86_64) using  EditLine wrapper
    
    • 连接 FE
      • 通过 MySQL 客户端连接 Doris 集群,初始化用户为 root,默认密码为空
    1
    2
    3
    4
    5
    
    # 说明:
    mysql -uroot -P<fe_query_port> -h<fe_ip_address>
    
    # 例:
    mysql -uroot -P9030 -h127.0.0.1
    
    • 查看 fe 状态
      • Alive 为 true 表示节点存活
      • Join 为 true 表示节点加入到集群中,但不代表当前还在集群内(可能已失联)
      • IsMaster 为 true 表示当前节点为 Master 节点
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    mysql> show frontends \G
    *************************** 1. row ***************************
                  Name: fe_77d17b68_185d_4e81_8f6c_d1394d926b50
                  Host: 192.168.212.81
           EditLogPort: 9010
              HttpPort: 8030
             QueryPort: 9030
               RpcPort: 9020
    ArrowFlightSqlPort: -1
                  Role: FOLLOWER
              IsMaster: true
             ClusterId: 1106941032
                  Join: true
                 Alive: true
     ReplayedJournalId: 153
         LastStartTime: 2025-05-09 15:28:00
         LastHeartbeat: 2025-05-09 15:40:01
              IsHelper: true
                ErrMsg:
               Version: doris-2.1.9-rc02-3390475e02
      CurrentConnected: Yes
    

Follower 节点

  • c1 注册 c1/c2 节点,mysql 工具连接 c1 节点 FE 执行

    • 注册节点语法
    1
    2
    3
    4
    
    # 注册节点为 FOLLOWER 节点
    ALTER SYSTEM ADD FOLLOWER "<fe_ip_address>:<fe_edit_log_port>";
    # 注册节点为 OBSERVER 节点
    ALTER SYSTEM ADD OBSERVER "<fe_ip_address>:<fe_edit_log_port>";
    
    • c2/c3 节点 FE 注册为 FOLLOWER
    1
    2
    
    ALTER SYSTEM ADD FOLLOWER "192.168.212.82:9010";
    ALTER SYSTEM ADD FOLLOWER "192.168.212.83:9010";
    
  • c2/c3 启动 FE 进程(c2/c3均执行)

    • 第一次启动需要 –helper 参数,以连接指定集群的任意存活 FE 节点拉取元数据,后续启动可使用普通启动命令
    • 命令示例:
    1
    
    bin/start_fe.sh --helper <helper_fe_ip>:<fe_edit_log_port> --daemon
    
    • 执行命令
    1
    
    bin/start_fe.sh --helper 192.168.212.81:9010 --daemon
    
  • 查看节点状态

    • Role都是FOLLOWER
    • IsMaster 主节点为 true,从节点 false
    • Alive 为 true,否则节点为离线状态
1
2
3
4
5
6
7
8
mysql> show frontends ;
+-----------------------------------------+----------------+-------------+----------+-----------+---------+--------------------+----------+----------+------------+------+-------+-------------------+---------------------+---------------------+----------+--------+-----------------------------+------------------+
| Name                                    | Host           | EditLogPort | HttpPort | QueryPort | RpcPort | ArrowFlightSqlPort | Role     | IsMaster | ClusterId  | Join | Alive | ReplayedJournalId | LastStartTime       | LastHeartbeat       | IsHelper | ErrMsg | Version                     | CurrentConnected |
+-----------------------------------------+----------------+-------------+----------+-----------+---------+--------------------+----------+----------+------------+------+-------+-------------------+---------------------+---------------------+----------+--------+-----------------------------+------------------+
| fe_f6c7d1e7_17e8_4d78_ba93_b55c354ae903 | 192.168.212.82 | 9010        | 8030     | 9030      | 9020    | -1                 | FOLLOWER | false    | 1106941032 | true | true  | 704               | 2025-05-09 16:12:22 | 2025-05-09 16:25:53 | true     |        | doris-2.1.9-rc02-3390475e02 | No               |
| fe_77d17b68_185d_4e81_8f6c_d1394d926b50 | 192.168.212.81 | 9010        | 8030     | 9030      | 9020    | -1                 | FOLLOWER | true     | 1106941032 | true | true  | 705               | 2025-05-09 15:28:00 | 2025-05-09 16:25:53 | true     |        | doris-2.1.9-rc02-3390475e02 | Yes              |
| fe_fd0939cf_3ad8_46dd_adeb_9d94fac42e44 | 192.168.212.83 | 9010        | 8030     | 9030      | 9020    | -1                 | FOLLOWER | false    | 1106941032 | true | true  | 704               | 2025-05-09 16:12:34 | 2025-05-09 16:25:53 | true     |        | doris-2.1.9-rc02-3390475e02 | No               |
+-----------------------------------------+----------------+-------------+----------+-----------+---------+--------------------+----------+----------+------------+------+-------+-------------------+---------------------+---------------------+----------+--------+-----------------------------+------------------+

部署 BE

创建数据存储目录

1
mkdir /app/doris/apache-doris/storage

调整配置

  • 三个节点均执行
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ cd /app/doris/apache-doris/be
$ vi conf/be.conf
# 配置日志目录
LOG_DIR="/app/doris/apache-doris/log"
# 配置网段信息
priority_networks = 192.168.212.0/24
# 配置数据存储目录
storage_root_path = /app/doris/apache-doris/storage
# 限制be最大能使用的操作系统内存百分比,由于是交叉部署,故限制内存使用量,默认为 90%
mem_limit='80%'

启动 be

1
./bin/start_be.sh --daemon

Doris 集群注册 be

  • mysql 命令行工具连接 FE 节点
1
mysql -uroot -P9030 -h127.0.0.1
  • 注册节点
1
2
3
4
5
6
7
--  语法
ALTER SYSTEM ADD BACKEND "<be_ip_address>:<be_heartbeat_service_port>" ;

-- 执行 sql
ALTER SYSTEM ADD BACKEND "192.168.212.81:9050" ;
ALTER SYSTEM ADD BACKEND "192.168.212.82:9050" ;
ALTER SYSTEM ADD BACKEND "192.168.212.83:9050" ;

查看 be 节点状态

  • Alive 为 true 表示节点存活
  • TabletNum 表示该节点上的分片数量,新加入的节点会进行数据均衡,TabletNum 逐渐趋于平均
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
mysql> SHOW BACKENDS \G
*************************** 1. row ***************************
              BackendId: 13504
                   Host: 192.168.212.81
          HeartbeatPort: 9050
                 BePort: 9060
               HttpPort: 8040
               BrpcPort: 8060
     ArrowFlightSqlPort: -1
          LastStartTime: 2025-05-10 15:55:46
          LastHeartbeat: 2025-05-10 16:01:42
                  Alive: true
   SystemDecommissioned: false
              TabletNum: 22
       DataUsedCapacity: 0.000
      TrashUsedCapacity: 0.000
          AvailCapacity: 88.402 GB
          TotalCapacity: 99.018 GB
                UsedPct: 10.72 %
         MaxDiskUsedPct: 10.72 %
     RemoteUsedCapacity: 0.000
                    Tag: {"location" : "default"}
                 ErrMsg:
                Version: doris-2.1.9-rc02-3390475e02
                 Status: {"lastSuccessReportTabletsTime":"2025-05-10 16:00:58","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false}
HeartbeatFailureCounter: 0
               NodeRole: mix
*************************** 2. row ***************************
              BackendId: 13562
                   Host: 192.168.212.82
          HeartbeatPort: 9050
                 BePort: 9060
               HttpPort: 8040
               BrpcPort: 8060
     ArrowFlightSqlPort: -1
          LastStartTime: 2025-05-10 15:56:15
          LastHeartbeat: 2025-05-10 16:01:42
                  Alive: true
   SystemDecommissioned: false
              TabletNum: 22
       DataUsedCapacity: 0.000
      TrashUsedCapacity: 0.000
          AvailCapacity: 91.597 GB
          TotalCapacity: 99.018 GB
                UsedPct: 7.49 %
         MaxDiskUsedPct: 7.49 %
     RemoteUsedCapacity: 0.000
                    Tag: {"location" : "default"}
                 ErrMsg:
                Version: doris-2.1.9-rc02-3390475e02
                 Status: {"lastSuccessReportTabletsTime":"2025-05-10 16:01:10","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false}
HeartbeatFailureCounter: 0
               NodeRole: mix
*************************** 3. row ***************************
              BackendId: 13564
                   Host: 192.168.212.83
          HeartbeatPort: 9050
                 BePort: 9060
               HttpPort: 8040
               BrpcPort: 8060
     ArrowFlightSqlPort: -1
          LastStartTime: 2025-05-10 15:56:21
          LastHeartbeat: 2025-05-10 16:01:42
                  Alive: true
   SystemDecommissioned: false
              TabletNum: 22
       DataUsedCapacity: 0.000
      TrashUsedCapacity: 0.000
          AvailCapacity: 91.597 GB
          TotalCapacity: 99.018 GB
                UsedPct: 7.49 %
         MaxDiskUsedPct: 7.49 %
     RemoteUsedCapacity: 0.000
                    Tag: {"location" : "default"}
                 ErrMsg:
                Version: doris-2.1.9-rc02-3390475e02
                 Status: {"lastSuccessReportTabletsTime":"2025-05-10 16:01:16","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false}
HeartbeatFailureCounter: 0
               NodeRole: mix

修改 root 用户密码

  • 使用 root 用户连接 doris
1
mysql -uroot -P9030 -h127.0.0.1
  • 更改密码
1
SET PASSWORD = PASSWORD('密码');

参考