ARM技术论坛
直播中

h1654155272.9717

8年用户 1259经验值
擅长:电源/新能源
私信 关注
[经验]

Vitess在aarch64上的依赖问题详解

概述

Vitess为大规模MySQL集群实例管理/扩展/部署提供了解决方案。它结合了NoSQL的可扩展性和MySQL的很多重要功能,并且在裸机,公有云和私有云上都可以运行。有关其设计动机和愿景详见vitess/doc/Vision.md。Vitess可以解决下面的问题:

从裸机迁移到私有云或公共云

部署和管理大量MySQL实例

通过允许您对MySQL数据库进行分片来扩展规模,同时将应用程序更改降至最低

Vitess提供兼容的JDBC和Go数据库驱动程序。Planet Scale为Vitess提供商业支持和功能开发。自2011年以来,Vitess一直为YouTube所使用,现在已被许多企业采用。

MySQL 与 NoSQL权衡

下图是Vitess与MySQL/NoSQL之间的对比。

支持的平台和数据库

支持的平台

官方对Ubuntu 14.04和debian 8做了持续性地测试。其它平台也应该能正常工作。

支持的数据库

Vitess支持MySQL 5.6, MariaDB 10.0及以上的版本和这些版本的变体Percona。

Vitess架构

下图阐述了vitess的主要组成部分:

Topology:拓扑服务存储元数据,包括集群中服务器,分片数据库,复制集的信息。Vitess支持三种拓扑服务:zookeeper,etcd,consul

vtgate:vtgate是一个轻量级代理服务器。应用程序向其发送请求,其将请求路由到对应的vttablet,并合并的结果返回给客户端。

vttablet:vttablet是位于mysql前面的代理服务器。每个MySQL实例都有对应一个vttablet。

vtctl:vtctl是用于管理Vitess群集的命令行工具。

vtctld:vtctld是一个HTTP服务器,是vitess web ui 集群管理工具,使您可以浏览存储在锁服务器中的信息。

vtworker:vtworker托管运行时间较长的流程,它支持插件架构并提供库,以便您可以轻松选择要使用的tablet。

主要概念

shard

shard分片可以理解为按照表中的某字段,将表分成多个部分。一个shard存储 keyspace的一部分内容。一个shard由一个mysql 主机点和若干个mysql从节点组成。

cell

cell是某个区域的一组服务器和网络基础集合。某个cell出现故障,不会影响其它cell。其通常存储着整个数据中心的所有数据或者一个子集。每个cell包含一个本地拓扑服务,存储着该cell中所有tablet的信息。

Keyspace

keyspace是一个逻辑上数据库,如果有进行分片,keyspace对应多个mysql数据库,若没有分片,keyspace对应一个mysql数据库。

keyspace graph

keyspace图允许vitess决定某个keyspace,cell,tablet使用哪一个shard,这在数据迁移时非常有用。数据迁移的基本流程为:

创建new_keyspace时,并设置其ServedFrom指向old_keyspace.

更新app,查看要迁移到new_keyspace中的表,vitess会自动将其请求重定向到old_keyspace.

执行垂直分割,将数据拷贝到new_keyspace

移除serverFrom重定向,设置其ServerFrom指向new_keyspace

删除old_keyspace中没用的数据

对于每一个(cell, tablet type)对,可以设置不同的ServerFrom.通常先迁移rdonly tablet的请求,然后replica tablet,最后才是master tablet,每次执行一个。

VSchema

VSchema描述数据在keyspace和shard中的分布情况。当有查询请求或重分片时,会用到这些信息。我们可以为keyspace选择是否分片。若分片,则可以为每一个表指定vindex索引。

VStream

VStream是一个VTGate上的变更通知系统。

Replication Graph

replication graph描述了主数据库和它们的副本的关系。当主数据库出现故障时,replication graph可以在所有副本中选一个成为新的主数据库,并使所有副本都指向新的主数据库,从而可以继续正常工作。

Tablet

tablet由一个mysqld和vttablet进程组成。每个tablet都有一个类型,表示其当前的角色,包含如下类型:

master:被选为master的replica tablet

replica:可以被提升为master的tablet

rdonly:不能被提升为master的tablet,通常用来后台处理作业,例如备份,将数据导入到其它系统,繁重的分析查询,MapReduce,重新分片

backup:在一致性快照时,tablet会停止复制,为其分片上传新的备份。完成之后,将回复复制,返回它的前一个类型

restore:一个启动时没有数据的tablet,会从最新的备份中恢复数据。完成后,会复制备份的GTID位置,成为replica或rdonly

drained:被Vitess后台进程保留(reserved)的tablet(例如分片时的rdonly tablet)

模式管理

Vitess支持的数据定义语句,包括创建,修改,删除表。模式更改(schema changes)会在每个shard的主tablet上执行,这些更改通过复制集传播到子vttablet上,Vitess不支持DDL语句。

在执行schema changes前,Vitess会进行语法校验,并决定其影响范围。Vitess进行预检查,以确保更新可以在数据库上执行,减少系统的冗余度,同时vitess也可以拒绝超过某个范围的更新操作。

sql请求的生命周期

Vitess处理sql请求的大致流程为:

客户端向vtgate发送请求,vtgate根据请求路由到对应的vttablet上

vttablet对查询进行一定的校验,并将请求发送给mysql

mysql执行查询操作,并将结果返回给vttablet

vttablet将结果返回给vtgate

vtgate接收到所有vttablet的结果,将其合并,返回给客户端,若vttablet出现错误,vtgate会重新尝试从vttablet获取结果,除非已经达到最大尝试次数或者出现不可恢复的错误。

Vitess在aarch64上的依赖问题

官方的vitess目前只支持x86_64. 依赖主要包含两部分:bootstrap.sh和dockerfile中的所安装的软件。

bootstrap.sh

二进制包安装软件

protoc

Protocol Buffer(也称为protobuf)由google研发,用来高效存储和读取序列化结构数据的工具。

etcd

etcd 是具有一致性,高可用性的键值存储系统。它是vitess支持的的拓扑服务之一。

consul

consul是一个用于服务发现和配置的工具。consul具有分布式,高可用,极易扩展的特性。是Vitess支持的拓扑服务之一。

chromedriver

Chromedriver是实现了W3C web Driver标准的独立服务器。当执行测试时,Vitess可能会用到它。

Go 软件包

go软件是通过“go get ”或“goverdor”安装的。“govendor sync”会根据vitess/vendor/vendor.json安装go软件包。软件包会被下载在vendor目录下,运行bootstrap.sh之后才能看到这些软件包。其中有一些软件包不支持aarch64。

github.com/aws/aws-sdk-go/service/ec2

亚马逊弹性计算云(Amazon EC2)是一个提供安全,容量可变的云web服务。 版本v1.15.83之后才有对aarch64的支持。

github.com/klauspost/cpuid

cpuid 可以为当前运行程序,提供CPU信息,包括SIMD,cache信息,其不支持aarch64.

google.golang.org/grpc

grpc是一个开源的高性能rpc框架。在这个包中的vet.sh脚本会下载 protoc-3.3.0-linux-x86_64.zip 。我们可以设置环境变量 VET_SKIP_PROTO 避免其下载。因为bootstrap.sh会安装protoc。

Dockerfile

在vitess.io/vitess/docker中,有一个bootstrap目录,其它目录中的dockerfile的基础镜像都是由bootstrap中dockerfile所产生。因此只要解决bootstrap中dockerfile的依赖关系即可。

mysql 5.6

libmysqlclient-dev(mysql 5.6)

mysql 5.7 和 libmysqlclient-dev(mysql 5.7)

mysql 8.0

mariadb 10.3

percona

percona 5.7

percona 8.0

percona-xtrabackup-2.4.13

Percona-XtraBackup-8.0

原作者:Jiamei

更多回帖

发帖
×
20
完善资料,
赚取积分