【发布时间】:2019-07-17 15:40:35
【问题描述】:
我们有一个应用程序向 ProxySQL 发出写入,然后立即读取可能会受到写入的影响。 ProxySQL 后面是四台 MySQL 服务器——一台写入器和三个从写入器复制的读取器。
现在,ProxySQL 能够通过记录原始写入的 OK 数据包中发回的 GTID 和读取器的 binlog 提要来确保它选择一个“最新”读取器,以确保它选择一个已执行已经写好了。
我们的问题是,由于我们的拓扑结构,读取实际上可能在与写入不同的连接上到达 ProxySQL。因此,“读取”连接可能持有较旧的 GTID,因此可能会选择尚未发生写入的“非最新”读取器。
如果可以告诉 ProxySQL 确保阅读器使用“指定”GTID(我们自己从 OK 数据包中解析出来的)而不是连接上的 GTID,我们可以看到一个可能的解决方案,但是我们不知道我们是否可以这样做 - 我在文档中看不到任何内容。
非常欢迎任何关于可行解决方案的想法!
我们正在使用带有 ProxySQL 版本 2.0.3-29-g00f26d5 的 mySQL 5.7.25。
我们目前的结果是,我们经常先写再读,但是读返回的是写之前存在的状态。
【问题讨论】: