Doris集群部署手册

  • 时间:2025-11-28 22:57 作者: 来源: 阅读:10
  • 扫一扫,手机访问
摘要:总体包括4步: 确认硬件和软件环境:确认硬件资源可用性和操作系统兼容性。确认操作系统:确认操作系统参数和配置。做集群规划:规划集群FE和BE节点的布局,预估需要的资源。部署集群:基于规划和配置部署集群。验证:登录集群验证是否OK。 1、检查硬件和软件环境 CPU doris支持基于AVX2指令对查询进行向量加速,建议机器支持AVX2指令集。 运行下面命令,如果有返回,则代表机器支持AVX

总体包括4步:

确认硬件和软件环境:确认硬件资源可用性和操作系统兼容性。确认操作系统:确认操作系统参数和配置。做集群规划:规划集群FE和BE节点的布局,预估需要的资源。部署集群:基于规划和配置部署集群。验证:登录集群验证是否OK。

1、检查硬件和软件环境

CPU

doris支持基于AVX2指令对查询进行向量加速,建议机器支持AVX2指令集。

运行下面命令,如果有返回,则代表机器支持AVX2指令集。

1

cat  /proc/cpuinfo  grep  avx2

如果不支持AVX2指令,你可以使用“noavx2”安装包。

内存

doris没有严格的内存闲置。在生产环境中,内存的GB数是CPU核数的4倍,例如是16核,最好就对应64GB的内存,当然内存更多点更好。

存储

doris数据可以保存在SSD/HDD/OSS上。

对于以下场景,推荐使用SSD存储:

大数据量高并发查询。大数据量高频更新。

文件系统

doris支持ext4和xfs文件系统。

网卡

doris对于碎片化分布式数据的并发计算会导致网络开支。为了优化doris性能、最小化网络开支,强烈建议在部署时选用万兆网卡(10 Gigabit Ethernet,即 10GbE)或者更快网络。

推荐服务器

doris可以运行在x84-64和arm64架构服务器上。

开发和测试环境:

Frontend8+ Cores8+ GBSSD or SATA, 10+ GB1 or 10 GbE1
Backend8+ Cores16+ GBSSD or SATA, 50+ GB1 or 10 GbE1

TIP

描述:

在验证测试环境中,您可以将FE和BE部署在同一台服务器上。通常建议在一台机器上只部署一个BE实例。同样,您只能在一台机器上部署一个FE。如果需要三个数据副本,则至少需要三台机器,并在每台机器上部署一个BE实例,而不是在一台机器上部署三个BE实例。多个服务器的时钟必须同步,时钟偏差不能超过5秒。在测试环境中,您也可以仅使用一个BE执行测试。在实际的生产环境中,BE实例的数量直接影响总体查询延迟。

生产环境:

Frontend16+ Cores64+ GBSSD or RAID, 100+ GB10 GbE1
Backend16+ Cores64+ GBSSD or SATA, 100+ GB10 GbE3

TIP

描述:

在生产环境中,如果FE和BE共存,请注意资源争用问题。建议将元数据和数据分别存储在不同的磁盘上。BE节点可以配置多个磁盘用于存储。您可以将多个HDD或SSD绑定到单个BE实例。集群的性能取决于BE节点的资源。BE节点越多,Doris的性能越好。通常,Doris可以在10到100台机器上充分发挥其性能潜力。

在Doris集群中,FE主要负责元数据存储,包括元数据编辑日志和镜像。BE的磁盘空间主要用于存储数据,需要根据业务需要进行计算。

FE元数据的大小一般在几百MB到几GB之间。建议磁盘空间不小于100GB。
BEDoris默认使用LZ4压缩,压缩比为0.3~0.5。根据数据总量* 3(3个数据副本)计算磁盘空间,需要预留40%的磁盘空间用于后台数据压缩和临时数据存储。
Broker如果希望部署Broker,通常可以将Broker节点部署在与FE /BE节点相同的机器上。

2、检查操作系统

禁用交换分区

部署Doris时,建议关闭swap分区。当内核检测到内存压力时,使用交换分区将一些内存数据移动到配置的交换空间。但是,由于内核的策略可能无法完全理解应用程序的行为,因此它可能会严重影响数据库的性能。因此,建议禁用它。

您可以使用以下命令暂时禁用它。它将在下次机器启动时再次启用。

1

swapoff -a

要永久禁用它,请使用Linux root帐户注释掉/etc/fstab中的交换分区,然后重新启动。

1

2

3

4

5

6

# /etc/fstab

# <file system>        <dir>         <type>    <options>             <dump> <pass>

tmpfs                  /tmp          tmpfs     nodev,nosuid           0       0

/dev/sda1              /             ext4      defaults,noatime       0       1

# /dev/sda2            none          swap      defaults               0       0

/dev/sda3              /home         ext4      defaults,noatime       0       2

注意

不建议通过设置vm.swappiness = 0来关闭swap开关。因为该参数在不同的Linux内核版本中具有不同的语义。在许多情况下,这不会完全禁用swap。

检查并禁用系统防火墙

如果发现端口不一致,请尝试关闭防火墙,确认是否是该原因。如果是,请根据doris组件配置的端口打开对应的端口进行通信。

1

2

sudo  systemctl stop firewalld.service

sudo  systemctl disable firewalld.service

设置打开文件句柄的最大数目

Doris依靠大量的文件来管理表数据。因此,系统对程序打开的文件数量的限制需要增加。

1

2

3

vi  /etc/security/limits .conf

* soft nofile 1000000

* hard nofile 1000000

为使更改生效,当前用户需要退出当前会话并重新登录。

修改虚拟内存区域的数量

设置虚拟内存区域的数量至少为2000000。

1

sysctl -w vm.max_map_count=2000000

禁用明显的大页面

建议在部署doris时禁用明显的大页面。

1

2

echo  never >  /sys/kernel/mm/transparent_hugepage/enabled

echo  never >  /sys/kernel/mm/transparent_hugepage/defrag

3、集群规划

端口规划

Doris实例直接通过网络通信,正常操作需要以下端口。管理员可以根据自己的环境调整Doris端口:

BEbe_port9060FE --> BEBE thrift server端口,用来接收FE请求。
BEwebserver_port8050BE <--> BEBE之间通信http端口。原8040端口被hadoop占用了,故使用8050端口,需要保证各be一致
BEheartbeat_service_port9050FE --> BEBE心跳服务端口 (thrift),用来从FE接收心跳。
BEbrpc_port8060FE <--> BE BE <--> BEBE的BRPC端口,用于BE之间通信。
FEhttp_port8040FE <--> FE Client <--> FEFE的http服务端口。原8030端口被hadoop占用了,故使用8040端口,需要保证各fe一致。
FErpc_port9020BE --> FE FE <--> FEFE thrift server端口,各FE应该配置一致。
FEquery_port9030Client <--> FEFE MySQL server 端口。
FEedit_log_port9010FE <--> FEFE bdbje通信端口。
Brokerbroker_ipc_port8000FE --> Broker BE --> BrokerBroker用来接收请求的thrift server端口。

节点规划

FE节点规划:

FE节点主要负责处理用户请求、查询解析和规划、元数据管理和节点管理。
对于生产集群,通常建议部署至少3个FE节点以实现高可用性。在Doris中,FE节点有两种角色:

follower节点参与选举。如果主节点发生故障,将选择一个可用的Follower节点作为新的主节点。observer节点只从Leader节点同步元数据,不参与选举。它们可以被扩展以提供可扩展的元数据读取服务。

一般建议部署3个Follower节点。在高并发场景中,您可以扩展Observer节点。

BE节点规划:

BE节点负责数据存储和计算。在生产环境中,通常有3个数据副本,因此建议至少部署3个BE节点。BE节点也可以扩展。通过增加BE节点的数量,可以提高查询性能和并发性。

4、集群部署

4.1部署FE Master节点

创建元数据路径

FE元数据一般不超过10GB。建议将FE元数据存储在与BE节点数据不同的磁盘上。

在解压缩安装包之后,通常会包含一个默认的doris-meta目录。建议创建一个单独的元数据目录,并创建一个从该目录到doris-meta的符号链接。在生产环境中,强烈建议指定一个单独的目录,而不是将其放在Doris安装目录中,最好放在专用磁盘(最好是SSD)上。对于测试和开发环境,您可以简单地使用默认配置。

1

2

3

4

5

## Select a disk that is separated from the BE data storage and create the FE metadata directory.

mkdir  -p <doris_meta_created>

## Create a symbolic link to the FE metadata directory.

ln  -s <doris_meta_original> <doris_meta_created>

修改FE配置文件

FE配置文件在FE部署路径下的conf目录下。启动FE节点前,需要修改“conf/ FE .conf”文件。
以下是一些必要的修改:

1.修改FE元数据目录:配置文件中的meta_dir指定元数据的存放位置。默认情况下,meta_dir位于FE安装路径下。如果您已经创建了到FE元数据目录的符号链接,则不需要配置meta_dir。

2.绑定集群IP:在有多个网口的环境下,需要显式配置“priority_networks”。

1

priority_networks = 10.1.3.0 /24

这是一个CIDR表示,它指定了FE使用的IP。在使用FQDN的环境中,可以忽略这一点。

3.调整FE内存。

在"fe.conf"中,默认的最大Java堆内存设置为8GB。对于生产环境,建议将其增加到16GB或更高。可以通过在JAVA_OPTS参数中指定-Xmx来调整最大Java堆内存。

1

JAVA_OPTS= "-Xmx16384m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:$DORIS_HOME/log/fe.gc.log.$DATE"

5.修改大小写敏感参数lower_case_table_names。缺省情况下,Doris对表名区分大小写。如果需要不区分大小写的表名,则需要在集群初始化期间进行设置。注意,一旦集群初始化完成,表名的大小写敏感性就不能更改。有关lower_case_table_names设置的更多详细信息,请参考变量文档。

启动FE进程

执行以下命令启动FE进程:

1

bin /start_fe .sh --daemon

FE进程启动后,在后台运行。日志文件默认存放在“log/”目录下。如果启动失败,可以查看log/fe.log或log/fe.out中的错误信息。

检查FE状态

检查FE启动状态,可以使用MySQL客户端连接到Doris集群。初始用户为root,密码为空。

1

mysql -uroot -P<fe_query_port> -h<fe_ip_address>

连接到Doris集群后,可以使用show frontend命令查看FE节点的状态。重要的是要核实以下内容:

如果"Alive"为true,则节点是活的。如果"Join"为true,则该节点已加入集群,但它当前在集群中可能不是活动的(它可能已断开连接)。如果“IsMaster”为true,则表示该节点是主节点。

4.2部署FE集群(可选)

创建元数据文件夹

参考FE Master节点的部署并创建“doris-meta”目录。

修改FE follower节点配置

参考FE Master节点的部署,修改FE配置文件。大多数情况下,可以直接从FE Master节点复制配置文件。

注册新follower节点到集群

在启动新的FE节点之前,需要将其注册到FE集群中。

1

2

3

4

5

6

7

## Connect to any FE node alive

mysql -uroot -P<fe_query_port> -h<fe_ip_address>

## Register FE Follower node

## fe_edit_log_port can be viewed in fe.conf, set to 9010 by default

## In MySQL Client, execute ALTER SYSTEM statement

ALTER SYSTEM ADD FOLLOWER  "<fe_ip_address>:<fe_edit_log_port>"

如果需要添加观察者节点,可以使用add Observer命令。

1

2

## Register FE observer node, execute ALTER SYSTEM in MySQL Client.

ALTER SYSTEM ADD OBSERVER  "<fe_ip_address>:<fe_edit_log_port>"

建议使用奇数个FE Follower节点(包括Master节点),建议使用3个以实现高可用性。
当FE部署在高可用模式(1个Master节点,2个Follower节点)时,建议通过增加一个Observer FE来增加FE读服务的可扩展性。
通常,一个FE节点可以处理大约10-20个BE节点。建议FE节点总数不超过10个。

启动FE follower节点

启动FE Follower节点,自动同步元数据。

1

bin /start_fe .sh --helper <helper_fe_ip>:<fe_edit_log_port> --daemon

helper_fe_ip表示当前FE集群中任何存活的节点。–heper参数仅在初始FE启动期间用于同步元数据,在随后的FE重启操作中不需要指定它。

检查follower节点状态

检查Follower节点状态的方法与检查Master节点状态的方法相同。注册FE Follower节点后,使用show frontend命令查看FE节点状态。与Master节点不同,Follower节点的IsMaster状态应该为false。

4.3部署BE

创建目录

BE进程负责数据计算和存储。默认情况下,数据目录在be/storage下。在生产环境中,通常使用专用磁盘来存储数据,将BE数据与BE部署文件分开。BE支持跨多个磁盘分发数据,以便更好地利用磁盘的I/O能力。

1

2

## Create BE data storage directories on each data disk

mkdir  -p <be_storage_root_path>

修改BE配置

BE的配置文件在BE部署路径下的conf目录下。启动BE节点前,需要修改“conf/ be.conf”文件。

1.配置Java环境从1.2版本开始,Doris支持Java UDF(用户定义函数),BE依赖于Java环境。您需要事先在操作系统中配置JAVA_HOME环境变量,或者在BE配置文件中指定Java环境变量。

1

2

## Modify Java environment variable in be/be.conf

JAVA_HOME = <your-java-home-path>

2.配置BE存储路径

如果需要修改BE存储路径,可以通过修改storage_root_path参数。使用分号分隔多个路径;(不要在最后一个目录后面添加分号。)

冷热数据分级存储

Doris支持冷热数据分级存储,冷数据存储在HDD或OSS上,热数据存储在SSD上。

通过HDD(冷数据目录)路径和SSD(热数据目录)路径,可以区分节点内存放热数据和存放冷数据的路径。如果在BE节点中不需要热/冷机制,则只需要配置路径,而不指定介质类型。您也不需要修改BE中的默认存储介质配置。

使用分级存储特性时,需要在storage_root_path参数中指定介质。

1

2

3

4

## In storage_root_path, use medium to specify the disk type

## /home/disk1/doris,medium:HDD: this directory stores cold data;

## /home/disk2/doris,medium:SSD: this directory stores hot data;

storage_root_path= /home/disk1/doris ,medium:HDD; /home/disk2/doris ,medium:SSD

在为存储路径指定存储类型时,至少应该有一个路径将存储类型设置为HDD。如果没有显式声明存储路径的存储类型,则默认为HDD。指定存储类型为HDD或SSD是为了区分路径的存储类型。它独立于物理存储介质。例如,将HDD盘上的某个目录指定为SSD盘。存储类型HDD和SSD的关键字必须大写。

绑定集群ID

在多网络接口环境中,需要显式配置“priority_networks”。但是,在配置了FQDN的环境中,可以忽略“priority_networks”。

1

priority_networks = 10.1.3.0 /24

注册BE节点到doris

在启动新的BE节点之前,您需要在BE集群中注册新的BE节点。

1

2

3

4

5

6

7

## Connect to any FE node alive

mysql -uroot -P<fe_query_port> -h<fe_ip_address>

## Register BE node

## be_heartbeat_service_port can be checked from be.conf, set to 9050 by default

## In MySQL Client, execute ALTER SYSTEM statement

ALTER SYSTEM ADD BACKEND  "<be_ip_address>:<be_heartbeat_service_port>"

启动BE进程

启动BE进程通过执行以下命令:

1

bin /start_be .sh --daemon

BE进程启动后,在后台运行。日志文件默认存放在“log/”目录下。如果启动失败,可以查看log/be.log或log/be.out中的错误信息。

检查BE状态

连接到Doris集群后,可以使用show backends命令查看BE节点的状态。

1

2

3

4

5

## Connect to Doris cluster

mysql -uroot -P<fe_query_port> -h<fe_ip_address>

## Check BE status, execute show command in MySQL Client

show backends;

通常情况下,你应该核实以下内容:

如果"Alive"为true,则节点是活的。“TabletNum”表示该节点上的片(分片)的数量。当增加一个新节点时,会发生数据均衡,TabletNum逐渐接近平均值。

4.4 核验集群配置

登录数据库

使用MySQL客户端登录doris数据库:

1

2

## Connect to Doris cluster

mysql -uroot -P<fe_query_port> -h<fe_ip_address>

检查版本

使用“show frontends”和“show backends”命令检查版本。

1

2

3

4

5

## Check the versions of all FE instances in MySQL Client

show frontends G

## Check the versions of all BE instances in MySQL Client

show backends G

修改集群密码

Doris集群创建完成后,系统会自动创建一个root用户,默认密码为空。建议在创建集群后设置root用户的新密码。

1

2

3

4

5

6

7

8

9

10

## To confirm that the current user is root, you can check the current user in the MySQL client.

select  user();

+------------------------+

| user()                 |

+------------------------+

'root' @ '192.168.88.30'  |

+------------------------+

## To modify the password for the root user, execute the "set password" command in the MySQL client.

SET PASSWORD = PASSWORD( 'doris_new_passwd' );

创建一个测试表并插入数据

在新创建的集群中,您可以创建一个表并向其中插入数据,以验证集群是否正常工作。

1

2

3

4

5

6

7

8

9

10

11

12

13

##  To  create  a test  database execute  the  "create database"  statement  in  MySQL Client.

create  database  testdb;

##  To  create  a test  table execute  the  "create table"  statement  in  MySQL Client.

CREATE  TABLE  testdb.table_hash

(

     k1 TINYINT,

     k2  DECIMAL (10, 2)  DEFAULT  "10.5" ,

     k3  VARCHAR (10) COMMENT  "string column" ,

     k4  INT  NOT  NULL  DEFAULT  "1"  COMMENT  "int column"

)

COMMENT  "my first table"

DISTRIBUTED  BY  HASH(k1) BUCKETS 32;

Doris与MySQL协议兼容,因此您可以使用“insert”语句插入数据。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

##  To  insert  test data,  execute  the  "insert into"  statement  in  MySQL Client.

INSERT  INTO  testdb.table_hash  VALUES

(1, 10.1,  'AAA' , 10),

(2, 10.2,  'BBB' , 20),

(3, 10.3,  'CCC' , 30),

(4, 10.4,  'DDD' , 40),

(5, 10.5,  'EEE' , 50);

##  To  verify the data,  execute  the  "select"  statement  in  MySQL Client.

SELECT  from  testdb.table_hash;

+ ------+-------+------+------+

| k1   | k2    | k3   | k4   |

+ ------+-------+------+------+

|    3 | 10.30 | CCC  |   30 |

|    4 | 10.40 | DDD  |   40 |

|    5 | 10.50 | EEE  |   50 |

|    1 | 10.10 | AAA  |   10 |

|    2 | 10.20 | BBB  |   20 |

+ ------+-------+------+------+

  • 全部评论(0)
手机二维码手机访问领取大礼包
返回顶部