Doris学习笔记(一)
一、Doris架构
分为FE(Frontend)、BE(Backend)两种角色、两个进程。FE、BE都可以线性扩展。
1. FE
- 存储、维护集群元数据
- 接收、解析查询请求,规划查询计划,调度查询执行,返回查询结果。
- 主要为三个角色:
- Leader和Follower:用来达到元数据的高可用,保证单节点宕机后,元数据仍能实时在线恢复,不影响服务。
- Observer:用来扩展查询节点,同时起到了备份作用。(集群压力非常大,需要扩展整个查询能力,可以增加Observer节点。Observer不参与写入,只参与查询)
2. BE
- 负责物理数据的存储和计算
- 数据的可靠性由BE保证,对整个数据存储多副本或者三副本。
3. MySQL Client
Doris借助MySQL协议,用户可以通过ODBC/JDBC以及MySQL客户端来直接访问Doris
4. Broker
Broker是一个独立的无状态进程。封装了文件系统接口,可以读取远端存储系统中文件的能力,包括HDFS、S3、BOS等。
二、编译Doris
1. 安装docker
更新yum包
1
yum update -y
卸载旧版本的docker
1
yum remove docker docker-common docker-selinux docker-engine
安装yum-util工具包和devicemapper驱动依赖
1
yum install -y yum-utils device-mapper-persistent-data lvm2
更新yum镜像源
查看所有仓库中的docker版本,并选择特定的版本安装,一般可直接安装最新版
1
yum list docker-ce --showduplicates | sort -r
安装docker
1
2安装最新稳定版
yum install docker-ce -y启动并设置开机自启
1
2systemctl start docker
systemctl enable docker
2. 使用Docker开发镜像编译
下载源码并解压
1
wget https://mirrors.tuna.tsinghua.edu.cn/apache/doris/1.2/1.2.3-rc02/apache-doris-1.2.3-src.tar.gz
解压源码
1
tar -zxvf apache-doris-1.2.3-src.tar.gz
拉取docker镜像
1
docker pull apache/doris:build-env-for-1.2
挂载本都目录运行镜像
1
2
3
4
5
6docker run -it \
挂载Maven的仓库
-v [maven的.m2目录]:/root/.m2 \
挂载Doris源码
-v [刚刚解压的doris目录]:/root/doris/ \
apache/doris:build-env-for-1.2切换JDK8
1
2
3alternatives --set java java-1.8.0-openjdk.x86_64
alternatives --set javac java-1.8.0-openjdk.x86_64
export JAVA_HOME=/usr/lib/jvm/java-1.8.0编译
1
sh build.sh --clean --be --fe --ui
三、Doris安装要求
1. 注意事项
- FE主要存储元数据、日志和image。通常几百MB到几GB不等。
- BE主要存储用户数据。磁盘空间按用户总数据量*副本数计算,额外预留40%空间用作后台compaction以及中间数据存放。
- 一台机器可以部署多个BE实例,但是只能部署一个FE。需要三个副本数据,至少需要三台机器部署BE实例。
- 多个FE所在服务器时钟需要保持一致,最多允许偏差5秒。
- 测试环境可以一个BE。实际生成环境BE实例数量决定了整体查询延迟。
- 所有部署节点关闭SWAP
- FE节点至少为1个(一个Follower)。当部署一个Follower和一个Observer时,可以实现读高可用。部署三个Follower时,可以实现读写高可用(HA)。
- Follower必须为奇数(脑裂、选举),Observer数量随意。
- 集群可用性要求高时,部署一个Follower和一到三个Observer。离线业务部署一个Follower和一到三个Observer。
- Broker通常每台机器部署一个实例即可。
2. 默认端口
实例名称 | 端口名称 | 默认端口 | 通讯方向 | 说明 |
---|---|---|---|---|
BE | be_port | 9060 | FE—>BE | BE上的thrift server的端口 用于接收FE的请求 |
BE | webserver_port | 8040 | BE<—>FE | BE上的Http server端口 |
BE | heartbeat_serivce_port | 9050 | FE—>BE | BE上的心跳服务端口 用于接收来自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 | query_port | 9030 | 用户<—>FE | FE上的mysql server端口 |
FE | edit_log_port | 9010 | FE<—>FE | FE上bdbje之间通信用的端口 |
Broker | broker_ipc_port | 8000 | BE—>Broker FE—>Broker |
Boker上的thrift server 用于接收请求 |