Doris的安装
文章目录
- Doris的安装
- 写在前面
- Linux 操作系统版本需求
- 软件需求
- 操作系统安装要求
- 设置系统最大打开文件句柄数
- 时钟同步
- 关闭交换分区(swap)
- 开发测试环境
- 生产环境
- 安装
- 下载安装包
- 默认端口
- 集群部署
- 前置准备
- 安装部署FE
- 安装部署BE
- 在 **FE** 中添加所有 **BE** 节点(node01节点执行命令)
- 安装 MySQL Client
- 使用 MySQL Client 连接 FE
- 添加 BE
- 查看 BE 状态
- 启动BE
- 部署 FS_Broker(可选)
- 扩容和缩容
- FE的扩容和缩容
- BE的扩容和缩容
- Broker的扩容缩容
写在前面
官方建议:为了能够充分运用 MPP 架构的并发优势,以及 Doris 的高可用特性,建议 Doris 的部署遵循以下需求:
Linux 操作系统版本需求
Linux 系统 | 版本 |
---|---|
CentOS | 7.1 及以上 |
Ubuntu | 16.04 及以上 |
软件需求
软件 | 版本 |
---|---|
Java | 1.8 及以上 |
GCC | 4.8.2 及以上 |
操作系统安装要求
设置系统最大打开文件句柄数
vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
时钟同步
Doris 的元数据要求时间精度要小于5000ms,所以所有集群所有机器要进行时钟同步,避免因为时钟问题引发的元数据不一致导致服务出现异常。
关闭交换分区(swap)
Linux交换分区会给Doris带来很严重的性能问题,需要在安装之前禁用交换分区
开发测试环境
模块 | 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 * |
安装
下载安装包
低版本(V1.0之前的版本):安装 Doris,需要先通过源码编译,主要有两种方式:使用 Docker 开发镜像编译(推荐)、直接编译。
直接编译的方式,可以参考官网:https://doris.apache.org/zh-CN/installing/compilation.html
https://doris.apache.org/zh-CN/docs/dev/install/source-install/compilation
高版本:直接下载官网的tar包即可,无需再手动编译;本文安装的是
doris-1.1.5
版本
V1.1.5下载地址如下:
https://mirrors.tuna.tsinghua.edu.cn/apache/doris/1.1/1.1.5-rc02/
选择下载上图中框选的两个tar包
默认端口
实例名称 | 端口名称 | 默认端口 | 通讯方向 | 说明 |
---|---|---|---|---|
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,用于接收请求 |
当部署多个 FE 实例时,要保证 FE 的 http_port 配置相同。
部署前请确保各个端口在应有方向上的访问权限。
集群部署
主机 1 | 主机 2 | 主机 3 |
---|---|---|
FE(LEADER) | FE(FOLLOWER) | FE(OBSERVER) |
BE | BE | BE |
BROKER | BROKER | BROKER |
生产环境建议 FE 和 BE 分开。
前置准备
- 创建目录作为doris的安装目录
[whybigdata@node01 ~]# mkdir /opt/module/doris-1.1.5
- 修改可打开文件数(
每个节点都要修改
)
[whybigdata@node01 ~]# sudo vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
我们可以通过
ulimit -a
命令查看具体值
修改之后:从左到右四列的表示含义:需要限制的用户或用户组、类型(软|硬限制)、限制值的对象、限制值
注意:一般情况下,软限制(数值)<=硬限制
重启
永久生效,也可以用ulimit -n 65535
临时生效。
安装部署FE
- 创建 fe 元数据存储的目录
[whybigdata@node01 ~]# mkdir /opt/module/doris-1.1.5/doris-meta
注意:此处如果没有提前创建该目录(配置文件中指定元数据路径),则启动fe后执行
jps
或者ps –ef | grep doris
或者ps –ef | grep fe
都找不到相应的进程。
关于这个error,可以在/opt/module/doris-1.1.5/fe/log
目录下的 fe.log
,在最后面可以看到这个error的原因是:不存在/opt/module/doris-1.1.5/doris-meta这个目录。如下图所示:
- 下载的tar包上传到Linux 中
- 解压fe的tar包,并重命名
[whybigdata@node01 software]# tar ./apache-doris-fe-1.1.5-bin.tar.gz -C /opt/module/doris-1.1.5/
[whybigdata@node01 doris-1.1.5]# mv apache-doris-fe-1.1.5 fe
- 修改配置文件
fe.conf文件:位于fe安装目录下的conf目录
[whybigdata@node01 ~]# vim /opt/module/doris-1.1.5/fe/conf/fe.conf
#配置文件中指定元数据路径: 注意这个文件夹要自己创建
meta_dir = /opt/module/doris-1.1.5/doris-meta
#修改绑定 ip(每台机器修改成自己的 ip)
priority_networks = 192.168.10.131/24
- 分发集群
[whybigdata@node01 app]# for i in 2 3
> do
> scp -r /opt/module/doris-1.1.5 node0$i:/opt/module/
> done
- 启动:进入到fe的bin目录下执行
[whybigdata@node01 bin]# ./start_fe.sh --daemon
生产环境强烈建议单独指定目录不要放在 Doris 安装目录下,最好是单独的磁盘(如果有 SSD 最好)。 如果机器有多个 ip, 比如内网外网, 虚拟机 docker 等, 需要进行 ip 绑定,才能正确识别。 JAVA_OPTS 默认 java 最大堆内存为 4GB,建议生产环境调整至 8G 以上。
- 查看前端页面
http://node01:8030
注意:账号是whybigdata,且默认密码为空
安装部署BE
- 创建 BE 数据存放目录(
每个节点
)
[whybigdata@node01 ~]# mkdir /opt/module/doris-1.1.5/doris-storage1
[whybigdata@node01 ~]# mkdir /opt/module/doris-1.1.5/doris-storage2
- 下载的tar包上传到 Linux 中
- 解压be的tar包,并重命名
[whybigdata@node01 software]# tar ./apache-doris-be-1.1.5-bin-x86_64.tar.gz -C /opt/module/doris-1.1.5/
[whybigdata@node01 doris-1.1.5]# mv apache-doris-be-1.1.5 be
- 进入到be的conf目录下修改配置文件(
每个节点
)
[whybigdata@node01 conf# vim be.conf
#配置文件中指定数据存放路径:
storage_whybigdata_path = /opt/module/doris-1.1.5/doris- storage1;/opt/module/doris-1.1.5/doris-storage2
#修改绑定 ip(每台机器修改成自己的 ip)
priority_networks = 192.168.10.131/24
注意:
storage_whybigdata_path 默认在 be/storage 下,需要手动创建该目录。多个路径之间使用英文状态的分号;分隔(
最后一个目录后不要加
)。可以通过路径区别存储目录的介质,HDD 或 SSD。可以添加容量限制在每个路径的末尾,通过英文状态逗号,隔开,如:
storage_whybigdata_path=/home/disk1/doris.HDD,50;/home/disk2/doris.SSD,10;/home/disk2/doris
说明:
- /home/disk1/doris.HDD,50,表示存储限制为 50GB,HDD;
- /home/disk2/doris.SSD,10,存储限制为 10GB,SSD;
- /home/disk2/doris,存储限制为磁盘最大容量,默认为 HDD
- 如果机器有多个 IP, 比如内网外网, 虚拟机 docker 等, 需要进行 IP 绑定,才能正确识别。
- 分发集群
将node01节点下的be分发到其他两台机器上
在 FE 中添加所有 BE 节点(node01节点执行命令)
因为FE和BE两个都是单独的个体,所以他俩相互之间还不认识,所以BE 节点需要先在FE 中添加,才可加入集群。然后我们通过mysql的客户端将他们建立起联系,即使用 mysql-client 连接到 FE。
安装 MySQL Client
此处默认已经安装了mysql客户端,最主要的就是以下的安装包
mysql-community-client-5.7.28-1.el7.x86_64.rpm
mysql-community-common-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-5.7.28-1.el7.x86_64.rpm
使用 MySQL Client 连接 FE
[whybigdata@node01 doris-1.1.5]# mysql -h node01 -P 9030 -uwhybigdata
前面已经说过,默认 whybigdata用户 无密码,通过以下命令修改 whybigdata 密码。
mysql> SET PASSWORD FOR 'whybigdata' = PASSWORD('000000');
- fe启动完成后可以查看fe的运行状态
mysql> SHOW PROC '/frontends';
添加 BE
mysql> ALTER SYSTEM ADD BACKEND "node01:9050";
vmysql> ALTER SYSTEM ADD BACKEND "node02:9050";
mysql> ALTER SYSTEM ADD BACKEND "node03:9050";
查看 BE 状态
mysql> SHOW PROC '/backends';
这里可以在末尾加\G,即:
show proc '/backends'\G;
来更好显示方便查看。
启动BE
进入be安装目录下的bin目录,启动 BE(每个节点)
[whybigdata@node01 bin]# ./start_be.sh --daemon
- 启动后再次查看BE的节点
[whybigdata@node01 ~]# mysql -h node01 -P 9030 -uwhybigdata
mysql> SHOW PROC '/backends';
Alive 为 true 表示该 BE 节点存活。
部署 FS_Broker(可选)
Broker 以插件的形式,独立于 Doris 部署。如果需要从第三方存储系统导入数据,需要部署相应的 Broker,默认提供了读取 HDFS、百度云 BOS 及 Amazon S3 的 fs_broker。fs_broker 是无状态的,建议每一个 FE 和 BE 节点都部署一个 Broker。
高版本Broker不用手动编译安装,直接启动就可以!!!
- 启动 Broker
[whybigdata@node01 doris-1.1.5]# /opt/module/doris-1.1.5/fe/apache_hdfs_broker/bin/start_broker.sh --daemon
- 使用 mysql-client 连接启动的 FE,执行以下命令:
[whybigdata@node01 doris-1.1.5]# mysql -h node01 -P 9030 -uwhybigdata
mysql> ALTER SYSTEM ADD BROKER broker_name "node01:8000","node02:8000","node03:8000";
当然你也可以一个个的加,并且 broker_name 这只是一个名字,可以自己随意取
- 查看 Broker 状态
使用 mysql-client 连接任一已启动的 FE,执行以下命令查看 Broker 状态:
mysql> SHOW PROC "/brokers";
扩容和缩容
FE的扩容和缩容
可以通过将 FE 扩容至 3 个以上节点来实现 FE 的高可用。
使用 MySQL 登录客户端后,可以使用 sql 命令查看 FE 状态,目前就一台 FE
[whybigdata@node01 doris-1.1.5]# mysql -h node01 -P 9030 -uwhybigdata -p
mysql> SHOW PROC '/frontends'\G;
*************************** 1. row ***************************
Name: 192.168.10.131_9010_1661510658077
IP: 192.168.10.131
HostName: node01
EditLogPort: 9010
HttpPort: 8030
QueryPort: 9030
RpcPort: 9020
Role: FOLLOWER
IsMaster: true
ClusterId: 1133836578
Join: true
Alive: true
ReplayedJournalId: 2472
LastHeartbeat: 2023-01-06 10:17:18
IsHelper: true
ErrMsg:
Version: 1.1.1-rc03-2dbd70bf9
CurrentConnected: Yes
1 row in set (0.06 sec)
- 添加FE的新节点:
FE 分为 Leader,Follower 和 Observer 三种角色。 默认一个集群,只能有一个 Leader,可以有多个 Follower 和 Observer。其中 Leader 和 Follower 组成一个 Paxos 选择组,如果Leader 宕机,则剩下的 Follower 会自动选出新的 Leader,保证写入高可用。Observer 同步 Leader 的数据,但是不参加选举。
- 如果只部署一个 FE,则 FE 默认就是 Leader。在此基础上,可以添加若干 Follower 和 Observer。
mysql> ALTER SYSTEM ADD FOLLOWER "node02:9010";
mysql> ALTER SYSTEM ADD OBSERVER "node03:9010";
- 在node02和node03上分别启动FE节点
[whybigdata@node01 doris-1.1.5]# /opt/module/doris-1.1.5/fe/bin/start_fe.sh --helper node01:9010 --daemon
注意,如果是第一次添加的话,一定要加这两个参数
--helper
node01:9010
此时你再去查看FE的状态就发现有3台啦
mysql> SHOW PROC '/frontends'\G;
*************************** 1. row ***************************
Name: 192.168.10.132_9010_1661490723344
IP: 192.168.10.132
HostName: node02
EditLogPort: 9010
HttpPort: 8030
QueryPort: 0
RpcPort: 0
Role: FOLLOWER
IsMaster: false
ClusterId: 1133836578
Join: false
Alive: false
ReplayedJournalId: 0
LastHeartbeat: NULL
IsHelper: true
ErrMsg: java.net.ConnectException: Connection refused (Connection refused)
Version: NULL
CurrentConnected: No
*************************** 2. row ***************************
Name: 192.168.10.133_9010_1661490727316
IP: 192.168.10.133
HostName: node03
EditLogPort: 9010
HttpPort: 8030
QueryPort: 0
RpcPort: 0
Role: OBSERVER
IsMaster: false
ClusterId: 1133836578
Join: false
Alive: false
ReplayedJournalId: 0
LastHeartbeat: NULL
IsHelper: false
ErrMsg: java.net.ConnectException: Connection refused (Connection refused)
Version: NULL
CurrentConnected: No
*************************** 3. row ***************************
Name: 192.168.10.131_9010_1661510658077
IP: 192.168.10.131
HostName: node01
EditLogPort: 9010
HttpPort: 8030
QueryPort: 9030
RpcPort: 9020
Role: FOLLOWER
IsMaster: true
ClusterId: 1133836578
Join: true
Alive: true
ReplayedJournalId: 2577
LastHeartbeat: 2023-01-06 10:23:33
IsHelper: true
ErrMsg:
Version: 1.1.1-rc03-2dbd70bf9
CurrentConnected: Yes
3 rows in set (0.04 sec)
- 删除FE节点命令
mysql> ALTER SYSTEM DROP FOLLOWER[OBSERVER] "fe_host:edit_log_port";
mysql> ALTER SYSTEM DROP FOLLOWER "node01:9010";
注意:删除 Follower FE 时,确保最终剩余的 Follower(包括 Leader)节点最好为奇数。
BE的扩容和缩容
- 增加 BE 节点:在 MySQL 客户端,通过以下命令增加 BE 节点。
mysql> ALTER SYSTEM ADD BACKEND
mysql> ALTER SYSTEM ADD BACKEND "node01:9050";
- DROP 方式删除 BE 节点(不推荐)
mysql> ALTER SYSTEM DROP BACKEND "be_host:be_heartbeat_service_port";
mysql> ALTER SYSTEM DROP BACKEND "node01:9050";
注意:DROP BACKEND 会直接删除该 BE,并且其上的数据将不能再恢复!!!所以我们强烈不推荐使用 DROP BACKEND 这种方式删除 BE 节点。当你使用这个语句时,会有对应的防误操作提示。
- DECOMMISSION 方式删除 BE 节点(推荐)
mysql> ALTER SYSTEM DECOMMISSION BACKEND "be_host:be_heartbeat_service_port";
mysql> ALTER SYSTEM DECOMMISSION BACKEND "node01:9050";
Broker的扩容缩容
Broker 实例的数量没有硬性要求。通常每台物理机部署一个即可。Broker 的添加和删除可以通过以下命令完成:
mysql> ALTER SYSTEM ADD BROKER broker_name "broker_host:broker_ipc_port";
mysql> ALTER SYSTEM DROP BROKER broker_name "broker_host:broker_ipc_port";
mysql> ALTER SYSTEM DROP ALL BROKER broker_name;
Broker 是无状态的进程,可以随意启停。当然,停止后,正在其上运行的作业会失败,重试即可。
全文结束!