2
4
2
0
专栏/.../

TiDB v8.x Tiproxy组件

 gary  发表于  2024-11-18

一、前言

在现代数据库架构中,随着业务需求的不断增长和变化,数据库的高可用性、灵活性和扩展性变得尤为重要。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.集群拓扑

image.png

2.配置文件

image.png

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

image.png

4.Tiproxy分发测试

image.png

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

image.png

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

image.png

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

image.png

image.png

四、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
4
2
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论