KubeBlocks 数据库交付到 K8s 保姆级教程:第一篇

KubeBlocks 简介

1.1 什么是 KubeBlocks?

KubeBlocks 是一款基于 Kubernetes 的云原生数据基础设施工具,整合了顶级云服务提供商的大规模生产经验,并结合了增强的可用性和稳定性改进。该工具帮助用户轻松构建容器化、声明式的关系型、NoSQL、流计算和向量型数据库服务。

图片[1]-KubeBlocks 数据库交付到 K8s 保姆级教程:第一篇-山海云端论坛

1.2 为何选择 KubeBlocks?

Kubernetes 已经成为容器编排的事实标准,但有状态工作负载的管理一直是个挑战。KubeBlocks 引入了 ReplicationSet 和 ConsensusSet,提供了基于角色的更新顺序、数据复制状态维护和自动修复能力,解决了复杂有状态工作负载的管理问题。

第二篇:使用 KubeBlocks 将 MySQL 集群交付到 K8s

2.1 MySQL 集群交付

学习如何使用 KubeBlocks 将 MySQL 集群轻松交付到 Kubernetes,实现容器环境下的数据库部署。

2.2 MySQL 集群扩缩容/磁盘扩容

了解如何灵活调整 MySQL 集群规模以及如何进行磁盘扩容,确保数据库资源满足需求。

2.3 MySQL 集群的停止/启动

学会在需要的情况下如何有效地停止和启动 MySQL 集群,实现灵活的管理和维护。

2.4 切换 MySQL 集群

深入了解如何无缝切换 MySQL 集群,确保业务连续性和高可用性。

敬请关注我们的下一篇教程,将带您深入了解 KubeBlocks 的更多功能和操作,助您更好地管理数据库在 Kubernetes 中的部署与运维。

支持的数据库类型

KubeBlocks 是基于 Kubernetes 的云原生数据基础设施,可以帮助用户轻松构建关系型、NoSQL、流计算和向量型数据库服务。而这些数据库类型通常以 add-on 引擎的形式添加到 KubeBlocks 中。

数据库引擎简介
apecloud-mysqlApeCloud MySQL 是一个与 MySQL 语法兼容的数据库,主要利用 RAFT 共识协议实现高可用性。
clickhouse
elasticsearchElasticsearch 是一个分布式、RESTful 风格的搜索引擎,专为生产规模的工作负载进行了速度和相关性能的优化。
etcdetcd 是一个高度一致的分布式键值存储,它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据。
foxlakeApeCloud FoxLake 是一个开源的云原生数据仓库。
ggmlGGML 是一个为机器学习设计的张量库,它的目标是使大型模型能够在高性能的消费级硬件上运行。
greptimedbGreptimeDB 是一个云原生时间序列数据库,具有分布式、可扩展和高效的特性。
kafkaApache Kafka 是一个开源的分布式事件流平台,广泛应用于高性能数据流水线、流式分析、数据集成和关键应用程序等场景,目前已经被数千家公司采用。
mariadbMariaDB 是一个高性能的开源关系型数据库管理系统,广泛用于 Web 和应用服务器。
milvusMilvus 是一个灵活、可靠且高性能的云原生开源向量数据库。
mongodbMongoDB 是一个面向文档的 NoSQL 数据库,用于存储大量数据。
mysql(主备)
nebulaNebulaGraph 是一个开源的分布式图数据库,擅长处理具有千亿个顶点和万亿条边的超大规模数据集。
neonNeon 是一家多云无服务器 Postgres 提供商。
oceanbaseOceanBase 是一个无限可扩展的分布式数据库,适用于数据密集型事务和实时运营分析工作负载,具有超快的性能,在 TPC-C 基准测试中曾一度创造了世界纪录。OceanBase 已经为全球超过 400 家客户提供了服务,并且一直在支持支付宝的所有关键业务系统。
official-postgresqlKubernetes 的官方 PostgreSQL 集群定义 Helm Chart。
openldapOpenLDAP 项目旨在协作开发一个强大、商业级、功能齐全、开源的 LDAP 应用套件和开发工具。其 Chart 为 KubeBlocks 提供了支持。
opensearchopensearch 是一个开源、分布式、 RESTful 风格的搜索引擎。
oracle-mysqlMySQL 是一个广泛使用的开源关系型数据库管理系统(RDBMS)。
oriolebdOrioleDB 是 PostgreSQL 的全新存储引擎,为该数据库平台带来了现代化的数据库容量、功能和性能。
pikaPika 是一个可持久化的大容量 Redis 存储服务,兼容 string、hash、list、zset、set 的绝大部分接口。
polardb-xPolarDB-X 是一个为高并发、大规模存储和复杂查询场景设计的云原生分布式 SQL 数据库。
postgresqlPostgreSQL 是一个先进的企业级开源关系型数据库,支持 SQL(关系型)和 JSON(非关系型)查询。
pulsarApache® Pulsar™ 是一个开源的、分布式消息流平台。
qdrantQdrant 是一个向量相似性搜索引擎和向量数据库。
redisRedis 是一个开源的、高性能的、键值对内存数据库。
risingwaveRisingWave 是一个分布式 SQL 流处理数据库,旨在帮助用户降低实时应用的开发复杂性和成本。
starrocksStarRocks 是一款高性能分析型数据仓库,支持多维、实时、高并发的数据分析。
tdengineTDengine™ 是一个专为工业物联网而搭建的工业大数据平台,结合了时序数据库和流处理、数据订阅和缓存等重要功能。
vllmvLLM 是一个快速且易于使用的 LLM 推理和服务库。
weaviateWeaviate 是一个开源的向量数据库。
zookeeperApache ZooKeeper 是一个集中式服务,用于维护配置信息、命名、提供分布式同步和提供组服务。
执行:
helm repo add kubeblocks https://apecloud.github.io/helm-charts
helm repo update
helm install kubeblocks kubeblocks/kubeblocks \
    --namespace kb-system --create-namespace

如果想要使用自定义的 tolerations 安装 KubeBlocks,可以使用以下命令:
helm install kubeblocks kubeblocks/kubeblocks \
    --namespace kb-system --create-namespace \
    --set-json 'tolerations=[ { "key": "control-plane-taint", "operator": "Equal", "effect": "NoSchedule", "value": "true" } ]' \
    --set-json 'dataPlane.tolerations=[{ "key": "data-plane-taint", "operator": "Equal", "effect": "NoSchedule", "value": "true" } ]'

如果想安装 KubeBlocks 的指定版本,请按照以下步骤操作:
在 KubeBlocks Release 页面查看可用的版本。
使用 --version 指定版本,并执行以下命令。
helm install kubeblocks kubeblocks/kubeblocks \
--namespace kb-system --create-namespace --version="x.x.x"

备注
kbcli 默认安装最新版本。在安装 KubeBlocks 时,kbcli 会安装与之匹配的版本。请确保 kbcli 和 KubeBlocks 的主版本号相匹配。
例如,你可以安装 kbcli v0.6.1 和 KubeBlocks v0.6.3。但是,如果安装的是 kbcli v0.5.0 和 KubeBlocks v0.6.0,就可能会报错,因为它们不匹配。
验证 KubeBlocks 安装
执行以下命令来检查 KubeBlocks 是否已成功安装。
kbcli kubeblocks status

结果
如果工作负载都已准备就绪,则表明 KubeBlocks 已成功安装。
KubeBlocks is deployed in namespace: kb-system,version: x.x.x
>
KubeBlocks Workloads:
NAMESPACE   KIND         NAME                           READY PODS   CPU(CORES)   MEMORY(BYTES)   CREATED-AT
kb-system   Deployment   kb-addon-snapshot-controller   1/1          N/A          N/A             Oct 13,2023 14:27 UTC+0800
kb-system   Deployment   kubeblocks                     1/1          N/A          N/A             Oct 13,2023 14:26 UTC+0800
kb-system   Deployment   kubeblocks-dataprotection      1/1          N/A          N/A             Oct 13,2023 14:26 UTC+0800

KubeBlocks for MySQL
MySQL 简介
MySQL 是全球最流行的开源数据库,受到许多公司的欢迎,例如 Facebook、Twitter、Netflix、Uber、Airbnb、Shopify 和 Booking 等。
KubeBlocks 采用了 ApeCloud 公司提供的 MySQL 高可用版本,做了数据压缩和高可用性方面的改进。
当节点数大于等于 3 个时,通过一致性算法协议构成强一致高可用性集群,确保在单可用区故障的情况下 RPO=0。其中,主节点提供读写能力,其余节点提供只读服务。
当节点数等于 2 时,构成主备复制集群,其中主节点提供读写能力,备节点通过异步复制与主节点保持同步,提供只读服务和故障容灾能力。
当节点数等于 1 时,构成单节点集群,提供读写服务。KubeBlocks 仍然提供自动恢复能力,在云盘不损坏的情况下保证 RPO=0。
实例角色
ApeCloud MySQL 支持四种角色类型,即 Leader(领导者)、Follower(跟随者)、Candidate(候选者)和 Learner(学习者)。Leader 和 Follower 组成高可用性集群,提供 RPO=0 能力。
Leader:Leader 是集群的主实例,支持读写操作,是集群强一致节点。由所有参与选举的 Candidate 投票产生。得票数最多的 Candidate 成为 Leader,其他的成为 Follower。
Follower:Follower 支持数据一致性只读服务,并与 Leader 和其他 Follower 组成高可用性集群。
Learner:Learner 通常用于跨地域的一致性只读数据节点实例,通过 Paxos 协议实现数据同步,数据同步源可以是 Leader 或 Follower。Learner 是一致性算法协议中的特殊角色,不参与投票,也不成为 Candidate,类似旁听角色。
Candidate:Candidate 是一个中间角色,只在选举过程或无法形成多数派选出 Leader 时存在。一般来说,高可用集群中的所有 Candidate 在选举完成后,最终都会成为 Leader 或 Follower 角色。
角色类型
Leader
Follower
Learner
Candidate
功能能力
RW/HA
RO/HA
RO
图片[2]-KubeBlocks 数据库交付到 K8s 保姆级教程:第一篇-山海云端论坛

故障切换

故障切换将重定向流量,把正在执行的任务从主节点切换到从节点。

只读功能

节点提供只读能力。除了 Follower 角色之外,还可以通过添加 Learner 角色来扩展集群的只读能力。需要注意的是,通过 Follower 或 Learner 执行只读操作时,可能会与 Leader 存在数据延迟。这种延迟可能是由于日志同步延迟或日志回放延迟导致的。

容错性

集群具备节点故障容错能力。在 n 个节点集群下,可以容忍的故障节点数为 floor(n/2) + 1,其中 n=[1,99],满足 Paxos 算法协议的要求。基于此,可以得出在指定可容忍节点故障数为 f 的情况下,需要创建的节点数为 n=2*f+1,其中 f>=0。例如,如果可容忍的故障节点数为 1,则根据公式可知,集群中的最小节点数为 3。即,在一个 Paxos 组中,能够保证具有 1 个故障节点下集群的持续服务能力。根据下表可以看出,创建奇数个节点集群更具性价比。

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容