0

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

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

  1. 1个mysql 8.0.22 master和2个slave,都运行在不同的容器中
  2. 3个proxysql容器
  3. 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应用程序?

谢谢

4

1 回答 1

0

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

谢谢

于 2021-01-08T02:21:19.350 回答