安装方式
在1.0版本之前,安装Doris需要先通过源码编译,主要两种方式:使用Docker开发镜像编译、或直接编译。(推荐使用Docker开发镜像编译,就不用考虑依赖问题了,像gcc版本,jdk,maven等等)
直接编译的方式可参考官网安装部署界面
在1.0版本之前,官网并不提供编译好的二进制包,还因为BE是C++开发的,也就是说省不了编译的过程。
1.0版本之后,官方给出了编译好的二进制包。
可从如下下载地址中找到最新版本和历史版本,以及Flink Doris Connector、Spark Doris Connector:下载中心
系统环境配置
OS版本
Doris 运行在 Linux 环境中,推荐 CentOS 7.x 或者 Ubuntu 16.04 以上版本
软件依赖
需要安装 Java 运行环境(JDK最低版本要求是8),要检查所安装的 Java 版本,请运行以下命令:
java -version
此外GCC版本需要4.8.2 及以上。
limits.conf设置
(新版官方文档中只给出了打开文件数,没给出进程数,旧版本都要修改)
设置系统最大打开文件句柄数:
vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
#* soft nproc 65536
#* hard nproc 65536
重启后生效。
注:第一列时用户,*即全部用户;第二列是软限制或硬限制,软限制数值需要<=硬限制;
我们运行程序时,后台都会打开一些文件,这个打开文件上限就是最大打开文件句柄数nofile,nproc是打开进程数。
时钟同步
Doris 的元数据要求时间精度要小于5000ms,所以所有集群所有机器要进行时钟同步,避免因为时钟问题引发的元数据不一致导致服务出现异常。
关闭交换分区(swap)
Linux交换分区会给Doris带来很严重的性能问题,需要在安装之前禁用交换分区
Liunx文件系统
这里我们推荐使用ext4文件系统,在安装操作系统的时候,请选择ext4文件系统。
推荐配置
开发测试环境
模块 | CPU | 内存 | 磁盘 | 网络 | 实例数量 |
---|---|---|---|---|---|
Frontend | 8核+ | 8GB+ | SSD 或 SATA,10GB+ * | 千兆网卡 | 1 |
Backend | 8核+ | 16GB+ | SSD 或 SATA,50GB+ * | 千兆网卡 | 1-3 * |
生产环境
模块 | CPU | 内存 | 磁盘 | 网络 | 实例数量 |
---|---|---|---|---|---|
Frontend | 16核+ | 64GB+ | SSD 或 RAID 卡,100GB+ * | 万兆网卡 | 1-3 * |
Backend | 16核+ | 64GB+ | SSD 或 SATA,100G+ * | 万兆网卡 | 3 * |
-
注1:
(1) FE 的磁盘空间主要用于存储元数据,包括日志和 image。通常从几百 MB 到几个 GB 不等。
(2) BE 的磁盘空间主要用于存放用户数据,总磁盘空间按用户总数据量 * 3(3副本)计算,然后再预留额外 40% 的空间用作后台 compaction 以及一些中间数据的存放。
(3) 一台机器上可以部署多个 BE 实例,但是只能部署一个 FE。如果需要 3 副本数据,那么至少需要 3 台机器各部署一个 BE 实例(而不是1台机器部署3个BE实例)。多个FE所在服务器的时钟必须保持一致(允许最多5秒的时钟偏差)
(4) 测试环境也可以仅适用一个 BE 进行测试。实际生产环境,BE 实例数量直接决定了整体查询延迟。
(5) 所有部署节点关闭 Swap。 -
注2:
FE 节点的数量
(1) FE 角色分为 Follower 和 Observer,(Leader 为 Follower 组中选举出来的一种角色,以下统称 Follower)。
(2) FE 节点数据至少为1(1 个 Follower)。当部署 1 个 Follower 和 1 个 Observer 时,可以实现读高可用。当部署 3 个 Follower 时,可以实现读写高可用(HA)。
(3) Follower 的数量必须为奇数,Observer 数量随意。
(4) 根据以往经验,当集群可用性要求很高时(比如提供在线业务),可以部署 3 个 Follower 和 1-3 个 Observer。如果是离线业务,建议部署 1 个 Follower 和 1-3 个 Observer。 -
通常我们建议 10 ~ 100 台左右的机器,来充分发挥 Doris 的性能(其中 3 台部署 FE(HA),剩余的部署 BE)
-
当然,Doris的性能与节点数量及配置正相关。在最少4台机器(一台 FE,三台 BE,其中一台 BE 混部一个 Observer FE 提供元数据备份),以及较低配置的情况下,依然可以平稳的运行 Doris。
-
如果 FE 和 BE 混部,需注意资源竞争问题,并保证元数据目录和数据目录分属不同磁盘。
Broker 部署
Broker 是用于访问外部数据源(如 hdfs)的进程。通常,在每台机器上部署一个 broker 实例即可。
网络需求
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,用户 <--> FE | FE 上的 http server 端口 |
FE | rpc_port | 9020 | BE --> FE, FE <--> FE | FE 上的 thrift server 端口,每个fe的配置需要保持一致 |
FE | query_port | 9030 | 用户 <--> FE | FE 上的 mysql server 端口 |
FE | edit_log_port | 9010 | FE <--> FE | FE 上的 bdbje 之间通信用的端口 |
Broker | broker_ipc_port | 8000 | FE --> Broker, BE --> Broker | Broker 上的 thrift server,用于接收请求 |
重点关注8030(管理页面),9030(用户连接端口),其他的端口一般基本不改。
当部署多个FE实例时,要保证FE的http_port配置相同。
部署前请确保各个端口在应有方向上的访问权限。
二进制包安装部署
集群规划
测试环境集群规划:
主机1:FE(leader)、BE、broker
主机2:FE(follower)、BE、broker
主机3:FE(observer)、BE、broker
实际生产环境不建议FE和BE混部。
解压安装
下载 Doris 的最新二进制版本,然后解压。
mkdir /opt/module/
cd /opt/module/
tar zxf apache-doris-x.x.x.tar.gz
配置 FE
进入到 apache-doris-x.x.x/fe 目录
cd apache-doris-x.x.x/fe
可以看到里面一些子目录:
bin目录存的一些可执行程序等,目前只有启停脚本
conf存的一些配置文件
lib存的一些依赖包之类的
log存的日志
doris-meta存之后的doris元数据(当然元数据路径我们一般手动指定)
修改 FE 配置文件 conf/fe.conf ,这里我们主要修改两个参数:priority_networks 及 meta_dir
如果需要更多优化配置,请参考 FE 参数配置说明,进行调整。
添加 priority_networks 参数:
priority_networks=172.23.16.0/24
这个参数我们在安装的时候是必须要配置的,特别是当一台机器拥有多个IP地址的时候,我们要为 FE 指定唯一的IP地址。
这里假设你的节点 IP 是 172.23.16.32,那么我们可以通过掩码的方式配置为 172.23.16.32/24。
添加元数据目录:
meta_dir=/path/your/doris-meta
这里如果不配置的话,默认是在你的Doris FE 安装目录下的 doris-meta,
单独配置元数据目录,需要你提前创建好你指定的目录。否则启动不起来,在log目录下的fe.log会产生报错。
注:
- 生产环境元数据目录不要放在Doris安装目录下,最好是单独一块ssd
- 如果机器有多个ip,需要进行ip绑定(添加 priority_networks 参数)才能正确识别
- 启动脚本中JAVA_OPTS默认java最大堆内存为4GB,建议生产环境调整至8GB以上
启动 FE
在 FE 安装目录下执行下面的命令,以守护进程的方式来完成 FE 的启动。
./bin/start_fe.sh --daemon
然后我们可以查看log目录下的fe.log查看一些启动过程。
查看 FE 运行状态(FE是java写的):
jps -l
可以看到java进程。
或者
ps -ef |grep fe
来查看进程
通过下面的命令来检查 Doris 是否启动成功
curl http://127.0.0.1:8030/api/bootstrap
这里 IP 和 端口分别是 FE 的 IP 和 http_port(默认8030),如果是你在 FE 节点执行,直接运行上面的命令即可。
如果返回结果中带有 "msg":"success" 字样,则说明启动成功。
也可以通过 Doris FE 提供的Web UI 来检查,在浏览器里输入地址
http:// fe_ip:8030
可以看到下面的界面,说明 FE 启动成功
注:这里我们使用 Doris 内置的默认用户 root 进行登录,密码是空。
这是一个 Doris 的管理界面,只能拥有管理权限的用户才能登录,普通用户不能登录。
连接 FE
通过 MySQL 客户端来连接 Doris FE,下载免安装的 MySQL 客户端
解压刚才下载的 MySQL 客户端,在 bin/ 目录下可以找到 mysql 命令行工具。然后执行下面的命令连接 Doris。
mysql -uroot -P9030 -h127.0.0.1
和连接mysql server不同的就是端口不一样。
注意:
- 这里使用的 root 用户是 doris 内置的默认用户,也是超级管理员用户,具体的用户权限查看 权限管理
- -P :这里是我们连接 Doris 的查询端口,默认端口是 9030,对应的是fe.conf里的
query_port
- -h : 这里是我们连接的 FE IP地址,如果你的客户端和 FE 安装在同一个节点可以使用127.0.0.1,这种也是 Doris 提供的如果你忘记 root 密码,可以通过这种方式不需要密码直接连接登录,进行对 root 密码进行重置。
执行下面的命令查看 FE 运行状态
show frontends\G;
然后可以看到类似下面的结果:
mysql> show frontends\G
*************************** 1. row ***************************
Name: 172.21.32.5_9010_1660549353220
IP: 172.21.32.5
EditLogPort: 9010
HttpPort: 8030
QueryPort: 9030
RpcPort: 9020
Role: FOLLOWER
IsMaster: true
ClusterId: 1685821635
Join: true
Alive: true
ReplayedJournalId: 49292
LastHeartbeat: 2022-08-17 13:00:45
IsHelper: true
ErrMsg:
Version: 1.1.2-rc03-ca55ac2
CurrentConnected: Yes
1 row in set (0.03 sec)
如果 IsMaster、Join 和 Alive 三列均为true,则表示节点正常。
停止 FE 节点
Doris FE 的停止可以通过下面的命令完成
./bin/stop_fe.sh
配置 BE
一般FE和BF不建议混部。
进入到 apache-doris-x.x.x/be 目录
cd apache-doris-x.x.x/be
查看BE的子目录,也是bin启停脚本 conf配置文件 lib依赖 log日志 storage默认存储路径 以及www目录
conf下有两个文件,be.conf是配置文件、odbcinst.ini是配置odbc外表用的,目前暂时用不到。
修改 BE 配置文件 conf/be.conf
,这里我们主要修改两个参数:priority_networks
及 storage_root_path
,如果需要更多优化配置,请参考 BE 参数配置说明,进行调整。
添加 priority_networks 参数(可以指定具体ip也可以指定在哪个网段):
priority_networks=172.23.16.0/24
配置 BE 数据存储目录
storage_root_path=/path/your/data_dir1;/path/your/data_dir2
默认目录在 BE安装目录的 storage 目录下。
BE 配置的存储目录必须先创建好。可以指定多个路径,使用分号隔开。
可以通过路径区别存储目录的磁盘类型,HDD或SS的。可以添加容量限制在每个路径的末尾,通过逗号隔开,如:
storage_root_path=/data/disk1/doris.HDD,50;/data/disk2/doris.SSD,10;/data/disk3/doris
HDD,50表示存储限制为50GB,HDD
SSD,10表示存储限制为10GB,SSD
不写的话表示无限制,默认HDD
配置 JAVA_HOME 环境变量
由于从 1.2 版本开始支持 Java UDF 函数,BE 依赖于 Java 环境。所以要预先配置 JAVA_HOME
环境变量,也可以在 start_be.sh
启动脚本第一行添加 export JAVA_HOME=your_java_home_path
来添加环境变量。
安装 Java UDF 函数
因为从1.2 版本开始支持Java UDF 函数,需要从官网下载 Java UDF 函数的 JAR 包放到 BE 的 lib 目录下,否则可能会启动失败。
启动 BE
在 BE 安装目录下执行下面的命令,来完成 BE 的启动。
./bin/start_be.sh --daemon
添加 BE 节点到集群
BE节点需要先在FE中添加,才可加入集群。
通过MySQL 客户端连接到 FE(注意安装MySQL客户端前需要提前卸载mariadb相关的rpm),刚装完默认没有密码
mysql -h hadoop1 -P 9030 -uroot
set password for 'root' = PASSWORD('123456');
之后执行下面的 SQL,将 BE 添加到集群中
ALTER SYSTEM ADD BACKEND "be_host_ip:heartbeat_service_port";
参数说明:
- be_host_ip:这里是你 BE 的 IP 地址,和你在 be.conf 里的 priority_networks 匹配
- heartbeat_service_port:这里是你 BE 的心跳上报端口,和你在 be.conf 里的 heartbeat_service_port 匹配,默认是 9050。
以测试机为例:
ALTER SYSTEM ADD BACKEND "hadoop1:9050";
ALTER SYSTEM ADD BACKEND "hadoop2:9050";
ALTER SYSTEM ADD BACKEND "hadoop3:9050";
查看 BE 运行状态
在 MySQL 命令行下执行下面的命令查看 BE 的运行状态。
SHOW BACKENDS\G
或
SHOW PROC '/backends';
示例:
mysql> SHOW BACKENDS\G
*************************** 1. row ***************************
BackendId: 10003
Cluster: default_cluster
IP: 172.21.32.5
HeartbeatPort: 9050
BePort: 9060
HttpPort: 8040
BrpcPort: 8060
LastStartTime: 2022-08-16 15:31:37
LastHeartbeat: 2022-08-17 13:33:17
Alive: true
SystemDecommissioned: false
ClusterDecommissioned: false
TabletNum: 170
DataUsedCapacity: 985.787 KB
AvailCapacity: 782.729 GB
TotalCapacity: 984.180 GB
UsedPct: 20.47 %
MaxDiskUsedPct: 20.47 %
Tag: {"location" : "default"}
ErrMsg:
Version: 1.1.2-rc03-ca55ac2
Status: {"lastSuccessReportTabletsTime":"2022-08-17 13:33:05","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false}
1 row in set (0.01 sec)
Alive : true表示节点运行正常
停止 BE 节点
Doris BE 的停止可以通过下面的命令完成
./bin/stop_be.sh
部署FS_Broker(可选)
Broker 以插件的形式,独立于 Doris 部署。如果需要从第三方存储系统导入数据,需要部署相应的 Broker,默认提供了读取 HDFS 、对象存储的 fs_broker。fs_broker 是无状态的,(不与FE或BE耦合),建议每一个 FE 和 BE 节点都部署一个 Broker。
-
拷贝源码 fs_broker 的 output 目录下的相应 Broker 目录到需要部署的所有节点上。建议和 BE 或者 FE 目录保持同级。
-
修改相应 Broker 配置
在相应 broker/conf/ 目录下对应的配置文件中,可以修改相应配置。
-
启动 Broker
bin/start_broker.sh --daemon
-
添加 Broker
要让 Doris 的 FE 和 BE 知道 Broker 在哪些节点上,通过 sql 命令添加 Broker 节点列表。
使用 mysql-client 连接启动的 FE,执行以下命令:
ALTER SYSTEM ADD BROKER broker_name "broker_host1:broker_ipc_port1","broker_host2:broker_ipc_port2",...;
如:
ALTER SYSTEM ADD BROKER broker_name "hadoop1:8000","hadoop2:8000","hadoop3:8000";
其中 broker_host 为 Broker 所在节点 ip;broker_ipc_port 在 Broker 配置文件中的conf/apache_hdfs_broker.conf。
-
查看 Broker 状态
使用 mysql-client 连接任一已启动的 FE,执行以下命令查看 Broker 状态:
SHOW PROC "/brokers";
注:在生产环境中,所有实例都应使用守护进程启动,以保证进程退出后,会被自动拉起,如 Supervisor。如需使用守护进程启动,在 0.9.0 及之前版本中,需要修改各个 start_xx.sh 脚本,去掉最后的 & 符号。从 0.10.0 版本开始,直接调用 sh start_xx.sh
启动即可。也可参考 这里
附:旧版本使用 Docker 开发镜像编译
除了二进制包以外,早期版本一般推荐使用Docker 开发镜像编译。
参考官网Doris编译
安装docker环境
docker要求centOS系统内核版本高于3.10,首先查看系统内核版本是否满足
uname -r
一般公司都有标准docker安装规范,如果是自己安装则需要连外网。
使用root权限登陆系统,确保yum包更新到最新
sudo yum update -y
加如安装过旧版本,先卸载旧版本
sudo yum remove docker docker-common docker-selinux docker-engine
安装yum-util工具包和devicemapper驱动依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
设置yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
如果连接超时可以使用阿里镜像源:
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
查看所有仓库中所有docker版本,并选择特定版本安装,一般可直接选择最新版
yum list docker-ce --showduplicates | sort -r
安装最新稳定版本:
sudo yum install docker-ce -y
指定具体版本,例:
sudo yum install docker-ce-20.10.11.ce -y
启动并设置开机自启:
sudo systemctl start docker
sudo systemctl enable docker
查看version,验证是否安装成功
docker version
使用docker开发镜像编译
下载源码并解压
通过wget下载(或手动上传下载好的压缩包)
然后解压到/opt/software/
然后下载docker镜像
docker pull apache/doris:build-env-ldb-toolchain-latest
检查镜像:
docker images
然后挂载本地目录运行镜像
切换成JDK8
进入之后执行编译脚本即可
之后按正常安装即可。
网友评论