在华为云通过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层会话保持。

相关推荐
探索云原生2 小时前
在 K8S 中创建 Pod 是如何使用到 GPU 的: nvidia device plugin 源码分析
ai·云原生·kubernetes·go·gpu
启明真纳2 小时前
elasticache备份
运维·elasticsearch·云原生·kubernetes
jwolf24 小时前
基于K8S的微服务:一、服务发现,负载均衡测试(附calico网络问题解决)
微服务·kubernetes·服务发现
会飞的土拨鼠呀6 小时前
chart文件结构
运维·云原生·kubernetes
自在的LEE9 小时前
当 Go 遇上 Windows:15.625ms 的时间更新困局
后端·kubernetes·go
云川之下13 小时前
【k8s】访问etcd
kubernetes·etcd
warrah19 小时前
k8s迁移——岁月云实战笔记
笔记·容器·kubernetes
Gauss松鼠会1 天前
GaussDB 企业版轻量化部署探索(二)
数据库·人工智能·docker·华为云·gaussdb
会飞的土拨鼠呀1 天前
Kubernetes 是什么?
云原生·容器·kubernetes