A database clustering system for horizontal scaling of MySQL
由于MySQL数据库越来越多,大型的mysql集群越来越无法保证扩展性,所以在nosql和mysql中间通过中间件来实现mysql集群的分片管理。
也就是
- How to move hundreds of MySQL databases into kubernates?
- Sharded mysql on kubernetes to optimize huge DB
vitess是一个用于部署 扩展和管理大型mysql实例集群的数据库解决方案。有以下优势
1.支持对Mysql数据库进行分片扩展,无需应用程序做太多更改
2.从物理机迁移到云
3.部署和管理mysql实例
相对应的带来的好处就是提升性能/保护机制/易于部署大型集群(可见文末)
下图是RDBMS和Nosql以及vitess的比较,可以让mysql越来越有nosql的优势。同时vitess的一系列核心组件使用go编写,只有上层逻辑及client用java,也占有一些优势(后期有时间补)
cell
指一个网络资源,在cell里可以放置一组服务器集群,相当于计算单元
keyspace
一个Keyspace即指一个逻辑数据库,它可以对应一个或多个MySQL数据库,而对上层应用则呈现为一个数据库。
对一个Keyspace执行查询时,vtGate会根据路由从正确的MySQL数据库里读取数据,从而使应用层像是在对一个数据库操作。
shard
是keyspace的一个mysql集群,分片通常包含主从服务器
下是中间件层细分概念
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中的数据,则可以执行片内完整性检查以验证类似外键的关系或跨分片完整性检查。
不管是vitess中vtgate高效地分离app中各种数据的请求和后端vitess中shard的后端mysql存储,并且对容错管理更有利,通过kubernete的管理使mysql的扩展性更强。
了解了这些再回头看vitess官网上的优势,就会容易理解很多:
分片管理
MySQL本身并不提供拆分分片功能,但是您的业务数据量增大到一定程度是您是需要增加集群的。Vitess提供在线拆分功能,只需要很少的时间就完成新集群的切换,无需您在应用程序中添加任何拆分逻辑。
连接池
Vitess避免了MySQL连接的高内存开销。 Vitess服务器轻松地一次处理数千个连接。
工作流
Vitess会跟踪有关集群配置的所有元数据,以便集群拓扑始终是最新的,对不同的客户端保持一致。
性能
Vitess自动重写对数据库性能有损害的查询。它还使用缓存机制来调解查询,并防止重复查询同时到达您的数据库
扩展性
Vitess集Mysql数据库的很多重要特性和NoSQL数据库的可扩展性于一体。其内建拆分分片功能使您能够对您的MySQL数据库集群无限水平扩展,同时无需为应用添加分片逻辑
参考:https://vitess.io/zh/
https://blog.csdn.net/defonds/article/details/47813071