在 KubeSphere 中開啟新一代雲原生數倉 Databend

語言: CN / TW / HK

作者:尚卓燃(http://github.com/PsiACE),Databend 研發工程師,Apache OpenDAL (Incubating) PPMC。

前言

Databend 是一款完全面向雲物件儲存的新一代雲原生資料倉庫,專為彈性和高效設計,為您的大規模分析需求保駕護航。Databend 同時是一款符合 Apache-2.0 協議的開源軟體,除了訪問雲服務(http://app.databend.com/)之外,使用者還可以自己部署 Databend 生產叢集以滿足工作負載需要。

Databend 的典型使用場景包括:

  • 實時分析平臺,日誌的快速查詢與視覺化。
  • 雲資料倉庫,歷史訂單資料的多維度分析和報表生成。
  • 混合雲架構,統一管理和處理不同來源和格式的資料。
  • 成本和效能敏感的 OLAP 場景,動態調整儲存和計算資源。

KubeSphere 是在 Kubernetes 之上構建的以應用為中心的多租戶容器平臺,提供全棧的 IT 自動化運維的能力,可以管理多個節點上的容器化應用,提供高可用性、彈性擴縮容、服務發現、負載均衡等功能。

利用 KubeSphere 部署和管理 Databend 具有以下優點:

  • 使用 Helm Charts 部署 Databend 叢集,簡化應用管理、部署過程和引數設定。
  • 利用 Kubernetes 的特性來實現 Databend 叢集的自動恢復、水平擴充套件、負載均衡等。
  • 與 Kubernetes 上的其他服務或應用輕鬆整合和互動,如 MinIO、Prometheus、Grafana 等。

本文將會介紹如何使用 KubeSphere 建立和部署 Databend 高可用叢集,並使用 QingStor 作為底層儲存服務。

配置物件儲存

物件儲存是一種儲存模型,它把資料作為物件來管理和訪問,而不是檔案或塊。物件儲存的優點包括:可擴充套件性、低成本、高可用性等。

Databend 完全面向物件儲存而設計,在減少複雜性和成本的同時提高靈活性和效率。Databend 支援多種物件儲存服務,如 AWS S3、Azure Blob、Google Cloud Storage、HDFS、Alibaba Cloud OSS、Tencent Cloud COS 等。您可以根據業務的需求和偏好選擇合適的服務來存放你的資料。

這裡我們以青雲 QingStor 為例,介紹與 S3 相容的物件儲存相關配置的預先準備工作。

建立 Bucket

物件儲存服務(QingStor)提供了一個無限容量的線上檔案儲存和訪問平臺。每個使用者可建立多個儲存空間(Bucket);您可以將任意型別檔案通過控制檯或 QingStor API 上傳至一個儲存空間(Bucket)中;儲存空間(Bucket)支援訪問控制,您可以將自己的儲存空間(Bucket)開放給指定的使用者,或所有使用者。

登入青雲控制檯,選中物件儲存服務,新建用於驗證的 bucket 。

需要關注的是 bucket 的名字 <bucket> 和其所在的可用區 <region>

由於這裡使用 s3 相容服務,所以最後連線的 endpoint_url 是 s3.<bucket>.<region>.qingstor.com

建立 API 金鑰

API 金鑰(Access Key)可以讓您通過傳送 API 指令來訪問青雲的服務。API 金鑰 ID 須作為引數包含在每一個請求中傳送;而 API 金鑰的私鑰負責生成 API 請求串的簽名,私鑰需要被妥善保管,切勿外傳。預設所有 IP 地址都可使用此金鑰呼叫 API,設定 IP 白名單後只有白名單範圍內的 IP 地址才可使用此金鑰。

點選右上方選單,選中 API 金鑰,建立新的金鑰用於 API 訪問。

下載檔案中的 qy_access_key_id 對應 access_key_idqy_secret_access_key 對應 secret_access_key

準備 KubeSphere 環境

KubeSpherehttp://kubesphere.io)是在 Kubernetes 之上構建的開源容器平臺,提供全棧的 IT 自動化運維的能力,簡化企業的 DevOps 工作流。KubeSphere 已被海內外數萬家企業採用。此外, KubeSphere 還擁有極為開放的生態,KubeSphere 在 OpenPitrix 的基礎上,為使用者提供了一個基於 Helm 的應用商店,用於應用生命週期管理。KubeSphere 應用商店讓 ISV、開發者和使用者能夠在一站式服務中只需點選幾下就可以上傳、測試、安裝和釋出應用。目前 Databend 已入駐 KubeSphere 應用商店。

KubeSphere 環境搭建

All-in-One 模式部署測試環境

參考官方文件

在 Azure 上 Spot 一臺機器:

Welcome to Ubuntu 18.04.6 LTS (GNU/Linux 5.4.0-1089-azure x86_64)

 * Documentation:  http://help.ubuntu.com
 * Management:     http://landscape.canonical.com
 * Support:        http://ubuntu.com/advantage

  System information as of Tue Sep  6 02:09:16 UTC 2022

  System load:  0.15              Processes:           376
  Usage of /:   4.8% of 28.89GB   Users logged in:     0
  Memory usage: 0%                IP address for eth0: 10.0.0.4
  Swap usage:   0%

以 All-In-One 模式部署:

注意,需要在 root 下執行。

apt install socat conntrack containerd
systemctl daemon-reload
systemctl enable --now containerd
curl -sfL http://get-kk.kubesphere.io | VERSION=v3.0.2 sh -
chmod +x kk
./kk create cluster --with-kubernetes v1.22.12 --with-kubesphere v3.3.1
+------+------+------+---------+----------+-------+-------+---------+-----------+--------+--------+------------------+------------+-------------+------------------+--------------+
| name | sudo | curl | openssl | ebtables | socat | ipset | ipvsadm | conntrack | chrony | docker | containerd       | nfs client | ceph client | glusterfs client | time         |
+------+------+------+---------+----------+-------+-------+---------+-----------+--------+--------+------------------+------------+-------------+------------------+--------------+
| ks   | y    | y    | y       | y        | y     |       |         | y         | y      |        | 1.5.9-0ubuntu3.1 |            |             |                  | UTC 02:53:56 |
+------+------+------+---------+----------+-------+-------+---------+-----------+--------+--------+------------------+------------+-------------+------------------+--------------+

如果提示依賴缺失,可以根據需要安裝,sudo apt install <name> ,這裡只安裝前兩個。

Kubernetes Version ≥ 1.18
socat Required
conntrack Required
ebtables Optional but recommended
ipset Optional but recommended
ipvsadm Optional but recommended

訪問 KubeSphere 控制面板。

執行下面命令檢視關於登入的資訊:

Collecting installation results ...
#####################################################
###              Welcome to KubeSphere!           ###
#####################################################

Console: http://10.0.0.4:30880
Account: admin
Password: P@88w0rd

NOTES:
  1. After you log into the console, please check the
     monitoring status of service components in
     "Cluster Management". If any service is not
     ready, please wait patiently until all components
     are up and running.
  2. Please change the default password after login.

#####################################################
http://kubesphere.io             2022-09-06 15:41:44
#####################################################

訪問 30880 埠,並使用使用者名稱密碼登入,就可以訪問 KubeSphere 。為確保能夠訪問 KubeSphere 和其他服務,請根據實際情況在雲平臺控制面板為相應埠新增入站出站規則。

KubeSphere Cloud 建立演示環境

建立輕量叢集服務:

註冊並登入 http://kubesphere.cloud 之後,可以輕鬆建立輕量叢集服務。

使用預設配置建立免費版叢集即可嚐鮮體驗,個人使用者每月有 10 小時免費額度。

訪問 KubeSphere 控制面板。

點選進入 KubeSphere,使用臨時帳號密碼登入。

外掛啟用

登入後的介面,如下圖所示:

如需使用應用商店,可以參考 KubeSphere 文件 - 在安裝後啟用應用商店 啟用。

開啟後可以在應用商店中搜索找到 Databend ,結果類似下圖。

企業空間與專案管理

點選平臺管理進入訪問控制頁面,選中企業空間,點選建立,在名稱一欄填寫你想使用的名稱,比如 databend

在側邊欄選中專案,點選建立,分別建立為 databend-metadatabend-query 準備的專案。建立後效果如圖所示:

部署 Databend

應用模板載入

雖然應用商店中已經有 Databend 可供選用,但版本較舊(v0.8.122-nightly),新的 PR(v1.0.3-nightly)需要等合併之後才可用,所以建議新增 Databend 官方維護的 helm-charts 作為應用模板。

Databend 官方提供了 Helm Charts ,而 KubeSphere 也支援使用 Helm Charts 應用模板。

應用模板是使用者上傳、交付和管理應用的一種方式。一般來說,根據一個應用的功能以及與外部環境通訊的方式,它可以由一個或多個 Kubernetes 工作負載(例如部署有狀態副本集守護程序集)和服務組成。作為應用模板上傳的應用基於 Helm 包構建。 可以將 Helm Chart 交付至 KubeSphere 的公共倉庫,或者匯入私有應用倉庫來提供應用模板。 http://kubesphere.io/zh/docs/v3.3/workspace-administration/upload-helm-based-application/

在企業空間側邊欄選中 應用管理 ,點選 應用倉庫 ,新增 Databend 官方維護的 Helm Charts

待狀態變為成功後,就可以基於模板安裝部署新的 Databend 應用。

Databend 部署模型

參考文件

典型的 Databend 叢集架構如下圖所示,需要分別部署多個 Meta 和 Query 節點:

在叢集模式下部署 Databend 時,首先需要啟動一個 Meta節點,然後設定並啟動其他 Meta 節點以加入第一個 Meta 節點,形成叢集。在成功啟動所有 Meta 節點後,逐個啟動 Query 節點。每個 Query 節點在啟動後自動註冊到 Meta 節點以形成叢集。

Meta 高可用叢集部署

選中 databend-meta 專案。點選側邊欄應用負載,選中應用。點選建立,並選中從應用模板。 下拉欄中選中之前新增的 Databend ,效果如圖:

選中 databend-meta,點選安裝,設定應用名稱及版本,我們推薦總是使用最新版本,以獲得更好的體驗。

使用示例設定,建立 3 副本的 databend-meta 節點形成叢集。生產環境下推薦至少使用 3 副本高可用叢集,可以參考 Databend 官方文件進行配置。

bootstrap: true
replicaCount: 3
persistence:
  size: 5Gi # 考慮到宿主機資源有限,僅供示範
serviceMonitor:
  enabled: true

Query 叢集部署

在 Meta 節點的所有副本就緒之後,就可以開始部署 Query 叢集。

Query 節點部署的前置步驟與 Meta 節點類似。進入 databend-query 專案,仿照之前的步驟選中 databend-query 應用模板進行建立即可。

配置中需要關注的部分是:

  • databend-meta 連線:這裡的地址取決於之前部署的 Meta 叢集的相關資訊。
  • 儲存方式:本示例連線的是 QingStor ,使用 S3 相容協議,所以需要特別關注 endpoint_url
  • 內建使用者建立:建立一個名為 databend 密碼為 databend 的內建使用者,以方便在非 localhost 情況下訪問。

這裡啟動的是一個單副本的 Query 叢集,實際情況下可以根據工作負載規模靈活調整。

replicaCount: 1
config:
  query:
    clsuterId: default
    # add builtin user
    users:
      - name: databend
        # available type: sha256_password, double_sha1_password, no_password, jwt
        authType: double_sha1_password
        # echo -n "databend" | sha1sum | cut -d' ' -f1 | xxd -r -p | sha1sum
        authString: 3081f32caef285c232d066033c89a78d88a6d8a5
  meta:
    # Set endpoints to use remote meta service
    # depends on previous deployed meta service、namespace and nodes
    endpoints:
      - "databend-meta-0.databend-meta.databend-meta.svc:9191"
      - "databend-meta-1.databend-meta.databend-meta.svc:9191"
      - "databend-meta-2.databend-meta.databend-meta.svc:9191"
  storage:
    # s3, oss
    type: s3
    s3:
      bucket: "<bucket>"
      endpoint_url: "http://s3.<region>.qingstor.com" # for qingstor
      access_key_id: "<key>"
      secret_access_key: "<secret>"
# [recommended] enable monitoring service
serviceMonitor:
  enabled: true
# [recommended] enable access from outside cluster
service:
  type: LoadBalancer

KubeSphere 監控

KubeSphere 觀測工作負載

待狀態變為執行中即可,這時可以很方便使用 KubeSphere 觀測工作負載。

資源狀態

  • databend-meta

  • databend-query

監控

  • databend-meta

  • databend-query

可訪問性測試

節點狀態檢測

如果是在 All-in-One 模式下部署,我們可以輕鬆使用容器組 IP 地址來測試節點狀態。

psiace@ks:~$ curl 10.233.107.113:8080/v1/health
{"status":"pass"}

而使用 KubeSphere Cloud 部署時,可以在 KubeSphere Cloud 控制面板,選擇網路以建立訪問規則。

這裡以 8080(Admin API)和 8000(Query HTTP Handler)埠為例:

建立後的結果如下圖所示:

同樣我們可以使用 curl 來檢查節點狀態。

psiace@ks:~$ curl http://admin-gfkyzxaz.c.kubesphere.cloud:30443/v1/health
{"status":"pass"}

執行查詢

bendsql 是一個十分方便的命令列介面工具,可以幫助您順暢高效地使用 Databend 。bendsql 也支援連線 Databend Cloud ,管理計算叢集和執行 SQL 查詢。

安裝 bendsql

$ go install github.com/databendcloud/bendsql/cmd/bendsql@latest

連線 databend 叢集(以 KubeSphere Cloud 為例)

$ bendsql connect -H query-gfkyzxaz.c.kubesphere.cloud -P 30443 -u databend -p databend --ssl
Connected to Databend on Host: query-gfkyzxaz.c.kubesphere.cloud
Version: DatabendQuery v0.9.57-nightly-df858a1(rust-1.68.0-nightly-2023-03-01T01:23:11.56066902Z)

嘗試執行查詢

$ bendsql query
Connected with driver databend (DatabendQuery v0.9.57-nightly-df858a1(rust-1.68.0-nightly-2023-03-01T01:23:11.56066902Z))
Type "help" for help.

dd:databend@query-gfkyzxaz/default=> SELECT avg(number) FROM numbers(1000);
+-------------+
| avg(number) |
+-------------+
| 499.5       |
+-------------+
(1 row)

總結

本文介紹瞭如何使用 KubeSphere 建立和部署 Databend 高可用叢集,後端儲存服務採用 QingStor ,最後使用 bendsql 演示連線叢集和執行查詢。

本文由部落格一文多發平臺 OpenWrite 釋出!