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

发布时间:2023年12月28日

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

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

资源准备

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

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

Meta 服务部署

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

下载并运行 Meta 服务

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

  • 创建对应的目录,并更改所有者为当前用户:
sudo?mkdir?/var/log/databend
sudo?mkdir?/var/lib/databend
sudo?chown?-R?$USER?/var/log/databend
sudo?chown?-R?$USER?/var/lib/databend

  • 下载 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

  • 编辑 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

  • 使用配置文件运行 Meta 服务
cd?bin
./databend-meta?-c?../configs/databend-meta.toml?>?meta.log?2>&1?

检查 Meta 服务可用性

  • 确保 Meta 服务已经启动
curl?-I??http://127.0.0.1:28101/v1/health

  • 确保外部服务可以访问 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 服务

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

helm?repo?add?databend?https://charts.databend.rs

其次我们需要创建一个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

  • 部署 Query 服务
helm?install?<your-tenant-name>?databend/databend-query?\
????--namespace?databend-query?--create-namespace?\
????--values?values.yaml

  • 检查服务运行状态
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 服务可用性

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

apt?install?mysql-client

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

nohup?kubectl?port-forward?-n?databend-query?svc/<your-tenant-name>-databend-query?3307:3307?&

连接 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 之间的兼容性。

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"

参考资料

文章来源:https://blog.csdn.net/Databend/article/details/135274472
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。