在华为云通过operator部署Doris v2.1集群

概述

1.1 Doris的简介

Apache Doris 是一款基于 MPP 架构的高性能、实时的分析型数据库,以高效、简单、统一的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。

Apache Doris最早是诞生于百度的Palo项目,2017年正式对外开源,2018年捐赠给 Apache 基金会进行孵化,如今在中国乃至全球范围内都拥有着广泛的用户群体,截止目前,Apache Doris 已经在全球超过4000家中大型企业的生产环境中得到应用。

1.2 Doris的使用情景

数据源经过各种数据集成和加工处理后,通常会入库到实时数据仓库 Apache Doris 和离线湖仓(Hive, Iceberg, Hudi中),Apache Doris 被广泛应用在以下场景中。

1.3 Doris的架构

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

Frontend(FE):主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作。

Backend(BE):主要负责数据存储、查询计划的执行。

FE和BE进程可以自由地横向扩展,单集群可以支持到数百台机器,数十 PB 的存储容量,并且都通过一致性协议来保证服务的高可用和数据的高可靠。

1.4 Doris的部署方式

Apache Doris可以通过manager组件在物理机或虚拟机上部署,也可以手工在在物理机或虚拟机上部署,也可以通过operator在Kubernetes上部署。本文介绍通过operator方式来部署Doris集群。

2 环境

  • 一个华为云Kubernetes集群(Turbo类型):
  • 一个华为云NAS服务SFS Turbo实例:

  • 一个华为云负载均衡器ELB:

3 部署

3.1 Kubernetes中部署CRD和operator服务

部署CRD,命令如下:

wget https://raw.githubusercontent.com/apache/doris-operator/master/config/crd/bases/doris.apache.com_dorisclusters.yaml

# 必须带上参数--server-side
# 否则出现:The CustomResourceDefinition "dorisclusters.doris.selectdb.com" is invalid: metadata.annotations: Too long: must have at most 262144 bytes
kubectl apply -f doris.apache.com_dorisclusters.yaml --server-side

部署operator服务,命令如下:

wget https://raw.githubusercontent.com/apache/doris-operator/master/config/operator/operator.yaml
kubectl apply -f operator.yaml
kubectl get pod -n doris

3.2 Kubernetes中创建存储类storageclass

参数everest.io/share-access-to是VPC的ID。

参数everest.io/share-export-location是sfs turbo实例的共享路径:自定义子目录,sfs turbo实例的共享路径是在sfs实例的详细页查询,自定义子目录可以是任意路径。

参数everest.io/volume-id是sfs turbo实例的ID。

只需要修改以上三个参数。

在本文,storageclass的名称叫做sfsturbo-subpath-sc。

apiVersion: storage.k8s.io/v1
allowVolumeExpansion: true
kind: StorageClass
metadata:
  name: sfsturbo-subpath-sc
mountOptions:
- lock
parameters:
  csi.storage.k8s.io/csi-driver-name: sfsturbo.csi.everest.io
  csi.storage.k8s.io/fstype: nfs
  everest.io/archive-on-delete: "true"
  everest.io/share-access-to: xxxxxxxxxxxxxxxxxx   # VPC ID
  everest.io/share-expand-type: bandwidth
  everest.io/share-export-location: xxxxx.sfsturbo.internal:/mydir   # sfs turbo实例的共享路径:自定义子目录
  everest.io/share-source: sfs-turbo
  everest.io/share-volume-type: STANDARD
  everest.io/volume-as: subpath
  everest.io/volume-id: xxxxxxxxxxxxx   # sfs turbo实例的ID
provisioner: everest-csi-provisioner
reclaimPolicy: Delete
volumeBindingMode: Immediate

3.3 Kubernetes中部署Doris集群

从github下载模板CR文件。

wget https://github.com/apache/doris-operator/blob/master/doc/examples/doriscluster-sample-storageclass.yaml
  • storageClassName字段:用于指定kubernetes存储类,此处设置为上一步创建的sfsturbo-subpath-sc。
  • accessModes字段:使用了华为云NAS服务作为后端存储,该值必须是ReadWriteMany。
  • adminUser字段:用于初始化doris fe的管理员账号密码。

最终要使用的描述doris集群的CR的yaml文件如下:

apiVersion: doris.selectdb.com/v1
kind: DorisCluster
metadata:
  labels:
    app.kubernetes.io/name: doriscluster
    app.kubernetes.io/instance: doriscluster-sample-storageclass
    app.kubernetes.io/part-of: doris-operator
  name: doriscluster-sample-storageclass1
spec:
  adminUser:
    name: root
    password: doris@123
  feSpec:
    replicas: 3
    image: selectdb/doris.fe-ubuntu:2.1.1
    limits:
      cpu: 2
      memory: 4Gi
    requests:
      cpu: 2
      memory: 4Gi
    persistentVolumes:
    - mountPath: /opt/apache-doris/fe/doris-meta
      name: fetest
      persistentVolumeClaimSpec:
        # when use specific storageclass, the storageClassName should reConfig, example as annotation.
        storageClassName: sfsturbo-subpath-sc
        accessModes:
        - ReadWriteMany
        resources:
          # notice: if the storage size less 5G, fe will not start normal.
          requests:
            storage: 10Gi
    - mountPath: /opt/apache-doris/fe/log
      name: felog
      persistentVolumeClaimSpec:
        # when use specific storageclass, the storageClassName should reConfig, example as annotation.
        storageClassName: sfsturbo-subpath-sc
        accessModes:
        - ReadWriteMany
        resources:
          requests:
            storage: 10Gi
  beSpec:
    replicas: 3
    image: selectdb/doris.be-ubuntu:2.1.1
    limits:
      cpu: 2
      memory: 4Gi
    requests:
      cpu: 2
      memory: 4Gi
    persistentVolumes:
    - mountPath: /opt/apache-doris/be/storage
      name: betest
      persistentVolumeClaimSpec:
        # when use specific storageclass, the storageClassName should reConfig, example as annotation.
        storageClassName: sfsturbo-subpath-sc
        accessModes:
        - ReadWriteMany
        resources:
          requests:
            storage: 10Gi
    - mountPath: /opt/apache-doris/be/log
      name: belog
      persistentVolumeClaimSpec:
        # when use specific storageclass, the storageClassName should reConfig, example as annotation.
        storageClassName: sfsturbo-subpath-sc
        accessModes:
        - ReadWriteMany
        resources:
          requests:
            storage: 10Gi

执行以下命令将CR写入到kubernetes集群中:

kubectl apply -f doriscluster-sample-storageclass.yaml

最终可以看见3个FE和3个BE:


3.4 云上负载均衡器暴露Doris FE

为Doris FE服务的8030端口创建HTTP路由,并且在ELB开启7层会话保持或者4层会话保持。

  • 7层会话保持:

  • 4层会话保持:

3.5 多FE情景下不开启会话保持必然发生的现象

访问FE的web界面,发生几次点击就会出现账号登出现象。可见FE实例之间是不共享WEB信息。

4 公网访问Doris FE的WEB UI

浏览器输入云上负载均衡器的公网IP,在WEB UI中输入账号密码登录后,即可看见Doris集群的信息,下图显示本次部署的doris集群的BE服务正常运行。

5 小结

本文介绍通过operator的方式在云上kubernetes中部署使用PV的doris集群,并通过云上负载均衡器暴露FE服务。需要再次提醒大家注意的是,部署CRD时需要带上参数--server-side,多FE情景下负载均衡器需要开启7层或4层会话保持。

相关推荐
来恩10032 小时前
Kubernetes学习指南与资料分享
云原生·容器·kubernetes
向阳12188 小时前
doris:阿里云 OSS 导入数据
数据库·阿里云·云计算·doris
mumu2lili9 小时前
k8s namespace绑定节点
java·容器·kubernetes
Dusk_橙子10 小时前
在K8S中,如果后端NFS存储的IP发送变化如何解决?
tcp/ip·容器·kubernetes
小安运维日记11 小时前
CKS认证 | Day1 K8s集群部署与安全配置
运维·网络·安全·容器·kubernetes
九河云12 小时前
分布式数据库中间件(DDM)的使用场景
数据库·分布式·中间件·华为云
RedCong16 小时前
在k8s中部署一个可外部访问的Redis Sentinel
redis·kubernetes·sentinel
季风泯灭的季节20 小时前
K8s UI工具 Kuboard 安装
云原生·容器·kubernetes
胡八一1 天前
k8s 部署kafka单机和集群
kafka·kubernetes
Lenyiin2 天前
《 C++ 点滴漫谈: 二十二 》操作符炼金术:用C++ operator重塑代码美学
c++·operator·lenyiin·c++关键字