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 一起使用吗?