Spring boot 和 ProxySQL 一起用,有用吗?

Posted

技术标签:

【中文标题】Spring boot 和 ProxySQL 一起用,有用吗?【英文标题】:Spring boot and ProxySQL together, does it work? 【发布时间】:2021-04-11 08:19:36 【问题描述】:

我们一直在审查不同的软件来平衡我们的 Spring Boot 应用程序而不更改我们的应用程序,看起来这是最好的解决方案,不需要更改任何一行代码,只需连接到 proxysql 容器而不是 mysql 容器,并且它应该工作OOB。但是,我们无法让任何查询规则正常工作。

我们有几个 Spring Boot 应用程序,这是我的设置:(ProxySQL 是最新版本,Spring boot 也是最新版本)

    1个mysql 8.0.22 master和2个slave,都运行在不同的容器中 3 个 proxysql 容器 3个mysql企业用户

在我的proxysql conf 文件中,我将所有用户的默认组设置为写入组(10),它是复制组中唯一的master。从站的 read_only=1。

我的 Spring Boot 应用程序有 initSql 命令:

SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';

所以如果我的应用程序中有上面的 initSql 语句,就会出现这个错误:

ProxySQL Error: connection is locked to hostgroup 10 but trying to reach hostgroup 20

如果我删除 initSql 语句,一切正常(因为所有 sql 语句都被路由到主服务器)。

如果我添加一条规则,sql 是Select ? 并将该规则路由到读取组,应用程序将无法启动。

[WARN ] 2021-01-04 11:08:08.913 [main] SqlExceptionHelper - SQL Error: 0, SQLState: null
[ERROR] 2021-01-04 11:08:08.913 [main] SqlExceptionHelper - Failed to validate a newly established connection.

再往下我有这个:

nested exception is org.springframework.orm.jpa.JpaSystemException: Unable to acquire JDBC Connection; nested exception is org.hibernate.exception.GenericJDBCException: Unable to acquire JDBC Connection

如果我禁用该规则并启用另一个规则:

select organizati0_.org_id as org_id1_14_, organizati0_.org_desc as org_desc2_14_, organizati0_.org_name as org_name3_14_, organizati0_.org_type as org_type4_14_ from ems_org organizati0_ where organizati0_.org_name=? and organizati0_.org_type=?

那我会遇到和SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';一样的错误:

ProxySQL Error: connection is locked to hostgroup 10 but trying to reach hostgroup 20

(以上与任何SET命令无关,仍然失败)

也试过了

set mysql-set_query_lock_on_hostgroup=0;
load mysql variables to runtime;

还是一样的错误。

所以我根本无法让它工作。我是proxysql新手,有没有人成功将proxysql连接到spring boot应用?

谢谢

【问题讨论】:

【参考方案1】:

确实有效! 我之前在我的 proxysql 集群的 node2 上设置了set_query_lock_on_hostgroup=0,不知道该变量是每个节点的,并且不会跨 proxysql 集群同步。我必须在所有节点或 cnf 文件中设置它。

谢谢

【讨论】:

以上是关于Spring boot 和 ProxySQL 一起用,有用吗?的主要内容,如果未能解决你的问题,请参考以下文章

让 oauth2 与 spring-boot 和 rest 一起工作

将 lombok 与 gradle 和 spring-boot 一起使用

Spring Boot:当 spring-boot-starter-tomcat 和 tomcat-embed-jasper 一起时“扫描失败”

AWS 可以与 Spring Boot 和 React 一起使用吗?

CAS Maven Overlay和Spring Boot不能一起工作

spring boot redis(连接,增删改查,集群,和session一起使用)