应用程序通过连接tidb server进而连接到tidb中,
但是tidb server有多个,这样的话,我应用程序连接串该怎么写?
还是通过haproxy进行连接?
简单测试连任意一个tidb server
上线用负载均衡软件,如haproxy tiproxy
也可以物理负载均衡如f5
满足高可用 haproxy 还得双机keepalive
一般是通过haproxy负载,应用程序连接负载地址。当然,应用程序连其中一个tidb-server地址也是可以的,连接任何一个tidb-server访问集群都是一样的。
也可以使用官方自带的负载Tiproxy
https://docs.pingcap.com/zh/tidb/stable/tiproxy-overview#tiproxy-简介
建议使用软负载均衡器。
其他方案还有硬负载均衡器、基于 DNS 的负载均衡、客户端负载均衡,但是比较少用。
我们现在是按照研发组来配置tidbserver,不同研发组连接不同的tidbserver,然后tiflash引擎单独分出了一个tidbserver,用来ap
用代理了建议
整proxy啊,haproxy或者tiproxy
haproxy我们用这个
没有尝试过,应该是不可以的, 如果多个连接 ,怎么能负载均衡呢
JDBC 支持 loadbalance 模式:格式如 jdbc:mysql:loadbalance://[primary-host][:port][,[secondary-host][:port]]/[database][?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]…
这种是看各编程语言的 MySQL 驱动支持不支持了,就如楼上讲的一样, JDBC是支持的,但是 go-sql-driver 就不支持。
比较通用做法,还是通过引入一个 Proxy 的中间件来处理。
测试过tiproxy,必须代理全部tidb,不能分组,很死板,暂时还是推荐使用haproxy
可以只代理一部分的,给 tiproxy 和 tidb 分别打上 label,tiproxy 路由到同 label 的 tidb:https://docs.pingcap.com/zh/tidb/stable/tiproxy-load-balance#基于标签的负载均衡
这里主要用于隔离 tidb 资源的情况。顺便问下你的是什么场景,其他 tidb 是用其他代理吗?
不就是因为多个连接,才必须用负载均衡么?如果只有一个连接,就不需要用了呀。
个人建议业务代码里适配下,尽量别借助haproxy等组件,组件越多出问题越复杂
链接配置【经验之谈】:
1、链接策略: 随机或者轮训即可
2、重试策略: retry 3次,sleep 1秒
3、链接池:添加空闲超时时间,一般分钟级别即可
搞个vip负载均衡,或者tiproxy
- 场景,内存型业务和计算型业务隔离
- 租户个性化,计算资源独享
- 使用侧,应用和sql操作员隔离
不增加组件反而增加代码复杂度。。。
看了下8.5 支持了tiproxy的tidblabel了,很不错,测试环境马上升级