我们一直在审查不同的软件来负载平衡我们的 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应用程序?
谢谢