首页 > 其他分享 >Databend 部署与运维概要:本地部署 Meta 服务并利用 Kubernetes 管理 Query 服务

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

时间:2023-12-28 17:33:42浏览次数:27  
标签:运维 databend 部署 Databend Meta meta query Query

封面图2023-77.png

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

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

资源准备

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

  • 一台分配给 Meta 服务,以单机部署的形式运行;
  • 另一台分配给 Query 服务,需要先创建 K8s 集群,然后使用 Helm Charts 进行部署。

Meta 服务部署

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

下载并运行 Meta 服务

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

  1. 创建对应的目录,并更改所有者为当前用户:
sudo mkdir /var/log/databend
sudo mkdir /var/lib/databend
sudo chown -R $USER /var/log/databend
sudo 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.gz
tar 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            = 1
raft_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 cluster
single        = 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 kk
apt install conntrack socat
./kk create cluster
kubectl 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: 1
config:
  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 cluster
service:
  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 svc
NAME                     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   31m
root@queryhelm:~# kubectl -n databend-query get pods
NAME                       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 -pdatabend
mysql> 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 之间的兼容性。

1.png

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 :https://docs.databend.com/guides/deploy/cluster/metasrv-deploy
  • 在 K8s 上部署 Databend :https://docs.databend.com/guides/deploy/cluster/deploying-databend-on-kubernetes
  • 升级指南:https://docs.databend.com/guides/deploy/upgrade/
  • Meta 和 Query 之间的兼容性:https://docs.databend.com/guides/deploy/upgrade/compatibility
  • 添加与删除 Meta 节点:https://docs.databend.com/guides/deploy/cluster/metasrv-add-remove-node
  • 备份和还原 Meta 服务:https://docs.databend.com/guides/deploy/upgrade/backup-and-restore-schema
  • Query 相关集群规模放缩:https://docs.databend.com/guides/deploy/cluster/deploying-databend-on-kubernetes#maintain-databend-query-cluster
  • Custom NGINX upstream hashing - Annotations - Ingress-Nginx Controller:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#custom-nginx-upstream-hashing

标签:运维,databend,部署,Databend,Meta,meta,query,Query
From: https://blog.51cto.com/u_15491149/9017056

相关文章

  • 运维和编程语言
    1.脚本注释,脚本开发规范1.1.在shell脚本中,#后面的内容代表注释掉的内容,提供给开发者或使用者观看,系统会忽略此行1.2.注释可以单独写一行,也可以跟在命令后面1.3.尽量保持爱写注释的习惯,便于以后回顾代码的含义,尽量使用英文,而非中文 2.执行shell脚本的方式:2......
  • PM2部署DotNet应用程序
    pm2简介PM2是一个Node.js的进程管理工具,可以帮助开发者简化Node.js应用的部署和运维。它提供了进程守护、负载均衡、日志管理等功能,可以监控应用程序的运行状态,并在发生意外情况时自动重启应用。PM2还支持多种部署方式,包括单机部署、集群模式和Docker容器部署,适用于各种规模的项......
  • 魔搭+ 函数计算: 一键部署,缩短大模型选型到生产的距离
    引言面对魔搭ModelScope社区提供的海量模型,用户希望快速进行选型并生产使用起来,但在此之前,却一定会面临算力管理难、模型部署难等一系列问题,那么能否实现快速把选定的模型部署在云端功能强大的GPU上,由云端负责服务,扩展,保护和监控模型服务,同时免于运维和管理云上算力等基础设施......
  • 不需要本地部署大模型,modelscope-agent加qwen-max免费搭建自己的定制机器人
    最近阿里开源了通用大模型qwen-72b,正在为怎么本地化部署发愁,转眼看到提供了qwen-max相关接口的免费试用(据说就是基于qwen-72b大模型),这就来体验一番。1.前期准备开通阿里云灵积平台,并创建api-key2.环境搭建python:3.10+;pydantic2.0以上,老版本pydantic会报一个tool_sche......
  • 【干货】Linux运维人员必备的实用工具!
    对于Linux运维人员来讲,工具是必不可少的,因为一款好的工具不仅可以保证服务器正常运行,还可以帮助我们排除故障,那么Linux运维人员必备的实用工具有哪些?本文为大家详细介绍一下。1、Nethogs:查询进程占用带宽情况Nethogs是一个终端下的网络流量监控工具,它的特别之处在于可......
  • xxl_job系列---【快速独立部署xxl-job,集xxl-job-admin和executor为一体】
    1.背景我们项目在用xxl-job的时候,只是用到了简单的定时调度http接口功能,所以,为了减少业务工程的侵入性,我决定把executor(执行器)集成到xxl-job-admin中,这样,我们只用部署一个jar包就实现了一个定时调度服务。我们只用在业务工程中写好任务,通过http对外提供服务,xxl-job使用GLUE(Jav......
  • 监控易:运维报告的精细化指南
        监控易是一款功能强大的监控工具,它提供了实时报告、TOPN报告、统计报告、流量统计、服务器报告、网络设备报告、故障报告和告警报告等多种报告,以便用户能够全面了解和分析系统的运行状况。    实时报告:实时报告是监控易的重要功能之一,它能够实时展示监控设备......
  • 手把手从安装本地虚拟机,基于docker,部署springboot+vue项目(若依框架前后端分离版本演示
    目录1.安装本地虚拟机centos2.安装docker,拉取镜像,创建容器3.打包部署后端4.配置nginx5.打包部署前端6.常见问题汇总1.安装本地虚拟机centos部署环境提供vm16,和centos7,其中把镜像改成.iso文件就可以了阿里云链接:https://www.alipan.com/s/BTnpjuHWtEp为什么用阿里云,不限速啊,秉......
  • github page 自动化部署
    本文使用vue项目做演示默认读者会git、vue开发等相关知识1、准备工作创建一个vue应用创建一个本地仓库创建一个github仓库推送到github远程仓库2、打开github仓库中的设置Settings→Pages→Buildanddeployment→Source,选择GitHubActions点击Configure......
  • Docker 部署 Prometheus Webhook DingTalk
    介绍在此部分简要介绍PrometheusWebhookDingTalk的作用和使用Docker部署的优势。概述将要涵盖的常用参数以及如何配置Docker容器的关键概念。步骤1:获取PrometheusWebhookDingTalk代码解释如何获取PrometheusWebhookDingTalk的代码并进入存储库目录。gitcloneh......