写点什么

TiDB v8.x Tiproxy 组件

  • 2024-11-22
    北京
  • 本文字数:2359 字

    阅读完需:约 8 分钟

作者: gary 原文来源:https://tidb.net/blog/edee74d2

一、前言

   在现代数据库架构中,随着业务需求的不断增长和变化,数据库的高可用性、灵活性和扩展性变得尤为重要。TiDB,作为一个分布式HTAP数据库,以其强大的水平扩展能力和实时的高可用特性,满足了企业级应用的需求。而TiProxy,作为TiDB生态系统中的一个关键组件,进一步增强了TiDB的这些特性,为用户提供了更加智能和高效的数据库代理服务。
复制代码

二、Tiproxy 使用原理

   TiProxy是PingCAP官方提供的数据库代理组件,位于客户端和TiDB服务器之间,主要提供负载均衡、连接保持和服务发现等功能。
复制代码


  1. 服务发现与拓扑信息获取


TiProxy 通过与 PD 交互来动态获取 TiDB 集群的拓扑信息,包括所有可用的 TiDB 实例。这一过程是自动的,不需要人工介入。TiProxy 从 PD 获取 TiDB 实例列表,从而实现服务发现。


服务发现机制:TiProxy 定期从 PD 查询 TiDB 服务器的列表,并根据这些信息来管理和路由客户端的连接。


拓扑信息更新:当 TiDB 集群进行扩容或缩容操作时,TiProxy 能够自动更新其内部的拓扑信息,无需人工干预。


  1. 连接管理与迁移


TiProxy 管理客户端与 TiDB 服务器之间的连接,并在必要时将连接从一个 TiDB 服务器迁移到另一个服务器,而不影响客户端的操作。


连接迁移:在 TiDB 服务器进行缩容、滚动升级或重启时,TiProxy 能够将连接从即将下线的服务器迁移到其他健康的服务器上,保持客户端连接不断开。


负载均衡:TiProxy 通过打分机制,将新的连接均匀分配到后端的 TiDB 服务器上,实现负载均衡。


  1. 健康检查与状态更新


TiProxy 对后端的 TiDB 服务器进行健康检查,以确定它们是否能够接受新的连接。


健康检查:TiProxy 通过 HTTP 请求和 TCP 连接测试来检查每个 TiDB 服务器的健康状态,并将结果用于连接路由决策。


状态更新:TiProxy 将检查结果与内存中缓存的状态进行比较,并将状态变化通知给路由模块,以便进行相应的连接迁移或负载均衡操作。


  1. 配置与部署


TiProxy 的配置包括 SQL 端口设置、最大连接数、连接缓冲区大小等。这些配置可以通过配置文件进行设置,并支持热加载,即在不重启服务的情况下更新配置。


配置文件:TiProxy 使用 tiproxy.toml 文件进行配置,包括代理地址、API 地址、日志级别等。


一键部署:TiProxy 集成到了 TiUP、TiDB Operator、TiDB Dashboard 和 Grafana 中,简化了部署和运维流程。


  1. 安全性


TiProxy 支持 TLS 连接,确保客户端与 TiProxy 之间以及 TiProxy 与 TiDB 服务器之间的通信安全。


TLS 连接:TiProxy 可以根据配置启用 TLS 连接,保护数据传输的安全。


  1. 性能与限制


TiProxy 在设计时考虑了性能和资源使用,但也存在一些限制。


性能测试:官方提供了性能测试报告,比较了 TiProxy 和 HAProxy 在不同工作负载下的性能表现。


使用限制:在某些情况下,如 TiDB 服务器意外下线或 TiProxy 自身进行缩容、升级、重启等操作时,TiProxy 可能无法保持客户端连接。

三、Tiproxy 的部署和测试

1. 集群拓扑



2. 配置文件



3.Tiproxy 扩容后,端口为 6000/3080



4.Tiproxy 分发测试



5. 缩容或停止 Tidb01 节点的 tidb 实例,TiProxy 能把连接从即将下线的 TiDB server 迁移到其他 TiDB server 上,从而保持客户端连接不断开。



6.Tiproxy 日志能看出连接失败后平滑切换



7.Dashboard 和 Grafana 监控都能实时监控 tiproxy 的信息,方便日常运维管理



四、Tiproxy 注意事项

一、性能考量


  1. 性能影响:根据性能测试报告,TiProxy 的 QPS 上限受工作负载类型的影响,在某些情况下,TiProxy 的 QPS 可能比 HAProxy 低约 25%。因此,在对性能敏感的场景下,可能需要考虑使用其他代理如 HAProxy。

  2. 资源配置:TiProxy 的性能随 vCPU 的数量接近线性增长,增加 vCPU 的数量可以有效提高 QPS 上限。同时,长连接的数量和短连接的创建频率对 TiProxy 的 QPS 影响很小。


二、部署和配置


  1. 证书配置:对于 TiUP v1.15.0 之前的版本,需要手动生成自签名证书,并确保所有 TiDB 实例上有完全相同的证书。

  2. TiDB 实例配置:使用 TiProxy 时,需要对 TiDB 实例进行配置,包括设置 security.session-token-signing-cert 和 security.session-token-signing-key 为证书路径,以及配置 graceful-wait-before-shutdown 值,该值应大于应用程序最长事务的持续时间。

  3. TiProxy 实例配置:建议部署至少 2 台 TiProxy 实例以保证高可用性。在选择 TiProxy 的机型和实例数时,需要考虑负载类型和最大 QPS,以及网络带宽。

  4. 版本控制:在拓扑配置中指定 TiProxy 的版本号,以避免在升级 TiDB 集群时不小心升级 TiProxy,这可能导致客户端连接断开。


三、兼容性和安全性


  1. 版本兼容性:TiProxy 仅支持 TiDB v6.5.0 及以上版本。同时,TiDB Dashboard 和 Grafana 从 v7.6.0 开始支持 TiProxy。

  2. TLS 连接:TiProxy 提供了 TLS 连接。客户端与 TiProxy 之间的 TLS 连接根据配置决定是否开启。确保正确配置 TLS 以增强安全性。


四、使用限制


  1. 连接保持:TiProxy 仅在 TiDB server 计划内的下线或重启时保持客户端连接,不支持 TiDB server 的故障转移。

  2. 连接迁移:在某些情况下,如单条语句或单个事务持续时间超过 graceful-wait-before-shutdown 时间,TiProxy 可能无法进行连接迁移。


五、维护和升级


  1. 在线变更配置:TiProxy 的大多数配置项支持在线变更,以避免重启 TiProxy。在使用 TiUP 更改配置时,如果配置项支持在线变更,应使用 –skip-restart 选项。

  2. 升级策略:建议在部署 TiProxy 时指定版本,以免在升级 TiDB 集群时不小心升级 TiProxy。如果需要升级 TiProxy,应使用 –tiproxy-version 指定版本。通过遵循这些注意事项,您可以确保 TiProxy 在您的 TiDB 环境中稳定运行,同时最大化其性能和可靠性。

五、总结

   Tiproxy组件作为TiDB可选组件,比第三方的代理软件更方便管理维护,日常升级,TiDB停机扩缩容对于应用都是无感知的,但在性能上还是有点欠缺,希望后面可以完善。
复制代码


发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
TiDB v8.x Tiproxy组件_8.x 实践_TiDB 社区干货传送门_InfoQ写作社区