0

我们有一个应用程序向 ProxySQL 发出写入,然后立即读取可能会受到写入的影响。ProxySQL 后面是四台 MySQL 服务器——一台写入器和三个从写入器复制的读取器。

现在,ProxySQL 能够通过记录原始写入的 OK 数据包中发回的 GTID 和读取器的 binlog 提要来确保它选择一个“最新的”读取器,以确保它选择一个已经执行写入的读取器。

我们的问题是,由于我们的拓扑结构,读取实际上可能在与写入不同的连接上到达 ProxySQL。因此,“读取”连接可能持有较旧的 GTID,因此可能会选择尚未发生写入的“非最新”读取器。

如果可以告诉 ProxySQL 确保阅读器使用“指定”GTID(我们自己从 OK 数据包中解析出来的)而不是连接上的 GTID,我们可以看到一个可能的解决方案,但我们没有知道我们是否可以这样做 - 我在文档中看不到任何内容。

任何关于可行解决方案的想法都将受到欢迎!

我们正在使用带有 ProxySQL 版本 2.0.3-29-g00f26d5 的 mySQL 5.7.25。

我们目前的结果是我们经常执行写入然后执行读取,但读取返回写入之前存在的状态。

4

2 回答 2

0

我的理解是,proxysql 支持开箱即用的 GTID - 当某些情况得到满足时。

  1. binlog_format 是 ROW
  2. 在后端session_track_gtids设置为 OWN_GTID
  3. proxysql的monitor用户存在于后端服务器上
  4. mysql_replication_hostgroups也是设置
于 2019-08-09T19:12:16.063 回答
0

尽管 ProxySQL 人员愿意付费建造该设施,但 ProxySQL 似乎没有今天的“答案”(2.0.3-29-g00f26d50)。

同时,我们已经采取了使用编写器的步骤(通过将其分配给一个组并选择它)来读取必须与之前的调用保持同步,因为它将始终保持最新的一致视图。这将对性能造成影响,但如果此类请求不太常见,则应该可以接受。

于 2019-09-03T12:48:19.163 回答