暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

Doris单点部署

原创 董小姐 2025-01-15
1295

Doris介绍

Apache Doris源于百度2008年启动的产品Palo在2018年捐献给Apache基金会,是一个基于 MPP 架构的高性能、实时的分析型数据库,他非常简单易用,而且性能还不错,仅需亚秒级响应时间即可获得查询结果,不仅支持高并发的查询场景,也可以支持高吞吐的复杂分析场景,比如你可以基于它做用户行为分析、日志检索平台、用户画像分析、订单分析等应用。

Doris的架构非常简洁,易于运维,并且可以支持10PB以上的超大数据集。

Doris使用场景

Doris数据库是一个分布式列式存储和查询系统,主要用于实时分析和查询海量数据。它适用于以下场景:

  • 实时分析:Doris数据库可以快速查询和分析海量数据,支持实时查询和聚合操作,可以帮助企业快速做出决策并调整业务策略。
  • 大数据仓库:Doris数据库可以作为企业的数据仓库,存储大规模的数据,并提供高效的查询和分析能力,帮助企业更好地理解和利用数据。
  • 日志存储和分析:Doris数据库可以快速存储和分析实时生成的日志数据,支持实时查询和聚合操作,帮助企业及时发现和解决问题。
  • 金融数据分析:Doris数据库可以存储和分析金融相关的大规模数据,如证券交易数据、客户信息等,帮助金融机构更好地理解市场趋势、客户需求等信息。

总之,Doris数据库适用于需要处理海量数据、需要实时查询和分析数据的场景。

Doris架构

Doris整体架构如下图所示,Doris 架构非常简单,只有两类进程

Frontend(FE),主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作,并将请求转发给对应的Backend进行处理。Frontend还负责了Doris集群的负载均衡和故障转移等功能。

主要有三个角色:

(1)Leader 和Follower:主要是用来达到元数据的高可用,保证单节点宕机的情况下,元数据能够实时地在线恢复,而不影响整个服务。

(2)Observer:用来扩展查询节点,同时起到元数据备份的作用。如果在发现集群压力非常大的情况下,需要去扩展整个查询的能力,那么可以加 observer 的节点。observer 不参与任何的写入,只参与读取。

  • Backend(BE),主要负责数据存储、查询计划的执行。数据的可靠性由 BE 保证,BE 会对整个数据存储多副本或者是三副本。副本数可根据需求动态调整
  • Frontend(FE)和 Backend(BE)这两类进程都是可以横向扩展的,单集群可以支持到数百台机器,数十 PB 的存储容量。并且这两类进程通过一致性协议来保证服务的高可用和数据的高可靠。这种高度集成的架构设计极大的降低了一款分布式系统的运维成本
  • MySQL Client

Doris借助MySQL协议,用户使用任意MySQL的ODBC/JDBC以及MySQL的客户端,都可以直接访问Doris

  • broker

Broker 是 Doris 集群中一种可选进程,主要用于支持 Doris 读写远端存储上的文件和目录,如 HDFS、 BOS 和 AFS 等

部署过程

部署环境要求

操作系统要求

主流Linux x86-64环境。建议使用CentOS 7.1或Ubuntu 16.04或更高版本。

软硬件要求

CPU

当安装Doris 时,建议选择支持 AVX2 指令集的机器,以利用 AVX2 的向量化能力实现查询向量化加速。

运行以下命令,有输出结果,及表示机器支持AVX2 指令集。

cat /proc/cpuinfo | grep avx2

注意:如果机器不支持AVX2 指令集,可以使用 no AVX2 的 Doris 安装包进行部署,比如:apache-doris-2.1.6-bin-x64-noavx2.tar.gz

内存

Doris 没有强制的内存限制。在生产环境中,建议内存至少是 CPU 核数的 4 倍(例如,16 核机器至少配置 64G 内存)。在内存是 CPU 核数 8 倍时,会得到更好的性能。

存储

Doris 部署时数据可以存放在 SSD 或 HDD 硬盘或者对象存储中。

在以下几种场景中建议使用SSD 作为数据存储:

· 大规模数据量下的高并发点查场景

· 大规模数据量下的高频数据更新场景

文件系统

ext4 和 xfs 文件系统均支持。

网卡

Doris 在进行计算过程涉及将数据分片分发到不同的实例上进行并行处理,会导致一定的网络资源开销。为了最大程度优化 Doris 性能并降低网络资源开销,强烈建议在部署时选用万兆网卡(10 Gigabit Ethernet,即 10GbE)或者更快网络。

服务器建议配置

Doris 支持运行和部署在 x86-64 架构的服务器平台或 ARM64 架构的服务器上。

开发及测试环境

l 在验证测试环境中,可以将FE 与 BE 部署在同一台服务器上

l 一台机器上一般只建议部署一个BE 实例,同时只能部署一个 FE

l 如果需要3 副本数据,那么至少需要 3 台机器各部署一个 BE 实例,而不是 1 台机器部署 3 个 BE 实例

l 多个FE 所在服务器的时钟必须保持一致,最多允许 5 秒的时钟偏差

l 测试环境也可以仅使用一个BE 进行测试。实际生产环境,BE 实例数量直接决定了整体查询延迟。

生产环境

l 在生产环境中,如果FE 与 BE 混布,需要注意资源争用问题,建议元数据存储与数据存储分盘存放

l BE 节点可以配置多块硬盘存储,在一个 BE 实例上绑定多块 HDD 或 SSD 盘

l 集群的性能与BE 节点的资源有关,BE 节点越多,Doris 性能越好。通常情况下在 10 - 100 台机器上可以充分发挥 Doris 的性能

硬盘空间计算

在Doris 集群中,FE 主要用于元数据存储。BE 的磁盘空间主要用于存放数据,需要根据业务需求计算。

操作系统环境配置

关闭swap 分区

在部署Doris 时,建议关闭 swap 分区。swap 分区是内核发现内存紧张时,会按照自己的策略将部分内存数据移动到配置的 swap 分区,由于内核策略不能充分了解应用的行为,会对数据库性能造成较大影响。所以建议关闭。

  • 临时关闭 下次机器启动时,swap 还会被打开。 关闭命令:swapoff -a
  • 永久关闭 root 账户,注释掉 /etc/fstab 中的 swap 分区,然后重启,即可彻底关闭swap 分区。

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

配置NTP 服务

Doris 的元数据要求时间精度要小于 5000ms,所以所有集群所有机器要进行时钟同步,避免因为时钟问题引发的元数据不一致导致服务出现异常。

通常情况下,可以通过配置NTP 服务保证各节点时钟同步,请自行安装配置。

sudo systemctl start ntpd.service
sudo systemctl enable ntpd.service

设置系统最大打开文件句柄数

Doris 由于依赖大量文件来管理表数据,所以需要将系统对程序打开文件数的限制调高。

vi /etc/security/limits.conf
* soft nofile 1000000
* hard nofile 1000000

当前用户需要退出当前Session,并重新登录进入才能生效。

修改虚拟内存区域数量

修改虚拟内存区域至少2000000

sysctl -w vm.max_map_count=2000000

关闭透明大页

在部署Doris 时,建议关闭透明大页。

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

--加入开机启动
echo '
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag'>>/etc/rc.local
chmod +x /etc/rc.local

依赖环境检查

安装java JDK

首先查看服务器是否有java环境,执行命令java -version命令,如果出现下面的信息,则已经安装有java环境,可以直接跳过该步骤。

mkdir -p /usr/java/jdk
tar -xvf jdk-8u281-linux-x64.tar.gz -C /usr/java/jdk

vi /etc/profile
export JAVA_HOME=/usr/java/jdk/jdk1.8.0_281
export JRE_HOME=/usr/java/jdk/jdk1.8.0_281/jre
export CLASSPATH=.:$JAVA_HOME/lib$:JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin/$JAVA_HOME:$PATH

source /etc/profile

java -version

安装mysql 客户端

tar -xvf mysql-8.0.13-el7-x86_64.tar.gz -C /data
cd /data
mv mysql-8.0.13-el7-x86_64/ mysql

上传并解压Doris介质

tar -xvf apache-doris-2.1.6-bin-x64-noavx2.tar.gz -C /data/
mv apache-doris-2.1.6-bin-x64-noavx2 apache-doris-2.1.6

部署FE节点

创建元数据路径

FE元数据通常不超过10GB,建议与 BE 节点数据存储在不同的硬盘上。

在解压安装包时,会默认附带doris-meta 目录,建议可以创建独立的元数据目录并创建该目录到 doris-meta 的软连接。生产环境强烈建议单独指定目录不要放在 Doris 安装目录下,最好是单独的磁盘(如果有 SSD 最好),测试开发环境可以使用默认配置。

--选择独立于 BE 数据的硬盘,创建 FE 的元数据目录
mkdir -p /data/doris-meta

--创建 FE 的元数据目录软连接
cd /data/apache-doris-2.1.6/fe
ln -s /data/doris-meta doris-meta 

3、示例
[root@hadoop01 fe]# cd doris-meta/
[root@hadoop01 doris-meta]# ll
total 0
lrwxrwxrwx 1 root root 16 Jun 18 16:55 doris-meta -> /data/doris-meta

修改FE配置文件

FE的配置文件在FE部署路径下的conf目录中,启动FE节点前需要修改conf/fe.conf。

以下是一些必要的修改:

meta_dir”:指定元数据的存储位置。默认情况下,位于 FE 安装路径下。如果您已创建指向 FE 元数据目录的符号连接,则无需配置 。

priority_networks”:必须要配置,特别是当一台机器拥有多个IP地址的时候,我们要为FE指定唯一的IP地址。

JAVA_OPTS”:调整 FE 内存。默认的最大Java堆内存设置为8GB。对于生产环境,建议将其增加到16GB或更高。

lower_case_table_names”:用于控制用户表名是否区分大小写。需要配置成1,在be.conf最下面追加“lower_case_table_names = 1”。

配置环境变量

1. 添加doris环境变量

命令:vim /root/.bash_profile

内容:

export DORIS_HOME=/data/apache-doris-2.1.6

PATH=$PATH:$DORIS_HOME/bin

2. 刷新配置文件

命令:source /root/.bash_profile

3. 查看环境变量是否生效

命令:echo $DORIS_HOME

结果:/data/apache-doris-2.1.6

启动FE节点

cd /data/apache-doris-2.1.6/fe

bin/start_fe.sh --daemon

FE 进程启动后,将在后台运行。默认情况下,日志文件存储在目录中。如果启动失败,您可以在log/fe.log或log/fe.out中查看错误消息。

查看FE运行状态

查看进程

命令:jps -l

[root@HKSZF-ZW-172-19-122-201 fe]# jps -l
30133 org.apache.doris.DorisFE
30950 sun.tools.jps.Jps

curl状态检查

请求连接:curl http://127.0.0.1:8030/api/bootstrap

{"msg":"success","code":0,"data":{"replayedJournalId":0,"queryPort":0,"rpcPort":0,"arrowFlightSqlPort":0,"version":""},"count":0}

这里IP 和端口分别是FE的IP和http_port(默认8030),如果是你在FE节点执行,直接运行上面的命令即可。

如果返回结果中带有"msg":"success"字样,则说明启动成功。

部署BE

创建数据目录

BE进程应用于数据的计算与存储。数据目录默认放在be/storage下。在生产环境中,通常使用独立的硬盘来存储数据,将BE数据与BE的部署文件置于不同的硬盘中。BE支持数据分布在多盘上以更好的利用多块硬盘的I/O能力。

1、在每一块数据硬盘上创建BE数据存储目录

mkdir -p /data/doris-storage

2、创建FE的元数据目录软连接

cd /data/apache-doris-2.1.6/be

ln -s /data/doris-storage storage

3、示例

[root@hadoop01 be]# cd storage/

[root@hadoop01 storage]# ll

total 0

lrwxrwxrwx 1 root root 19 Jun 18 21:45 doris-storage -> /data/doris-storage

修改BE配置文件

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

以下配置需要修改:

JAVA_HOME”:BE依赖Java环境。您需要事先在操作系统中配置环境变量,或者在BE配置文件中指定Java环境变量。比如:“JAVA_HOME = <your-java-home-path>”

storage_root_path”:配置 BE 存储路径。

priority_networks”:必须要配置,特别是当一台机器拥有多个IP地址的时候,我们要为BE指定唯一的IP地址。

string_type_length_soft_limit_bytes”:String类型最大长度的软限制,配置成“2147483643”,配置到be.conf的最下面即可。例如:“string_type_length_soft_limit_bytes=2147483643”。

冷热数据分级存储(示例):

Doris支持冷热数据分级存储,将冷数据存储在HDD或对象存储中,热数据存储在SSD中。

可以通过路径区别节点内的冷热数据存储目录,HDD(冷数据目录)或SSD(热数据目录)。如果不需要BE节点内的冷热机制,那么只需要配置路径即可,无需指定 medium 类型;也不需要修改FE的默认存储介质配置

在使用冷热数据分离功能时,需要在storage_root_path 中使用 medium 选项,例如:

在storage_root_path中使用medium指定磁盘类型

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

其中:

/home/disk1/doris,medium:HDD: 表示该目录存储冷数据。

/home/disk2/doris,medium:SSD: 表示该目录存储热数据,注册BE节点

注册BE节点

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

连接存活的FE节点

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

fe_query_port默认为9030,fe_ip_address为FE任一存活节点IP。

mysql -uroot -P 9030 -h 172.19.122.201

注册BE节点

在MySQL Client中执行ALTER SYSTEM语句

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

参数说明:
be_host_ip:要添加 BE 的 IP 地址
heartbeat_service_port:要添加 BE 的心跳上报端口,可以查看 be.conf 里的 heartbeat_service_port,默认是 9050。
通过 show backends 语句可以查看新添加的 BE 节点。

示例

--在 MySQL 客户端执行类似下面的 SQL,将 BE 添加到集群中
mysql> ALTER SYSTEM ADD BACKEND "172.19.122.201:9050";
Query OK, 0 rows affected (0.02 sec)

启动BE节点

# 三台机器都执行(如果已执行,可忽略)

sysctl -w vm.max_map_count=2000000
ulimit -n 60000
swapoff -a

# 启动

cd /data/apache-doris-2.1.6/be
bin/start_be.sh --daemon

BE进程启动进入后台执行。日志默认存放在log/目录下。如启动失败,可以通过查看 log/be.log或者log/be.out查看错误信息。

查看BE启动状态

在连接到Doris 集群后,通过 show backends 命令查看 BE 的状态。

1连接Doris集群

mysql -uroot -P<fe_query_port> -h<fe_ip_address>  -p
fe_query_port默认为9030,fe_ip_address为FE任一存活节点IP。
mysql -uroot -P 9030 -h 172.19.122.201 -p

2、查看BE状态,在MySQL Client中执行show命令

mysql>  show backends\G

注意:

1. Alive为true表示节点存活

2. TabletNum表示该节点上的分片数量,新加入的节点会进行数据均衡,TabletNum 逐渐趋于平均

修改Doris密码

登录数据库

通过MySQL Client登录Doris集群。

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

参数说明:
fe_query_port默认为9030,fe_ip_address为FE任一存活节点IP。

示例:

mysql -uroot -P 9030 -h 172.19.122.201

检查Doris安装版本

查看FE各实例的版本,在MySQL Client中执行show命令:“show frontends”。

查看BE各实例的版本,在MySQL Client中执行show命令:“show backends”。

修改Doris 集群密码

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

确认当前用户为root,在MySQL Client中查看当前用户

例如:“select user()”

修改root用户密码,在MySQL Client中执行set password命令

“SET PASSWORD = PASSWORD('top@12345')”
或
mysql> SET PASSWORD FOR 'root' = PASSWORD('doris-root-password');                                                                                                                                                                                   
Query OK, 0 rows affected (0.01 sec)    

修改admin用户密码,在MySQL Client中执行set password命令

“SET PASSWORD = PASSWORD('top@12345')”
或                                                                                                                                                                                                                                                                                                                                                                                                                                              
mysql> SET PASSWORD FOR 'admin' = PASSWORD('doris-admin-password');                                                                                                                                                                                 
Query OK, 0 rows affected (0.00 sec)        

Root 用户和 Admin 用户的区别:

Root 用户和 Admin 用户都属于 Apache Doris 安装完默认存在的 2 个账户。其中 Root 用户拥有整个集群的超级权限,可以对集群完成各种管理操作,比如添加节点,去除节点。Admin 用户没有管理权限,是集群中的 Superuser,拥有除集群管理相关以外的所有权限。建议只有在需要对集群进行运维管理超级权限时才使用 Root 权限。

建库建表

连接 Apache Doris

使用 Admin 账户连接 Apache Doris FE。

mysql -uadmin -P9030 -h127.0.0.1

提示:如果是在 FE 的同一台机器上的 MySQL 客户端连接 127.0.0.1, 不需要输入密码。

创建数据库和数据表

create database demo;

use demo; 
create table mytable
(
    k1 TINYINT,
    k2 DECIMAL(10, 2) DEFAULT "10.05",    
    k3 CHAR(10) COMMENT "string column",    
    k4 INT NOT NULL DEFAULT "1" COMMENT "int column"
) 
COMMENT "my first table"
DISTRIBUTED BY HASH(k1) BUCKETS 1
PROPERTIES ('replication_num' = '1');

导入数据

将以下示例数据,保存在本地的 data.csv:

1,0.14,a1,20
2,1.04,b2,21
3,3.14,c3,22
4,4.35,d4,23

通过 Stream Load 方式将上面保存到文件中的数据导入到刚才创建的表里。

curl  --location-trusted -u admin:admin_password -T data.csv -H "column_separator:," http://127.0.0.1:8030/api/demo/mytable/_stream_load

参数说明:
-T data.csv : 要导入的数据文件名
-u admin:admin_password : Admin 账户与密码
127.0.0.1:8030 : 分别是 FE 的 IP 和 http_port

执行成功之后我们可以看到下面的返回信息:

{                                                     
    "TxnId": 30,                                  
    "Label": "a56d2861-303a-4b50-9907-238fea904363",        
    "Comment": "",                                       
    "TwoPhaseCommit": "false",                           
    "Status": "Success",                                 
    "Message": "OK",                                    
    "NumberTotalRows": 4,                                
    "NumberLoadedRows": 4,                               
    "NumberFilteredRows": 0,                             
    "NumberUnselectedRows": 0,                          
    "LoadBytes": 52,                                     
    "LoadTimeMs": 206,                                    
    "BeginTxnTimeMs": 13,                                
    "StreamLoadPutTimeMs": 141,                           
    "ReadDataTimeMs": 0,                                 
    "WriteDataTimeMs": 7,                                
    "CommitAndPublishTimeMs": 42                         
} 

信息说明:
NumberLoadedRows: 表示已经导入的数据记录数
NumberTotalRows: 表示要导入的总数据量
Status: Success 表示导入成功

查询数据

在 MySQL 客户端中,执行如下 SQL,可以查询到刚才导入的数据:

mysql> select * from mytable;                                                                                                                                                                                                              
+------+------+------+------+                                                                                                                                                                                                              
| k1   | k2   | k3   | k4   |                                                                                                                                                                                                              
+------+------+------+------+                                                                                                                                                                                                              
|    1 | 0.14 | a1   |   20 |                                                                                                                                                                                                              
|    2 | 1.04 | b2   |   21 |                                                                                                                                                                                                              
|    3 | 3.14 | c3   |   22 |                                                                                                                                                                                                              
|    4 | 4.35 | d4   |   23 |                                                                                                                                                                                                              
+------+------+------+------+                                                                                                                                                                                                              
4 rows in set (0.01 sec)       

停止Doris

停止 FE

在 apache-doris/fe 下,运行下面命令停止 FE。

server1:apache-doris/fe doris$ ./bin/stop_fe.sh

停止 BE

在 apache-doris/be 下,运行下面命令停止 BE。

server1:apache-doris/be doris$ ./bin/stop_be.sh

参考链接:https://blog.csdn.net/wt334502157/article/details/130606022

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论