TiDB v8.x Tiproxy 组件
作者: gary 原文来源:https://tidb.net/blog/edee74d2
一、前言
二、Tiproxy 使用原理
服务发现与拓扑信息获取
TiProxy 通过与 PD 交互来动态获取 TiDB 集群的拓扑信息,包括所有可用的 TiDB 实例。这一过程是自动的,不需要人工介入。TiProxy 从 PD 获取 TiDB 实例列表,从而实现服务发现。
服务发现机制:TiProxy 定期从 PD 查询 TiDB 服务器的列表,并根据这些信息来管理和路由客户端的连接。
拓扑信息更新:当 TiDB 集群进行扩容或缩容操作时,TiProxy 能够自动更新其内部的拓扑信息,无需人工干预。
连接管理与迁移
TiProxy 管理客户端与 TiDB 服务器之间的连接,并在必要时将连接从一个 TiDB 服务器迁移到另一个服务器,而不影响客户端的操作。
连接迁移:在 TiDB 服务器进行缩容、滚动升级或重启时,TiProxy 能够将连接从即将下线的服务器迁移到其他健康的服务器上,保持客户端连接不断开。
负载均衡:TiProxy 通过打分机制,将新的连接均匀分配到后端的 TiDB 服务器上,实现负载均衡。
健康检查与状态更新
TiProxy 对后端的 TiDB 服务器进行健康检查,以确定它们是否能够接受新的连接。
健康检查:TiProxy 通过 HTTP 请求和 TCP 连接测试来检查每个 TiDB 服务器的健康状态,并将结果用于连接路由决策。
状态更新:TiProxy 将检查结果与内存中缓存的状态进行比较,并将状态变化通知给路由模块,以便进行相应的连接迁移或负载均衡操作。
配置与部署
TiProxy 的配置包括 SQL 端口设置、最大连接数、连接缓冲区大小等。这些配置可以通过配置文件进行设置,并支持热加载,即在不重启服务的情况下更新配置。
配置文件:TiProxy 使用 tiproxy.toml 文件进行配置,包括代理地址、API 地址、日志级别等。
一键部署:TiProxy 集成到了 TiUP、TiDB Operator、TiDB Dashboard 和 Grafana 中,简化了部署和运维流程。
安全性
TiProxy 支持 TLS 连接,确保客户端与 TiProxy 之间以及 TiProxy 与 TiDB 服务器之间的通信安全。
TLS 连接:TiProxy 可以根据配置启用 TLS 连接,保护数据传输的安全。
性能与限制
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 注意事项
一、性能考量
性能影响:根据性能测试报告,TiProxy 的 QPS 上限受工作负载类型的影响,在某些情况下,TiProxy 的 QPS 可能比 HAProxy 低约 25%。因此,在对性能敏感的场景下,可能需要考虑使用其他代理如 HAProxy。
资源配置:TiProxy 的性能随 vCPU 的数量接近线性增长,增加 vCPU 的数量可以有效提高 QPS 上限。同时,长连接的数量和短连接的创建频率对 TiProxy 的 QPS 影响很小。
二、部署和配置
证书配置:对于 TiUP v1.15.0 之前的版本,需要手动生成自签名证书,并确保所有 TiDB 实例上有完全相同的证书。
TiDB 实例配置:使用 TiProxy 时,需要对 TiDB 实例进行配置,包括设置 security.session-token-signing-cert 和 security.session-token-signing-key 为证书路径,以及配置 graceful-wait-before-shutdown 值,该值应大于应用程序最长事务的持续时间。
TiProxy 实例配置:建议部署至少 2 台 TiProxy 实例以保证高可用性。在选择 TiProxy 的机型和实例数时,需要考虑负载类型和最大 QPS,以及网络带宽。
版本控制:在拓扑配置中指定 TiProxy 的版本号,以避免在升级 TiDB 集群时不小心升级 TiProxy,这可能导致客户端连接断开。
三、兼容性和安全性
版本兼容性:TiProxy 仅支持 TiDB v6.5.0 及以上版本。同时,TiDB Dashboard 和 Grafana 从 v7.6.0 开始支持 TiProxy。
TLS 连接:TiProxy 提供了 TLS 连接。客户端与 TiProxy 之间的 TLS 连接根据配置决定是否开启。确保正确配置 TLS 以增强安全性。
四、使用限制
连接保持:TiProxy 仅在 TiDB server 计划内的下线或重启时保持客户端连接,不支持 TiDB server 的故障转移。
连接迁移:在某些情况下,如单条语句或单个事务持续时间超过 graceful-wait-before-shutdown 时间,TiProxy 可能无法进行连接迁移。
五、维护和升级
在线变更配置:TiProxy 的大多数配置项支持在线变更,以避免重启 TiProxy。在使用 TiUP 更改配置时,如果配置项支持在线变更,应使用 –skip-restart 选项。
升级策略:建议在部署 TiProxy 时指定版本,以免在升级 TiDB 集群时不小心升级 TiProxy。如果需要升级 TiProxy,应使用 –tiproxy-version 指定版本。通过遵循这些注意事项,您可以确保 TiProxy 在您的 TiDB 环境中稳定运行,同时最大化其性能和可靠性。
五、总结
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/fef111c73f818c84e06a1ec66】。文章转载请联系作者。
评论