一、前言
在现代数据库架构中,随着业务需求的不断增长和变化,数据库的高可用性、灵活性和扩展性变得尤为重要。TiDB,作为一个分布式HTAP数据库,以其强大的水平扩展能力和实时的高可用特性,满足了企业级应用的需求。而TiProxy,作为TiDB生态系统中的一个关键组件,进一步增强了TiDB的这些特性,为用户提供了更加智能和高效的数据库代理服务。
二、Tiproxy使用原理
TiProxy是PingCAP官方提供的数据库代理组件,位于客户端和TiDB服务器之间,主要提供负载均衡、连接保持和服务发现等功能。
- 服务发现与拓扑信息获取
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环境中稳定运行,同时最大化其性能和可靠性。
五、总结
Tiproxy组件作为TiDB可选组件,比第三方的代理软件更方便管理维护,日常升级,TiDB停机扩缩容对于应用都是无感知的,但在性能上还是有点欠缺,希望后面可以完善。