写点什么

Databend 部署与运维概要:本地部署 Meta 服务并利用 Kubernetes 管理 Query 服务

作者:Databend
  • 2023-12-28
    北京
  • 本文字数:4315 字

    阅读完需:约 14 分钟

Databend 部署与运维概要:本地部署 Meta 服务并利用 Kubernetes 管理 Query 服务

本指南旨在介绍如何部署和运维 Databend ,并且采用结合本地部署 Meta 服务和使用 K8s 管理 Query 服务的形式,以平衡元数据管理持久化和计算资源弹性调度的需求。


由于 Databend 的部署逻辑在单机模式和集群模式下的一致性,部署模式可以从单机轻松拓展到多节点集群,所以本指南中只基于最简单的情况进行介绍,即:一个本地部署的单节点 Meta ,和一个由单机 K8s 集群管理的 Query 副本。

资源准备

在本指南中,我们需要创建两台机器:


  • 一台分配给 Meta 服务,以单机部署的形式运行;

  • 另一台分配给 Query 服务,需要先创建 K8s 集群,然后使用 Helm Charts 进行部署。

Meta 服务部署

Meta 服务用于元数据管理,应当优先创建 Meta 节点。

下载并运行 Meta 服务

在本地部署 Meta 服务的机器上,我们需要进行以下步骤:


  1. 创建对应的目录,并更改所有者为当前用户:


sudo mkdir /var/log/databendsudo mkdir /var/lib/databendsudo chown -R $USER /var/log/databendsudo chown -R $USER /var/lib/databend
复制代码


  1. 下载 Meta 的二进制发布,这里使用 databend-v1.2.159-nightly 作为示例


curl -LJO https://github.com/datafuselabs/databend/releases/download/v1.2.159-nightly/v1.2.159-nightly-x86_64-unknown-linux-musl.tar.gztar xzvf databend-v1.2.159-nightly-x86_64-unknown-linux-musl.tar.gz
复制代码


  1. 编辑 Meta 服务的配置文件,位于 configs/databend-meta.toml ,参考配置如下:


# Usage:# databend-meta -c databend-meta.toml
admin_api_address = "0.0.0.0:28101"grpc_api_address = "0.0.0.0:9191"# databend-query fetch this address to update its databend-meta endpoints list,# in case databend-meta cluster changes.grpc_api_advertise_host = "<your-meta-ip>"
[raft_config]id = 1raft_dir = "/var/lib/databend/raft"raft_api_port = 28103
# Assign raft_{listen|advertise}_host.# This allows you to catch a bug in unit tests when something goes wrong in raft meta nodes communication.raft_listen_host = "<your-meta-ip>"raft_advertise_host = "<your-meta-ip>"
# Start up mode: single node clustersingle = true
复制代码


  1. 使用配置文件运行 Meta 服务


cd bin./databend-meta -c ../configs/databend-meta.toml > meta.log 2>&1 
复制代码

检查 Meta 服务可用性

  1. 确保 Meta 服务已经启动


curl -I  http://127.0.0.1:28101/v1/health
复制代码


  1. 确保外部服务可以访问 Meta 服务


curl -I http://<your-meta-ip>:28101/v1/health
复制代码

Query 服务部署

Query 服务的部署采用 K8s,以确保其弹性扩展能力。

部署 Kubernetes 环境

在部署 Query 服务的机器上,我们需要建立一个 Kubernetes 环境。为了方便示范,这里我们使用 kubekey 来快速创建一个 K8s 环境,实际生产部署请遵循内部 K8s 部署和管理规范。


curl -sfL https://get-kk.kubesphere.io | VERSION=v3.0.13 sh -chmod +x kkapt install conntrack socat./kk create clusterkubectl get pod -A
复制代码

使用 Helm 部署 Query 服务

  1. 在部署 Databend 时,我们使用 Helm 来管理 Query 服务。首先,我们需要添加 Databend 的 Helm Charts 。


helm repo add databend https://charts.databend.rs
复制代码


  1. 其次我们需要创建一个values.yaml文件,用于配置 Query 服务需要的各项参数,相关配置可以参考 文档 | Deploying a Cluster on Kubernetes ,里面的 meta address 和 storage 根据实际情况配置,这里 query 版本目前默认为 v1.2.149-nightly 。下面是一份参考配置:


replicaCount: 1config:  query:    clusterId: example_cluster    # 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:      - "<your-meta-endpoints>:9191"  storage:    # s3, oss    type: oss    oss:      endpoint_url: "<endpoint_url>"      bucket: "<bucket>"      access_key_id: "<key>"      access_key_secret: "<secret>"# [recommended] enable access from outside clusterservice:  type: LoadBalancer
复制代码


  1. 部署 Query 服务


helm install <your-tenant-name> databend/databend-query \    --namespace databend-query --create-namespace \    --values values.yaml
复制代码


  1. 检查服务运行状态


root@queryhelm:~# kubectl -n databend-query get svcNAME                     TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                                                                    AGE<your-tenant-name>-databend-query   LoadBalancer   10.233.46.231   <pending>     8080:32579/TCP,8124:30226/TCP,9090:31320/TCP,8900:31846/TCP,8000:30821/TCP,7070:30465/TCP,3307:30968/TCP   31mroot@queryhelm:~# kubectl -n databend-query get podsNAME                       READY   STATUS    RESTARTS   AGE<your-tenant-name>-databend-query-0   1/1     Running   0          7m11s
复制代码

检查 Query 服务可用性

  1. 安装客户端。建议客户使用 BendSQL 进行查询。但考虑到通过系统包管理器安装的便利性,也可以使用 MySQL Client 等客户端。


apt install mysql-client
复制代码


  1. 利用 Kubectl 转发以确保本地可访问


nohup kubectl port-forward -n databend-query svc/<your-tenant-name>-databend-query 3307:3307 &
复制代码


  1. 连接 Query 节点并进行查询


mysql -h127.0.0.1 -udatabend -P3307 -pdatabendmysql> select * from system.clusters;+------------------------+--------------+------+---------------------------------------------------------------------------------+| name                   | host         | port | version                                                                         |+------------------------+--------------+------+---------------------------------------------------------------------------------+| ohzKStkZenhhO3FpoAAcZ5 | 10.233.107.5 | 9090 | v1.2.149-nightly-6397a6af00(rust-1.72.0-nightly-2023-10-09T16:12:52.382486326Z) |+------------------------+--------------+------+---------------------------------------------------------------------------------+mysql> SELECT avg(number) FROM numbers(100000000);+-------------+| avg(number) |+-------------+|  49999999.5 |+-------------+1 row in set (0.07 sec)Read 100000000 rows, 762.94 MiB in 0.066 sec., 1.52 billion rows/sec., 11.30 GiB/sec.
复制代码


注意:Query 服务的外部可访问性建议根据实际部署运维规范进行管理,这里不涉及相关操作。对于在云平台使用 LoadBalancer 的用户,可能会分配对应的公网 IP ,有潜在的安全问题,可以参考 文档 | Step 2. Deploy a Databend Query Cluster 进行处理。

缩放与升级

在升级前特别需要检查 Meta 和 Query 之间的兼容性。


Query 服务的缩放与升级

在部署过程中,如果计划使用其他版本的镜像/其他规模的副本数量,可以直接在 values.yaml 中进行修改:


- replicaCount: 1+ replicaCount: 3+ image:+   repository: datafuselabs/databend-query+   pullPolicy: IfNotPresent+   # Overrides the image tag whose default is the chart appVersion.+   tag: "v1.2.216-nightly"
复制代码


Query 总体上是无状态的,可以简单使用一行命令升级:


helm upgrade --install <your-tenant-name> databend/databend-query \    --namespace databend-query --create-namespace \    --values values.yaml
复制代码

Meta 服务的缩放与升级

Meta 的节点添加与删除可以参考 文档 | Manage a Databend Meta Service Cluster 进行。如果想要直接部署 Meta 集群,也可以参阅 文档 | Deploying a Databend Cluster


Meta 的升级涉及数据迁移,建议联系 Databend 团队进行。

负载均衡

可以根据实际情况使用不同的 hash key 结合 "subset" hashing 等方式组合进行负载均衡。


Databend JDBC 在每次发起请求都会携带一个名为 X-DATABEND-QUERY-ID 的 HTTP Header,如果想要实现同一客户端,多个请求分散打到不同后端实例的效果,可以基于该 HTTP Header 来做 Nginx 的 Hash Key,以达到负载均衡的效果。


使用 Query ID 相关 Header 而不是其他方式的原因:


现在用户使用 SDK 去请求多副本的 Databend Query 由于 Query 会产生回查并且 Query ID 没有持久化,单纯对后端端点做负载均衡可能会出现 query id not found 的错误。


ingress:  enabled: true  className: "nginx"  annotations:    nginx.ingress.kubernetes.io/upstream-hash-by: "$http_x_databend_query_id"
复制代码

参考资料

关于 Databend

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。


👨‍💻‍ Databend Cloud:databend.cn


📖 Databend 文档:databend.rs/


💻 Wechat:Databend


✨ GitHub:github.com/datafuselab…

发布于: 刚刚阅读数: 3
用户头像

Databend

关注

还未添加个人签名 2022-08-25 加入

还未添加个人简介

评论

发布
暂无评论
Databend 部署与运维概要:本地部署 Meta 服务并利用 Kubernetes 管理 Query 服务_Databend_InfoQ写作社区