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】。文章转载请联系作者。











 
    
评论