【K3S】04 - Rancher部署Vitess
本章节非必须使用,小项目用以往的MySQL就行。
前言
本文主要讲述 2023 K3s Rancher 如何通过vitess部署生产环境 集群HA MySQL
如果你还没有部署 K3s 和 Rancher ,你可以浏览这篇文章:【K3S】01 - 异地集群初始化
如果你没部署过 单节点 ,你可以浏览这篇文章:【K3S】02 - Rancher 中间件单节点部署
环境声明
hostname | 系统 | 配置 | 节点 | 角色 | 部署 |
---|---|---|---|---|---|
m1 | Ubuntu-Server(20.04) | 2c4g | 192.168.0.67/32 | control-plane,etcd,master | k3s(v1.24.6+k3n1) server nginx rancher(2.7.1) Helm(3.10.3) |
n1 | Ubuntu-Server(20.04) | 1c2g | 192.168.0.102/32 | control-plane,etcd,master | k3s(v1.24.6+k3n1) server |
m2 | Ubuntu-Server(20.04) | 2c4g | 172.25.4.244/32 | control-plane,etcd,master | k3s(v1.24.6+k3n1) server |
harbor | Ubuntu-Server(20.04) | 2c4g | 192.168.0.88 | Docker-Hub Jenkins CI/CD |
Harbor(2.7.1) Jenkins(2.3) Docker-Compose |
节点均用 WireGuard 打通内网,后续所有节点路由均用内网ip访问
概念
Vitess Operator for Kubernetes是一个基于Kubernetes的开源工具,用于在Kubernetes集群中自动化地部署、管理和监控Vitess数据库集群。它是由Vitess社区维护的一款工具,旨在简化Vitess的部署和管理,以提高开发人员和运维人员的效率
Vitess是一个开源的分布式数据库系统,最初由YouTube开发并开源。它旨在解决MySQL数据库的可扩展性问题,可以将MySQL转换为可水平扩展的分布式数据库集群,提供高可用性、高性能和自动化的数据库操作,适用于大规模在线服务的数据库解决方案
Vitess Operator为Kubernetes用户提供了以下几个主要优势:
简化Vitess的部署和管理
:Vitess Operator提供了简单易用的API和自定义资源定义(CRD),可以快速创建、管理和扩展Vitess数据库集群,简化了部署和管理的复杂性自动化的水平扩展和负载均衡
:Vitess Operator可以自动根据集群负载情况进行水平扩展,以满足应用程序的需求。它还提供了自动负载均衡的功能,将流量均匀分配到集群的不同节点上高可用性和故障转移
:Vitess Operator支持自动故障转移和恢复,可以自动将主节点切换到备用节点,以确保应用程序的可用性。它还提供了自动备份和恢复的功能,以保护数据的完整性可视化监控和诊断
:Vitess Operator提供了可视化的监控和诊断工具,可以实时监控集群的健康状况和性能指标,并提供实时诊断和故障排除的功能,帮助用户快速解决问题
YouTube选择使用Go语言实现Vitess,因为Go提供了表现力和性能的结合。它几乎和Python一样富有表现力,而且非常易于维护。它的性能与Java相同,在某些情况下接近C++。此外,该语言非常适合并行编程,并且具有非常高质量的标准库
官方网址:https://vitess.io
特性
- 性能提升
- 连接池 - 将前端应用程序以多路复用的方式映射到MySQL连接池以优化性能
- 查询结果重用 – 对于相同结果集的查询,多个查询并发查询时,vttablet会识别和管理相同查询,等待第一个查询结果完成,并发送给所有的调用者
- 事务管理 – 限制并发事务数、管理事务超时时间以优化总体吞吐量
- 保护机制
- 查询重写和清理 – 避免漫无目的的更新,对大查询添加limits
- 查询黑名单 – 可通过自定义规则以防止可能存在问题的查询命中数据库
- 查询超时 – 可自定义查询超时时间值,Vitess将干掉超时的查询
- 表别访问权限控制定义 – 可以针对不同的接入用户指定表的访问控制权限 (ACLs)
- 监控
- 性能分析: Vitess提供工具可让您监控,诊断和分析数据库性能
- 流式查询 – 使用传入查询列表来提供OLAP工作
- 更新流 – 服务器流式传输数据库中更改的行列表,可用作将更改传播到其他数据存储的机制
- 拓扑管理工具
- Master管理工具(用于reparent处理)
- 基于Web GUI的管理端
- 可工作于多个数据中心/区域的设计
- 拆分
- 几乎无缝的动态分片拆分
- 支持垂直和水平分片拆分
- 多种分片方案,支持自定义分片方案
架构
Topology
拓扑服务 一个元数据存储,包含有关正在运行的服务器、分片方案和复制图的信息。拓扑由一致的数据存储支持。您可以使用vtctl (命令行) 和 vtctld (web)查看拓扑.
在Kubernetes中,数据存储是etcd。 Vitess源代码还附带Apache ZooKeeper支持。
vtgate
vtgate 是一个轻型代理服务器,它将流量路由到正确的vttablet,并将合并的结果返回给客户端。应用程序向vtgate发起查询。客户端使用起来非常简单,它只需要能够找到vtgate实例就能使vitess。
为了路由查询,vtgate综合考虑了分片方案、数据延迟以及vttablet及其对应底层MySQL实例的可用性。
vttablet
vttablet 是一个位于MySQL数据库前面的代理服务器。vitess实现中每个MySQL实例都有一个vttablet。
执行的任务试图最大化吞吐量,同时保护mysql不受有害查询的影响。它的特性包括连接池、查询重写和重用重复数据。此外,vtTablet执行vtcl启动的管理任务,并提供用于过滤复制和数据导出的流式服务。
通过在MySQL数据库前运行vttablet并更改您的应用程序以使用Vitess客户端而不是MySQL驱动程序,您的应用程序将受益于vttablet的连接池,查询重写和重用数据集等功能。
vtctl
vtctl vtctl是一个用于管理Vitess集群的命令行工具。它允许用户或应用程序轻松地与Vitess实现交互。使用vtctl,您可以识别主数据库和副本数据库,创建表,启动故障转移,执行分片(和重新分片)操作等。
当vtctl执行操作时,它会根据需要更lockserver。其他Vitess服务器会观察这些变化并做出相应的反应。例如,如果使用vtctl故障转移到新的主数据库,则vtgate会查看更改并将将写入流量切到新主服务器。
vtctld
vtctld vtctld是一个HTTP服务器,允许您浏览存储在lockserver中的信息。它对于故障排除或获取服务器及其当前状态的高层概观非常有用。
vtworker
vtworker 托管长时间运行的进程。它支持插件架构并提供代码库,以便您可以轻松选择要使用的vttablet。插件可用于以下类型的作业:
- 水平拆分或合并过程中检查数据的完整性
- 垂直拆分或合并过程中检查数据的完整性
vtworker还可以让您轻松添加其他验证程序。例如,如果一个keyspace中的索引表引用到另一keyspace中的数据,则可以执行片内完整性检查以验证类似外键的关系或跨分片完整性检查。
安装
etcd-operator
GitHub: coreos/etcd-operator
1 | git clone https://github.com/coreos/etcd-operator |
GitHub: vitessio/vitess
克隆该项目
1 | git clone https://github.com/vitessio/vitess |
为了能连接vitess 内部仪表盘,我们需要修改vitess的默认监听api
1 | nano vitess/examples/operator/101_initial_cluster.yaml |
将localhost改为任意master节点,将端口改为Nodeport范围内的端口(30000-32767)
1 | vtadmin: |
开始安装
1 | # 安装 vitess operator |
由于内存不够无法进行后续的测试,你可以按照 vitess/examples/operator/README.md
里继续后面的分片操作测试
查看安装
1 | kubectl get pods -o wide |
在每一个master节点中都部署了etcd example-etcd
,这个etcd跟k3s中的etcd是独立的
vtgate 作为查询的入口,负责将查询路由到正确的 vttablet 实例,并将结果返回给客户端。vtgate 支持多种查询协议,如 MySQL、PostgreSQL、gRPC 等,也就是 example-zone1-vtgate
vtctld 是一个单独的二进制文件,可以在 Vitess 集群中的任何节点上运行。然而,为了方便使用和管理,可以将 vtctld 部署为 Kubernetes 中的一个容器,也就是example-zone1-vtctld
vttablet 负责管理和监控 MySQL 实例,并与 Vitess 集群的其他组件进行通信。vttablet 在 Vitess 集群中的每个 shard 中运行,并维护了该 shard 的 MySQL 实例以及 Vitess 相关的元数据信息,也就是 example-vttablet-zone1
,目前默认了一个PRIMARY,一个REPLICA,所以一共两个
vtorc 负责监控并管理每个 vttablet 的健康状况,并在需要时执行自动垂直分片和升级操作,也就是example-commerce-x-x-zone1-vtorc
Operator 是 Kubernetes 中一种特殊的控制器,可以通过监控 Kubernetes API 中的自定义资源来实现特定的管理和自动化操作。Vitess Operator 利用 Kubernetes Operator 的特性,将 Vitess 的复杂性和灵活性与 Kubernetes 的自动化和弹性相结合,实现了 Vitess 在 Kubernetes 上的自动化运维。它监控 Kubernetes 中定义的 VitessCluster 自定义资源,并根据规则自动部署和管理 Vitess 集群的各个组件(如 vtctld、vttablet、vtgate 等)。通过使用 Vitess Operator,可以大大简化 Vitess 集群的部署和管理,并提高 Vitess 集群的可靠性和弹性,也就是vitess-operator
内部仪表板
在访问之前,我们需要映射nodeport
配置选择器 planetscale.com/component
: vtadmin
接下来只需要请求任意节点ip:30666
即可
在下一篇文章中,我们将尝试部署Redis HA