apache-doris
介绍
该介绍来自官网
Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此,Apache Doris 能够较好的满足报表分析、即席查询、统一数仓构建、数据湖联邦查询加速等使用场景,用户可以在此之上构建用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。
Apache Doris 最早是诞生于百度广告报表业务的 Palo 项目,2017 年正式对外开源,2018 年 7 月由百度捐赠给 Apache 基金会进行孵化,之后在 Apache 导师的指导下由孵化器项目管理委员会成员进行孵化和运营。目前 Apache Doris 社区已经聚集了来自不同行业数百家企业的 400 余位贡献者,并且每月活跃贡献者人数也超过 100 位。 2022 年 6 月,Apache Doris 成功从 Apache 孵化器毕业,正式成为 Apache 顶级项目(Top-Level Project,TLP)
Apache Doris 如今在中国乃至全球范围内都拥有着广泛的用户群体,截止目前, Apache Doris 已经在全球超过 2000 家企业的生产环境中得到应用,在中国市值或估值排行前 50 的互联网公司中,有超过 80% 长期使用 Apache Doris,包括百度、美团、小米、京东、字节跳动、腾讯、网易、快手、微博、贝壳等。同时在一些传统行业如金融、能源、制造、电信等领域也有着丰富的应用。
官网地址:https://doris.apache.org/
架构
Doris整体架构如下图所示,Doris 架构非常简单,只有两类进程
- Frontend(FE),主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作。
- Backend(BE),主要负责数据存储、查询计划的执行。
在使用接口方面,Doris 采用 MySQL 协议,高度兼容 MySQL 语法,支持标准 SQL,用户可以通过各类客户端工具来访问 Doris,并支持与 BI 工具的无缝对接。
在存储引擎方面,Doris 采用列式存储,按列进行数据的编码压缩和读取,能够实现极高的压缩比,同时减少大量非相关数据的扫描,从而更加有效利用 IO 和 CPU 资源。
fe
fe角色
fe有两种角色:Observer和Follower
Follower是可读可写的角色,而Observer是只读的角色。其中master节点也是从Follower中选举出来的,Observer不参与选举。
单节点
单节点的fe没有特别需要注意的地方,挂掉重启也不会有任何影响,只要不是在进程工作的重启对数据和服务都没任何影响。单节点的fe只有FLLOWER身份的节点
多节点
多节点有两种形式
1.单Follower和多Observer :相当于是一写多读,这个是最好运维的,也是最常见的方式,缺点是Follower依然是单点故障,优点是Follower出了故障可以手动把Observer配置为Follower,相当于Observer都是Follower的备份。
2.多Follower:每个节点都是Follower节点,缺点是数据出现故障或者节点全部同时挂掉难恢复,优点是高可用。
be
be作为fe的执行器无任何状态,只需要加入到FE集群即可。
broker
Broker 是用于访问外部数据源(如 hdfs)的进程,broker和be基本一致。
部署
这里部署只涉及Kubernetes部署,DOCKER以及二进制部署请参考官方文档:https://doris.apache.org/zh-CN/docs/dev/install/standard-deployment
kubernetes部署
1 | 关于K8S部署doris:首先这里doris本身对k8s容器部署的支持其实是比较差的,虽然新版本中doris支持k8s模式部署,但我测试使用k8s模式部署实际还是问题的,因为Doris |
1 | 部署说明: |
fe部署
这里fe采用多Follower的方式部署,部署3节点高可用fe集群
首先需要构建fe镜像,dockerhub也有官方的镜像,但版本一般与官网差得比较远,如果对版本要求不高可以直接使用dockerhub的官方镜像。
dockerhub地址:https://hub.docker.com/r/apache/doris/tags
因为这里目前官方的稳定版本为1.2.4.1,但官方镜像还没有能提供到该版本,所以这里选择手动构建镜像部署。
镜像构建相关文档:https://doris.apache.org/zh-CN/docs/dev/install/construct-docker/construct-docker-image
1.下载doris fe的二进制包
1 | wget https://mirrors.tuna.tsinghua.edu.cn/apache/doris/1.2/1.2.4.1-rc01/apache-doris-fe-1.2.4.1-bin-x86_64.tar.xz --no-check-certificate |
2.Dockerfile文件准备
1 | FROM openjdk:8u342-jdk |
3.init_fe文件准备(初始化启动脚本)
1 | #!/bin/bash |
4.构建镜像并推送
1 | docker build . -t docker-registry.finsiot.com/finsiot/doris-be:1.4.2.1 |
5.k8s部署fe(3节点)
部署fe说明1:部署所需传递的变量
fe部署需要传两个变量:FE_ID,FE_SERVERS
FE_ID:这个主要定义节点是否为主节点,虽然fe只要为FLLOWER都是可写可读的主节点,但FLLOWER里面也需要选举一个MASTER节点,这里FE_ID为1的默认是MASTER节点
FE_SERVERS:fe以及be以及broker所有doris服务都需要这个变量,这个变量定义了所有FE的节点信息,格式为:[FE_NAME:FE_IP:FE_PORT,FE_NAME2:FE_IP:FE_PORT]
这里由于所有服务都需要定义这个变量,所以先部署FE_SERVERS的configmap,然后在后面的所有doris服务中都要引用这个configmap中的FE_SERVERS变量。
部署fe说明2:k8s部署相关配置
1.每一个fe节点有独立的部署yaml文件,例如这里部署3个节点则会由fe1.yaml、fe2.yaml、fe3.yaml三个文件,会分别部署。每个文件中的FE_ID变量是不一样的,分别定义自己的ID号,FE_SERVERS变量因为都是一样的所有单独取自一个独立的configmap文件这里上面说过,就不再赘述。
2.不需要部署svc控制器,每个节点直接监听本机IP以及对应端口,通过以下配置实现
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
3.需要固定部署的NODE节点,每个fe节点需要单独指定,并且由于每个节点都需要占用宿主机自身的IP及端口号来监听,所以每一个fe节点需要部署在不同的node节点上。
1 | nodeName: node2 |
这些配置下面部署的yaml中可以看到,这里只是说明其作用。
4.由于一个服务器上面有多个ip,要确保监听到指定的ip,需要通过fe配置文件中的priority_networks配置实现
1 | priority_networks = 192.168.110.0/26 #这里之所以下面部署时掩码设置为26是因为服务器里面有一个192.168.110.200的高可用IP,要确保节点IP固定,所以不能使用这种流动性IP。一般情况使用24位掩码即可 |
5.挂载目录
除了自身配置文件目录/opt/apache-doris/fe/conf/fe.conf以外,还需要挂载数据目录:/opt/apache-doris/fe/doris-meta
fe-servers-env.yaml
1 | apiVersion: v1 |
fe1.yaml
1 | apiVersion: v1 |
fe2.yaml
1 | apiVersion: v1 |
fe3.yaml
1 | apiVersion: v1 |
部署
1 | kubectl apply -f fe-servers-env.yaml |
部署完以后访问任何一个节点的8030端口都可以访问到fe的web管理页面,例如http://192.168.110.30:8030
默认账号为root,无密码
进入web管理页面在system菜单下面的frontends中可以看到所有FLLOWER节点信息
Alive字段为true就表示节点正常。如果不正常可以通过看到ErrMsg和fe节点本身日志信息来排错。
be部署
首先需要构建be镜像,dockerhub也有官方的镜像,但版本一般与官网差得比较远,如果对版本要求不高可以直接使用dockerhub的官方镜像。
dockerhub地址:https://hub.docker.com/r/apache/doris/tags
因为这里目前官方的稳定版本为1.2.4.1,但官方镜像还没有能提供到该版本,所以这里选择手动构建镜像部署。
镜像构建相关文档:https://doris.apache.org/zh-CN/docs/dev/install/construct-docker/construct-docker-image
1.下载doris be的二进制包
1 | 这里以1.2.4.1部署为例。但下载的时候需要注意be分为CPU型号分为X64 ( avx2 )和X64 ( no avx2 )以及ARM64,这里因为服务器CPU都是X64,所以主要需要注意CPU是否支持avx2,如果不支持需要下载no avx2版本 |
2.Dockerfile文件准备
1 | #--- |
3.init_be.sh文件准备(启动初始化脚本)
1 | #脚本取自官方github:https://github.com/apache/doris/blob/master/docker/runtime/be/resource/init_be.sh |
4.构建镜像并推送
1 | docker build . -t docker-registry.finsiot.com/finsiot/doris-be:1.4.2.1 |
5.k8s部署be(3节点)
be也需要传递FE_SERVERS变量,通过上面fe-servers-env.yaml中定义的fe-servers configmap,除此之外,be还需要定义一个环境变量BE_ADDR,用于定义自身节点的ip和端口号。
其他部署说明和FE一样,只是be本身没有master节点,所有节点都只需要通过定义FE_SERVERS来加入到集群中即可。
be的数据挂载目录为:/opt/apache-doris/be/storage ,配置文件挂载目录为:/opt/apache-doris/be/conf/be.conf
be1.yaml
1 | apiVersion: v1 |
be2.yaml
1 | apiVersion: v1 |
be3.yaml
1 | apiVersion: v1 |
部署
1 | kubectl apply -f be1.yaml |
部署完成以后在fe管理页面的system菜单下面的backends中可以看到所有be节点
broker部署
Broker 是用于访问外部数据源(如 hdfs)的进程
broker无数据目录,配置文件使用默认即可,所以这里无需挂载目录
1.下载doris broker二进制包
1 | wget https://mirrors.tuna.tsinghua.edu.cn/apache/doris/1.2/1.2.4.1-rc01/apache-doris-dependencies-1.2.4.1-bin-x86_64.tar.xz --no-check-certificate |
2.Dockerfile文件准备
1 | # 选择基础镜像 |
3.init_broker.sh
1 | #!/bin/bash |
4.构建镜像并推送
1 | docker build . -t docker-registry.finsiot.com/finsiot/doris-broker:1.4.2.1 |
5.k8s部署broker
broker和be几乎一样,只需要指定自身的ip端口,再指定fe集群的ip端口就行了
环境变量为:BROKER_ADDR,FE_SERVERS
BROKER_ADD格式为:BROKER_NAME:IP:PORT
broker.yaml
1 | apiVersion: v1 |
部署完在fe管理页面system菜单中的brokers可以看到。
如果要部署多个broker只需和be一样部署即可,构建多个yaml文件多个不同名称不同节点的broker,指定环境变量 BROKER_ADDR,再部署启动即可。
doris问题及处理方法
FE Follower全部挂掉恢复方法
当fe Follower节点全部同时挂掉或者Follower仅存在一个节点达到一定时间的时候都会出现集群故障。此时程序无法启动,日志显示为
wait catalog to be ready. FE type UNKNOWN
恢复方法:
1 | 1、首先,停止所有 FE 进程,同时停止一切业务访问。保证在元数据恢复期间,不会因为外部访问导致其他不可预期的问题。 |