首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
Vitess v21.0 发布技术指南:分布式事务、多指标限流、流量镜像与查询超时全面解读
📅 2026/9/21 16:03:42
✍️ 爱科研究院
👁 阅读 3,247
Vitess v21.0 发布技术指南分布式事务、多指标限流、流量镜像与查询超时全面解读【免费下载链接】vitessVitess is a database clustering system for horizontal scaling of MySQL.项目地址: https://gitcode.com/gh_mirrors/vi/vitess导读本文基于 Vitess 官方发布摘要系统梳理 v21.0 版本的核心变更从实验性的原子分布式事务、多指标 Tablet 限流器、VTGate 流量镜像到 VEXPLAIN 新分析模式、递归 CTE 支持与 MySQL 8.4 实验性兼容。你将了解每个特性的启用方式、关键命令行参数与底层实现证据可直接用于升级评估与生产配置规划。已知问题builtin 备份引擎可能假成功v21.0 存在一个已知缺陷使用builtin备份引擎时即使底层某个文件备份失败备份操作仍可能报告成功——底层错误被忽略。该问题仅在备份引擎已开始备份全部文件之后可能发生与文件枚举阶段无关。升级到 v21.0 后建议在关键备份任务中额外校验备份产物完整性并关注该引擎的后续修复版本。Deprecations and Deletions弃用与删除已弃用的 VTTablet Flagqueryserver-enable-settings-pool该标志自v15引入自v17起默认开启v21.0 正式标记为弃用将在未来版本中移除。如果此前依赖显式关闭 settings pool请评估迁移方案。已删除的 VTOrc 指标以下 VTOrc 指标在v20被弃用v21.0 已正式删除依赖这些指标做告警或大盘的系统需同步更新指标名称analysis.change.writeaudit.writediscoveries.attemptdiscoveries.faildiscoveries.instance_poll_seconds_exceededdiscoveries.queue_lengthdiscoveries.recent_countinstance.readinstance.read_topologyemergency_reparent_countsplanned_reparent_countsreparent_shard_operation_timings已弃用的 vttablet 指标及替代品组件旧指标替代指标vttabletQueryCacheLengthQueryEnginePlanCacheLengthvttabletQueryCacheSizeQueryEnginePlanCacheSizevttabletQueryCacheCapacityQueryEnginePlanCacheCapacityvttabletQueryCacheEvictionsQueryEnginePlanCacheEvictionsvttabletQueryCacheHitsQueryEnginePlanCacheHitsvttabletQueryCacheMissesQueryEnginePlanCacheMissesRPC 变更v21.0 在 TabletManagerClient 接口中做了两处与 errant GTID 检测相关的增强新增ReadReparentJournalInfoRPC供EmergencyReparentShard在紧急再选举时更好地检测 errant GTID。其实现位于 emergency_reparenter.go底层相关逻辑可参考 reparent.go。PrimaryStatusRPC 扩展返回值除原有状态信息外现在同时返回主库的server UUID。vttablet 在SetReplicationSource流程中可利用该信息自主完成 errant GTID 检测减少对协调方的依赖。Traffic Mirroring流量镜像流量镜像用于降低MoveTables SwitchTraffic固有的不确定性启用后VTGate 会按百分比把一个 keyspace 的部分流量镜像到另一个 keyspace使目标端在正式切换前就能承载真实业务流量、验证数据与服务可用性。通过vtctldclient的MoveTables MirrorTraffic子命令启用$ vtctldclient --server :15999 MoveTables --target-keyspace customer --workflow commerce2customer MirrorTraffic --percent 5.0从 mirrortraffic.go 的源码可见当未显式指定--tablet-types时默认对PRIMARY、REPLICA、RDONLY三种 tablet 类型全部镜像命令返回 Start State / Current State 供确认。镜像规则可通过GetMirrorRules检查其实现见 mirror_rules.go。Atomic Distributed Transaction实验性原子分布式事务v21.0 引入实验性的原子分布式事务用户可运行更强一致保证的多分片事务。VTGate 层面现在提供两种多分片事务保证模式Best Effort尽力而为传统模式容忍部分分片失败不保证全局原子性Atomic原子实验新模式多分片提交具备更强的原子性保证。两种模式可按业务对一致性与性能开销的权衡自由选择。设计动机与取舍细节在对应的 RFCissue #16245中有完整论述。新的 VTGate 关闭行为--mysql-server-drain-ontermv21.0 为 VTGate 增加了优雅排空drain能力启用后VTGate 在关闭过程中拒绝新连接同时允许既有连接继续完成请求直到客户端主动断开或达到--onterm_timeout超时——且期间不会向客户端返回Server shutdown in progress错误。启用方式flag 定义见 plugin_mysql_server.govtgate --mysql-server-drain-onterm --onterm_timeout15s对应行为测试位于 plugin_mysql_server_test.go验证了关闭期间既有客户端连接继续完成在途工作的语义。该选项适用于追求滚动升级零惊扰的部署场景。Tablet Throttler多指标限流支持v20 及以前tablet throttler 只能监控单一指标默认复制延迟或自定义查询结果。v21.0 对此做了重大重新设计throttler 可同时监控并使用多个指标。预定义指标包括指标含义lag基于心跳注入的复制延迟threads_runningMySQL 服务器上的并发活跃线程数loadavgtablet 实例/Pod 上的每核平均负载custom在 MySQL 上执行自定义查询得到的结果默认行为与 v20 完全向后兼容默认监控所有指标但只使用lag未定义自定义查询时或custom已定义自定义查询时。v20 的PRIMARY与 v21 的REPLICA可互操作反之亦然。新能力包括按应用分配指标组合可为某个 app 指定一个或多个指标throttler 根据所有已分配指标的健康状态决定接受或拒绝该 app 的请求catch-all app 名all可将指标一次性分配给所有 app显式 app 配置优先级更高每个指标可独立设置阈值通过UpdateThrottlerConfig覆盖默认阈值指标作用域scope默认self仅限本 tablet或shard取分片内各 tablet 的最差值且可为每个指标单独指定作用域。指标名称、作用域编码等常量定义可查阅 metric_name.go例如threads_running、loadavg、custom及self/loadavg这类作用域指标组合键相关解析逻辑有完整单元测试覆盖metric_name_test.go。PlannedReparentShard 支持跨 Cell 提升主库此前若用户希望通过PlannedReparentShard把不同 cell 的副本提升为主库必须显式用--new-primary指定新主库。v21.0 新增--allow-cross-cell-promotion标志即使未显式提供新主库PlannedReparentShard也允许从其他 cell 中选择主库。实验性递归 CTE 支持v21.0 加入**实验性的递归 CTERecursive Common Table Expressions**支持。之所以标记为实验性是因为该能力尚未被充分测试、存在一定限制官方希望收集社区反馈后逐步完善。仓库中已存在相关实现与测试例如 recurse_cte_test.go 中的递归 CTE 用例、ast_to_op.go 中对递归 CTE 引用的算子化处理以及 analyzer_test.go 中的语义分析验证说明计划构建与执行链路均已打通。VTGate Tablet BalancerVTGate 默认在可用 tablet 间采用本地 cell 亲和 轮询round robin路由。Tablet Balancer提供另一套机制在保持查询负载在各 tablet 间均匀分布的同时优先路由到与 VTGate 同 cell 的 tablet。v21.0 中相关 flag 的完整形态见 tabletgateway.go--enable-balancer旧布尔开关已标记弃用建议改用--vtgate-balancer-mode两者不可同时使用否则报错--vtgate-balancer-mode可选cell默认本地 cell 内打乱 tablet 顺序、prefer-cell优先同 cell需配合--balancer-vtgate-cells、random随机可选过滤指定 cell 的 tablet--balancer-vtgate-cells逗号分隔的、包含 vttablet 的 cell 列表prefer-cell模式为必填--balancer-keyspaces启用 balancer 的 keyspace 列表可选为空则应用于所有 keyspace。端到端行为验证见 tabletbalancer/balancer_test.go。该设计的完整动机与配置细节参考 RFCissue #12241。Query Timeout Override查询超时覆盖v21.0 让 VTGate 可以向下游 VTTablet 下发权威查询超时三种设置来源及其优先级为QUERY_TIMEOUT_MS 注释指令 query_timeout 会话系统变量 --query-timeout VTGate 标志所有超时值均以毫秒为单位VTTablet 收到后会用该值覆盖自身的默认查询超时事务内执行的查询有额外规则实际生效超时 事务超时与查询超时中的较小值使用QUERY_TIMEOUT_MS且值为0可表示无超时。用法示例select /*vt QUERY_TIMEOUT_MS30 */ col from tbl注释指令的解析在 comments.go 中实现并有对应的端到端测试timeout_test.go验证优先级与事务场景。新备份引擎mysqlshell实验性为支持需要逻辑备份的场景v21.0 引入基于 [MySQL Shell] 的新备份引擎实验性。启用方式vtbackup --backup-engine-implementationmysqlshell注意v21.0 中该引擎需要若干额外的必选配置项如 MySQL Shell 连接与备份选项并非仅切换引擎名即可运行请务必参照官方备份与恢复用户指南中 Creating a Backup 一节完成配置。默认引擎仍为builtin参见 vtbackup flag 文档。动态 VReplication 配置此前VReplication 工作流的许多配置项只能通过VTTablet 启动 flag提供任何调整都意味着重启全部 VTTablet。v21.0 起这些配置可以在创建工作流时覆盖也可以在工作流运行过程中动态修改显著降低了在线变更 VReplication 配置的运维成本。Reference Table Materialization引用表物化Materialize工作流新增一个选项把引用表reference/lookup tables如 countries、states、zip codes从作为事实来源source of truth的未分片 keyspace持续同步一份副本到分片 keyspace 的所有分片解决分片环境下引用数据逐分片复制与一致性问题。新 VEXPLAIN 模式TRACE 与 KEYSVEXPLAIN TRACETRACE模式提供查询的详细执行轨迹展示查询如何流经各个算子并与 tablet 交互。它实际执行查询并记录全部交互最终返回带统计信息的 JSON 执行计划包括调用次数、平均处理行数、查询涉及的分片数等。典型用途定位性能瓶颈理解查询执行模式优化复杂查询排查意外查询行为。VEXPLAIN KEYSKEYS模式不执行查询仅静态分析查询结构输出精炼的 JSON 摘要标出用于join、filter 与 group 操作的列包括分组列、连接列、过滤列潜在索引 / 主键 / 分片键候选与语句类型。典型用途识别潜在的分片键候选优化查询性能分析查询模式以辅助数据库设计决策。两种模式共同增强了 Vitess 的查询分析能力为分片策略与查询优化提供更充分的决策依据。自动用 Vitess Sequences 替换 MySQL auto_incrementv21.0 在MoveTables工作流中新增能力自动将 MySQLauto_increment子句替换为 Vitess Sequences并在迁移过程中自动完成序列的搭建与初始化。随之而来的 CLI 变更--remove-sharded-auto-increment布尔标志已被弃用改用新标志--sharded-auto-increment-handling提供更丰富的处理策略选项。具体语义如自动建表、初始化序列值等请参见 MoveTables 文档中的 Auto Increment Handling 章节。实验性 MySQL 8.4 支持v21.0 添加了MySQL 8.4 的实验性支持它能通过 Vitess 测试套件但除此之外尚未被充分测试。官方希望通过社区反馈推动其在未来版本中脱离实验阶段。生产环境使用 8.4 前应做充分的自身业务验证。新指标CurrentErrantGTIDCountVTOrc 新增指标CurrentErrantGTIDCount实时展示当前各 tablet 上的 errant GTID 数量便于在复制异常早期发现并干预。新命令vtctldclient ChangeTabletTagsvtctldclient新增ChangeTabletTags命令可在运行期动态修改 tablet 的标签无需重启 tablet为按标签路由、调度与运维标注提供了在线变更通道。Reparent 支持指定期望主库Expected PrimaryEmergencyReparentShard与PlannedReparentShard的命令与 RPC 现在支持指定一个期望的当前主库仅当实际主库仍为该期望主库时reparent 操作才会继续执行。这使 reparent 可以条件化执行避免在状态已变化例如主库已漂移时执行错误的再选举降低误操作风险。升级要点速览变更类别关键动作备份builtin引擎存在假成功缺陷需人工校验Flag 弃用queryserver-enable-settings-pool、--enable-balancer、--remove-sharded-auto-increment指标替换vttabletQueryCache*→QueryEnginePlanCache*VTOrc 12 个指标已删除新标志--mysql-server-drain-onterm、--allow-cross-cell-promotion、--backup-engine-implementationmysqlshell、--vtgate-balancer-mode新命令MoveTables MirrorTraffic、ChangeTabletTags、VEXPLAIN TRACE/KEYS实验特性原子分布式事务、递归 CTE、MySQL 8.4、mysqlshell 备份引擎以上变更均以 v21.0 当前仓库代码为准升级前建议结合自身环境在测试集群中先行验证尤其是处于实验阶段的各项能力。【免费下载链接】vitessVitess is a database clustering system for horizontal scaling of MySQL.项目地址: https://gitcode.com/gh_mirrors/vi/vitess创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/9/21 16:03:42
蓝鲸PaaS release_controller发布控制器深度解析:部署编排核心源码
2026/9/21 15:58:42
Vue 3核心特性与性能优化实战指南
2026/9/21 15:58:42
Lightweight Charts 插件开发:Canvas 像素完美渲染(Pixel Perfect Rendering)最佳实践
2026/9/21 16:43:49
3D 参数曲面图实战:使用 plotly.py 的 Surface 绘制参数化曲面
2026/9/21 16:43:49
CodeFormer 使用与原理全解:基于 Codebook Lookup Transformer 的盲人脸复原实战指南(NeurIPS 2022)
2026/9/21 16:43:49
Pandas进行json_normalize多层嵌套Json数据展平
2026/9/21 16:43:49
wasmtime 中 byte-array-literals:用过程宏把字符串字面量变成无数据段字节数组的编译期技巧
2026/9/21 16:43:48
TanStack Table PaginationState 详解:pageIndex 与 pageSize 的底层语义与实战配置
2026/9/21 16:38:48
SvelteKit 页面选项(Page Options)完全指南:prerender、ssr、csr、trailingSlash 与 config 的逐页控制
2026/9/21 0:02:00
Unity ML-Agents 工具包完整安装指南:从 Unity 2022.3 到 Python 训练环境的逐步搭建
2026/9/21 0:02:00
OneUptime 自定义探针(Custom Probe)部署实战:私网监控、代理配置与断连排障全指南
2026/9/21 0:02:00
大众TL52625前端框架材料要求详解:从性能测试到落地执行
2026/9/21 1:46:28
深入解析Transformer多头注意力机制与工程优化
2026/9/21 1:46:31
OpenClaw 的 Skills 跑学习任务,模型通道改到 TaoToken 通道行不行?
2026/9/21 1:46:33
ChatGPT报错Oops, an error occurred! 全链路排查指南