近日 TiDB 发布了 8.0 DMR 版本,更新了好几个新功能,期中就有大家期待的代理组件 TiProxy 成为正式功能 (GA)。
TiDB v7.6.0 引入了代理组件 TiProxy 作为实验特性。TiProxy 是 TiDB 的官方代理组件,位于客户端和 TiDB server 之间,为 TiDB 提供负载均衡、连接保持功能,让 TiDB 集群的负载更加均衡,并在维护操作期间不影响用户对数据库的连接访问。
在 v8.0.0 中,TiProxy 成为正式功能,完善了签名证书自动生成、监控等功能。
TiProxy 的应用场景如下:
- 在 TiDB 集群进行滚动重启、滚动升级、缩容等维护操作时,TiDB server 会发生变动,导致客户端与发生变化的 TiDB server 的连接中断。通过使用 TiProxy,可以在这些维护操作过程中平滑地将连接迁移至其他 TiDB server,从而让客户端不受影响。
- 所有客户端对 TiDB server 的连接都无法动态迁移至其他 TiDB server。当多个 TiDB server 的负载不均衡时,可能出现整体集群资源充足,但某些 TiDB server 资源耗尽导致延迟大幅度增加的情况。为解决此问题,TiProxy 提供连接动态迁移功能,在客户端无感的前提下,将连接从一个 TiDB server 迁移至其他 TiDB server,从而实现 TiDB 集群的负载均衡。
TiProxy 已集成至 TiUP、TiDB Operator、TiDB Dashboard 等 TiDB 基本组件中,可以方便地进行配置、部署和运维。
安装部署
升级TIDB版本到8.0
可以看到tiproxy组件已经集成到TiDB Dashboard中。
扩容Tiproxy
Tiproxy组件现在可以通过tiup scale- out 直接扩容,安装非常方便。
这里编写个简单的配置文件,其他配置可参考 https://docs.pingcap.com/zh/tidb/dev/tiproxy-configuration
vi tiproxy.yaml
tiproxy_servers:
- host: 10.20.10.137
通过 tiup工具扩容
tiup cluster scale-out tsp-prod-taos-cluster tiproxy.yaml -u root -p
安装就是如此的简单。
navcait连接tiproxy默认端口6000到tidb数据库
· TiProxy 连接的 PD 地址。TiProxy 通过从 PD 获取 TiDB 列表来发现 TiDB 实例,不需要额外的配置各个tidb服务。如果使用 TiUP 或 TiDB Operator 部署 TiProxy,则会自动设置此项。
性能测试
官网提供了一份测试报告。https://docs.pingcap.com/zh/tidb/dev/tiproxy-performance-test
报告测试了 TiProxy 在 OLTP 场景下的 Sysbench 性能表现,并和 HAProxy 的性能做了对比。
结果显示:
- TiProxy 的 QPS 上限受工作负载类型的影响。在 Sysbench 的基本工作负载、同等 CPU 使用率的情况下,TiProxy 的 QPS 比 HAProxy 低约 25%
- TiProxy 能承载的 TiDB server 实例数量根据工作负载类型而变化。在 Sysbench 的基本工作负载下,一台 TiProxy 能承载 5 至 12 台同机型的 TiDB server 实例
- 查询结果集的行数对 TiProxy 的 QPS 有显著影响,且影响程度与 HAProxy 相同
- TiProxy 的性能随 vCPU 的数量接近线性增长,因此增加 vCPU 的数量可以有效提高 QPS 上限
- 长连接的数量、短连接的创建频率对 TiProxy 的 QPS 影响很小
本文这里做个简单的TPCC测试。
通过 TiUP 命令下载测试程序:
tiup install bench
导入数据
在 shell 中运行 TiUP 命令:
tiup bench tpcc -H 10.20.10.137 -P 6000 -Uroot -p'$9LBzi4_&JF6u301=e' -D tpcc --warehouses 1000 --threads 20 prepare
运行测试
通过云厂商slb连接tidb做TPCC测试
tiup bench tpcc -H10.20.10.71 -P4002 -Uroot -p'$9LBzi4_&JF6u301=e' -D tpcc --warehouses 1000 --threads 100 --time 10m run
测试结果
tpmC: 49221.1, tpmTotal: 109339.8, efficiency: 382.7%
通过Tiproxy连接tidb做TPCC测试:
tiup bench tpcc -H 10.20.10.137 -P 6000 -Uroot -p'$9LBzi4_&JF6u301=e' -D tpcc --warehouses 1000 --threads 100 --time 10m run
运行过程中控制台上会持续打印测试结果:
tpmC: 43659.1, tpmTotal: 97253.7, efficiency: 339.5%
测试结果:
通过TiProxy过来的请求平均分散在三个tidb节点上。
TiProxy 的 QPS 上限受工作负载类型的影响。在TPCC的基本工作负载、同等 CPU 使用率的情况下,TiProxy 的 QPS 比 云厂商的slb 低约 12%,TiProxy的 tmpc能力比云厂商的slb也是低了约 12%。
结论
TiProxy 为 TiDB 提供负载均衡、连接保持、服务发现等功能已经趋近完美,安装部署非常方便,基本能够满足线下集群的使用。