应用程序在连接到tidb 的ip地址连接串中,可以使用多个ip+port的组合么?

应用程序通过连接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-简介

1 个赞

建议使用软负载均衡器。
其他方案还有硬负载均衡器、基于 DNS 的负载均衡、客户端负载均衡,但是比较少用。

1 个赞

我们现在是按照研发组来配置tidbserver,不同研发组连接不同的tidbserver,然后tiflash引擎单独分出了一个tidbserver,用来ap

1 个赞

用代理了建议

整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 是用其他代理吗?

:thinking:不就是因为多个连接,才必须用负载均衡么?如果只有一个连接,就不需要用了呀。

个人建议业务代码里适配下,尽量别借助haproxy等组件,组件越多出问题越复杂

链接配置【经验之谈】:
1、链接策略: 随机或者轮训即可
2、重试策略: retry 3次,sleep 1秒
3、链接池:添加空闲超时时间,一般分钟级别即可

搞个vip负载均衡,或者tiproxy

  1. 场景,内存型业务和计算型业务隔离
  2. 租户个性化,计算资源独享
  3. 使用侧,应用和sql操作员隔离

不增加组件反而增加代码复杂度。。。

看了下8.5 支持了tiproxy的tidblabel了,很不错,测试环境马上升级

1 个赞