springboot如何指定TiDB的连接地址

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】8.1.0
【遇到的问题:问题现象及影响】
spring:
datasource:
url: ${TIDB_JDBC_URL:jdbc:mysql://localhost:4000/test}
username: ${TIDB_USER:root}
password: ${TIDB_PASSWORD:}
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
show-sql: true
database-platform: org.hibernate.dialect.TiDBDialect
hibernate:
ddl-auto: create-drop

现有3台物理服务器都部署了TiDB,TIDB_JDBC_URL的ip地址该如何指定,如果指定为其中一个,服务器宕机会不会导致数据无法访问,TiDB有没有负载均衡的处理模式

tidb上层还需要一个组件保证高可用和负载均衡,比如F5, haproxy,tiproxy之类的都可以
这里有haproxy的最佳实践
https://docs.pingcap.com/zh/tidb/stable/haproxy-best-practices

1 个赞

8.1自带tiproxy,连接tiproxy地址就行

你需要个负载均衡器

配置下proxy吧 能保证高可用和负载了

部署tiproxy,然后填写tiproxy的地址。tiproxy是8.1新增功能。此前的版本需要自行安装haproxy,nginx等负载均衡工具,但是有个问题,就是这些负载均衡工具无法解决session共享问题,也就是说,如果后端的tidb server挂了一台,很不巧springboot连的是这台服务器,那么原来正在执行的事务应该都会“丢失”。具体我也没试过,你可以做个实验试试是什么现象。

安装Keepalived,分配一个虚拟VIP

有硬件F5,就直接用。没有就装个软的负载均衡呗。

你用的这个版本支持tiproxy特性,自动负载。

部署tiproxy,配置tiproxy的地址。也可以用硬件的四级交换机或者软件的nginx配置代理。springboot就配置代理IP地址和端口就可以了。