Databend 部署与运维概要:本地部署 Meta 服务并利用 Kubernetes 管理 Query 服务
本指南旨在介绍如何部署和运维 Databend ,并且采用结合本地部署 Meta 服务和使用 K8s 管理 Query 服务的形式,以平衡元数据管理持久化和计算资源弹性调度的需求。
由于 Databend 的部署逻辑在单机模式和集群模式下的一致性,部署模式可以从单机轻松拓展到多节点集群,所以本指南中只基于最简单的情况进行介绍,即:一个本地部署的单节点 Meta ,和一个由单机 K8s 集群管理的 Query 副本。
资源准备
在本指南中,我们需要创建两台机器:
一台分配给 Meta 服务,以单机部署的形式运行;
另一台分配给 Query 服务,需要先创建 K8s 集群,然后使用 Helm Charts 进行部署。
Meta 服务部署
Meta 服务用于元数据管理,应当优先创建 Meta 节点。
下载并运行 Meta 服务
在本地部署 Meta 服务的机器上,我们需要进行以下步骤:
创建对应的目录,并更改所有者为当前用户:
下载 Meta 的二进制发布,这里使用 databend-v1.2.159-nightly 作为示例
编辑 Meta 服务的配置文件,位于
configs/databend-meta.toml
,参考配置如下:
使用配置文件运行 Meta 服务
检查 Meta 服务可用性
确保 Meta 服务已经启动
确保外部服务可以访问 Meta 服务
Query 服务部署
Query 服务的部署采用 K8s,以确保其弹性扩展能力。
部署 Kubernetes 环境
在部署 Query 服务的机器上,我们需要建立一个 Kubernetes 环境。为了方便示范,这里我们使用 kubekey 来快速创建一个 K8s 环境,实际生产部署请遵循内部 K8s 部署和管理规范。
使用 Helm 部署 Query 服务
在部署 Databend 时,我们使用 Helm 来管理 Query 服务。首先,我们需要添加 Databend 的 Helm Charts 。
其次我们需要创建一个
values.yaml
文件,用于配置 Query 服务需要的各项参数,相关配置可以参考 文档 | Deploying a Cluster on Kubernetes ,里面的 meta address 和 storage 根据实际情况配置,这里 query 版本目前默认为 v1.2.149-nightly 。下面是一份参考配置:
部署 Query 服务
检查服务运行状态
检查 Query 服务可用性
安装客户端。建议客户使用 BendSQL 进行查询。但考虑到通过系统包管理器安装的便利性,也可以使用 MySQL Client 等客户端。
利用 Kubectl 转发以确保本地可访问
连接 Query 节点并进行查询
注意:Query 服务的外部可访问性建议根据实际部署运维规范进行管理,这里不涉及相关操作。对于在云平台使用 LoadBalancer
的用户,可能会分配对应的公网 IP ,有潜在的安全问题,可以参考 文档 | Step 2. Deploy a Databend Query Cluster 进行处理。
缩放与升级
在升级前特别需要检查 Meta 和 Query 之间的兼容性。
Query 服务的缩放与升级
在部署过程中,如果计划使用其他版本的镜像/其他规模的副本数量,可以直接在 values.yaml
中进行修改:
Query 总体上是无状态的,可以简单使用一行命令升级:
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 的错误。
参考资料
在本地部署 Databend :https://docs.databend.com/guides/deploy/cluster/metasrv-deploy
在 K8s 上部署 Databend :https://docs.databend.com/guides/deploy/cluster/deploying-databend-on-kubernetes
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 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。
👨💻 Databend Cloud:databend.cn
📖 Databend 文档:databend.rs/
💻 Wechat:Databend
✨ GitHub:github.com/datafuselab…
版权声明: 本文为 InfoQ 作者【Databend】的原创文章。
原文链接:【http://xie.infoq.cn/article/cefce34d17bba6c4bcd1efa8f】。文章转载请联系作者。
评论